mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
Merge topic 'FindPython-SOSABI_PLATFORM'
91e227939c FindPython: Add Python_SOSABI_PLATFORM variable
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !12360
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
FindPython-SOSABI_PLATFORM
|
||||
--------------------------
|
||||
|
||||
* The :module:`FindPython3` and :module:`FindPython` modules gained,
|
||||
respectively, the variable ``Python3_SOSABI_PLATFORM`` and
|
||||
``Python_SOSABI_PLATFORM`` which gives, on some platforms, for the Stable
|
||||
Application Binary Interface, the extension including the platform triplet.
|
||||
@@ -213,7 +213,7 @@ This module defines the following variables
|
||||
|
||||
Information computed from ``sysconfig.get_config_var('EXT_SUFFIX')`` or
|
||||
``sysconfig.get_config_var('SOABI')`` or
|
||||
``python3-config --extension-suffix``.
|
||||
``python-config --extension-suffix``.
|
||||
|
||||
``Python_SOSABI``
|
||||
.. versionadded:: 3.26
|
||||
@@ -225,6 +225,16 @@ This module defines the following variables
|
||||
or ``abi3t`` except for ``Windows``, ``MSYS`` and ``CYGWIN`` for which this
|
||||
is an empty string.
|
||||
|
||||
``Python_SOSABI_PLATFORM``
|
||||
.. versionadded:: 4.5
|
||||
|
||||
Extension suffix, with the platform triplet, for modules using the Stable
|
||||
Application Binary Interface. This information is only available on some
|
||||
platforms. This is an empty string for the other platforms.
|
||||
|
||||
Information computed from ``importlib.machinery.EXTENSION_SUFFIXES`` if the
|
||||
COMPONENT ``Interpreter`` was specified. Otherwise, this is an empty string.
|
||||
|
||||
``Python_Compiler_FOUND``
|
||||
Boolean indicating whether system has the Python compiler.
|
||||
``Python_COMPILER``
|
||||
@@ -682,6 +692,11 @@ If the library type is not specified, ``MODULE`` is assumed.
|
||||
When option ``WITH_SOABI`` is also specified, the module suffix will include
|
||||
the ``Python_SOSABI`` value, if any.
|
||||
|
||||
.. versionadded:: 4.5
|
||||
If the sub-option ``PLATFORM`` of ``WITH_SOABI`` option is specified, the
|
||||
module suffix will include preferably the ``Python_SOSABI_PLATFORM`` value,
|
||||
if any or, as fallback, the ``Python_SOSABI`` value.
|
||||
|
||||
.. versionadded:: 3.30
|
||||
For ``MODULE`` type, the :prop_tgt:`DEBUG_POSTFIX` target property is
|
||||
initialized with the value of ``Python_DEBUG_POSTFIX`` variable if defined.
|
||||
|
||||
@@ -14,6 +14,8 @@ cmake_policy(PUSH)
|
||||
cmake_policy (SET CMP0124 NEW)
|
||||
# registry view behavior
|
||||
cmake_policy (SET CMP0134 NEW)
|
||||
# return(PROPAGATE)
|
||||
cmake_policy(SET CMP0140 NEW)
|
||||
# file(STRINGS) with REGEX updates CMAKE_MATCH_<n>
|
||||
cmake_policy(SET CMP0159 NEW)
|
||||
|
||||
@@ -768,7 +770,7 @@ except Exception:
|
||||
import sys
|
||||
import re
|
||||
import importlib.machinery
|
||||
sys.stdout.write(next(filter(lambda x: re.search('^\\.abi', x), importlib.machinery.EXTENSION_SUFFIXES)))
|
||||
sys.stdout.write(';'.join(filter(lambda x: re.search('^\\.abi', x), importlib.machinery.EXTENSION_SUFFIXES)))
|
||||
]==]
|
||||
RESULT_VARIABLE _result
|
||||
OUTPUT_VARIABLE _values
|
||||
@@ -777,7 +779,7 @@ sys.stdout.write(next(filter(lambda x: re.search('^\\.abi', x), importlib.machin
|
||||
if (_result)
|
||||
unset (_values)
|
||||
else()
|
||||
string (REGEX REPLACE "^\\.(.+)\\.[^.]+$" "\\1" _values "${_values}")
|
||||
list (TRANSFORM _values REPLACE "^\\.(.+)\\.[^.]+$" "\\1")
|
||||
endif()
|
||||
elseif (NAME STREQUAL "ABIFLAGS" AND WIN32)
|
||||
# config var ABIFLAGS does not exist for version < 3.14, check GIL specific variable
|
||||
@@ -851,6 +853,18 @@ except Exception:
|
||||
set (${_PYTHON_PGCV_VALUE} "${_values}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function (_PYTHON_GET_SOSABI)
|
||||
_python_get_config_var (sosabi SOSABI)
|
||||
if (sosabi MATCHES "(^|.+;)(abi${${_PYTHON_PREFIX}_VERSION_MAJOR}t?)(;.+|$)")
|
||||
set (${_PYTHON_PREFIX}_SOSABI "${CMAKE_MATCH_2}")
|
||||
endif()
|
||||
if (sosabi MATCHES "(^|.+;)(abi${${_PYTHON_PREFIX}_VERSION_MAJOR}t?-[^;]+)(;.+|$)")
|
||||
set (${_PYTHON_PREFIX}_SOSABI_PLATFORM "${CMAKE_MATCH_2}")
|
||||
endif()
|
||||
|
||||
return (PROPAGATE ${_PYTHON_PREFIX}_SOSABI ${_PYTHON_PREFIX}_SOSABI_PLATFORM)
|
||||
endfunction()
|
||||
|
||||
function (_PYTHON_GET_VERSION)
|
||||
cmake_parse_arguments (PARSE_ARGV 0 _PGV "LIBRARY;SABI_LIBRARY;INCLUDE" "PREFIX" "")
|
||||
|
||||
@@ -1728,6 +1742,7 @@ else()
|
||||
endif()
|
||||
unset (${_PYTHON_PREFIX}_SOABI)
|
||||
unset (${_PYTHON_PREFIX}_SOSABI)
|
||||
unset (${_PYTHON_PREFIX}_SOSABI_PLATFORM)
|
||||
unset (${_PYTHON_PREFIX}_FREE_THREADED)
|
||||
|
||||
# Windows CPython implementation may be requiring a postfix in debug mode
|
||||
@@ -2456,11 +2471,12 @@ if ("Interpreter" IN_LIST ${_PYTHON_BASE}_FIND_COMPONENTS)
|
||||
list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 5 _${_PYTHON_PREFIX}_ABIFLAGS)
|
||||
list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 6 ${_PYTHON_PREFIX}_SOABI)
|
||||
list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 7 ${_PYTHON_PREFIX}_SOSABI)
|
||||
list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 8 ${_PYTHON_PREFIX}_SOSABI_PLATFORM)
|
||||
|
||||
list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 8 ${_PYTHON_PREFIX}_STDLIB)
|
||||
list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 9 ${_PYTHON_PREFIX}_STDARCH)
|
||||
list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 10 ${_PYTHON_PREFIX}_SITELIB)
|
||||
list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 11 ${_PYTHON_PREFIX}_SITEARCH)
|
||||
list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 9 ${_PYTHON_PREFIX}_STDLIB)
|
||||
list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 10 ${_PYTHON_PREFIX}_STDARCH)
|
||||
list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 11 ${_PYTHON_PREFIX}_SITELIB)
|
||||
list (GET _${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES 12 ${_PYTHON_PREFIX}_SITEARCH)
|
||||
else()
|
||||
string (REGEX MATCHALL "[0-9]+" _${_PYTHON_PREFIX}_VERSIONS "${${_PYTHON_PREFIX}_VERSION}")
|
||||
list (GET _${_PYTHON_PREFIX}_VERSIONS 0 ${_PYTHON_PREFIX}_VERSION_MAJOR)
|
||||
@@ -2595,11 +2611,11 @@ else:
|
||||
endif()
|
||||
|
||||
_python_get_config_var (${_PYTHON_PREFIX}_SOABI SOABI)
|
||||
_python_get_config_var (${_PYTHON_PREFIX}_SOSABI SOSABI)
|
||||
_python_get_sosabi ()
|
||||
|
||||
# store properties in the cache to speed-up future searches
|
||||
set (_${_PYTHON_PREFIX}_INTERPRETER_PROPERTIES
|
||||
"${${_PYTHON_PREFIX}_INTERPRETER_ID};${${_PYTHON_PREFIX}_VERSION_MAJOR};${${_PYTHON_PREFIX}_VERSION_MINOR};${${_PYTHON_PREFIX}_VERSION_PATCH};${_${_PYTHON_PREFIX}_ARCH};${_${_PYTHON_PREFIX}_ABIFLAGS};${${_PYTHON_PREFIX}_SOABI};${${_PYTHON_PREFIX}_SOSABI};${${_PYTHON_PREFIX}_STDLIB};${${_PYTHON_PREFIX}_STDARCH};${${_PYTHON_PREFIX}_SITELIB};${${_PYTHON_PREFIX}_SITEARCH}" CACHE INTERNAL "${_PYTHON_PREFIX} Properties")
|
||||
"${${_PYTHON_PREFIX}_INTERPRETER_ID};${${_PYTHON_PREFIX}_VERSION_MAJOR};${${_PYTHON_PREFIX}_VERSION_MINOR};${${_PYTHON_PREFIX}_VERSION_PATCH};${_${_PYTHON_PREFIX}_ARCH};${_${_PYTHON_PREFIX}_ABIFLAGS};${${_PYTHON_PREFIX}_SOABI};${${_PYTHON_PREFIX}_SOSABI};${${_PYTHON_PREFIX}_SOSABI_PLATFORM};${${_PYTHON_PREFIX}_STDLIB};${${_PYTHON_PREFIX}_STDARCH};${${_PYTHON_PREFIX}_SITELIB};${${_PYTHON_PREFIX}_SITEARCH}" CACHE INTERNAL "${_PYTHON_PREFIX} Properties")
|
||||
else()
|
||||
unset (_${_PYTHON_PREFIX}_INTERPRETER_SIGNATURE CACHE)
|
||||
unset (${_PYTHON_PREFIX}_INTERPRETER_ID)
|
||||
@@ -4226,7 +4242,7 @@ if (("Development.Module" IN_LIST ${_PYTHON_BASE}_FIND_COMPONENTS
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED ${_PYTHON_PREFIX}_SOSABI)
|
||||
_python_get_config_var (${_PYTHON_PREFIX}_SOSABI SOSABI)
|
||||
_python_get_sosabi()
|
||||
endif()
|
||||
|
||||
if (WIN32 AND NOT DEFINED ${_PYTHON_PREFIX}_DEBUG_POSTFIX)
|
||||
@@ -4604,7 +4620,7 @@ if(_${_PYTHON_PREFIX}_CMAKE_ROLE STREQUAL "PROJECT")
|
||||
# It is used to build modules for python.
|
||||
#
|
||||
function (__${_PYTHON_PREFIX}_ADD_LIBRARY prefix name)
|
||||
cmake_parse_arguments (PARSE_ARGV 2 PYTHON_ADD_LIBRARY "STATIC;SHARED;MODULE;WITH_SOABI" "USE_SABI" "")
|
||||
cmake_parse_arguments (PARSE_ARGV 2 PYTHON_ADD_LIBRARY "STATIC;SHARED;MODULE;WITH_SOABI;PLATFORM" "USE_SABI" "")
|
||||
|
||||
if (PYTHON_ADD_LIBRARY_STATIC)
|
||||
set (type STATIC)
|
||||
@@ -4670,6 +4686,12 @@ if(_${_PYTHON_PREFIX}_CMAKE_ROLE STREQUAL "PROJECT")
|
||||
get_property (type TARGET ${name} PROPERTY TYPE)
|
||||
|
||||
if (type STREQUAL "MODULE_LIBRARY")
|
||||
if ((NOT PYTHON_ADD_LIBRARY_USE_SABI OR NOT PYTHON_ADD_LIBRARY_WITH_SOABI)
|
||||
AND PYTHON_ADD_LIBRARY_PLATFORM)
|
||||
message (AUTHOR_WARNING "Find${prefix}: Option 'PLATFORM' is only valid with options 'USE_SABI' and 'WITH_SOABI'.")
|
||||
unset(PYTHON_ADD_LIBRARY_PLATFORM)
|
||||
endif()
|
||||
|
||||
if (PYTHON_ADD_LIBRARY_USE_SABI)
|
||||
if (${prefix}_FREE_THREADED AND
|
||||
"${major_version}.${minor_version}" VERSION_GREATER_EQUAL "3.15")
|
||||
@@ -4703,7 +4725,11 @@ if(_${_PYTHON_PREFIX}_CMAKE_ROLE STREQUAL "PROJECT")
|
||||
if (NOT suffix)
|
||||
set (suffix "${CMAKE_SHARED_MODULE_SUFFIX}")
|
||||
endif()
|
||||
set_property (TARGET ${name} PROPERTY SUFFIX ".${${prefix}_SOSABI}${suffix}")
|
||||
if (PYTHON_ADD_LIBRARY_PLATFORM AND ${prefix}_SOSABI_PLATFORM)
|
||||
set_property (TARGET ${name} PROPERTY SUFFIX ".${${prefix}_SOSABI_PLATFORM}${suffix}")
|
||||
else()
|
||||
set_property (TARGET ${name} PROPERTY SUFFIX ".${${prefix}_SOSABI}${suffix}")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
|
||||
@@ -227,6 +227,16 @@ This module defines the following variables
|
||||
or ``abi3t`` except for ``Windows``, ``MSYS`` and ``CYGWIN`` for which this
|
||||
is an empty string.
|
||||
|
||||
``Python3_SOSABI_PLATFORM``
|
||||
.. versionadded:: 4.5
|
||||
|
||||
Extension suffix, with the platform triplet, for modules using the Stable
|
||||
Application Binary Interface. This information is only available on some
|
||||
platforms. This is an empty string for the other platforms.
|
||||
|
||||
Information computed from ``importlib.machinery.EXTENSION_SUFFIXES`` if the
|
||||
COMPONENT ``Interpreter`` was specified. Otherwise, this is an empty string.
|
||||
|
||||
``Python3_Compiler_FOUND``
|
||||
Boolean indicating whether system has the Python 3 compiler.
|
||||
``Python3_COMPILER``
|
||||
@@ -653,7 +663,7 @@ of Python module naming rules:
|
||||
|
||||
.. code-block:: cmake
|
||||
|
||||
Python3_add_library (<name> [STATIC | SHARED | MODULE [USE_SABI <version>] [WITH_SOABI]]
|
||||
Python3_add_library (<name> [STATIC | SHARED | MODULE [USE_SABI <version>] [WITH_SOABI [PLATFORM]]]
|
||||
<source1> [<source2> ...])
|
||||
|
||||
If the library type is not specified, ``MODULE`` is assumed.
|
||||
@@ -681,6 +691,11 @@ If the library type is not specified, ``MODULE`` is assumed.
|
||||
When option ``WITH_SOABI`` is also specified, the module suffix will include
|
||||
the ``Python3_SOSABI`` value, if any.
|
||||
|
||||
.. versionadded:: 4.5
|
||||
If the sub-option ``PLATFORM`` of ``WITH_SOABI`` option is specified, the
|
||||
module suffix will include preferably the ``Python3_SOSABI_PLATFORM`` value,
|
||||
if any or, as fallback, the ``Python3_SOSABI`` value.
|
||||
|
||||
.. versionadded:: 3.30
|
||||
For ``MODULE`` type, the :prop_tgt:`DEBUG_POSTFIX` target property is
|
||||
initialized with the value of ``Python3_DEBUG_POSTFIX`` variable if defined.
|
||||
|
||||
@@ -47,6 +47,21 @@ if (Python3_SOSABI)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
Python3_add_library (spam3_2 MODULE USE_SABI 3 WITH_SOABI PLATFORM spam.c)
|
||||
target_compile_definitions (spam3_2 PRIVATE PYTHON3)
|
||||
|
||||
if (Python3_SOSABI_PLATFORM)
|
||||
get_property (suffix TARGET spam3_2 PROPERTY SUFFIX)
|
||||
if (NOT suffix MATCHES "^\\.${Python3_SOSABI_PLATFORM}")
|
||||
message(FATAL_ERROR "Module suffix do not include Python3_SOSABI_PLATFORM")
|
||||
endif()
|
||||
elseif(Python3_SOSABI)
|
||||
get_property (suffix TARGET spam3_2 PROPERTY SUFFIX)
|
||||
if (NOT suffix MATCHES "^\\.${Python3_SOSABI}")
|
||||
message(FATAL_ERROR "Module suffix do not include Python3_SOSABI")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
add_test (NAME python3_spam3
|
||||
COMMAND "${CMAKE_COMMAND}" -E env "PYTHONPATH=$<TARGET_FILE_DIR:spam3>"
|
||||
|
||||
Reference in New Issue
Block a user