#######################################################################
# Makefile for chicken test-suite
#######################################################################

LANGUAGE     = chicken
VARIANT      =
SCRIPTSUFFIX = _runme.ss
PROXYSUFFIX  = _runme_proxy.ss

srcdir       = @srcdir@
top_srcdir   = @top_srcdir@
top_builddir = @top_builddir@

CHICKEN_CSI  = @CHICKEN_CSI@ -quiet -batch -no-init
SO           = @SO@

#C_TEST_CASES = long_long list_vector pointer_in_out multivalue

# Skip the STD cases for now, except for li_std_string.i
SKIP_CPP_STD_CASES = Yes

CPP_TEST_CASES += li_std_string

EXTRA_TEST_CASES += chicken_ext_test.externaltest

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

# Overridden variables here
SWIGOPT += -nounit

# Custom tests - tests with additional commandline options
# If there exists a PROXYSUFFIX runme file, we also generate the wrapper
# with the -proxy argument
%.cppproxy: SWIGOPT += -proxy
%.cppproxy: SCRIPTSUFFIX = $(PROXYSUFFIX)

%.cproxy: SWIGOPT += -proxy
%.cproxy: SCRIPTSUFFIX = $(PROXYSUFFIX)

%.multiproxy: SWIGOPT += -proxy -noclosuses
%.multiproxy: SCRIPTSUFFIX = $(PROXYSUFFIX)

# Rules for the different types of tests
%.cpptest:
	$(setup)
	+$(swig_and_compile_cpp)
	$(run_testcase)
	if [ -f $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(PROXYSUFFIX) ]; then \
	  $(MAKE) $*.cppproxy; \
	fi

%.ctest:
	$(setup)
	+$(swig_and_compile_c)
	$(run_testcase)
	if [ -f $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(PROXYSUFFIX) ]; then \
	  $(MAKE) $*.cproxy; \
	fi

%.multicpptest:
	$(setup)
	+$(swig_and_compile_multi_cpp)
	$(run_testcase)
	if [ -f $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(PROXYSUFFIX) ]; then \
	  $(MAKE) $*.multiproxy; \
	fi

%.externaltest:
	$(setup)
	+$(swig_and_compile_external)
	$(run_testcase)

%.cppproxy:
	echo "$(ACTION)ing $(LANGUAGE) testcase $* (with run test) with -proxy"
	+$(swig_and_compile_cpp)
	$(run_testcase)

%.cproxy:
	echo "$(ACTION)ing $(LANGUAGE) testcase $* (with run test) with -proxy"
	+$(swig_and_compile_c)
	$(run_testcase)

%.multiproxy:
	echo "$(ACTION)ing $(LANGUAGE) testcase $* (with run test) with -proxy"
	+$(swig_and_compile_multi_cpp)
	$(run_testcase)

# Runs the testcase. A testcase is only run if
# a file is found which has _runme.scm appended after the testcase name.
run_testcase = \
	if [ -f $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \
	  env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(CHICKEN_CSI) $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \
	fi

# Clean
%.clean:
	@exit 0

clean:
	$(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile SRCDIR='$(SRCDIR)' chicken_clean
	rm -f *.scm
