Test-suite Makefile now supports testing for all three Javascript variants.

- node.js
- custom JavascriptCore interpreter
- custom V8 interpreter
This commit is contained in:
Oliver Buchtala 2013-09-06 00:42:56 +03:00
commit 26b5acbbe8
2 changed files with 123 additions and 102 deletions

View file

@ -517,29 +517,67 @@ java_clean:
##### JAVASCRIPT ######
##################################################################
ROOT_DIR = @ROOT_DIR@
JSCFLAGS = @JSCFLAGS@
JSCXXFLAGS = @JSCXXFLAGS@
JSINCLUDES = @JSCOREINC@ @JSV8INC@
JSDYNAMICLINKING = @JSCOREDYNAMICLINKING@ @JSV8DYNAMICLINKING@
JSLIBRARYPREFIX = @JSLIBRARYPREFIX@
JSSO =@JSSO@
JSLDSHARED = @JSLDSHARED@
JSCXXSHARED = @JSCXXSHARED@
# ----------------------------------------------------------------
# Definitions
# Compile a custom javascript interpreter
# ----------------------------------------------------------------
#
# Note:
# There is no common CLI Javascript interpreter.
# V8 comes with one 'd8' which however does not provide a means
# to load extensions. Therefore, by default we use nodejs as
# environment.
# For testing native v8 and jsc extensions we provide our own
# interpreter (see 'Tools/javascript').
# ----------------------------------------------------------------
JSEXE = node
SWIGJS = $(SWIG) -javascript -node
JS_BUILD = node-gyp rebuild
JS_INTERPRETER_SRC_DIR = $(ROOT_DIR)/Tools/javascript
# These settings are provided by 'configure' (see '/configure.in')
ifeq (1, @JSV8ENABLED@)
JS_INTERPRETER_SRC_V8 = $(JS_INTERPRETER_SRC_DIR)/v8_shell.cxx
JS_INTERPRETER_CXXFLAGS_V8 = -DENABLE_V8
endif
ifeq (1, @JSCENABLED@)
JS_INTERPRETER_SRC_JSC = $(JS_INTERPRETER_SRC_DIR)/jsc_shell.cxx
JS_INTERPRETER_CXXFLAGS_JSC = -DENABLE_JSC
endif
JS_INTERPRETER_CXXFLAGS = $(JS_INTERPRETER_CXXFLAGS_JSC) $(JS_INTERPRETER_CXXFLAGS_V8)
JS_INTERPRETER_SRC = \
$(JS_INTERPRETER_SRC_DIR)/javascript.cxx $(JS_INTERPRETER_SRC_DIR)/js_shell.cxx $(JS_INTERPRETER_SRC_JSC) $(JS_INTERPRETER_SRC_V8)
# TODO: improve:
# - exe suffix
# - '-ldl' should come from configure
javascript_exe: $(SRCS)
$(CXX) $(CXXFLAGS) $(JS_INTERPRETER_CXXFLAGS) $(JSINCLUDES) $(JS_INTERPRETER_SRC) -ldl $(LIBS) $(JSDYNAMICLINKING) -o $(JS_INTERPRETER_SRC_DIR)/javascript
SWIGJS = $(SWIG) -javascript
# ----------------------------------------------------------------
# Run the javascript executable
# ----------------------------------------------------------------
javascript_wrapper_cpp: $(SRCS)
javascript: $(SRCS)
$(SWIGJS) $(SWIGOPT) $(INTERFACEPATH)
$(CC) -c $(CCSHARED) $(CFLAGS) $(JSCFLAGS) $(ISRCS) $(SRCS) $(INCLUDES) $(JSINCLUDES)
$(LDSHARED) $(CFLAGS) $(OBJS) $(IOBJS) $(JSDYNAMICLINKING) $(LIBS) -o $(LIBPREFIX)$(TARGET)$(SO)
javascript_cpp: $(SRCS)
$(SWIGJS) -c++ $(SWIGOPT) $(INTERFACEPATH)
javascript_build:
$(JS_BUILD)
#javascript_run: $(SRCS)
# env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(JSEXE) $(JSEXE_OPTS) -l $(TARGET) $(JS_SCRIPT)
javascript_run: $(SRCS)
env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(JSEXE) $(JSEXE_OPTS) $(JS_SCRIPT)
$(CXX) -c $(CCSHARED) $(CFLAGS) $(JSCFLAGS) $(ICXXSRCS) $(SRCS) $(CXXSRCS) $(INCLUDES) $(JSINCLUDES)
$(CXXSHARED) $(CFLAGS) $(OBJS) $(IOBJS) $(JSDYNAMICLINKING) $(LIBS) $(CPP_DLLIBS) -o $(LIBPREFIX)$(TARGET)$(SO)
# -----------------------------------------------------------------
# Cleaning the javascript examples
@ -549,7 +587,7 @@ javascript_clean:
rm -rf build
rm -f *_wrap* runme
rm -f core @EXTRA_CLEAN@
rm -f *.@OBJEXT@ *@JSCORESO@
rm -f *.@OBJEXT@ *@JSSO@
##################################################################

