From bdec5737946309de22563424b440dd58c3b927cf Mon Sep 17 00:00:00 2001 From: Stefano Rivera Date: Tue, 1 Mar 2022 10:47:10 -0800 Subject: [PATCH] Use sysconfig in Python >= 3.10 (#3764) * Use sysconfig in Python >= 3.10 Rely on sysconfig for installation paths for Python >= 3.10. distutils has been deprecated and will be removed. Fixes: #3677 * Explicitly select the posix_prefix scheme for platinclude on Debian Debian's default scheme is posix_local, for installing locally-built packages to /usr/local/. We want to find the Python headers in /usr/, so search posix_prefix. --- tools/FindPythonLibsNew.cmake | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/tools/FindPythonLibsNew.cmake b/tools/FindPythonLibsNew.cmake index 3605aebcf..b5f0e9396 100644 --- a/tools/FindPythonLibsNew.cmake +++ b/tools/FindPythonLibsNew.cmake @@ -112,11 +112,24 @@ endif() # VERSION. VERSION will typically be like "2.7" on unix, and "27" on windows. execute_process( COMMAND - "${PYTHON_EXECUTABLE}" "-c" "from distutils import sysconfig as s;import sys;import struct; + "${PYTHON_EXECUTABLE}" "-c" " +import sys;import struct; +import sysconfig as s +USE_SYSCONFIG = sys.version_info >= (3, 10) +if not USE_SYSCONFIG: + from distutils import sysconfig as ds print('.'.join(str(v) for v in sys.version_info)); print(sys.prefix); -print(s.get_python_inc(plat_specific=True)); -print(s.get_python_lib(plat_specific=True)); +if USE_SYSCONFIG: + scheme = s.get_default_scheme() + if scheme == 'posix_local': + # Debian's default scheme installs to /usr/local/ but we want to find headers in /usr/ + scheme = 'posix_prefix' + print(s.get_path('platinclude', scheme)) + print(s.get_path('platlib')) +else: + print(ds.get_python_inc(plat_specific=True)); + print(ds.get_python_lib(plat_specific=True)); print(s.get_config_var('EXT_SUFFIX') or s.get_config_var('SO')); print(hasattr(sys, 'gettotalrefcount')+0); print(struct.calcsize('@P'));