diff --git a/Modules/FindPython/Support.cmake b/Modules/FindPython/Support.cmake index 55959670ff..0f4add6121 100644 --- a/Modules/FindPython/Support.cmake +++ b/Modules/FindPython/Support.cmake @@ -3214,7 +3214,7 @@ if (("Development.Module" IN_LIST ${_PYTHON_BASE}_FIND_COMPONENTS if (_${_PYTHON_PREFIX}_FIND_STRATEGY STREQUAL "LOCATION") # library names _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} WIN32 POSIX LIBRARY) - _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} WIN32 DEBUG) + _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} WIN32 DEBUG LIBRARY) # Paths suffixes _python_get_path_suffixes (_${_PYTHON_PREFIX}_PATH_SUFFIXES VERSION ${_${_PYTHON_PREFIX}_FIND_VERSIONS} LIBRARY) @@ -3281,7 +3281,7 @@ if (("Development.Module" IN_LIST ${_PYTHON_BASE}_FIND_COMPONENTS else() foreach (_${_PYTHON_PREFIX}_LIB_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS) _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION} WIN32 POSIX LIBRARY) - _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION} WIN32 DEBUG) + _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION} WIN32 DEBUG LIBRARY) _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION}) _python_get_registries (_${_PYTHON_PREFIX}_REGISTRY_PATHS VERSION ${_${_PYTHON_PREFIX}_LIB_VERSION}) @@ -3379,7 +3379,7 @@ if (("Development.Module" IN_LIST ${_PYTHON_BASE}_FIND_COMPONENTS if (WIN32 AND _${_PYTHON_PREFIX}_LIBRARY_RELEASE) # search for debug library # use release library location as a hint - _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_VERSION} WIN32 DEBUG) + _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_VERSION} WIN32 DEBUG LIBRARY) get_filename_component (_${_PYTHON_PREFIX}_PATH "${_${_PYTHON_PREFIX}_LIBRARY_RELEASE}" DIRECTORY) find_library (_${_PYTHON_PREFIX}_LIBRARY_DEBUG NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG} @@ -3407,7 +3407,7 @@ if (("Development.Module" IN_LIST ${_PYTHON_BASE}_FIND_COMPONENTS PATH_SUFFIXES bin) endif() if (_${_PYTHON_PREFIX}_LIBRARY_DEBUG) - _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_VERSION} WIN32 DEBUG) + _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_VERSION} WIN32 DEBUG LIBRARY) get_filename_component (_${_PYTHON_PREFIX}_PATH "${_${_PYTHON_PREFIX}_LIBRARY_DEBUG}" DIRECTORY) get_filename_component (_${_PYTHON_PREFIX}_PATH2 "${_${_PYTHON_PREFIX}_PATH}" DIRECTORY) _python_find_runtime_library (_${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG @@ -3423,7 +3423,7 @@ if (("Development.Module" IN_LIST ${_PYTHON_BASE}_FIND_COMPONENTS if (NOT _${_PYTHON_PREFIX}_SABI_LIBRARY_RELEASE) ## compute artifact names _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES VERSION ${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} WIN32 POSIX LIBRARY) - _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} WIN32 DEBUG) + _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} WIN32 DEBUG LIBRARY) if ("LIBRARY" IN_LIST _${_PYTHON_PREFIX}_FIND_DEVELOPMENT_ARTIFACTS AND _${_PYTHON_PREFIX}_LIBRARY_RELEASE) @@ -3639,6 +3639,8 @@ if (("Development.Module" IN_LIST ${_PYTHON_BASE}_FIND_COMPONENTS if (WIN32 AND _${_PYTHON_PREFIX}_SABI_LIBRARY_RELEASE) # search for debug library + # use release library location as a hint + _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG VERSION ${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} WIN32 DEBUG LIBRARY) get_filename_component (_${_PYTHON_PREFIX}_PATH "${_${_PYTHON_PREFIX}_SABI_LIBRARY_RELEASE}" DIRECTORY) find_library (_${_PYTHON_PREFIX}_SABI_LIBRARY_DEBUG NAMES ${_${_PYTHON_PREFIX}_LIB_NAMES_DEBUG} @@ -3655,6 +3657,7 @@ if (("Development.Module" IN_LIST ${_PYTHON_BASE}_FIND_COMPONENTS # retrieve runtime libraries if (_${_PYTHON_PREFIX}_SABI_LIBRARY_RELEASE) + _python_get_names (_${_PYTHON_PREFIX}_LIB_NAMES VERSION ${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} WIN32 POSIX LIBRARY) get_filename_component (_${_PYTHON_PREFIX}_PATH "${_${_PYTHON_PREFIX}_SABI_LIBRARY_RELEASE}" DIRECTORY) get_filename_component (_${_PYTHON_PREFIX}_PATH2 "${_${_PYTHON_PREFIX}_PATH}" DIRECTORY) _python_find_runtime_library (_${_PYTHON_PREFIX}_RUNTIME_SABI_LIBRARY_RELEASE diff --git a/Tests/RunCMake/FindPython/Python3SABIModule.cmake b/Tests/RunCMake/FindPython/Python3SABIModule.cmake index 20cea9759f..a8eed7e25b 100644 --- a/Tests/RunCMake/FindPython/Python3SABIModule.cmake +++ b/Tests/RunCMake/FindPython/Python3SABIModule.cmake @@ -33,7 +33,7 @@ if(NOT TARGET Python3::SABIModule) message(SEND_ERROR "Python3::SABIModule not found") endif() -if (Python3_VERSION VERSION_GREATER_EQUAL "3.2" AND NOT Python3_SOSABI) +if (Python3_VERSION VERSION_GREATER_EQUAL "3.2" AND NOT DEFINED Python3_SOSABI) message(FATAL_ERROR "Python3_SOSABI unexpectedly not defined") endif() diff --git a/Tests/RunCMake/FindPython/PythonArtifacts.cmake.in b/Tests/RunCMake/FindPython/PythonArtifacts.cmake.in index 0c18aa7fce..c8c40538c1 100644 --- a/Tests/RunCMake/FindPython/PythonArtifacts.cmake.in +++ b/Tests/RunCMake/FindPython/PythonArtifacts.cmake.in @@ -14,6 +14,12 @@ if(CHECK_LIBRARY) set(Python3_LIBRARY "@USER_LIBRARY@") else() set(Python3_LIBRARY "@_Python3_LIBRARY_RELEASE@") + set(PYTHON_LIBRARY_RELEASE "@_Python3_LIBRARY_RELEASE@") + set(PYTHON_LIBRARY_DEBUG "@_Python3_LIBRARY_DEBUG@") + if(WIN32) + set(PYTHON_RUNTIME_LIBRARY_RELEASE "@_Python3_RUNTIME_LIBRARY_RELEASE@") + set(PYTHON_RUNTIME_LIBRARY_DEBUG "@_Python3_RUNTIME_LIBRARY_DEBUG@") + endif() endif() endif() if(CHECK_INCLUDE) @@ -28,5 +34,11 @@ if(CHECK_SABI_LIBRARY) set(Python3_SABI_LIBRARY "@USER_LIBRARY@") else() set(Python3_SABI_LIBRARY "@_Python3_SABI_LIBRARY_RELEASE@") + set(PYTHON_SABI_LIBRARY_RELEASE "@_Python3_SABI_LIBRARY_RELEASE@") + set(PYTHON_SABI_LIBRARY_DEBUG "@_Python3_SABI_LIBRARY_DEBUG@") + if(WIN32) + set(PYTHON_RUNTIME_SABI_LIBRARY_RELEASE "@_Python3_RUNTIME_SABI_LIBRARY_RELEASE@") + set(PYTHON_RUNTIME_SABI_LIBRARY_DEBUG "@_Python3_RUNTIME_SABI_LIBRARY_DEBUG@") + endif() endif() endif() diff --git a/Tests/RunCMake/FindPython/RequiredArtifactsCheck.cmake b/Tests/RunCMake/FindPython/RequiredArtifactsCheck.cmake index b47f43b69a..c97e8ba58a 100644 --- a/Tests/RunCMake/FindPython/RequiredArtifactsCheck.cmake +++ b/Tests/RunCMake/FindPython/RequiredArtifactsCheck.cmake @@ -31,12 +31,19 @@ if (NOT PYTHON_IS_FOUND AND Python3_FOUND) message (FATAL_ERROR "Python3 unexpectedly found") endif() - if (CHECK_INTERPRETER AND NOT Python3_EXECUTABLE STREQUAL required_interpreter) message (FATAL_ERROR "Failed to use input variable Python3_EXECUTABLE") endif() -if (CHECK_LIBRARY AND NOT Python3_LIBRARY_RELEASE STREQUAL required_library) +if (CHECK_LIBRARY AND PYTHON_IS_FOUND AND + (NOT Python3_LIBRARY_RELEASE STREQUAL PYTHON_LIBRARY_RELEASE + OR (WIN32 AND NOT Python3_RUNTIME_LIBRARY_RELEASE STREQUAL PYTHON_RUNTIME_LIBRARY_RELEASE) + OR (PYTHON_LIBRARY_DEBUG AND NOT Python3_LIBRARY_DEBUG STREQUAL PYTHON_LIBRARY_DEBUG) + OR (WIN32 AND PYTHON_RUNTIME_LIBRARY_DEBUG AND NOT Python3_RUNTIME_LIBRARY_DEBUG STREQUAL PYTHON_RUNTIME_LIBRARY_DEBUG))) + message (FATAL_ERROR "Failed to use input variable Python3_LIBRARY") +endif() +if (CHECK_LIBRARY AND NOT PYTHON_IS_FOUND AND + NOT Python3_LIBRARY_RELEASE STREQUAL required_library) message (FATAL_ERROR "Failed to use input variable Python3_LIBRARY") endif() @@ -44,6 +51,14 @@ if (CHECK_INCLUDE AND NOT Python3_INCLUDE_DIRS STREQUAL required_include) message (FATAL_ERROR "Failed to use input variable Python3_INCLUDE_DIR") endif() -if (CHECK_SABI_LIBRARY AND NOT Python3_SABI_LIBRARY_RELEASE STREQUAL required_sabi_library) +if (CHECK_SABI_LIBRARY AND PYTHON_IS_FOUND AND + (NOT Python3_SABI_LIBRARY_RELEASE STREQUAL PYTHON_SABI_LIBRARY_RELEASE + OR (WIN32 AND NOT Python3_RUNTIME_SABI_LIBRARY_RELEASE STREQUAL PYTHON_RUNTIME_SABI_LIBRARY_RELEASE) + OR (PYTHON_SABI_LIBRARY_DEBUG AND NOT Python3_SABI_LIBRARY_DEBUG STREQUAL PYTHON_SABI_LIBRARY_DEBUG) + OR (WIN32 AND PYTHON_RUNTIME_SABI_LIBRARY_DEBUG AND NOT Python3_RUNTIME_SABI_LIBRARY_DEBUG STREQUAL PYTHON_RUNTIME_SABI_LIBRARY_DEBUG))) message (FATAL_ERROR "Failed to use input variable Python3_SABI_LIBRARY") endif() +if (CHECK_SABI_LIBRARY AND NOT PYTHON_IS_FOUND AND + NOT Python3_SABI_LIBRARY_RELEASE STREQUAL required_sabi_library) + message (FATAL_ERROR "Failed to use input variable Python3_SABI_LIBRARY") +endif()