FindPython: ensure Stable ABI is correctly handled

Fixes: #24610
This commit is contained in:
Marc Chevrier 2023-03-18 16:36:06 +01:00 committed by Brad King
parent 5e5a21aadd
commit 4c902d675b
3 changed files with 8 additions and 4 deletions

View File

@ -542,7 +542,7 @@ If the library type is not specified, ``MODULE`` is assumed.
was introduced. Specifying only major version ``3`` is equivalent to ``3.2``.
When option ``WITH_SOABI`` is also specified, the module suffix will include
the ``Python3_SOSABI`` value, if any.
the ``Python_SOSABI`` value, if any.
#]=======================================================================]

View File

@ -579,7 +579,7 @@ function (_PYTHON_GET_CONFIG_VAR _PYTHON_PGCV_VALUE NAME)
endif()
endif()
elseif (NAME STREQUAL "SOSABI")
execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys\nimport re\nimport importlib\nsys.stdout.write(next(filter(lambda x: re.search('^\\.abi', x), importlib.machinery.EXTENSION_SUFFIXES)))"
execute_process (COMMAND ${_${_PYTHON_PREFIX}_INTERPRETER_LAUNCHER} "${_${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys\nimport re\nimport importlib.machinery\nsys.stdout.write(next(filter(lambda x: re.search('^\\.abi', x), importlib.machinery.EXTENSION_SUFFIXES)))"
RESULT_VARIABLE _result
OUTPUT_VARIABLE _values
ERROR_QUIET

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.1)
cmake_minimum_required(VERSION 3.7)
project(TestPython3SABIModule LANGUAGES C)
@ -35,12 +35,16 @@ if(NOT TARGET Python3::SABIModule)
message(SEND_ERROR "Python3::SABIModule not found")
endif()
if (Python3_VERSION VERSION_GREATER_EQUAL "3.2" AND NOT Python3_SOSABI)
message(FATAL_ERROR "Python3_SOSABI unexpectedly not defined")
endif()
Python3_add_library (spam3 MODULE USE_SABI 3 WITH_SOABI ../spam.c)
target_compile_definitions (spam3 PRIVATE PYTHON3)
if (Python3_SOSABI)
get_property (suffix TARGET spam3 PROPERTY SUFFIX)
if (NOT suffix MATCHES "^.${Python3_SOSABI}")
if (NOT suffix MATCHES "^\\.${Python3_SOSABI}")
message(FATAL_ERROR "Module suffix do not include Python3_SOSABI")
endif()
endif()