Scilab: parallelization of test-suite, remove configure cache

This commit is contained in:
Simon Marchetto 2013-09-04 15:25:53 +02:00
commit b4ed5625ee
6 changed files with 88 additions and 43 deletions

View file

@ -1587,11 +1587,24 @@ define get_swig_scilab_args
ifdef INCLUDES
SWIG_SCILAB_ARGS += -addcflag "$(INCLUDES)"
endif
ifdef OUTDIR
SWIG_SCILAB_ARGS += -outdir "$(OUTDIR)"
endif
ifdef TARGET
SWIG_SCILAB_ARGS += -o "$(TARGET)"
endif
endef
# Returns the output dir
define get_output_dir
ifdef OUTDIR
OUTPUT_DIR := $(OUTDIR)
else
OUTPUT_DIR := .
endif
endef
# ----------------------------------------------------------------
# Build a C dynamically loadable module
# ----------------------------------------------------------------
@ -1599,8 +1612,9 @@ endef
scilab: $(SRCS)
$(eval $(call get_swig_scilab_args))
$(SWIG) $(SWIGOPT) $(SWIG_SCILAB_ARGS) $(INTERFACEPATH)
if [ -f builder.sce ]; then \
env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(SCILAB) $(SCILAB_STARTOPT) -f builder.sce; \
$(eval $(call get_output_dir))
if [ -f $(OUTPUT_DIR)/builder.sce ]; then \
env LD_LIBRARY_PATH=$(OUTPUT_DIR):$$LD_LIBRARY_PATH MAKEFLAGS="-j1" $(RUNTOOL) $(SCILAB) $(SCILAB_STARTOPT) -f $(OUTPUT_DIR)/builder.sce; \
fi
# ----------------------------------------------------------------
@ -1610,8 +1624,9 @@ scilab: $(SRCS)
scilab_cpp: $(SRCS)
$(eval $(call get_swig_scilab_args))
$(SWIG) $(SWIGOPT) -c++ $(SWIG_SCILAB_ARGS) $(INTERFACEPATH)
if [ -f builder.sce ]; then \
env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(SCILAB) $(SCILAB_STARTOPT) -f builder.sce; \
$(eval $(call get_output_dir))
if [ -f $(OUTPUT_DIR)/builder.sce ]; then \
env LD_LIBRARY_PATH=$(OUTPUT_DIR):$$LD_LIBRARY_PATH MAKEFLAGS="-j1" $(RUNTOOL) $(SCILAB) $(SCILAB_STARTOPT) -f $(OUTPUT_DIR)/builder.sce; \
fi
# -----------------------------------------------------------------
@ -1619,7 +1634,8 @@ scilab_cpp: $(SRCS)
# -----------------------------------------------------------------
scilab_run:
env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(SCILAB) $(SCILAB_STARTOPT) -f $(RUNME).sci $(RUNPIPE)
$(eval $(call get_output_dir))
env LD_LIBRARY_PATH=$(OUTPUT_DIR):$$LD_LIBRARY_PATH $(RUNTOOL) $(SCILAB) $(SCILAB_STARTOPT) -f $(RUNME).sci $(RUNPIPE)
# -----------------------------------------------------------------
# Scilab version

View file

