mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 02:39:48 -06:00
FindPython: use 'sysconfig' as alternate to 'distutils.sysconfig'
To support any python installation, if package 'distutils.sysconfig' is not available, try to use package 'sysconfig'. Fixes: #20502
This commit is contained in:
@@ -321,7 +321,7 @@ function (_PYTHON_GET_CONFIG_VAR _PYTHON_PGCV_VALUE NAME)
|
||||
|
||||
if (_${_PYTHON_PREFIX}_EXECUTABLE AND NOT CMAKE_CROSSCOMPILING)
|
||||
if (NAME STREQUAL "PREFIX")
|
||||
execute_process (COMMAND "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys; from distutils import sysconfig; sys.stdout.write(';'.join([sysconfig.PREFIX,sysconfig.EXEC_PREFIX,sysconfig.BASE_EXEC_PREFIX]))"
|
||||
execute_process (COMMAND "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys\ntry:\n from distutils import sysconfig\n sys.stdout.write(';'.join([sysconfig.PREFIX,sysconfig.EXEC_PREFIX,sysconfig.BASE_EXEC_PREFIX]))\nexcept Exception:\n import sysconfig\n sys.stdout.write(';'.join([sysconfig.get_config_var('base') or '', sysconfig.get_config_var('installed_base') or '']))"
|
||||
RESULT_VARIABLE _result
|
||||
OUTPUT_VARIABLE _values
|
||||
ERROR_QUIET
|
||||
@@ -332,16 +332,23 @@ function (_PYTHON_GET_CONFIG_VAR _PYTHON_PGCV_VALUE NAME)
|
||||
list (REMOVE_DUPLICATES _values)
|
||||
endif()
|
||||
elseif (NAME STREQUAL "INCLUDES")
|
||||
execute_process (COMMAND "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys; from distutils import sysconfig; sys.stdout.write(';'.join([sysconfig.get_python_inc(plat_specific=True),sysconfig.get_python_inc(plat_specific=False)]))"
|
||||
if (WIN32)
|
||||
set (_scheme "nt")
|
||||
else()
|
||||
set (_scheme "posix_prefix")
|
||||
endif()
|
||||
execute_process (COMMAND "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys\ntry:\n from distutils import sysconfig\n sys.stdout.write(';'.join([sysconfig.get_python_inc(plat_specific=True),sysconfig.get_python_inc(plat_specific=False)]))\nexcept Exception:\n import sysconfig\n sys.stdout.write(';'.join([sysconfig.get_path('platinclude'),sysconfig.get_path('platinclude','${_scheme}'),sysconfig.get_path('include'),sysconfig.get_path('include','${_scheme}')]))"
|
||||
RESULT_VARIABLE _result
|
||||
OUTPUT_VARIABLE _values
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if (_result)
|
||||
unset (_values)
|
||||
else()
|
||||
list (REMOVE_DUPLICATES _values)
|
||||
endif()
|
||||
elseif (NAME STREQUAL "SOABI")
|
||||
execute_process (COMMAND "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys; from distutils import sysconfig;sys.stdout.write(';'.join([sysconfig.get_config_var('SOABI') or '',sysconfig.get_config_var('EXT_SUFFIX') or '']))"
|
||||
execute_process (COMMAND "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys\ntry:\n from distutils import sysconfig\n sys.stdout.write(';'.join([sysconfig.get_config_var('SOABI') or '',sysconfig.get_config_var('EXT_SUFFIX') or '']))\nexcept Exception:\n import sysconfig;sys.stdout.write(';'.join([sysconfig.get_config_var('SOABI') or '',sysconfig.get_config_var('EXT_SUFFIX') or '']))"
|
||||
RESULT_VARIABLE _result
|
||||
OUTPUT_VARIABLE _soabi
|
||||
ERROR_QUIET
|
||||
@@ -349,14 +356,15 @@ function (_PYTHON_GET_CONFIG_VAR _PYTHON_PGCV_VALUE NAME)
|
||||
if (_result)
|
||||
unset (_values)
|
||||
else()
|
||||
list (GET _soabi 0 _values)
|
||||
if (NOT _values)
|
||||
# try to compute SOABI from EXT_SUFFIX
|
||||
list (GET _soabi 1 _values)
|
||||
if (_values)
|
||||
# clean-up: remove prefix character and suffix
|
||||
string (REGEX REPLACE "^[.-](.+)(${CMAKE_SHARED_LIBRARY_SUFFIX}|\\.(so|pyd))$" "\\1" _values "${_values}")
|
||||
foreach (_item IN LISTS _soabi)
|
||||
if (_item)
|
||||
set (_values "${_item}")
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
if (_values)
|
||||
# clean-up: remove prefix character and suffix
|
||||
string (REGEX REPLACE "^[.-](.+)(${CMAKE_SHARED_LIBRARY_SUFFIX}|\\.(so|pyd))$" "\\1" _values "${_values}")
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
@@ -364,7 +372,7 @@ function (_PYTHON_GET_CONFIG_VAR _PYTHON_PGCV_VALUE NAME)
|
||||
if (NAME STREQUAL "CONFIGDIR")
|
||||
set (config_flag "LIBPL")
|
||||
endif()
|
||||
execute_process (COMMAND "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_config_var('${config_flag}'))"
|
||||
execute_process (COMMAND "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys\ntry:\n from distutils import sysconfig\n sys.stdout.write(sysconfig.get_config_var('${config_flag}'))\nexcept Exception:\n import sysconfig\n sys.stdout.write(sysconfig.get_config_var('${config_flag}'))"
|
||||
RESULT_VARIABLE _result
|
||||
OUTPUT_VARIABLE _values
|
||||
ERROR_QUIET
|
||||
@@ -392,6 +400,10 @@ function (_PYTHON_GET_CONFIG_VAR _PYTHON_PGCV_VALUE NAME)
|
||||
list (REMOVE_DUPLICATES _values)
|
||||
endif()
|
||||
|
||||
if (WIN32 AND NAME MATCHES "^(PREFIX|CONFIGDIR|INCLUDES)$")
|
||||
file (TO_CMAKE_PATH "${_values}" _values)
|
||||
endif()
|
||||
|
||||
set (${_PYTHON_PGCV_VALUE} "${_values}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
@@ -1381,7 +1393,7 @@ if ("Interpreter" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
|
||||
endif()
|
||||
|
||||
# retrieve various package installation directories
|
||||
execute_process (COMMAND "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys; from distutils import sysconfig;sys.stdout.write(';'.join([sysconfig.get_python_lib(plat_specific=False,standard_lib=True),sysconfig.get_python_lib(plat_specific=True,standard_lib=True),sysconfig.get_python_lib(plat_specific=False,standard_lib=False),sysconfig.get_python_lib(plat_specific=True,standard_lib=False)]))"
|
||||
execute_process (COMMAND "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys\ntry:\n from distutils import sysconfig\n sys.stdout.write(';'.join([sysconfig.get_python_lib(plat_specific=False,standard_lib=True),sysconfig.get_python_lib(plat_specific=True,standard_lib=True),sysconfig.get_python_lib(plat_specific=False,standard_lib=False),sysconfig.get_python_lib(plat_specific=True,standard_lib=False)]))\nexcept Exception:\n import sysconfig\n sys.stdout.write(';'.join([sysconfig.get_path('stdlib'),sysconfig.get_path('platstdlib'),sysconfig.get_path('purelib'),sysconfig.get_path('platlib')]))"
|
||||
RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT
|
||||
OUTPUT_VARIABLE _${_PYTHON_PREFIX}_LIBPATHS
|
||||
ERROR_QUIET)
|
||||
|
||||
Reference in New Issue
Block a user