Merge topic 'FindPython-SABI_LIBRARY-definition'

25cbaf162f Merge branch 'backport-FindPython-SABI_LIBRARY-definition'
bd7a27bcc7 FindPython: fix the definition of SABI artifacts
554ef95470 FindPython: fix the definition of SABI artifacts

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !10687
diff --git a/Modules/FindPython/Support.cmake b/Modules/FindPython/Support.cmake
index 5595967..0f4add6 100644
--- a/Modules/FindPython/Support.cmake
+++ b/Modules/FindPython/Support.cmake
@@ -3214,7 +3214,7 @@
         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 @@
         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 (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 @@
                                     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 (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 (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 @@
 
     # 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 20cea97..a8eed7e 100644
--- a/Tests/RunCMake/FindPython/Python3SABIModule.cmake
+++ b/Tests/RunCMake/FindPython/Python3SABIModule.cmake
@@ -33,7 +33,7 @@
   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 0c18aa7..c8c4053 100644
--- a/Tests/RunCMake/FindPython/PythonArtifacts.cmake.in
+++ b/Tests/RunCMake/FindPython/PythonArtifacts.cmake.in
@@ -14,6 +14,12 @@
     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 @@
     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 b47f43b..c97e8ba 100644
--- a/Tests/RunCMake/FindPython/RequiredArtifactsCheck.cmake
+++ b/Tests/RunCMake/FindPython/RequiredArtifactsCheck.cmake
@@ -31,12 +31,19 @@
   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 @@
   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()