From fad29c6465c8cc32a4f56ed34fca9d94fd2dcde1 Mon Sep 17 00:00:00 2001
From: Richard Christie <r.christie@auckland.ac.nz>
Date: Thu, 31 Mar 2016 12:05:20 +1300
Subject: [PATCH] Fix FindPythonLibs for multiple configurations

---
 Modules/FindPythonLibs.cmake | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/Modules/FindPythonLibs.cmake b/Modules/FindPythonLibs.cmake
index ab92f86..92f4596 100644
--- a/Modules/FindPythonLibs.cmake
+++ b/Modules/FindPythonLibs.cmake
@@ -127,6 +127,13 @@ unset(_PYTHON1_VERSIONS)
 unset(_PYTHON2_VERSIONS)
 unset(_PYTHON3_VERSIONS)
 
+# support legacy behaviour where simple path to library was supplied in PYTHON_LIBRARY
+# note this is overwritten for multi-configuration by list: optimized;PATH;debug;PATH
+# rely on PYTHON_LIBRARY_RELEASE being defined if such a list is supplied
+if(PYTHON_LIBRARY AND NOT PYTHON_LIBRARY_RELEASE)
+  set(PYTHON_RELEASE_LIBRARY "${PYTHON_LIBRARY}")
+endif()
+
 foreach(_CURRENT_VERSION ${_Python_VERSIONS})
   string(REPLACE "." "" _CURRENT_VERSION_NO_DOTS ${_CURRENT_VERSION})
   if(WIN32)
@@ -148,7 +155,7 @@ foreach(_CURRENT_VERSION ${_Python_VERSIONS})
            ${dir}/Versions/${_CURRENT_VERSION}/lib)
     endforeach()
   endif()
-  find_library(PYTHON_LIBRARY
+  find_library(PYTHON_RELEASE_LIBRARY
     NAMES
       python${_CURRENT_VERSION_NO_DOTS}
       python${_CURRENT_VERSION}mu
@@ -165,7 +172,7 @@ foreach(_CURRENT_VERSION ${_Python_VERSIONS})
     NO_SYSTEM_ENVIRONMENT_PATH
   )
   # Look for the static library in the Python config directory
-  find_library(PYTHON_LIBRARY
+  find_library(PYTHON_RELEASE_LIBRARY
     NAMES python${_CURRENT_VERSION_NO_DOTS} python${_CURRENT_VERSION}
     # Avoid finding the .dll in the PATH.  We want the .lib.
     NO_SYSTEM_ENVIRONMENT_PATH
@@ -173,12 +180,18 @@ foreach(_CURRENT_VERSION ${_Python_VERSIONS})
     PATH_SUFFIXES python${_CURRENT_VERSION}/config
   )
 
+  if(PYTHON_RELEASE_LIBRARY)
+    set(PYTHON_LIBRARY_ANYCONFIG "${PYTHON_RELEASE_LIBRARY}")
+  elseif(PYTHON_DEBUG_LIBRARY)
+    set(PYTHON_LIBRARY_ANYCONFIG "${PYTHON_DEBUG_LIBRARY}")
+  endif()
+
   # Don't search for include dir until library location is known
-  if(PYTHON_LIBRARY)
+  if(PYTHON_LIBRARY_ANYCONFIG)
 
     # Use the library's install prefix as a hint
     set(_Python_INCLUDE_PATH_HINT)
-    get_filename_component(_Python_PREFIX ${PYTHON_LIBRARY} PATH)
+    get_filename_component(_Python_PREFIX ${PYTHON_LIBRARY_ANYCONFIG} PATH)
     get_filename_component(_Python_PREFIX ${_Python_PREFIX} PATH)
     if(_Python_PREFIX)
       set(_Python_INCLUDE_PATH_HINT ${_Python_PREFIX}/include)
@@ -221,7 +234,7 @@ foreach(_CURRENT_VERSION ${_Python_VERSIONS})
     unset(python_version_str)
   endif()
 
-  if(PYTHON_LIBRARY AND PYTHON_INCLUDE_DIR)
+  if(PYTHON_LIBRARY_ANYCONFIG AND PYTHON_INCLUDE_DIR)
     break()
   endif()
 endforeach()
@@ -245,7 +258,7 @@ set(PYTHON_DEBUG_LIBRARIES "${PYTHON_DEBUG_LIBRARY}")
 # These variables have been historically named in this module different from
 # what SELECT_LIBRARY_CONFIGURATIONS() expects.
 set(PYTHON_LIBRARY_DEBUG "${PYTHON_DEBUG_LIBRARY}")
-set(PYTHON_LIBRARY_RELEASE "${PYTHON_LIBRARY}")
+set(PYTHON_LIBRARY_RELEASE "${PYTHON_RELEASE_LIBRARY}")
 include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
 SELECT_LIBRARY_CONFIGURATIONS(PYTHON)
 # SELECT_LIBRARY_CONFIGURATIONS() sets ${PREFIX}_FOUND if it has a library.
-- 
2.8.0.windows.1

