Commit Graph

269 Commits

Author SHA1 Message Date
William S Fulton edbbe014f9 [Python] Accept str in the varargs example typemaps
The varargs and libffi typemap examples in the manual now convert a Python str
with PyUnicode_AsUTF8 instead of requiring a bytes object, so bring the matching
example interface files into line.

The libffi runme no longer needs byte string literals for the printf format
string, the printf arguments or the execlp arguments.

Assisted-by: Claude Code (Opus 5)
2026-08-10 22:42:57 +01:00
William S Fulton 2598574915 Complete the Python 2 removal and fix issues found reviewing it
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)
2026-07-06 23:50:31 +01:00
Julien Schueller a1c738f02f Python: Drop python2 build 2026-07-06 23:50:30 +01:00
Julien Schueller cb6e7c542a Python: Drop sys.version_info<3 examples code 2026-07-06 23:50:30 +01:00
Julien Schueller b89050101d Python: Avoid compatibility macros 2026-07-06 23:50:30 +01:00
Julien Schueller f505f2566f Python: Drop PY_VERSION_HEX<3.5 code
Closes #3201
2026-07-06 23:50:30 +01:00
Julien Schueller 84ff343b89
Fix -Wextra-semi warnings (#3372) 2026-03-18 18:53:05 +00:00
Jonatan Wallmander 51430f7dd9
Python: Fix warnings about implicit type conversions (#3287)
* Python: Fix warnings about implicit type conversions

When compiling with -Wconversion -Wsign-conversion on
gcc, these places resulted in warnings.

Add explicit type casts to be clear to the compiler.

* new_copy_array casts size to size_t

This alleviates warnings when -Wconversion -Wsign-conversion
are enabled.

* Fix various conversions to correct integer signedness

len can be signed as is the case with python's size_t.
This casts it to size_t to avoid compilation warnings.

* Add -Wconversion and -Wsign-conversion compilation flags for tests
2025-12-05 07:30:05 +00:00
William S Fulton 1db0c663dc Remove out of date and non-functional python/performance example
Closes #3242
2025-10-22 08:35:18 +01:00
William S Fulton 61f0bbe97d Python external_runtime example fixup
- Modify example to actually use the external runtime in example.cxx.
- Correct formatting of files.
- Add exception handling.
- Rename two main classes in example for better clarity.

This commit fixes the previous commit so that the example now correctly
tests the commmit prior to it.

Note that -builtin is not run as it does not work (seg faults - needs
investigation).

Issue #3067
2025-04-10 08:13:07 +01:00
Julien Schueller 0954292130 Add external runtime Python example using typemap
See issue #3067
2025-04-10 08:13:07 +01:00
William S Fulton 953e280f5e Update Python examples to Visual Studio 2019 project files 2024-10-19 15:45:21 +01:00
William S Fulton 4516ddb8c3 Change Python example to use SWIG_AppendOutput 2024-10-15 08:59:51 +01:00
Olly Betts 250be3883d Replace cd X && $(MAKE) with $(MAKE) -C X
We require GNU make anyway, and using -C reduces the verbosity of the
code a little and allows us to avoid an extra subshell in some cases.
2024-09-21 11:24:02 +12:00
Olly Betts f66a81fcb4 Fix extension of filename in comments in examples 2024-09-16 16:51:44 +12:00
matoro 16129d9804 Update examples to recommend compiling with -fPIC instead of -fpic
To reflect previous change to swig defaults.
2024-07-22 17:46:29 -04:00
William S Fulton 462fb665af Update python example for removed t_output_helper 2024-06-15 23:35:31 +01:00
Olly Betts e16ba0daff Revert "Add newly added libffi example to testing"
This reverts commit 8888798f95.
2024-03-28 10:23:18 +13:00
Olly Betts 33734ffe38 Fixes for _WIN32 2024-03-28 10:16:10 +13:00
Olly Betts d6ecf084eb Revert "Remove libffi example, it isn't portable"
This reverts commit 564979a4b5.
2024-03-28 10:15:32 +13:00
William S Fulton 79849cc70c Tidy up EXTRA_ build flags
Use new EXTRA_CPPFLAGS in Github CI
Harmonise use of:
  EXTRA_CPPFLAGS
  EXTRA_CFLAGS
  EXTRA_CXXFLAGS
  EXTRA_LDFLAGS
2024-03-24 18:12:21 +00:00
William S Fulton 5b710e3298 Py_DecRef Py_IncRef for examples and html docs 2024-03-24 18:12:21 +00:00
William S Fulton 564979a4b5 Remove libffi example, it isn't portable 2024-02-23 08:40:08 +00:00
William S Fulton 8888798f95 Add newly added libffi example to testing 2024-02-23 08:02:28 +00:00
Olly Betts 66e054a0a6 [python] Add runme.py for libffi example
Fixes #2805
2024-02-23 17:14:49 +13:00
William S Fulton 06f791c3ed Revert mistaken commit 2023-12-29 14:40:21 +00:00
William S Fulton af494ef437 Document -std= options
Closes #2591
2023-12-27 20:16:21 +00:00
William S Fulton f8c2dd67cd docstring example for stable abi
Remove -O (-fastproxy) from the docstrings example as -fastproxy
does not currently work with the stable abi
2023-12-19 21:17:41 +00:00
Olly Betts 3ce0174a0c Fix random doubled spaces in code 2023-11-17 09:49:36 +13:00
Olly Betts c916d81e8d Remove pointer.i from the SWIG library
It's been a dummy file which has done nothing except %echo a deprecation
message since 2002.  The replacement is cpointer.i.
2023-06-15 15:50:51 +12:00
Olly Betts ca58db87b6 Update lingering uses of %addmethods
This was renamed to %extend 21 years ago!

The remaining uses are either in docs for the reference example or in
xml examples (which can't actually be run because they the SWIG command
line syntax they try to use is wrong).
2023-05-29 11:40:53 +12:00
Olly Betts 631b41ae7b Use https for swig.org links 2022-10-06 13:16:39 +13:00
Olly Betts 3bf1da4298 Fix a few documentation typos 2022-09-29 18:17:32 +13:00
William S Fulton 842ae379aa GHA: Fix for pycodestyle check in examples
E275 missing whitespace after keyword
For pycodestyle 2.9.0 released on 30 July 2022.
2022-07-31 09:02:00 +01:00
Olly Betts 0b9d4eff09 Update everything for dropping Python 3.2 support 2022-07-19 13:20:07 +12:00
William S Fulton fd846be18b Remove some usage of strdup
To fix visual c++ warning:
  warning C4996: 'strdup': The POSIX name for this item is deprecated.
2022-05-07 07:09:44 +01:00
luz paz c8bec18554 Fix various typos
Found via `codespell -q 3 -L ans,anumber,ba,bae,chello,clos,cmo,coo,dout,fo,funktion,goin,inout,methid,nd,nin,nnumber,object,objekt,od,ois,packag,parm,parms,pres,statics,strack,struc,tempdate,te,thru,uint,upto,writen`
2022-04-11 07:59:36 +12:00
Olly Betts c7af8eabb3 Default to running tests with Python 3
Specify PY2=1 to use Python 2.

See #1779
Closes #2235
2022-03-17 18:55:10 +13:00
Olly Betts 936e9264e8 Adjust Python variables example for Python 2
Explicitly call str() as previously Python 2 seemed to end up calling
repr().
2022-03-15 18:11:34 +13:00
Olly Betts 250afd6dc3 List variables in variables example
Seems useful in itself, but also serves to check if
https://sourceforge.net/p/swig/bugs/976/ is still reproducible.
2022-03-15 11:06:20 +13:00
William S Fulton cf8788c411 Update Python tests to not use flatstaticmethod access
Use Python class staticmethod syntax to access C++ static member functions,
such as Klass.memberfunction, instead of Klass_memberfunction.
Examples and test-suite changes in preparation for issue #2137.
2022-01-14 22:48:11 +00:00
William S Fulton d15a3cb1d4 Fix testcase -Wstringop-truncation warning in gcc11 2021-11-12 19:00:20 +00:00
William S Fulton ec2b47ef2a Remove need for Python 2to3
All Python examples and tests have been written to be both Python 2 and Python 3
compatible, removing the need for 2to3 to run the examples or test-suite.

The 2to3 executable is not always available and even when available does not
always work, e.g. with pyenv. An alternative would be to use the lib2to3 Python
module instead, but this isn't available in some older versions of Python 3.

I had this problem on Ubuntu Bionic on Travis:

  checking Examples/python/callback
  pyenv: 2to3-3.8: command not found
  The `2to3-3.8' command exists in these Python versions:
    3.8
    3.8.1

Reference issues:
  https://github.com/pypa/virtualenv/issues/1399
  https://travis-ci.community/t/2to3-command-not-found-in-venv-in-bionic/4495
2020-08-15 18:04:58 +01:00
William S Fulton 89bee6a7fa Modify examples to be both Python 2 and 3 compatible
For removing dependency on 2to3
2020-08-15 16:46:01 +01:00
William S Fulton f383095851 Alphabetise testing of examples 2020-08-13 20:07:10 +01:00
Dmitry D. Chernov f88ba7c182 Examples: Unify string quoting in the Python sources 2019-07-14 14:12:23 +10:00
William S Fulton f3357f1f57 Remove use of std::bind2nd which is removed in C++17 2019-06-27 07:40:49 +01:00
William S Fulton 03323f5c8b The Python module import logic has changed to stop obfuscating real ImportError problems.
Only one import of the low-level C/C++ module from the pure Python module is
attempted now. Previously a second import of the low-level C/C++ module was attempted
after an ImportError occurred and was done to support 'split modules'. A 'split module' is
a configuration where the pure Python module is a module within a Python package and the
low-level C/C++ module is a global Python module. Now a 'split module' configuration is
no longer supported by default. This configuration can be supported with a simple
customization, such as:

  %module(package="mypackage", moduleimport="import $module") foo

or if using -builtin:

  %module(package="mypackage", moduleimport="from $module import *") foo

instead of

  %module(package="mypackage") foo

See the updated Python chapter titled "Location of modules" in the documentation.

Closes #848 #1343
2018-12-16 16:41:39 +00:00
William S Fulton 51dadaeacd Add example to test the Python module being renamed to __init__.py
This examples tests the SWIG generated module being placed into a directory and
then renamed __init__.py to convert the module into a package. This ability
stopped working in swig-3.0.9. However, only Python 2.7 or 3.3 and later work. If
Python 3.2 support is needed, use moduleimport in %module to customise the import
code.

Issue #1282
2018-12-08 22:31:26 +00:00
William S Fulton 84dcb9bfff Revert "Temporarily remove Python import_packages testcase"
This reverts commit 8d6f3010ea.
2018-12-06 06:55:24 +00:00