FindPython: Add support for pydebug ABI flag on Windows

Fixes: #27969
This commit is contained in:
Marc Chevrier
2026-07-26 17:10:25 +02:00
parent 2a49f821f3
commit 84cb7e2629
4 changed files with 125 additions and 48 deletions
+58 -22
View File
@@ -312,18 +312,36 @@ function (_PYTHON_GET_ABIFLAGS _PGA_FIND_ABI _PGABIFLAGS)
endif()
if (pydebug STREQUAL "ON")
if (abiflags)
list (TRANSFORM abiflags PREPEND "d")
if (WIN32)
if (NOT abiflags STREQUAL "<none>")
list (TRANSFORM abiflags APPEND "_d")
else()
set (abiflags "_d")
endif()
else()
set (abiflags "d")
if (NOT abiflags STREQUAL "<none>")
list (TRANSFORM abiflags PREPEND "d")
else()
set (abiflags "d")
endif()
endif()
elseif (pydebug STREQUAL "ANY")
if (abiflags)
set (flags "${abiflags}")
list (TRANSFORM flags PREPEND "d")
list (APPEND abiflags "${flags}")
if (WIN32)
if (NOT abiflags STREQUAL "<none>")
set (flags "${abiflags}")
list (TRANSFORM flags APPEND "_d")
list (APPEND abiflags "${flags}")
else()
set (abiflags "<none>" "_d")
endif()
else()
set (abiflags "<none>" "d")
if (NOT abiflags STREQUAL "<none>")
set (flags "${abiflags}")
list (TRANSFORM flags PREPEND "d")
list (APPEND abiflags "${flags}")
else()
set (abiflags "<none>" "d")
endif()
endif()
endif()
@@ -434,12 +452,26 @@ function (_PYTHON_GET_NAMES _PYTHON_PGN_NAMES)
foreach (implementation IN LISTS _PGN_IMPLEMENTATIONS)
if (implementation STREQUAL "CPython")
set (abi "${_${_PYTHON_PREFIX}_ABIFLAGS}")
list (TRANSFORM abi REPLACE "^<none>$" "")
set (unversionednames python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} python)
if (_PGN_INTERPRETER AND _${_PYTHON_PREFIX}_FIND_UNVERSIONED_NAMES STREQUAL "FIRST")
if (_PGN_DEBUG)
list (APPEND names python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}_d python_d)
if (abi)
unset (fullnames)
foreach (name IN LISTS unversionednames)
set (abinames "${abi}")
list (TRANSFORM abinames PREPEND "${name}")
list(APPEND fullnames "${abinames}")
endforeach()
else()
list (APPEND names python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} python)
set (fullnames ${unversionednames})
endif()
if (_PGN_DEBUG AND NOT abi MATCHES "_d")
list (TRANSFORM fullnames APPEND "_d")
endif()
list (APPEND names ${fullnames})
endif()
foreach (version IN LISTS _PGN_VERSION)
if (_PGN_WIN32)
@@ -448,24 +480,19 @@ function (_PYTHON_GET_NAMES _PYTHON_PGN_NAMES)
else()
string (REPLACE "." "" name_version ${version})
endif()
set (abi "${_${_PYTHON_PREFIX}_ABIFLAGS}")
list (TRANSFORM abi REPLACE "^<none>$" "")
if (abi)
set (abinames "${abi}")
list (TRANSFORM abinames PREPEND "python${name_version}")
else()
set (abinames "python${name_version}")
endif()
if (_PGN_DEBUG)
if (_PGN_DEBUG AND NOT abi MATCHES "_d")
list (TRANSFORM abinames APPEND "_d")
endif()
list (APPEND names ${abinames})
endif()
if (_PGN_POSIX)
set (abi "${_${_PYTHON_PREFIX}_ABIFLAGS}")
list (TRANSFORM abi REPLACE "^<none>$" "")
if (abi)
if (_PGN_CONFIG AND DEFINED CMAKE_LIBRARY_ARCHITECTURE)
set (abinames "${abi}")
@@ -493,11 +520,20 @@ function (_PYTHON_GET_NAMES _PYTHON_PGN_NAMES)
endif()
endforeach()
if (_PGN_INTERPRETER AND _${_PYTHON_PREFIX}_FIND_UNVERSIONED_NAMES STREQUAL "LAST")
if (_PGN_DEBUG)
list (APPEND names python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}_d python_d)
if (abi)
unset (fullnames)
foreach (name IN LISTS unversionednames)
set (abinames "${abi}")
list (TRANSFORM abinames PREPEND "${name}")
list(APPEND fullnames "${abinames}")
endforeach()
else()
list (APPEND names python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} python)
set (fullnames ${unversionednames})
endif()
if (_PGN_DEBUG AND NOT abi MATCHES "_d")
list (TRANSFORM fullnames APPEND "_d")
endif()
list(APPEND names ${fullnames})
endif()
elseif (implementation STREQUAL "IronPython")
if (_PGN_INTERPRETER)
@@ -831,7 +867,7 @@ function (_PYTHON_GET_VERSION)
if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE)
get_filename_component (library_name "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}" NAME)
# extract version from library name
if (library_name MATCHES "python([23])([0-9]+)([tdmu]*)")
if (library_name MATCHES "python([23])([0-9]+)([tdmu_]*)")
set (${_PGV_PREFIX}VERSION_MAJOR "${CMAKE_MATCH_1}" PARENT_SCOPE)
set (${_PGV_PREFIX}VERSION_MINOR "${CMAKE_MATCH_2}" PARENT_SCOPE)
set (${_PGV_PREFIX}VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}" PARENT_SCOPE)
@@ -867,7 +903,7 @@ function (_PYTHON_GET_VERSION)
if (_${_PYTHON_PREFIX}_SABI_LIBRARY_RELEASE)
get_filename_component (library_name "${_${_PYTHON_PREFIX}_SABI_LIBRARY_RELEASE}" NAME)
# extract version from library name
if (library_name MATCHES "python([23])([tdmu]*)")
if (library_name MATCHES "python([23])([tdmu_]*)")
set (${_PGV_PREFIX}VERSION_MAJOR "${CMAKE_MATCH_1}" PARENT_SCOPE)
set (${_PGV_PREFIX}VERSION "${CMAKE_MATCH_1}" PARENT_SCOPE)
set (abi "${CMAKE_MATCH_2}")