diff --git a/Modules/FindPython/Support.cmake b/Modules/FindPython/Support.cmake index a9441646d1..50c8452dc5 100644 --- a/Modules/FindPython/Support.cmake +++ b/Modules/FindPython/Support.cmake @@ -2997,8 +2997,8 @@ if (("Development.Module" IN_LIST ${_PYTHON_BASE}_FIND_COMPONENTS OUTPUT_VARIABLE __${_PYTHON_PREFIX}_ABIFLAGS ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) - if (_${_PYTHON_PREFIX}_RESULT) - # assume ABI is not supported + if (_${_PYTHON_PREFIX}_RESULT OR NOT __${_PYTHON_PREFIX}_ABIFLAGS ) + # assume ABI is not supported or not used set (__${_PYTHON_PREFIX}_ABIFLAGS "") endif() if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI AND NOT __${_PYTHON_PREFIX}_ABIFLAGS IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS) @@ -3943,12 +3943,19 @@ if (("Development.Module" IN_LIST ${_PYTHON_BASE}_FIND_COMPONENTS _python_set_development_module_found (SABIModule) _python_set_development_module_found (Embed) endif() - if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI AND - (NOT _${_PYTHON_PREFIX}_ABI IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS - OR (NOT WIN32 AND NOT _${_PYTHON_PREFIX}_INC_ABI IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS))) - set (${_PYTHON_PREFIX}_Development.Module_FOUND FALSE) - set (${_PYTHON_PREFIX}_Development.SABIModule_FOUND FALSE) - set (${_PYTHON_PREFIX}_Development.Embed_FOUND FALSE) + if (DEFINED _${_PYTHON_PREFIX}_FIND_ABI) + if ((_${_PYTHON_PREFIX}_LIBRARY_RELEASE OR _${_PYTHON_PREFIX}_SABI_LIBRARY_RELEASE) + AND NOT _${_PYTHON_PREFIX}_ABI IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS) + set (${_PYTHON_PREFIX}_Development.Module_FOUND FALSE) + set (${_PYTHON_PREFIX}_Development.SABIModule_FOUND FALSE) + set (${_PYTHON_PREFIX}_Development.Embed_FOUND FALSE) + endif() + if (_${_PYTHON_PREFIX}_INCLUDE_DIR AND + NOT WIN32 AND NOT _${_PYTHON_PREFIX}_INC_ABI IN_LIST _${_PYTHON_PREFIX}_ABIFLAGS) + set (${_PYTHON_PREFIX}_Development.Module_FOUND FALSE) + set (${_PYTHON_PREFIX}_Development.SABIModule_FOUND FALSE) + set (${_PYTHON_PREFIX}_Development.Embed_FOUND FALSE) + endif() endif() endif() diff --git a/Tests/RunCMake/FindPython/RunCMakeTest.cmake b/Tests/RunCMake/FindPython/RunCMakeTest.cmake index f866015fb6..7ed39b3f4a 100644 --- a/Tests/RunCMake/FindPython/RunCMakeTest.cmake +++ b/Tests/RunCMake/FindPython/RunCMakeTest.cmake @@ -178,6 +178,8 @@ endif() if(CMake_TEST_FindPython3_CPython) run_cmake(Python3-BadComponent) run_cmake(DifferentComponents) + run_python(SpecifyABI TYPE Python3 VARIANT Python3) + run_python(SpecifyABI TYPE Python VARIANT Python.V3 OPTIONS -DPython_REQUESTED_VERSION=3) run_python(Python3Module ACTION RUN) if(NOT CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8) run_python(Python3Embedded ACTION RUN) diff --git a/Tests/RunCMake/FindPython/SpecifyABI.cmake b/Tests/RunCMake/FindPython/SpecifyABI.cmake new file mode 100644 index 0000000000..0077bbd4e0 --- /dev/null +++ b/Tests/RunCMake/FindPython/SpecifyABI.cmake @@ -0,0 +1,5 @@ +enable_language(C) + +set(${PYTHON}_FIND_ABI "ANY;ANY;ANY") + +find_package(${PYTHON} REQUIRED COMPONENTS Development.Module)