Browse Source

FindPython: ensure Stable ABI is correctly handled

Fixes: #24610
Marc Chevrier 2 years ago
parent
commit
4c902d675b

+ 1 - 1
Modules/FindPython.cmake

@@ -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.
 #]=======================================================================]
 
 

+ 1 - 1
Modules/FindPython/Support.cmake

@@ -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

+ 6 - 2
Tests/FindPython/Python3SABIModule/CMakeLists.txt

@@ -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()