diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ac63a863e..69871b7d5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -111,10 +111,6 @@ jobs: VER: '8.1' - SWIGLANG: python PY2: 2 - - SWIGLANG: python - VER: '3.2' - os: ubuntu-18.04 # Python < 3.5 not available for 20.04. - continue-on-error: true # broken packages problem - SWIGLANG: python VER: '3.3' os: ubuntu-18.04 # Python < 3.5 not available for 20.04. diff --git a/CHANGES.current b/CHANGES.current index 645776f5c..977fea758 100644 --- a/CHANGES.current +++ b/CHANGES.current @@ -7,6 +7,9 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/ Version 4.1.0 (in progress) =========================== +2022-07-19: jschueller + [Python] #2314 Drop support for Python 3.2. + 2022-07-19: olly Remove remaining support code for classic macos, which has not been supported by Apple for over 20 years now. diff --git a/Doc/Manual/Python.html b/Doc/Manual/Python.html index ce6ed2877..0496299eb 100644 --- a/Doc/Manual/Python.html +++ b/Doc/Manual/Python.html @@ -156,9 +156,8 @@

This chapter describes SWIG's support of Python. SWIG is compatible -with all recent Python versions (Python 2.7 and Python >= 3.2). If you -still need to generate bindings which work with older versions of Python, -you'll have to use SWIG 3.0.x. +with all recent Python versions (Python 2.7 and Python >= 3.3). SWIG 4.0.x +supported Python 3.2. SWIG 3.0.x supported older Python 2.x and 3.x.

diff --git a/Examples/python/import_packages/module_is_init/runme.py b/Examples/python/import_packages/module_is_init/runme.py index c4806cdf8..42d48995e 100644 --- a/Examples/python/import_packages/module_is_init/runme.py +++ b/Examples/python/import_packages/module_is_init/runme.py @@ -5,14 +5,6 @@ import sys testname = os.path.basename(os.path.dirname(os.path.abspath(__file__))) print("Testing " + testname + " - module renamed as __init__.py") -if sys.version_info >= (3, 0, 0) and sys.version_info < (3, 3, 0): - print(" Not importing as Python version is >= 3.0 and < 3.3") - # Package detection does not work in these versions. - # Can be fixed by using this in the interface file: - # %module(moduleimport="from . import $module") foo # without -builtin - # %module(moduleimport="from .$module import *") foo # with -builtin - sys.exit(0) - import pkg1 print(" Finished importing pkg1") diff --git a/Lib/python/pyerrors.swg b/Lib/python/pyerrors.swg index 2628de8e6..10b694cde 100644 --- a/Lib/python/pyerrors.swg +++ b/Lib/python/pyerrors.swg @@ -64,7 +64,6 @@ SWIG_Python_AddErrorMsg(const char* mesg) PyErr_Format(type, "%s %s", tmp, mesg); else PyErr_Format(type, "%s", mesg); - SWIG_Python_str_DelForPy3(tmp); Py_DECREF(old_str); Py_DECREF(value); } else { diff --git a/Lib/python/pyhead.swg b/Lib/python/pyhead.swg index d3730a8fa..6f37160bb 100644 --- a/Lib/python/pyhead.swg +++ b/Lib/python/pyhead.swg @@ -30,38 +30,19 @@ #endif -/* Warning: This function will allocate a new string in Python 3, - * so please call SWIG_Python_str_DelForPy3(x) to free the space. - */ SWIGINTERN char* SWIG_Python_str_AsChar(PyObject *str) { #if PY_VERSION_HEX >= 0x03030000 return (char *)PyUnicode_AsUTF8(str); -#elif PY_VERSION_HEX >= 0x03000000 - char *newstr = 0; - str = PyUnicode_AsUTF8String(str); - if (str) { - char *cstr; - Py_ssize_t len; - if (PyBytes_AsStringAndSize(str, &cstr, &len) != -1) { - newstr = (char *) malloc(len+1); - if (newstr) - memcpy(newstr, cstr, len+1); - } - Py_XDECREF(str); - } - return newstr; #else return PyString_AsString(str); #endif } -#if PY_VERSION_HEX >= 0x03030000 || PY_VERSION_HEX < 0x03000000 -# define SWIG_Python_str_DelForPy3(x) -#else -# define SWIG_Python_str_DelForPy3(x) free( (void*) (x) ) -#endif +/* Was useful for Python 3.0.x-3.2.x - now provided only for compatibility + * with any uses in user interface files. */ +#define SWIG_Python_str_DelForPy3(x) SWIGINTERN PyObject* diff --git a/Lib/python/pyrun.swg b/Lib/python/pyrun.swg index 935885934..a74843bf1 100644 --- a/Lib/python/pyrun.swg +++ b/Lib/python/pyrun.swg @@ -11,8 +11,8 @@ # error "This version of SWIG only supports Python >= 2.7" #endif -#if PY_VERSION_HEX >= 0x03000000 && PY_VERSION_HEX < 0x03020000 -# error "This version of SWIG only supports Python 3 >= 3.2" +#if PY_VERSION_HEX >= 0x03000000 && PY_VERSION_HEX < 0x03030000 +# error "This version of SWIG only supports Python 3 >= 3.3" #endif /* Common SWIG API */ @@ -1758,7 +1758,6 @@ SWIG_Python_AddErrMesg(const char* mesg, int infront) } else { PyErr_Format(type, "%s %s", errmesg, mesg); } - SWIG_Python_str_DelForPy3(tmp); Py_DECREF(old_str); } return 1; @@ -1810,7 +1809,6 @@ SWIG_Python_TypeError(const char *type, PyObject *obj) if (cstr) { PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s(%s)' is received", type, otype, cstr); - SWIG_Python_str_DelForPy3(cstr); } else { PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s' is received", type, otype); diff --git a/RELEASENOTES b/RELEASENOTES index 2fad03096..33f7e4c45 100644 --- a/RELEASENOTES +++ b/RELEASENOTES @@ -11,6 +11,7 @@ SWIG-4.1.0 summary: - Add PHP 8 support. - PHP wrapping is now done entirely via PHP's C API - no more .php wrapper. - Perl 5.8.0 is now the oldest version SWIG supports. +- Python 3.3 is now the oldest Python 3 version SWIG supports. - Common cases of `<` and `>` comparisons in constant expressions are now supported. - GitHub Actions is now used instead of Travis CI for continuous integration.