aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz@archlinux.org>2022-11-22 22:56:10 -0500
committerEli Schwartz <eschwartz93@gmail.com>2023-10-02 18:15:16 -0400
commit2d6c10908b3771216e7ce086af1ee4dc77e698c2 (patch)
tree3caf7613e4719a6b30a1888f0df9b50e655b2adc
parent3d3a10ef022284c8377bd9f8e1b1adec73c50d95 (diff)
downloadmeson-2d6c10908b3771216e7ce086af1ee4dc77e698c2.zip
meson-2d6c10908b3771216e7ce086af1ee4dc77e698c2.tar.gz
meson-2d6c10908b3771216e7ce086af1ee4dc77e698c2.tar.bz2
python module: stop using distutils "link to libpython" probe on recent python
On python >=3.8, this information is expected to be encoded in the sysconfig vars. In distutils, it is always necessary to link to libpython on Windows; for posix platforms, it depends on the value of LIBPYTHON (which is the library to link to, possibly the empty string) as generated by configure.ac and embedded into python.pc and python-config.sh, and then coded a second time in the distutils python sources. There are a couple of caveats which have ramifications for Cygwin and Android: - python.pc and python-config.sh disagree with distutils when python is not built shared. In that case, the former act the same as a shared build, while the latter *never* links to libpython - python.pc disagrees with python-config.sh and distutils when python is built shared. The former never links to libpython, while the latter do The disagreement is resolved in favor of distutils' behavior in all cases, and python.pc is correct for our purposes on python 3.12; see: https://github.com/python/cpython/pull/100356 https://github.com/python/cpython/pull/100967 Although it was not backported to older releases, Cygwin at least has always patched in a fix for python.pc, which behavior is now declared canonical. We can reliably assume it is always correct. This is the other half of the fix for #7702
-rwxr-xr-xmesonbuild/scripts/python_info.py17
1 files changed, 13 insertions, 4 deletions
diff --git a/mesonbuild/scripts/python_info.py b/mesonbuild/scripts/python_info.py
index d14f21f..5b048ca 100755
--- a/mesonbuild/scripts/python_info.py
+++ b/mesonbuild/scripts/python_info.py
@@ -64,10 +64,19 @@ def get_install_paths():
paths, install_paths = get_install_paths()
def links_against_libpython():
- from distutils.core import Distribution, Extension
- cmd = Distribution().get_command_obj('build_ext')
- cmd.ensure_finalized()
- return bool(cmd.get_libraries(Extension('dummy', [])))
+ # on versions supporting python-embed.pc, this is the non-embed lib
+ #
+ # PyPy is not yet up to 3.12 and work is still pending to export the
+ # relevant information (it doesn't automatically provide arbitrary
+ # Makefile vars)
+ if sys.version_info >= (3, 8) and not is_pypy:
+ variables = sysconfig.get_config_vars()
+ return bool(variables.get('LIBPYTHON', 'yes'))
+ else:
+ from distutils.core import Distribution, Extension
+ cmd = Distribution().get_command_obj('build_ext')
+ cmd.ensure_finalized()
+ return bool(cmd.get_libraries(Extension('dummy', [])))
variables = sysconfig.get_config_vars()
variables.update({'base_prefix': getattr(sys, 'base_prefix', sys.prefix)})