@ -17,58 +17,74 @@ top_builddir = @top_builddir@
# - member_pointer (C++)
# - typemap_variables (C++)
# configure cache to speed up test run
CONF_CACHE=$(CURDIR)/test-suite.config.cache
CONFIG_SITE=$(CURDIR)/test-suite.config.site
export CONFIG_SITE
define get_output_dir
OUTDIR := $(CURDIR)/$(1).build
endef
enable_config_cache = \
echo 'cache_file=$(CONF_CACHE)' > $(CONFIG_SITE)
disable_config_cache:
rm -f $(CONF_CACHE)
rm -f $(CONFIG_SITE)
CONFIG_SITE=
# need reset cache before multicpptest
reset_config_cache = \
rm -f $(CONF_CACHE)
# disable cache at the end of test-suite
# use trick for this: 'extra test cases' end target
EXTRA_TEST_CASES = disable_config_cache
define get_runme_script
RUNME_SCRIPT := $(srcdir)/$(SCRIPTPREFIX)$(1)$(SCRIPTSUFFIX)
endef
include $(srcdir)/../common.mk
# Override make commands to specify OUTDIR
swig_and_compile_cpp = \
$(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile CXXSRCS="$(CXXSRCS)" \
SWIG_LIB="$(SWIG_LIB)" SWIG="$(SWIG)" \
INCLUDES="$(INCLUDES)" SWIGOPT= OUTDIR="$(OUTDIR)" \
TARGET="$*_wrap.cxx" INTERFACEDIR="$(INTERFACEDIR)" INTERFACE="$*.i" \
scilab_cpp
swig_and_compile_c = \
$(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile CSRCS="$(CSRCS)" \
SWIG_LIB="$(SWIG_LIB)" SWIG="$(SWIG)" \
INCLUDES="$(INCLUDES)" SWIGOPT= OUTDIR="$(OUTDIR)" \
TARGET="$*_wrap.c" INTERFACEDIR="$(INTERFACEDIR)" INTERFACE="$*.i" \
scilab
swig_and_compile_multi_cpp = \
for f in `cat $(top_srcdir)/$(EXAMPLES)/$(TEST_SUITE)/$*.list` ; do \
$(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile CXXSRCS="$(CXXSRCS)" \
SWIG_LIB="$(SWIG_LIB)" SWIG="$(SWIG)" \
INCLUDES="$(INCLUDES)" SWIGOPT= OUTDIR="$(OUTDIR)" \
TARGET="$*_wrap.cxx" INTERFACEDIR="$(INTERFACEDIR)" INTERFACE="$$f.i" \
scilab_cpp; \
done
# Rules for the different types of tests
%.cpptest:
$(setup)
$(enable_config_cache)
$(eval $(call get_output_dir,$*))
mkdir -p $(OUTDIR)
+$(swig_and_compile_cpp)
$(run_testcase)
%.ctest:
$(setup)
$(enable_config_cache)
$(eval $(call get_output_dir,$*))
mkdir -p $(OUTDIR)
+$(swig_and_compile_c)
$(run_testcase)
%.multicpptest:
$(setup)
$(reset_config_cache)
$(eval $(call get_output_dir,$*))
mkdir -p $(OUTDIR)
+$(swig_and_compile_multi_cpp)
$(run_testcase)
# 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 $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \
env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(SCILAB) $(SCILAB_STARTOPT) -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ; ) \
fi;
$(eval $(call get_output_dir,$*)) \
$(eval $(call get_runme_script,$*)) \
if [ -f $(RUNME_SCRIPT) ]; then ( \
env LD_LIBRARY_PATH=$(OUTDIR):$$LD_LIBRARY_PATH $(RUNTOOL) $(SCILAB) $(SCILAB_STARTOPT) -f $(RUNME_SCRIPT); )\
fi
# Clean: remove the generated files
%.clean:
@rm -f builder.sce loader.sce cleaner.sce $*_wrap.c $*_wrap.cxx lib$*lib.* $(CONFIG_SITE) $(CONF_CACHE)
@rm -rf $*.build
clean:
$(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile scilab_clean

View file

@ -1,10 +1,13 @@
// Clean files
exec("cleaner.sce", -1);
mdelete("builder.sce");
mdelete("cleaner.sce");
mdelete(swigtestname + "_wrap.c");
mdelete(swigtestname + "_wrap.cxx");
mdelete(swigtestname + ".i");
exec(fullfile(testbuilddir, "cleaner.sce"), -1);
mdelete(fullfile(testbuilddir, "builder.sce"));
mdelete(fullfile(testbuilddir, "cleaner.sce"));
mdelete(fullfile(testbuilddir, swigtestname + "_wrap.c"));
mdelete(fullfile(testbuilddir, swigtestname + "_wrap.cxx"));
mdelete(fullfile(testbuilddir, swigtestname + ".i"));
removedir(testbuilddir);
//mprintf("******************\n")
//mprintf("* TEST SUCCEEDED *\n")

View file

@ -4,15 +4,19 @@ lines(0);
[units, typ, names] = file(1);
swigtestname = strsubst(fileparts(names, "fname"), "_runme", "");
// Test build dir
testbuilddir = swigtestname + ".build";
// Does the library exists? If not then exit!
if ~isfile("lib" + swigtestname + "lib" + getdynlibext()) then
libname = "lib" + swigtestname + "lib" + getdynlibext();
if ~isfile(fullfile(testbuilddir, libname)) then
mprintf("*** LIBRARY NOT FOUND: %s ***\n", "lib" + swigtestname + "lib" + getdynlibext());
exit
end
// Load library
try
exec("loader.sce", -1);
exec(fullfile(testbuilddir, "loader.sce"), -1);
catch
mprintf("*** LOADER EXECUTION FAILED ***\n");
exit