#######################################################################
# Makefile for scilab test-suite
#######################################################################

LANGUAGE     = scilab
SCILAB       = @SCILAB@
SCILAB_OPT   = @SCILABOPT@
SCRIPTSUFFIX = _runme.sci

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@

C_TEST_CASES += \
	scilab_consts \
	scilab_identifier_name \

CPP_TEST_CASES += \
	primitive_types \
	scilab_li_matrix \
	scilab_multivalue \
	scilab_enums \
	scilab_pointer_conversion_functions \

CPP_STD_TEST_CASES += \
	li_std_container_typemaps \
	li_std_string_extra \

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

# Overridden variables
SRCDIR = ../$(srcdir)/

# Ensure testsuite remains free from SWIG warnings.
SWIGOPT += -Werror

# Local variables
TEST_DIR = $*.dir
RUNME_SCRIPT = $(SCRIPTPREFIX)$*$(SCRIPTSUFFIX)
SRC_RUNME_SCRIPT = $(srcdir)/$(RUNME_SCRIPT)

# Hide too long identifier warnings
SWIGOPT += -w720

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

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

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

# Copies files and creates directories needed for the test case
setup = \
	if [ ! -d $(TEST_DIR) ]; then	\
	  mkdir $(TEST_DIR); \
	fi; \
	if [ -f $(SRC_RUNME_SCRIPT) ]; then	\
	  $(ECHO_PROGRESS) "$(ACTION)ing $(LANGUAGE) testcase $* (with run test)" ; \
	  if [ ! -f $(TEST_DIR) ]; then	\
	    cp $(SRC_RUNME_SCRIPT) $(TEST_DIR); \
	  fi; \
	  if [ ! -f $(TEST_DIR)/swigtest.start ]; then	\
	    cp $(srcdir)/swigtest.start $(TEST_DIR); \
	  fi; \
	  if [ ! -f $(TEST_DIR)/swigtest.quit ]; then \
	    cp $(srcdir)/swigtest.quit $(TEST_DIR); \
	  fi; \
	else \
	  $(ECHO_PROGRESS) "$(ACTION)ing $(LANGUAGE) testcase $*" ; \
	fi; \

# Runs the testcase. A testcase is only run if
# a file is found which has _runme.sci appended after the testcase name.
run_testcase = \
	if [ -f $(RUNME_SCRIPT) ]; then ( \
	  env LD_LIBRARY_PATH=$(srcdir):$$LD_LIBRARY_PATH $(RUNTOOL) $(SCILAB) $(SCILAB_OPT) -f $(RUNME_SCRIPT); ) \
	fi

# Clean: remove the generated files
%.clean:
	@rm -rf $(TEST_DIR)

clean:
