| ####################################################################### |
| # SWIG test suite makefile. |
| # The test suite comprises many different test cases, which have |
| # typically produced bugs in the past. The aim is to have the test |
| # cases compiling for every language modules. Some testcase have |
| # a runtime test which is written in each of the module's language. |
| # |
| # This makefile runs SWIG on the testcases, compiles the c/c++ code |
| # then builds the object code for use by the language. |
| # To complete a test in a language follow these guidelines: |
| # 1) Add testcases to CPP_TEST_CASES (c++) or C_TEST_CASES (c) or |
| # MULTI_CPP_TEST_CASES (multi-module c++ tests) |
| # 2) If not already done, create a makefile which: |
| # a) Defines LANGUAGE matching a language rule in Examples/Makefile, |
| # for example LANGUAGE = java |
| # b) Define rules for %.ctest, %.cpptest, %.multicpptest and %.clean. |
| # c) Define srcdir, top_srcdir and top_builddir (these are the |
| # equivalent to configure's variables of the same name). |
| # 3) One off special commandline options can be achieved by adding a |
| # test case to CUSTOM_TEST_CASES and defining rules to run and test. |
| # |
| # The 'check' target runs the testcases including SWIG invocation, |
| # C/C++ compilation, target language compilation (if any) and runtime |
| # test (if there is an associated 'runme' test). |
| # The 'partialcheck' target only invokes SWIG. |
| # The 'all' target is the same as the 'check' target but also includes |
| # known broken testcases. |
| # The 'clean' target cleans up. |
| # |
| # Note that the RUNTOOL, COMPILETOOL and SWIGTOOL variables can be used |
| # for # invoking tools for the runtime tests and target language |
| # compiler (eg javac) respectively. For example, valgrind can be used |
| # for memory checking of the runtime tests using: |
| # make RUNTOOL="valgrind --leak-check-full" |
| # and valgrind can be used when invoking SWIG using: |
| # make SWIGTOOL="valgrind --tool=memcheck" |
| # |
| # The variables below can be overridden after including this makefile |
| ####################################################################### |
| |
| ####################################################################### |
| # Variables |
| ####################################################################### |
| |
| ifneq (,$(USE_VALGRIND)) |
| VALGRIND_OPT = --leak-check=full |
| RUNTOOL = valgrind $(VALGRIND_OPT) |
| else |
| RUNTOOL = |
| endif |
| COMPILETOOL= |
| SWIGTOOL = |
| |
| SWIG = $(SWIGTOOL) $(top_builddir)/preinst-swig |
| SWIG_LIB = $(top_srcdir)/Lib |
| TEST_SUITE = test-suite |
| EXAMPLES = Examples |
| CXXSRCS = |
| CSRCS = |
| TARGETPREFIX = |
| TARGETSUFFIX = |
| SWIGOPT = -outcurrentdir -I$(top_srcdir)/$(EXAMPLES)/$(TEST_SUITE) |
| INCLUDES = -I$(top_srcdir)/$(EXAMPLES)/$(TEST_SUITE) |
| LIBS = -L. |
| LIBPREFIX = lib |
| ACTION = check |
| INTERFACEDIR = $(if $(wildcard $*.i), ./, ../) |
| |
| # |
| # Please keep test cases in alphabetical order. |
| # Note that any whitespace after the last entry in each list will break make |
| # |
| |
| # Broken C++ test cases. (Can be run individually using make testcase.cpptest.) |
| CPP_TEST_BROKEN += \ |
| constants \ |
| cpp_broken \ |
| exception_partial_info \ |
| extend_variable \ |
| li_std_vector_ptr \ |
| namespace_union \ |
| nested_struct \ |
| overload_complicated \ |
| template_default_pointer \ |
| template_expr |
| |
| |
| # Broken C test cases. (Can be run individually using make testcase.ctest.) |
| C_TEST_BROKEN += \ |
| tag_no_clash_with_variable |
| |
| |
| # C++ test cases. (Can be run individually using make testcase.cpptest.) |
| CPP_TEST_CASES += \ |
| abstract_access \ |
| abstract_inherit \ |
| abstract_inherit_ok \ |
| abstract_signature \ |
| abstract_typedef \ |
| abstract_typedef2 \ |
| abstract_virtual \ |
| access_change \ |
| add_link \ |
| aggregate \ |
| allowexcept \ |
| allprotected \ |
| anonymous_bitfield \ |
| apply_signed_char \ |
| apply_strings \ |
| argout \ |
| array_member \ |
| array_typedef_memberin \ |
| arrayref \ |
| arrays_dimensionless \ |
| arrays_global \ |
| arrays_global_twodim \ |
| arrays_scope \ |
| bloody_hell \ |
| bools \ |
| cast_operator \ |
| casts \ |
| char_strings \ |
| class_ignore \ |
| class_scope_weird \ |
| compactdefaultargs \ |
| const_const_2 \ |
| constant_pointers \ |
| constover \ |
| constructor_copy \ |
| constructor_exception \ |
| constructor_explicit \ |
| constructor_ignore \ |
| constructor_value \ |
| contract \ |
| conversion \ |
| conversion_namespace \ |
| conversion_ns_template \ |
| cplusplus_throw \ |
| cpp_basic \ |
| cpp_enum \ |
| cpp_namespace \ |
| cpp_nodefault \ |
| cpp_static \ |
| cpp_typedef \ |
| default_args \ |
| default_constructor \ |
| defvalue_constructor \ |
| derived_byvalue \ |
| derived_nested \ |
| destructor_reprotected \ |
| director_abstract \ |
| director_basic \ |
| director_classes \ |
| director_classic \ |
| director_constructor \ |
| director_default \ |
| director_detect \ |
| director_enum \ |
| director_exception \ |
| director_extend \ |
| director_finalizer \ |
| director_frob \ |
| director_ignore \ |
| director_namespace_clash \ |
| director_nested \ |
| director_overload \ |
| director_primitives \ |
| director_protected \ |
| director_protected_overloaded \ |
| director_redefined \ |
| director_thread \ |
| director_unroll \ |
| director_using \ |
| director_wombat \ |
| disown \ |
| dynamic_cast \ |
| empty \ |
| enum_scope_template \ |
| enum_template \ |
| enum_thorough \ |
| enum_var \ |
| evil_diamond \ |
| evil_diamond_ns \ |
| evil_diamond_prop \ |
| exception_order \ |
| extend \ |
| extend_default \ |
| extend_placement \ |
| extend_template \ |
| extend_template_ns \ |
| extern_namespace \ |
| extern_throws \ |
| features \ |
| fragments \ |
| friends \ |
| fvirtual \ |
| global_namespace \ |
| global_ns_arg \ |
| global_vars \ |
| grouping \ |
| ignore_parameter \ |
| import_nomodule \ |
| inherit \ |
| inherit_missing \ |
| inherit_same_name \ |
| inherit_same_name2 \ |
| inherit_same_name3 \ |
| inherit_same_name4 \ |
| inherit_target_language \ |
| inherit_void_arg \ |
| inline_initializer \ |
| insert_directive \ |
| keyword_rename \ |
| kind \ |
| langobj \ |
| li_attribute \ |
| li_boost_shared_ptr \ |
| li_boost_shared_ptr_bits \ |
| li_carrays \ |
| li_cdata \ |
| li_cpointer \ |
| li_stdint \ |
| li_typemaps \ |
| li_windows \ |
| long_long_apply \ |
| member_pointer \ |
| member_template \ |
| minherit \ |
| minherit2 \ |
| mixed_types \ |
| multiple_inheritance \ |
| name_cxx \ |
| name_warnings \ |
| namespace_class \ |
| namespace_enum \ |
| namespace_extend \ |
| namespace_nested \ |
| namespace_spaces \ |
| namespace_template \ |
| namespace_typedef_class \ |
| namespace_typemap \ |
| namespace_virtual_method \ |
| naturalvar \ |
| nested_comment \ |
| newobject1 \ |
| null_pointer \ |
| operator_overload \ |
| operator_overload_break \ |
| operbool \ |
| ordering \ |
| overload_copy \ |
| overload_extend \ |
| overload_rename \ |
| overload_simple \ |
| overload_subtype \ |
| overload_template \ |
| overload_template_fast \ |
| pointer_reference \ |
| primitive_ref \ |
| private_assign \ |
| protected_rename \ |
| pure_virtual \ |
| redefined \ |
| refcount \ |
| reference_global_vars \ |
| register_par \ |
| rename1 \ |
| rename2 \ |
| rename3 \ |
| rename4 \ |
| rename_scope \ |
| rename_strip_encoder \ |
| restrict_cplusplus \ |
| return_const_value \ |
| return_value_scope \ |
| rname \ |
| samename \ |
| sizet \ |
| smart_pointer_const \ |
| smart_pointer_const2 \ |
| smart_pointer_extend \ |
| smart_pointer_member \ |
| smart_pointer_multi \ |
| smart_pointer_multi_typedef \ |
| smart_pointer_namespace \ |
| smart_pointer_namespace2 \ |
| smart_pointer_not \ |
| smart_pointer_overload \ |
| smart_pointer_protected \ |
| smart_pointer_rename \ |
| smart_pointer_simple \ |
| smart_pointer_static \ |
| smart_pointer_templatemethods \ |
| smart_pointer_templatevariables \ |
| smart_pointer_typedef \ |
| special_variables \ |
| static_array_member \ |
| static_const_member \ |
| static_const_member_2 \ |
| struct_value \ |
| template \ |
| template_arg_replace \ |
| template_arg_scope \ |
| template_arg_typename \ |
| template_array_numeric \ |
| template_base_template \ |
| template_classes \ |
| template_const_ref \ |
| template_construct \ |
| template_default \ |
| template_default2 \ |
| template_default_arg \ |
| template_default_class_parms \ |
| template_default_inherit \ |
| template_default_qualify \ |
| template_default_vw \ |
| template_enum \ |
| template_enum_ns_inherit \ |
| template_enum_typedef \ |
| template_explicit \ |
| template_extend1 \ |
| template_extend2 \ |
| template_extend_overload \ |
| template_extend_overload_2 \ |
| template_forward \ |
| template_inherit \ |
| template_inherit_abstract \ |
| template_int_const \ |
| template_methods \ |
| template_ns \ |
| template_ns2 \ |
| template_ns3 \ |
| template_ns4 \ |
| template_ns_enum \ |
| template_ns_enum2 \ |
| template_ns_inherit \ |
| template_ns_scope \ |
| template_partial_arg \ |
| template_qualifier \ |
| template_qualifier \ |
| template_ref_type \ |
| template_rename \ |
| template_retvalue \ |
| template_specialization \ |
| template_specialization_defarg \ |
| template_specialization_enum \ |
| template_static \ |
| template_tbase_template \ |
| template_template_parameters \ |
| template_typedef \ |
| template_typedef_cplx \ |
| template_typedef_cplx2 \ |
| template_typedef_cplx3 \ |
| template_typedef_cplx4 \ |
| template_typedef_cplx5 \ |
| template_typedef_funcptr \ |
| template_typedef_ns \ |
| template_typedef_ptr \ |
| template_typedef_rec \ |
| template_using \ |
| template_virtual \ |
| template_whitespace \ |
| threads \ |
| throw_exception \ |
| typedef_array_member \ |
| typedef_class \ |
| typedef_funcptr \ |
| typedef_inherit \ |
| typedef_mptr \ |
| typedef_reference \ |
| typedef_scope \ |
| typedef_sizet \ |
| typedef_struct \ |
| typemap_namespace \ |
| typemap_ns_using \ |
| typemap_numinputs \ |
| typemap_out_optimal \ |
| typemap_variables \ |
| typemap_various \ |
| typename \ |
| types_directive \ |
| union_scope \ |
| using1 \ |
| using2 \ |
| using_composition \ |
| using_extend \ |
| using_inherit \ |
| using_namespace \ |
| using_pointers \ |
| using_private \ |
| using_protected \ |
| valuewrapper \ |
| valuewrapper_base \ |
| valuewrapper_const \ |
| valuewrapper_opaque \ |
| varargs \ |
| virtual_destructor \ |
| virtual_poly \ |
| voidtest \ |
| wrapmacro |
| |
| # |
| # Put all the heavy STD/STL cases here, where they can be skipped if needed |
| # |
| CPP_STD_TEST_CASES += \ |
| director_string \ |
| ignore_template_constructor \ |
| li_std_deque \ |
| li_std_except \ |
| li_std_pair \ |
| li_std_string \ |
| li_std_vector \ |
| naturalvar \ |
| smart_pointer_inherit \ |
| template_typedef_fnc \ |
| template_type_namespace \ |
| template_opaque |
| # li_std_list |
| |
| |
| ifndef SKIP_CPP_STD_CASES |
| CPP_TEST_CASES += ${CPP_STD_TEST_CASES} |
| endif |
| |
| |
| # C test cases. (Can be run individually using make testcase.ctest.) |
| C_TEST_CASES += \ |
| arrays \ |
| char_constant \ |
| const_const \ |
| empty \ |
| enums \ |
| extern_declaration \ |
| funcptr \ |
| function_typedef \ |
| immutable \ |
| inctest \ |
| integers \ |
| keyword_rename \ |
| lextype \ |
| li_carrays \ |
| li_cdata \ |
| li_cmalloc \ |
| li_constraints \ |
| li_cpointer \ |
| li_math \ |
| long_long \ |
| name \ |
| nested \ |
| newobject2 \ |
| overload_extend \ |
| overload_extendc \ |
| preproc \ |
| ret_by_value \ |
| simple_array \ |
| sizeof_pointer \ |
| sneaky1 \ |
| struct_rename \ |
| typedef_struct \ |
| typemap_subst \ |
| union_parameter \ |
| unions |
| |
| |
| # Multi-module C++ test cases . (Can be run individually using make testcase.multicpptest.) |
| MULTI_CPP_TEST_CASES += \ |
| clientdata_prop \ |
| imports \ |
| packageoption \ |
| mod \ |
| template_typedef_import \ |
| multi_import |
| |
| NOT_BROKEN_TEST_CASES = $(CPP_TEST_CASES:=.cpptest) \ |
| $(C_TEST_CASES:=.ctest) \ |
| $(MULTI_CPP_TEST_CASES:=.multicpptest) \ |
| $(CUSTOM_TEST_CASES:=.customtest) \ |
| $(EXTRA_TEST_CASES) |
| |
| BROKEN_TEST_CASES = $(CPP_TEST_BROKEN:=.cpptest) \ |
| $(C_TEST_BROKEN:=.ctest) |
| |
| ALL_CLEAN = $(CPP_TEST_CASES:=.clean) \ |
| $(C_TEST_CASES:=.clean) \ |
| $(MULTI_CPP_TEST_CASES:=.clean) \ |
| $(CUSTOM_TEST_CASES:=.clean) \ |
| $(CPP_TEST_BROKEN:=.clean) \ |
| $(C_TEST_BROKEN:=.clean) |
| |
| ####################################################################### |
| # The following applies for all module languages |
| ####################################################################### |
| all: $(BROKEN_TEST_CASES) $(NOT_BROKEN_TEST_CASES) |
| |
| check: $(NOT_BROKEN_TEST_CASES) |
| |
| # partialcheck target runs SWIG only, ie no compilation or running of tests (for a subset of languages) |
| partialcheck: |
| $(MAKE) check CC=true CXX=true LDSHARED=true CXXSHARED=true RUNTOOL=true COMPILETOOL=true |
| |
| broken: $(BROKEN_TEST_CASES) |
| |
| swig_and_compile_cpp = \ |
| $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile CXXSRCS="$(CXXSRCS)" \ |
| SWIG_LIB="$(SWIG_LIB)" SWIG="$(SWIG)" \ |
| INCLUDES="$(INCLUDES)" SWIGOPT="$(SWIGOPT)" NOLINK=true \ |
| TARGET="$(TARGETPREFIX)$*$(TARGETSUFFIX)" INTERFACEDIR="$(INTERFACEDIR)" INTERFACE="$*.i" \ |
| $(LANGUAGE)$(VARIANT)_cpp |
| |
| swig_and_compile_c = \ |
| $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile CSRCS="$(CSRCS)" \ |
| SWIG_LIB="$(SWIG_LIB)" SWIG="$(SWIG)" \ |
| INCLUDES="$(INCLUDES)" SWIGOPT="$(SWIGOPT)" NOLINK=true \ |
| TARGET="$(TARGETPREFIX)$*$(TARGETSUFFIX)" INTERFACEDIR="$(INTERFACEDIR)" INTERFACE="$*.i" \ |
| $(LANGUAGE)$(VARIANT) |
| |
| 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)" LIBS='$(LIBS)' \ |
| INCLUDES="$(INCLUDES)" SWIGOPT="$(SWIGOPT)" NOLINK=true \ |
| TARGET="$(TARGETPREFIX)$${f}$(TARGETSUFFIX)" INTERFACEDIR="$(INTERFACEDIR)" INTERFACE="$$f.i" \ |
| $(LANGUAGE)$(VARIANT)_cpp; \ |
| done |
| |
| swig_and_compile_external = \ |
| $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile \ |
| SWIG_LIB="$(SWIG_LIB)" SWIG="$(SWIG)" \ |
| TARGET="$*_wrap_hdr.h" \ |
| $(LANGUAGE)$(VARIANT)_externalhdr; \ |
| $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile CXXSRCS="$(CXXSRCS) $*_external.cxx" \ |
| SWIG_LIB="$(SWIG_LIB)" SWIG="$(SWIG)" \ |
| INCLUDES="$(INCLUDES)" SWIGOPT="$(SWIGOPT)" NOLINK=true \ |
| TARGET="$(TARGETPREFIX)$*$(TARGETSUFFIX)" INTERFACEDIR="$(INTERFACEDIR)" INTERFACE="$*.i" \ |
| $(LANGUAGE)$(VARIANT)_cpp |
| |
| swig_and_compile_runtime = \ |
| |
| setup = \ |
| if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ |
| echo "$(ACTION)ing testcase $* (with run test) under $(LANGUAGE)" ; \ |
| else \ |
| echo "$(ACTION)ing testcase $* under $(LANGUAGE)" ; \ |
| fi; |
| |
| |
| |
| ####################################################################### |
| # Clean |
| ####################################################################### |
| clean: $(ALL_CLEAN) |
| |
| distclean: clean |
| @rm -f Makefile |
| |
| .PHONY: all check partialcheck broken clean distclean |
| |