#######################################################################
# Makefile for D test-suite
#######################################################################

LANGUAGE     = d

HAVE_CXX11   = @HAVE_CXX11@
HAVE_CXX14   = @HAVE_CXX14@
HAVE_CXX17   = @HAVE_CXX17@
HAVE_CXX20   = @HAVE_CXX20@
srcdir       = @srcdir@
top_srcdir   = ../@top_srcdir@
top_builddir = ../@top_builddir@

ifeq (,$(D_VERSION))
  D_VERSION = @DDEFAULTVERSION@
endif

ifeq (2,$(D_VERSION))
  VERSIONSUFFIX = .2
else
  VERSIONSUFFIX = .1
endif

SCRIPTSUFFIX = _runme$(VERSIONSUFFIX).d

CPP_TEST_CASES = \
	d_nativepointers \
	exception_partial_info

CPP11_TEST_CASES = \
	cpp11_shared_ptr_const \
	cpp11_shared_ptr_nullptr_in_containers \
	cpp11_shared_ptr_overload \
	cpp11_shared_ptr_upcast \

include $(srcdir)/../common.mk

# Overridden variables here
SRCDIR       = ../$(srcdir)/
TARGETSUFFIX = _wrap
SWIGOPT+=-splitproxy -package $*

# Rules for the different types of tests
%.cpptest:
	$(setup)
	+(cd $*$(VERSIONSUFFIX) && $(swig_and_compile_cpp))
	+$(run_testcase)

%.ctest:
	$(setup)
	+(cd $*$(VERSIONSUFFIX) && $(swig_and_compile_c))
	+$(run_testcase)

%.multicpptest:
	$(setup)
	+(cd $*$(VERSIONSUFFIX) && $(swig_and_compile_multi_cpp))
	+$(run_testcase)

# Makes a directory for the testcase if it does not exist
setup = \
	if [ -f $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then			\
	  echo "$(ACTION)ing $(LANGUAGE) testcase $* (with run test)" ;	\
	else									\
	  echo "$(ACTION)ing $(LANGUAGE) testcase $*" ;			\
	fi;									\
	if [ ! -d $*$(VERSIONSUFFIX) ]; then					\
	  mkdir $*$(VERSIONSUFFIX);						\
	fi;									\
	if [ ! -d $*$(VERSIONSUFFIX)/$* ]; then					\
	  mkdir $*$(VERSIONSUFFIX)/$*;						\
	fi

# Compiles D files then runs the testcase. A testcase is only run if
# a file is found which has _runme.d appended after the testcase name.
run_testcase = \
	if [ -f $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \
	  cd $*$(VERSIONSUFFIX) && \
	  $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile \
	  DFLAGS='-of$*_runme' \
	  DSRCS='../$(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) `find $* -name *.d`' d_compile && \
	  env LD_LIBRARY_PATH=".:$$LD_LIBRARY_PATH" $(RUNTOOL) ./$*_runme; \
	else \
	  cd $*$(VERSIONSUFFIX) && \
	  $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile \
	  DFLAGS='-c' \
	  DSRCS='`find $* -name *.d`' d_compile && cd .. ; \
	fi

# Clean: remove testcase directories
%.clean:
	@if [ -d $*$(VERSIONSUFFIX) ]; then \
	  rm -rf $*$(VERSIONSUFFIX); \
	fi
