Refactor python no-gil detection

Also additional python interpreter flags cleanup, use PYFLAGS consistently and remove PYTHONFLAGS.
This commit is contained in:
William S Fulton 2025-04-17 08:38:34 +01:00
parent a75b7b8b9c
commit 1b09f4f111
6 changed files with 18 additions and 20 deletions

View File

@ -130,7 +130,7 @@ jobs:
VER: '3.13'
CSTD: gnu99
- SWIGLANG: python
VER: '3.13t'
VER: '3.13t' # no-gil testing
CSTD: gnu99
- SWIGLANG: python
PY2: 2

2
.gitignore vendored
View File

@ -224,5 +224,3 @@ Examples/r/*/.RData
# Scilab
Examples/test-suite/scilab/*/
loader.sce
/bin/

View File

@ -1274,17 +1274,15 @@ php_clean:
##### PYTHON ######
##################################################################
PYTHON_FLAGS =
# Make sure these locate your Python installation
ifneq (,$(PY2))
PYTHON_INCLUDE= $(DEFS) @PYINCLUDE@
PYTHON_LIB = @PYLIB@
PYTHON = @PYTHON@ $(PYTHON_FLAGS)
PYTHON = @PYTHON@
else
PYTHON_INCLUDE= $(DEFS) @PY3INCLUDE@
PYTHON_LIB = @PY3LIB@
PYTHON = @PYTHON3@ $(PYTHON_FLAGS)
PYTHON = @PYTHON3@
endif
# Extra Python specific linking options
@ -1302,9 +1300,10 @@ ifneq (,$(PY_ABI_VER))
PYTHON_SO = .abi3@PYTHON_SO@
EXTRA_CPPFLAGS := -DPy_LIMITED_API=$(shell printf "0x%02X%02X0000" $(subst ., ,$(PY_ABI_VER)))
else
PYTHON_SO = @PYTHON_SO@
PYTHON_SO = @PYTHON_SO@
endif
PYNOGIL = @PYNOGIL@
PYCODESTYLE = @PYCODESTYLE@
PYCODESTYLE_FLAGS = --ignore=E252,E30,E402,E501,E731,W291,W391
PYABI3AUDIT = @PYABI3AUDIT@
@ -1368,7 +1367,7 @@ python_run: $(PYSCRIPT)
ifneq (,$(PYCODESTYLE))
$(COMPILETOOL) $(PYCODESTYLE) $(PYCODESTYLE_FLAGS) $(PYSCRIPT)
endif
env PYTHONPATH=$$PWD $(RUNTOOL) $(PYTHON) $(PYFLAGS) $(PYSCRIPT) $(RUNPIPE)
env PYTHONPATH=$$PWD $(RUNTOOL) $(PYTHON) $(PYNOGIL) $(PYFLAGS) $(PYSCRIPT) $(RUNPIPE)
ifneq (,$(SRCDIR))
$(RUNME).py: $(SRCDIR)$(RUNME).py

View File

@ -3,13 +3,13 @@
#######################################################################
ifneq (,$(PY2))
PYBIN = @PYTHON@
PYTHON = @PYTHON@
else
PYBIN = @PYTHON3@
PYTHON = @PYTHON3@
endif
LANGUAGE = python
PYTHON = $(PYBIN)
PYNOGIL = @PYNOGIL@
SCRIPTSUFFIX = _runme.py
PYCODESTYLE = @PYCODESTYLE@
PYCODESTYLE_FLAGS = --ignore=E252,E30,E402,E501,E731,E741,W291,W391
@ -168,7 +168,7 @@ endif
# a file is found which has _runme.py appended after the testcase name.
run_testcase = \
if [ -f $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \
env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH PYTHONPATH=.:$(srcdir):$$PYTHONPATH $(RUNTOOL) $(PYTHON) $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \
env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH PYTHONPATH=.:$(srcdir):$$PYTHONPATH $(RUNTOOL) $(PYTHON) $(PYNOGIL) $(PYFLAGS) $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \
fi
# Clean: remove the generated .py file
@ -189,5 +189,5 @@ 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)"
sh -c "time $(PYTHON) $(PYNOGIL) $(PYFLAGS) $(hugemod_runme)"
sh -c "time $(PYTHON) $(PYNOGIL) $(PYFLAGS) $(hugemod_runme)"

View File

@ -4,7 +4,7 @@ from langobj import *
x = 256*256+1
# avoid immortal object in no-gil scenario
# avoid an immortal object for the ref count check to always work such as when using no-gil
x += 1
rx = sys.getrefcount(x)

View File

@ -2047,11 +2047,11 @@ else
PYVER=0
fi
AC_MSG_CHECKING([for $PYTHON3 GIL is enabled])
PYGIL=`($PYTHON3 -c "import sysconfig; print(not bool(sysconfig.get_config_var('Py_GIL_DISABLED')))") 2>/dev/null`
AC_MSG_CHECKING([if $PYTHON3 GIL can be disabled])
PYGIL=`($PYTHON3 -c "import sysconfig; print('yes' if bool(sysconfig.get_config_var('Py_GIL_DISABLED')) else 'no')") 2>/dev/null`
AC_MSG_RESULT($PYGIL)
if test x"$PYGIL" = x"False"; then
PYTHON3="$PYTHON3 -X gil=0"
if test x"$PYGIL" = x"yes"; then
PYNOGIL="-X gil=0"
fi
fi
@ -2181,6 +2181,7 @@ else
*)PYTHON3DYNAMICLINKING="";;
esac
AC_SUBST(PYNOGIL)
AC_SUBST(PY3INCLUDE)
AC_SUBST(PY3LIB)
AC_SUBST(PY3LINK)