View file

@ -7,105 +7,88 @@ SCRIPTSUFFIX = _runme.js
srcdir = @srcdir@
top_srcdir = @top_srcdir@
top_builddir = @top_builddir@
JS_INCLUDE = @JSCOREINC@
JS_DLNK = @JSCOREDYNAMICLINKING@
JSCXXFLAGS = @JSCXXFLAGS@
JAVASCRIPT_EXE = node
SWIG = $(top_builddir)/preinst_swig
SWIG = $(top_builddir)/preinst_swig
C_TEST_CASES = \
preproc
CPP_TEST_CASES = \
abstract_access \
abstract_typedef \
abstract_typedef2 \
abstract_virtual \
arrays_global \
array_member \
char_binary \
class_ignore \
class_scope_weird \
complextest \
constover \
constructor_copy \
cpp_enum \
cpp_namespace \
cpp_static \
director_alternating \
enum_template \
namespace_virtual_method \
overload_copy \
ret_by_value \
struct_value \
template_static \
typedef_class \
typedef_inherit \
typedef_scope \
typemap_arrays \
typemap_delete \
typemap_namespace \
typemap_ns_using \
using1 \
using2 \
javascript_unicode
BROKEN_TEST_CASES = \
preproc_include
SKIP_CPP_CASES = @SKIP_CPP_CASES@
SKIP_C_CASES = @SKIP_C_CASES@
SKIP_CPP_STD_CASES = @SKIP_CPP_STD_CASES@
SKIP_MULTI_CPP_CASES = @SKIP_MULTI_CPP_CASES@
ifneq (, $(ENGINE))
JSENGINE = $(ENGINE)
else
JSENGINE = "node"
endif
include $(srcdir)/../common.mk
# Overridden variables here
SWIGOPT += -$(JSENGINE)
# Custom tests - tests with additional commandline options
ifeq ("node",$(JSENGINE))
# Rules for the different types of tests
%.cpptest:
$(prepare_test)
$(generate_cpp_wrapper)
$(build_module)
$(run_testcase)
setup = \
if [ ! -f $(srcdir)/$*/binding.gyp ]; then \
echo "Setting up nodejs addon..."; \
sh ./setup_test.sh $*; \
$(SWIG) -c++ -javascript -node -o $*/$*_wrap.cxx ../$*.i; \
fi
%.ctest:
$(prepare_test)
$(generate_cpp_wrapper)
$(build_module)
$(run_testcase)
nodejs_swig_and_compile = \
if [ ! -f $(srcdir)/$*/build/Makefile ]; then \
echo "Configuring node add-on..."; \
node-gyp --directory $* configure; \
fi; \
echo "Building node add-on..."; \
node-gyp --directory $* build; \
%.multicpptest:
$(prepare_test)
$(generate_cpp_wrapper)
$(build_module)
$(run_testcase)
run_testcase = \
if [ -f $(srcdir)/$*$(SCRIPTSUFFIX) ]; then \
node $(srcdir)/$*$(SCRIPTSUFFIX); \
fi
prepare_test = \
sh ./setup_test.sh $*
# Rules for the different types of tests
%.cpptest:
$(setup)
$(nodejs_swig_and_compile)
$(run_testcase)
generate_cpp_wrapper = \
$(SWIG) -c++ -javascript -node -o $*/$*_wrap.cxx ../$*.i
%.ctest:
$(setup)
$(nodejs_swig_and_compile)
$(run_testcase)
build_module = \
if [ ! -f $(srcdir)/$*/build/Makefile ]; then \
cd $* && node-gyp configure build && cd ..; \
else \
cd $* && node-gyp build && cd ..; \
fi
%.multicpptest:
$(setup)
$(nodejs_swig_and_compile)
$(run_testcase)
# Runs the testcase. A testcase is only run if
# a file is found which has _runme.js appended after the testcase name.
run_testcase = \
if [ -f $(srcdir)/$*$(SCRIPTSUFFIX) ]; then \
node $(srcdir)/$*$(SCRIPTSUFFIX); \
fi
# Clean
%.clean:
rm -rf $*
else
run_testcase = \
if [ -f $(srcdir)/$*$(SCRIPTSUFFIX) ]; then \
$(top_srcdir)/Tools/javascript/javascript -$(JSENGINE) $(srcdir)/$*$(SCRIPTSUFFIX); \
fi
# Rules for the different types of tests
%.cpptest:
$(setup)
+$(swig_and_compile_cpp)
$(run_testcase)
%.ctest:
$(setup)
+$(swig_and_compile_c)
$(run_testcase)
%.multicpptest:
$(setup)
+$(swig_and_compile_multi_cpp)
$(run_testcase)
# Clean
%.clean:
rm $*_wrap.cxx
endif
# Clean
%.clean:
rm -rf $*
clean: