ソースを参照

FindPython: ensure all ABI are searched by default

Fixes: #26279
Marc Chevrier 1 年間 前
コミット
f885b007b9
3 ファイル変更23 行追加37 行削除
  1. 2 1
      Modules/FindPython.cmake
  2. 19 35
      Modules/FindPython/Support.cmake
  3. 2 1
      Modules/FindPython3.cmake

+ 2 - 1
Modules/FindPython.cmake

@@ -332,7 +332,8 @@ Hints
 
   .. note::
 
-    If ``Python_FIND_ABI`` is not defined, any ABI will be searched.
+    If ``Python3_FIND_ABI`` is not defined, any ABI, excluding the
+    ``gil_disabled`` flag, will be searched.
 
   From this 4-tuple, various ABIs will be searched starting from the most
   specialized to the most general. Moreover, when ``ANY`` is specified for

+ 19 - 35
Modules/FindPython/Support.cmake

@@ -225,19 +225,14 @@ function (_PYTHON_GET_REGISTRIES _PYTHON_PGR_REGISTRY_PATHS)
 endfunction()
 
 
-function (_PYTHON_GET_ABIFLAGS _PGABIFLAGS)
-  if (NOT DEFINED _${_PYTHON_PREFIX}_FIND_ABI)
-    set (${_PGABIFLAGS} "<none>" PARENT_SCOPE)
-    return()
-  endif()
-
+function (_PYTHON_GET_ABIFLAGS _PGA_FIND_ABI _PGABIFLAGS)
   set (abiflags "<none>")
-  list (GET _${_PYTHON_PREFIX}_FIND_ABI 0 pydebug)
-  list (GET _${_PYTHON_PREFIX}_FIND_ABI 1 pymalloc)
-  list (GET _${_PYTHON_PREFIX}_FIND_ABI 2 unicode)
-  list (LENGTH _${_PYTHON_PREFIX}_FIND_ABI find_abi_length)
+  list (GET _PGA_FIND_ABI 0 pydebug)
+  list (GET _PGA_FIND_ABI 1 pymalloc)
+  list (GET _PGA_FIND_ABI 2 unicode)
+  list (LENGTH _PGA_FIND_ABI find_abi_length)
   if (find_abi_length GREATER 3)
-    list (GET _${_PYTHON_PREFIX}_FIND_ABI 3 gil)
+    list (GET _PGA_FIND_ABI 3 gil)
   else()
     set (gil "OFF")
   endif()
@@ -302,12 +297,8 @@ function (_PYTHON_GET_PATH_SUFFIXES _PYTHON_PGPS_PATH_SUFFIXES)
     set (_PGPS_IMPLEMENTATIONS ${_${_PYTHON_PREFIX}_FIND_IMPLEMENTATIONS})
   endif()
 
-  if (DEFINED _${_PYTHON_PREFIX}_ABIFLAGS)
-    set (abi "${_${_PYTHON_PREFIX}_ABIFLAGS}")
-    list (TRANSFORM abi REPLACE "^<none>$" "")
-  else()
-    set (abi "mu" "m" "u" "")
-  endif()
+  set (abi "${_${_PYTHON_PREFIX}_ABIFLAGS}")
+  list (TRANSFORM abi REPLACE "^<none>$" "")
 
   set (path_suffixes)
 
@@ -401,12 +392,8 @@ function (_PYTHON_GET_NAMES _PYTHON_PGN_NAMES)
           else()
             string (REPLACE "." "" name_version ${version})
           endif()
-          if (DEFINED _${_PYTHON_PREFIX}_ABIFLAGS)
-            set (abi "${_${_PYTHON_PREFIX}_ABIFLAGS}")
-            list (TRANSFORM abi REPLACE "^<none>$" "")
-          else()
-            set (abi "")
-          endif()
+          set (abi "${_${_PYTHON_PREFIX}_ABIFLAGS}")
+          list (TRANSFORM abi REPLACE "^<none>$" "")
           if (abi)
             set (abinames "${abi}")
             list (TRANSFORM abinames PREPEND "python${name_version}")
@@ -420,16 +407,8 @@ function (_PYTHON_GET_NAMES _PYTHON_PGN_NAMES)
         endif()
 
         if (_PGN_POSIX)
-          if (DEFINED _${_PYTHON_PREFIX}_ABIFLAGS)
-            set (abi "${_${_PYTHON_PREFIX}_ABIFLAGS}")
-            list (TRANSFORM abi REPLACE "^<none>$" "")
-          else()
-            if (_PGN_INTERPRETER OR _PGN_CONFIG)
-              set (abi "")
-            else()
-              set (abi "mu" "m" "u" "")
-            endif()
-          endif()
+          set (abi "${_${_PYTHON_PREFIX}_ABIFLAGS}")
+          list (TRANSFORM abi REPLACE "^<none>$" "")
 
           if (abi)
             if (_PGN_CONFIG AND DEFINED CMAKE_LIBRARY_ARCHITECTURE)
@@ -1529,7 +1508,6 @@ if (_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR VERSION_LESS "3")
   set (_${_PYTHON_PREFIX}_ABIFLAGS "<none>")
 else()
   unset (_${_PYTHON_PREFIX}_FIND_ABI)
-  unset (_${_PYTHON_PREFIX}_ABIFLAGS)
   if (DEFINED ${_PYTHON_PREFIX}_FIND_ABI)
     # normalization
     string (TOUPPER "${${_PYTHON_PREFIX}_FIND_ABI}" _${_PYTHON_PREFIX}_FIND_ABI)
@@ -1539,8 +1517,14 @@ else()
       message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_ABI}: invalid value for '${_PYTHON_PREFIX}_FIND_ABI'. Ignore it")
       unset (_${_PYTHON_PREFIX}_FIND_ABI)
     endif()
+    _python_get_abiflags ("${${_PYTHON_PREFIX}_FIND_ABI}" _${_PYTHON_PREFIX}_ABIFLAGS)
+  else()
+    if (WIN32)
+      _python_get_abiflags ("OFF;OFF;OFF;OFF" _${_PYTHON_PREFIX}_ABIFLAGS)
+    else()
+      _python_get_abiflags ("ANY;ANY;ANY;OFF" _${_PYTHON_PREFIX}_ABIFLAGS)
+    endif()
   endif()
-  _python_get_abiflags (_${_PYTHON_PREFIX}_ABIFLAGS)
 endif()
 unset (${_PYTHON_PREFIX}_SOABI)
 unset (${_PYTHON_PREFIX}_SOSABI)

+ 2 - 1
Modules/FindPython3.cmake

@@ -330,7 +330,8 @@ Hints
 
   .. note::
 
-    If ``Python3_FIND_ABI`` is not defined, any ABI will be searched.
+    If ``Python3_FIND_ABI`` is not defined, any ABI, excluding the
+    ``gil_disabled`` flag, will be searched.
 
   From this 4-tuple, various ABIs will be searched starting from the most
   specialized to the most general. Moreover, when ``ANY`` is specified for