The metaclass (SwigPyObjectType) for SWIG objects was not defined in a way that let importlib successfully import the Python wrappers. The pickle module failed because it couldn't determine what module the SWIG wrapped objects are in. I've changed the definition of SwigPyObjectType using more normal builtin type definitions. There are still some open questions: - None of the builtin types, like swig_static_var_getset_descriptor and SwigPyObject are added into any module. No call to PyModule_AddObject is made, so isinstance cannot be used for any wrapped type, all of which are derived from SwigPyObject. Closes #808
200 lines
4.9 KiB
Makefile
200 lines
4.9 KiB
Makefile
#######################################################################
|
|
# Makefile for python test-suite
|
|
#######################################################################
|
|
|
|
ifeq (,$(PY3))
|
|
PYBIN = @PYTHON@
|
|
else
|
|
PYBIN = @PYTHON3@
|
|
endif
|
|
|
|
LANGUAGE = python
|
|
PYTHON = $(PYBIN)
|
|
PEP8 = @PEP8@
|
|
PEP8_FLAGS = --ignore=E30,E402,E501,E731,W291,W391
|
|
|
|
#*_runme.py for Python 2.x, *_runme3.py for Python 3.x
|
|
PY2SCRIPTSUFFIX = _runme.py
|
|
PY3SCRIPTSUFFIX = _runme3.py
|
|
PY2TO3 = 2to3 -x import
|
|
|
|
ifeq (,$(PY3))
|
|
SCRIPTSUFFIX = $(PY2SCRIPTSUFFIX)
|
|
else
|
|
SCRIPTSUFFIX = $(PY3SCRIPTSUFFIX)
|
|
endif
|
|
|
|
srcdir = @srcdir@
|
|
top_srcdir = @top_srcdir@
|
|
top_builddir = @top_builddir@
|
|
|
|
CPP_TEST_CASES += \
|
|
argcargvtest \
|
|
callback \
|
|
complextest \
|
|
director_stl \
|
|
director_wstring \
|
|
file_test \
|
|
iadd \
|
|
implicittest \
|
|
inout \
|
|
inplaceadd \
|
|
input \
|
|
li_cstring \
|
|
li_cwstring \
|
|
li_factory \
|
|
li_implicit \
|
|
li_std_containers_int \
|
|
li_std_map_member \
|
|
li_std_multimap \
|
|
li_std_pair_extra \
|
|
li_std_set \
|
|
li_std_stream \
|
|
li_std_string_extra \
|
|
li_std_vectora \
|
|
li_std_vector_extra \
|
|
li_std_wstream \
|
|
li_std_wstring \
|
|
primitive_types \
|
|
python_abstractbase \
|
|
python_append \
|
|
python_builtin \
|
|
python_destructor_exception \
|
|
python_director \
|
|
python_docstring \
|
|
python_nondynamic \
|
|
python_overload_simple_cast \
|
|
python_pickle \
|
|
python_pythoncode \
|
|
python_richcompare \
|
|
python_strict_unicode \
|
|
simutry \
|
|
std_containers \
|
|
swigobject \
|
|
template_matrix
|
|
|
|
# li_std_carray
|
|
# director_profile
|
|
# python_pybuf
|
|
|
|
C_TEST_CASES += \
|
|
file_test \
|
|
li_cstring \
|
|
li_cwstring \
|
|
python_nondynamic \
|
|
python_varargs_typemap
|
|
|
|
#
|
|
# This test only works with modern C compilers
|
|
#
|
|
#C_TEST_CASES += \
|
|
# complextest
|
|
|
|
include $(srcdir)/../common.mk
|
|
|
|
# Overridden variables here
|
|
SCRIPTDIR = .
|
|
LIBS = -L.
|
|
VALGRIND_OPT += --suppressions=pythonswig.supp
|
|
|
|
# Custom tests - tests with additional commandline options
|
|
# none!
|
|
|
|
# Rules for the different types of tests
|
|
%.cpptest:
|
|
+$(convert_testcase)
|
|
$(setup)
|
|
+$(swig_and_compile_cpp)
|
|
$(check_pep8)
|
|
$(run_testcase)
|
|
|
|
%.ctest:
|
|
+$(convert_testcase)
|
|
$(setup)
|
|
+$(swig_and_compile_c)
|
|
$(check_pep8)
|
|
$(run_testcase)
|
|
|
|
%.multicpptest:
|
|
+$(convert_testcase)
|
|
$(setup)
|
|
+$(swig_and_compile_multi_cpp)
|
|
$(check_pep8_multi_cpp)
|
|
$(run_testcase)
|
|
|
|
|
|
|
|
# Runs the testcase. A testcase is only run if
|
|
# a file is found which has _runme.py (or _runme3.py for Python 3) appended after the testcase name.
|
|
|
|
py_runme = $(SCRIPTPREFIX)$*$(SCRIPTSUFFIX)
|
|
py2_runme = $(SCRIPTPREFIX)$*$(PY2SCRIPTSUFFIX)
|
|
py3_runme = $(SCRIPTPREFIX)$*$(PY3SCRIPTSUFFIX)
|
|
|
|
ifneq (,$(PEP8))
|
|
check_pep8 = $(COMPILETOOL) $(PEP8) $(PEP8_FLAGS) $(SCRIPTPREFIX)$*.py
|
|
|
|
check_pep8_multi_cpp = \
|
|
for f in `cat $(top_srcdir)/$(EXAMPLES)/$(TEST_SUITE)/$*.list` ; do \
|
|
$(COMPILETOOL) $(PEP8) $(PEP8_FLAGS) $$f.py; \
|
|
done
|
|
endif
|
|
|
|
run_python = env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH PYTHONPATH=.:$(srcdir):$$PYTHONPATH $(RUNTOOL) $(PYTHON) $(py_runme)
|
|
|
|
run_testcase = \
|
|
if [ -f $(SCRIPTDIR)/$(py_runme) ]; then \
|
|
$(run_python);\
|
|
fi
|
|
|
|
# No copying/conversion needed for in-source-tree Python 2 scripts
|
|
ifeq ($(SCRIPTDIR)|$(SCRIPTSUFFIX),$(srcdir)|$(PY2SCRIPTSUFFIX))
|
|
convert_testcase =
|
|
else
|
|
|
|
convert_testcase = \
|
|
if [ -f $(srcdir)/$(py2_runme) ]; then \
|
|
$(MAKE) $(SCRIPTDIR)/$(py_runme); \
|
|
fi
|
|
|
|
$(SCRIPTDIR)/$(SCRIPTPREFIX)%$(SCRIPTSUFFIX): $(srcdir)/$(SCRIPTPREFIX)%$(PY2SCRIPTSUFFIX)
|
|
test x$< = x$@ || cp $< $@ || exit 1
|
|
test x$(PY3) = x || $(PY2TO3) -w $@ >/dev/null 2>&1 || exit 1
|
|
|
|
endif
|
|
|
|
# Clean: remove the generated .py file
|
|
# We only remove the _runme3.py if it is generated by 2to3 from a _runme.py.
|
|
%.clean:
|
|
@rm -f $*.py
|
|
@if test -f $(srcdir)/$(py2_runme); then rm -f $(SCRIPTDIR)/$(py3_runme) $(SCRIPTDIR)/$(py3_runme).bak; fi
|
|
@if test "x$(SCRIPTDIR)" != "x$(srcdir)"; then rm -f $(SCRIPTDIR)/$(py2_runme); fi
|
|
|
|
clean:
|
|
$(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile SRCDIR='$(SRCDIR)' python_clean
|
|
rm -f hugemod.h hugemod_a.i hugemod_b.i hugemod_a.py hugemod_b.py hugemod_runme.py
|
|
rm -f clientdata_prop_a.py clientdata_prop_b.py import_stl_a.py import_stl_b.py
|
|
rm -f imports_a.py imports_b.py mod_a.py mod_b.py multi_import_a.py
|
|
rm -f multi_import_b.py packageoption_a.py packageoption_b.py packageoption_c.py
|
|
|
|
cvsignore:
|
|
@echo '*wrap* *.pyc *.so *.dll *.exp *.lib'
|
|
@echo Makefile
|
|
@for i in ${CPP_TEST_CASES} ${C_TEST_CASES}; do echo $$i.py; done
|
|
@for i in ${CPP_TEST_CASES} ${C_TEST_CASES}; do if grep -q $${i}_runme.py CVS/Entries ; then echo $${i}_runme.py; fi; done
|
|
@echo clientdata_prop_a.py
|
|
@echo clientdata_prop_b.py
|
|
@echo imports_a.py
|
|
@echo imports_b.py
|
|
@echo mod_a.py mod_b.py
|
|
@echo hugemod.h hugemod_a.i hugemod_b.i hugemod_a.py hugemod_b.py hugemod_runme.py
|
|
@echo template_typedef_import.py
|
|
|
|
hugemod_runme = hugemod$(SCRIPTPREFIX)
|
|
|
|
hugemod:
|
|
perl hugemod.pl $(hugemod_runme)
|
|
$(MAKE) hugemod_a.cpptest
|
|
$(MAKE) hugemod_b.cpptest
|
|
sh -c "time $(PYTHON) $(hugemod_runme)"
|
|
sh -c "time $(PYTHON) $(hugemod_runme)"
|