Merge branch 'feature/python-builtin-separate-runtime-data'
* feature/python-builtin-separate-runtime-data: Rework swig_and_compile_multi_cpp makefile helper Different capsule names for builtin changes entry Use different capsule names with and without -builtin Conflicts: CHANGES.current
This commit is contained in:
commit
d1b93f2c0e
10 changed files with 72 additions and 8 deletions
|
|
@ -7,6 +7,14 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
|
||||||
Version 4.1.0 (in progress)
|
Version 4.1.0 (in progress)
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
|
2022-03-26: eltoder
|
||||||
|
[Python] #1684 Use different capsule names with and without -builtin
|
||||||
|
|
||||||
|
Types generated with and without -builtin are not compatible. Mixing
|
||||||
|
them in a common type list leads to crashes. Avoid this by using
|
||||||
|
different capsule names: "type_pointer_capsule" without -builtin and
|
||||||
|
"type_pointer_capsule_builtin" with.
|
||||||
|
|
||||||
2022-03-25: wsfulton
|
2022-03-25: wsfulton
|
||||||
The debug command line options that display parse tree nodes
|
The debug command line options that display parse tree nodes
|
||||||
(-debug-module, -debug-top, -debug-symtabs) now display previously hidden
|
(-debug-module, -debug-top, -debug-symtabs) now display previously hidden
|
||||||
|
|
|
||||||
|
|
@ -831,6 +831,13 @@ endif
|
||||||
partialcheck:
|
partialcheck:
|
||||||
$(MAKE) check CC=true CXX=true LDSHARED=true CXXSHARED=true RUNTOOL=true COMPILETOOL=true
|
$(MAKE) check CC=true CXX=true LDSHARED=true CXXSHARED=true RUNTOOL=true COMPILETOOL=true
|
||||||
|
|
||||||
|
swig_and_compile_cpp_helper = \
|
||||||
|
$(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile SRCDIR='$(SRCDIR)' CXXSRCS='$(CXXSRCS)' \
|
||||||
|
SWIG_LIB_DIR='$(SWIG_LIB_DIR)' SWIGEXE='$(SWIGEXE)' \
|
||||||
|
LIBS='$(LIBS)' INCLUDES='$(INCLUDES)' SWIGOPT=$(2) NOLINK=true \
|
||||||
|
TARGET="$(TARGETPREFIX)$(1)$(TARGETSUFFIX)" INTERFACEDIR='$(INTERFACEDIR)' INTERFACE="$(1).i" \
|
||||||
|
$(LANGUAGE)$(VARIANT)_cpp
|
||||||
|
|
||||||
swig_and_compile_cpp = \
|
swig_and_compile_cpp = \
|
||||||
$(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile SRCDIR='$(SRCDIR)' CXXSRCS='$(CXXSRCS)' \
|
$(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile SRCDIR='$(SRCDIR)' CXXSRCS='$(CXXSRCS)' \
|
||||||
SWIG_LIB_DIR='$(SWIG_LIB_DIR)' SWIGEXE='$(SWIGEXE)' \
|
SWIG_LIB_DIR='$(SWIG_LIB_DIR)' SWIGEXE='$(SWIGEXE)' \
|
||||||
|
|
@ -847,11 +854,7 @@ swig_and_compile_c = \
|
||||||
|
|
||||||
swig_and_compile_multi_cpp = \
|
swig_and_compile_multi_cpp = \
|
||||||
for f in `cat $(top_srcdir)/$(EXAMPLES)/$(TEST_SUITE)/$*.list` ; do \
|
for f in `cat $(top_srcdir)/$(EXAMPLES)/$(TEST_SUITE)/$*.list` ; do \
|
||||||
$(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile SRCDIR='$(SRCDIR)' CXXSRCS='$(CXXSRCS)' \
|
$(call swig_and_compile_cpp_helper,$${f},'$(SWIGOPT)'); \
|
||||||
SWIG_LIB_DIR='$(SWIG_LIB_DIR)' SWIGEXE='$(SWIGEXE)' \
|
|
||||||
LIBS='$(LIBS)' INCLUDES='$(INCLUDES)' SWIGOPT='$(SWIGOPT)' NOLINK=true \
|
|
||||||
TARGET="$(TARGETPREFIX)$${f}$(TARGETSUFFIX)" INTERFACEDIR='$(INTERFACEDIR)' INTERFACE="$$f.i" \
|
|
||||||
$(LANGUAGE)$(VARIANT)_cpp; \
|
|
||||||
done
|
done
|
||||||
|
|
||||||
swig_and_compile_external = \
|
swig_and_compile_external = \
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,9 @@ C_TEST_CASES += \
|
||||||
python_nondynamic \
|
python_nondynamic \
|
||||||
python_varargs_typemap \
|
python_varargs_typemap \
|
||||||
|
|
||||||
|
MULTI_CPP_TEST_CASES += \
|
||||||
|
python_runtime_data \
|
||||||
|
|
||||||
include $(srcdir)/../common.mk
|
include $(srcdir)/../common.mk
|
||||||
|
|
||||||
# Overridden variables here
|
# Overridden variables here
|
||||||
|
|
@ -102,6 +105,13 @@ VALGRIND_OPT += --suppressions=pythonswig.supp
|
||||||
# Custom tests - tests with additional commandline options
|
# Custom tests - tests with additional commandline options
|
||||||
python_flatstaticmethod.cpptest: SWIGOPT += -flatstaticmethod
|
python_flatstaticmethod.cpptest: SWIGOPT += -flatstaticmethod
|
||||||
|
|
||||||
|
# Make sure just python_runtime_data_builtin.i uses the -builtin option. Note: does not use python_runtime_data.list for all steps.
|
||||||
|
python_runtime_data.multicpptest: override SWIG_FEATURES := $(filter-out -builtin,$(SWIG_FEATURES))
|
||||||
|
python_runtime_data.multicpptest: override SWIGOPT := $(filter-out -builtin,$(SWIGOPT))
|
||||||
|
python_runtime_data.multicpptest: swig_and_compile_multi_cpp = \
|
||||||
|
$(call swig_and_compile_cpp_helper,python_runtime_data_builtin,'$(SWIGOPT) -builtin') && \
|
||||||
|
$(call swig_and_compile_cpp_helper,python_runtime_data_nobuiltin,'$(SWIGOPT)')
|
||||||
|
|
||||||
# Rules for the different types of tests
|
# Rules for the different types of tests
|
||||||
%.cpptest:
|
%.cpptest:
|
||||||
$(setup)
|
$(setup)
|
||||||
|
|
@ -149,7 +159,7 @@ clean:
|
||||||
rm -f hugemod.h hugemod_a.i hugemod_b.i hugemod_a.py hugemod_b.py hugemod_runme.py
|
rm -f hugemod.h hugemod_a.i hugemod_b.i hugemod_a.py hugemod_b.py hugemod_runme.py
|
||||||
rm -f imports_a.py imports_b.py mod_a.py mod_b.py multi_import_a.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 multi_import_d.py packageoption_a.py packageoption_b.py packageoption_c.py
|
rm -f multi_import_b.py multi_import_d.py packageoption_a.py packageoption_b.py packageoption_c.py
|
||||||
rm -f template_typedef_cplx2.py
|
rm -f template_typedef_cplx2.py python_runtime_data_builtin.py python_runtime_data_nobuiltin.py
|
||||||
|
|
||||||
hugemod_runme = hugemod$(SCRIPTPREFIX)
|
hugemod_runme = hugemod$(SCRIPTPREFIX)
|
||||||
|
|
||||||
|
|
|
||||||
15
Examples/test-suite/python/python_runtime_data_runme.py
Normal file
15
Examples/test-suite/python/python_runtime_data_runme.py
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
import python_runtime_data_builtin as builtin
|
||||||
|
import python_runtime_data_nobuiltin as nobuiltin
|
||||||
|
|
||||||
|
def swig_assert(a):
|
||||||
|
if not a:
|
||||||
|
raise RuntimeError("Failed")
|
||||||
|
|
||||||
|
swig_assert(builtin.is_python_builtin())
|
||||||
|
swig_assert(not nobuiltin.is_python_builtin())
|
||||||
|
|
||||||
|
for i in range(1, 5):
|
||||||
|
v1 = builtin.vectord([1.] * i)
|
||||||
|
swig_assert(len(v1) == i)
|
||||||
|
v2 = nobuiltin.vectord([1.] * i)
|
||||||
|
swig_assert(len(v2) == i)
|
||||||
2
Examples/test-suite/python_runtime_data.list
Normal file
2
Examples/test-suite/python_runtime_data.list
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
python_runtime_data_builtin
|
||||||
|
python_runtime_data_nobuiltin
|
||||||
15
Examples/test-suite/python_runtime_data_builtin.i
Normal file
15
Examples/test-suite/python_runtime_data_builtin.i
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
// Test swig_runtime_data with and without -builtin
|
||||||
|
|
||||||
|
%module python_runtime_data_builtin
|
||||||
|
|
||||||
|
%inline %{
|
||||||
|
#ifdef SWIGPYTHON_BUILTIN
|
||||||
|
bool is_python_builtin() { return true; }
|
||||||
|
#else
|
||||||
|
bool is_python_builtin() { return false; }
|
||||||
|
#endif
|
||||||
|
%}
|
||||||
|
|
||||||
|
%include std_vector.i
|
||||||
|
|
||||||
|
%template(vectord) std::vector<double>;
|
||||||
3
Examples/test-suite/python_runtime_data_nobuiltin.i
Normal file
3
Examples/test-suite/python_runtime_data_nobuiltin.i
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
%module python_runtime_data_nobuiltin
|
||||||
|
|
||||||
|
%include "python_runtime_data_builtin.i"
|
||||||
|
|
@ -80,7 +80,12 @@ SWIG_Python_str_FromChar(const char *c)
|
||||||
|
|
||||||
/* SWIGPY_USE_CAPSULE is no longer used within SWIG itself, but some user interface files check for it. */
|
/* SWIGPY_USE_CAPSULE is no longer used within SWIG itself, but some user interface files check for it. */
|
||||||
# define SWIGPY_USE_CAPSULE
|
# define SWIGPY_USE_CAPSULE
|
||||||
# define SWIGPY_CAPSULE_NAME ("swig_runtime_data" SWIG_RUNTIME_VERSION ".type_pointer_capsule" SWIG_TYPE_TABLE_NAME)
|
#ifdef SWIGPYTHON_BUILTIN
|
||||||
|
# define SWIGPY_CAPSULE_ATTR_NAME "type_pointer_capsule_builtin" SWIG_TYPE_TABLE_NAME
|
||||||
|
#else
|
||||||
|
# define SWIGPY_CAPSULE_ATTR_NAME "type_pointer_capsule" SWIG_TYPE_TABLE_NAME
|
||||||
|
#endif
|
||||||
|
# define SWIGPY_CAPSULE_NAME ("swig_runtime_data" SWIG_RUNTIME_VERSION "." SWIGPY_CAPSULE_ATTR_NAME)
|
||||||
|
|
||||||
#if PY_VERSION_HEX < 0x03020000
|
#if PY_VERSION_HEX < 0x03020000
|
||||||
#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
|
#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
|
||||||
|
|
|
||||||
|
|
@ -1686,7 +1686,7 @@ SWIG_Python_SetModule(swig_module_info *swig_module) {
|
||||||
#endif
|
#endif
|
||||||
PyObject *pointer = PyCapsule_New((void *) swig_module, SWIGPY_CAPSULE_NAME, SWIG_Python_DestroyModule);
|
PyObject *pointer = PyCapsule_New((void *) swig_module, SWIGPY_CAPSULE_NAME, SWIG_Python_DestroyModule);
|
||||||
if (pointer && module) {
|
if (pointer && module) {
|
||||||
if (PyModule_AddObject(module, "type_pointer_capsule" SWIG_TYPE_TABLE_NAME, pointer) == 0) {
|
if (PyModule_AddObject(module, SWIGPY_CAPSULE_ATTR_NAME, pointer) == 0) {
|
||||||
Swig_Capsule_global = pointer;
|
Swig_Capsule_global = pointer;
|
||||||
} else {
|
} else {
|
||||||
Py_DECREF(pointer);
|
Py_DECREF(pointer);
|
||||||
|
|
|
||||||
|
|
@ -4229,6 +4229,9 @@ public:
|
||||||
printSlot(f, getSlot(n, "feature:python:am_await"), "am_await", "unaryfunc");
|
printSlot(f, getSlot(n, "feature:python:am_await"), "am_await", "unaryfunc");
|
||||||
printSlot(f, getSlot(n, "feature:python:am_aiter"), "am_aiter", "unaryfunc");
|
printSlot(f, getSlot(n, "feature:python:am_aiter"), "am_aiter", "unaryfunc");
|
||||||
printSlot(f, getSlot(n, "feature:python:am_anext"), "am_anext", "unaryfunc");
|
printSlot(f, getSlot(n, "feature:python:am_anext"), "am_anext", "unaryfunc");
|
||||||
|
Printv(f, "# if PY_VERSION_HEX >= 0x030a0000\n", NIL);
|
||||||
|
printSlot(f, getSlot(n, "feature:python:am_send"), "am_send", "sendfunc");
|
||||||
|
Printv(f, "# endif\n", NIL);
|
||||||
Printf(f, " },\n");
|
Printf(f, " },\n");
|
||||||
Printv(f, "#endif\n", NIL);
|
Printv(f, "#endif\n", NIL);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue