mirror of https://github.com/swig/swig.git
Follow-up work on top of the initial Python 2.x removal: it finishes the removal and fixes several issues found while reviewing the change. Correctness fixes: - pyrun.swg: SwigPyPacked_str passed the type name straight to PyUnicode_FromFormat as its format string, so a type name containing a '%' would be misinterpreted. Use PyUnicode_FromString instead. - Doc/Manual/Varargs.html: the (...) varargs freearg typemap example lost its free() loop when the surrounding Python 2 guard was removed, leaking the memory the in typemap allocates. Restore the loop, now unconditional. - Doc/Manual/Typemaps.html: the PyInt_Check to PyLong_Check substitution left two typecheck excerpts reading PyLong_Check || PyLong_Check; collapse each back to a single check. Code generator (Source/Modules/python.cxx): - Emit the native class X(..., metaclass=_SwigNonDynamicMeta) form for nondynamic classes in all three base-list branches (object, Exception and explicit bases), and drop the Python 2 _swig_add_metaclass helper. - Emit a plain import builtins as __builtin__ instead of the Python 2 try/except import fallback. - Update a stale Python 2.x comment. Remove the deprecated embed.i library (it only ever worked with Python 2): - Delete Lib/python/embed.i and the Lib/python/Makefile.in reference to it. - Remove the python_static and python_static_cpp targets from Examples/Makefile.in and the now-orphaned static: targets that used them from the Examples/python example Makefiles. - Remove the embed.i section from the manual. Python test suite (Examples/test-suite/python): - profiletest_runme.py: convert the Python 2 print statements to print(). - doxygen_constructors_runme.py: drop the dead sys.version_info < (3, 0) branch, keeping the Python 3 super().__init__() form. - li_cdata_bytes_runme.py and li_cdata_bytes_cpp_runme.py: drop the dead exit-on-Python-2 version guard. - file_test_runme.py and python_abstractbase_runme.py: drop the now-unused import sys left behind by guard removal. Documentation (Doc/Manual/Python.html): - Drop the embed.i and SWIG_PYTHON_STRICT_UNICODE_WCHAR sections; the latter macro was Python 2 only and no longer exists, wide strings are unicode-only by default. - De-duplicate the %pythonabc example and drop a stale collections.abc compatibility note. - Update the version support statement and other stale Python 2 mentions. Other cleanups: - Tools/mkdist.py: raise the minimum Python version check to Python 3. - Reword stale Python 2 comments in pyrun.swg, pyiterators.swg and pycontainer.swg, and fix a PyString_FromFormat left in a pyclasses.swg doc comment. - CHANGES.current: record that Python 2 support has been dropped. Assisted-by: Claude Code (Opus 4.8) |
||
|---|---|---|
| .. | ||
| pkg1 | ||
| pkg2 | ||
| Makefile | ||
| README | ||
| runme.py | ||
README
This example tests the %import directive and working with multiple modules. There are two modules having same name but belonging to different packages. This case is not correctly handled by swig 2. The issue was reported as Source Forge bug #1297 and later as GitHub issue #7. Use 'python runme.py' to run a test. Overview: --------- The example defines 2 different extension modules--each wrapping a separate C++ class. pkg1/foo.i - Pkg1_Foo class. pkg2/foo.i - Pkg2_Foo class (derived from Pkg1_Foo). The pkg2/foo.i module uses %import to refer to pkg1/foo.i. If everything works well, the module pkg2.foo shall load properly. Unix: ----- - Run make - Run the test as described above.