From 5fdfb2283ad7720fe2bedb572db320141c1f5f71 Mon Sep 17 00:00:00 2001 From: Marc Chevrier Date: Thu, 16 Jul 2026 17:28:43 +0200 Subject: [PATCH] FindPython: fix SABIModule detection failure Fixes: #27950 --- Modules/FindPython/Support.cmake | 20 +++++++++++-------- .../FindPython/RequiredArtifacts.cmake | 13 ++++++++++++ Tests/RunCMake/FindPython/RunCMakeTest.cmake | 4 +++- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/Modules/FindPython/Support.cmake b/Modules/FindPython/Support.cmake index f7bcc9caa4..7fde096b8b 100644 --- a/Modules/FindPython/Support.cmake +++ b/Modules/FindPython/Support.cmake @@ -3772,7 +3772,7 @@ if (("Development.Module" IN_LIST ${_PYTHON_BASE}_FIND_COMPONENTS ${__${_PYTHON_PREFIX}_REGISTRY_PATHS} PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}) - if (_${_PYTHON_PREFIX}_LIBRARY_RELEASE) + if (_${_PYTHON_PREFIX}_SABI_LIBRARY_RELEASE) break() endif() endforeach() @@ -3783,14 +3783,18 @@ if (("Development.Module" IN_LIST ${_PYTHON_BASE}_FIND_COMPONENTS # finalize library version information # ABI library does not have the full version information - if (${_PYTHON_PREFIX}_Interpreter_FOUND AND NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE) - # update from interpreter - set (_${_PYTHON_PREFIX}_VERSION ${${_PYTHON_PREFIX}_VERSION}) - set (_${_PYTHON_PREFIX}_VERSION_MAJOR ${${_PYTHON_PREFIX}_VERSION_MAJOR}) - set (_${_PYTHON_PREFIX}_VERSION_MINOR ${${_PYTHON_PREFIX}_VERSION_MINOR}) - set (_${_PYTHON_PREFIX}_VERSION_PATCH ${${_PYTHON_PREFIX}_VERSION_PATCH}) - elseif(NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE) + if (NOT _${_PYTHON_PREFIX}_LIBRARY_RELEASE) _python_get_version (SABI_LIBRARY PREFIX _${_PYTHON_PREFIX}_) + if (_${_PYTHON_PREFIX}_VERSION EQUAL "${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}") + # not able to extract full version from library name + if (${_PYTHON_PREFIX}_Interpreter_FOUND) + # update from interpreter + set (_${_PYTHON_PREFIX}_VERSION ${${_PYTHON_PREFIX}_VERSION}) + set (_${_PYTHON_PREFIX}_VERSION_MAJOR ${${_PYTHON_PREFIX}_VERSION_MAJOR}) + set (_${_PYTHON_PREFIX}_VERSION_MINOR ${${_PYTHON_PREFIX}_VERSION_MINOR}) + set (_${_PYTHON_PREFIX}_VERSION_PATCH ${${_PYTHON_PREFIX}_VERSION_PATCH}) + endif() + endif() endif() if (_${_PYTHON_PREFIX}_SABI_LIBRARY_RELEASE AND NOT DEFINED ${_PYTHON_PREFIX}_FREE_THREADED) diff --git a/Tests/RunCMake/FindPython/RequiredArtifacts.cmake b/Tests/RunCMake/FindPython/RequiredArtifacts.cmake index 51895eff86..385c2105a3 100644 --- a/Tests/RunCMake/FindPython/RequiredArtifacts.cmake +++ b/Tests/RunCMake/FindPython/RequiredArtifacts.cmake @@ -70,6 +70,19 @@ block(SCOPE_FOR VARIABLES) unset(_Python3_SABI_LIBRARY_RELEASE CACHE) endblock() +block(SCOPE_FOR VARIABLES) + set(components Interpreter) + if (CMake_TEST_FindPython3_SABIModule) + list (APPEND components Development.SABIModule) + endif() + find_package(Python3 REQUIRED COMPONENTS ${components}) + if (NOT Python3_FOUND) + message (FATAL_ERROR "Failed to find Python 3") + endif() + unset(_Python3_EXECUTABLE CACHE) + unset(_Python3_SABI_LIBRARY_RELEASE CACHE) +endblock() + set(components Interpreter Development) if (CMake_TEST_FindPython3_SABIModule) diff --git a/Tests/RunCMake/FindPython/RunCMakeTest.cmake b/Tests/RunCMake/FindPython/RunCMakeTest.cmake index a4d667df81..1719069079 100644 --- a/Tests/RunCMake/FindPython/RunCMakeTest.cmake +++ b/Tests/RunCMake/FindPython/RunCMakeTest.cmake @@ -322,7 +322,9 @@ if(CMake_TEST_FindPython_Various) run_python(ArtifactsInteractive VARIANT "OFF" OPTIONS -DCMake_TEST_FindPython3_NumPy=${CMake_TEST_FindPython3_NumPy} -DPython3_ARTIFACTS_INTERACTIVE=OFF) - run_python(Android OPTIONS "-DCMAKE_TOOLCHAIN_FILE=${RunCMake_SOURCE_DIR}/android_toolchain.cmake") + if(NOT WIN32) + run_python(Android OPTIONS "-DCMAKE_TOOLCHAIN_FILE=${RunCMake_SOURCE_DIR}/android_toolchain.cmake") + endif() endif() if(CMake_TEST_FindPython2 OR CMake_TEST_FindPython3)