From a9d32dffb9397ce98806176f759fea4e77acf076 Mon Sep 17 00:00:00 2001
From: David Gobbi <david.gobbi@gmail.com>
Date: Mon, 14 Sep 2015 22:48:49 -0600
Subject: FindPythonLibs: Match include dir to library version

This commit ensures that FindPythonLibs has found the library before
before the search for the include dir begins.  The library prefix and
version can then be used to find the matching include dir.
---
 Modules/FindPythonLibs.cmake | 55 +++++++++++++++++++++++++++++---------------
 1 file changed, 36 insertions(+), 19 deletions(-)

diff --git a/Modules/FindPythonLibs.cmake b/Modules/FindPythonLibs.cmake
index 1c8776b..1220860 100644
--- a/Modules/FindPythonLibs.cmake
+++ b/Modules/FindPythonLibs.cmake
@@ -150,26 +150,41 @@ foreach(_CURRENT_VERSION ${_Python_VERSIONS})
     PATH_SUFFIXES python${_CURRENT_VERSION}/config
   )
 
-  set(PYTHON_FRAMEWORK_INCLUDES)
-  if(Python_FRAMEWORKS AND NOT PYTHON_INCLUDE_DIR)
-    foreach(dir ${Python_FRAMEWORKS})
-      list(APPEND PYTHON_FRAMEWORK_INCLUDES
-           ${dir}/Versions/${_CURRENT_VERSION}/include)
-    endforeach()
-  endif()
+  # Don't search for include dir until library location is known
+  if(PYTHON_LIBRARY)
+
+    # Use the library's install prefix as a hint
+    set(_Python_INCLUDE_PATH_HINT)
+    get_filename_component(_PREFIX ${PYTHON_LIBRARY} PATH)
+    get_filename_component(_PREFIX ${_PREFIX} PATH)
+    if(_PREFIX)
+      set(_Python_INCLUDE_PATH_HINT ${_PREFIX}/include)
+    endif()
 
-  find_path(PYTHON_INCLUDE_DIR
-    NAMES Python.h
-    PATHS
-      ${PYTHON_FRAMEWORK_INCLUDES}
-      [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/include
-      [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/include
-    PATH_SUFFIXES
-      python${_CURRENT_VERSION}mu
-      python${_CURRENT_VERSION}m
-      python${_CURRENT_VERSION}u
-      python${_CURRENT_VERSION}
-  )
+    # Add framework directories to the search paths
+    set(PYTHON_FRAMEWORK_INCLUDES)
+    if(Python_FRAMEWORKS AND NOT PYTHON_INCLUDE_DIR)
+      foreach(dir ${Python_FRAMEWORKS})
+        list(APPEND PYTHON_FRAMEWORK_INCLUDES
+          ${dir}/Versions/${_CURRENT_VERSION}/include)
+      endforeach()
+    endif()
+
+    find_path(PYTHON_INCLUDE_DIR
+      NAMES Python.h
+      HINTS
+        ${_Python_INCLUDE_PATH_HINT}
+      PATHS
+        ${PYTHON_FRAMEWORK_INCLUDES}
+        [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/include
+        [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/include
+      PATH_SUFFIXES
+        python${_CURRENT_VERSION}mu
+        python${_CURRENT_VERSION}m
+        python${_CURRENT_VERSION}u
+        python${_CURRENT_VERSION}
+    )
+  endif()
 
   # For backward compatibility, set PYTHON_INCLUDE_PATH.
   set(PYTHON_INCLUDE_PATH "${PYTHON_INCLUDE_DIR}")
@@ -187,6 +202,8 @@ foreach(_CURRENT_VERSION ${_Python_VERSIONS})
   endif()
 endforeach()
 
+unset(_Python_INCLUDE_PATH_HINT)
+
 mark_as_advanced(
   PYTHON_DEBUG_LIBRARY
   PYTHON_LIBRARY
-- 
cgit v0.12


From f8bc4e1118d133a45974a56239cfe768785ca09f Mon Sep 17 00:00:00 2001
From: David Gobbi <david.gobbi@gmail.com>
Date: Thu, 17 Sep 2015 08:22:27 -0600
Subject: FindPythonLibs: Use python executable prefix as a hint

If PYTHON_EXECUTABLE is set, then we should look for the libs in the
same prefix, e.g. /usr/local/python -> /usr/local/lib, and on Win32
/Python34/python.exe -> /Python34/libs.
---
 Modules/FindPythonLibs.cmake | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/Modules/FindPythonLibs.cmake b/Modules/FindPythonLibs.cmake
index 1220860..91cf49b 100644
--- a/Modules/FindPythonLibs.cmake
+++ b/Modules/FindPythonLibs.cmake
@@ -49,6 +49,23 @@
 # (To distribute this file outside of CMake, substitute the full
 #  License text for the above reference.)
 
+# Use the executable's path as a hint
+set(_Python_LIBRARY_PATH_HINT)
+if(PYTHON_EXECUTABLE)
+  if(WIN32)
+    get_filename_component(_PREFIX ${PYTHON_EXECUTABLE} PATH)
+    if(_PREFIX)
+      set(_Python_LIBRARY_PATH_HINT ${_PREFIX}/libs)
+    endif()
+  else()
+    get_filename_component(_PREFIX ${PYTHON_EXECUTABLE} PATH)
+    get_filename_component(_PREFIX ${_PREFIX} PATH)
+    if(_PREFIX)
+      set(_Python_LIBRARY_PATH_HINT ${_PREFIX}/lib)
+    endif()
+  endif()
+endif()
+
 include(${CMAKE_CURRENT_LIST_DIR}/CMakeFindFrameworks.cmake)
 # Search for the python framework on Apple.
 CMAKE_FIND_FRAMEWORKS(Python)
@@ -112,6 +129,7 @@ foreach(_CURRENT_VERSION ${_Python_VERSIONS})
   if(WIN32)
     find_library(PYTHON_DEBUG_LIBRARY
       NAMES python${_CURRENT_VERSION_NO_DOTS}_d python
+      HINTS ${_Python_LIBRARY_PATH_HINT}
       PATHS
       [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs/Debug
       [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs/Debug
@@ -134,6 +152,8 @@ foreach(_CURRENT_VERSION ${_Python_VERSIONS})
       python${_CURRENT_VERSION}m
       python${_CURRENT_VERSION}u
       python${_CURRENT_VERSION}
+    HINTS
+      ${_Python_LIBRARY_PATH_HINT}
     PATHS
       ${PYTHON_FRAMEWORK_LIBRARIES}
       [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs
@@ -203,6 +223,7 @@ foreach(_CURRENT_VERSION ${_Python_VERSIONS})
 endforeach()
 
 unset(_Python_INCLUDE_PATH_HINT)
+unset(_Python_LIBRARY_PATH_HINT)
 
 mark_as_advanced(
   PYTHON_DEBUG_LIBRARY
-- 
cgit v0.12


From 19934b67e96c91f927a1887ce85a3e6b30b2f9a0 Mon Sep 17 00:00:00 2001
From: David Gobbi <david.gobbi@gmail.com>
Date: Thu, 17 Sep 2015 10:00:03 -0600
Subject: FindPythonLibs: unset temporary _PREFIX variable

To avoid pollution, unset variables that are only meant for local use.
---
 Modules/FindPythonLibs.cmake | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/Modules/FindPythonLibs.cmake b/Modules/FindPythonLibs.cmake
index 91cf49b..68e1228 100644
--- a/Modules/FindPythonLibs.cmake
+++ b/Modules/FindPythonLibs.cmake
@@ -53,16 +53,18 @@
 set(_Python_LIBRARY_PATH_HINT)
 if(PYTHON_EXECUTABLE)
   if(WIN32)
-    get_filename_component(_PREFIX ${PYTHON_EXECUTABLE} PATH)
-    if(_PREFIX)
-      set(_Python_LIBRARY_PATH_HINT ${_PREFIX}/libs)
+    get_filename_component(_Python_PREFIX ${PYTHON_EXECUTABLE} PATH)
+    if(_Python_PREFIX)
+      set(_Python_LIBRARY_PATH_HINT ${_Python_PREFIX}/libs)
     endif()
+    unset(_Python_PREFIX)
   else()
-    get_filename_component(_PREFIX ${PYTHON_EXECUTABLE} PATH)
-    get_filename_component(_PREFIX ${_PREFIX} PATH)
-    if(_PREFIX)
-      set(_Python_LIBRARY_PATH_HINT ${_PREFIX}/lib)
+    get_filename_component(_Python_PREFIX ${PYTHON_EXECUTABLE} PATH)
+    get_filename_component(_Python_PREFIX ${_Python_PREFIX} PATH)
+    if(_Python_PREFIX)
+      set(_Python_LIBRARY_PATH_HINT ${_Python_PREFIX}/lib)
     endif()
+    unset(_Python_PREFIX)
   endif()
 endif()
 
@@ -175,11 +177,12 @@ foreach(_CURRENT_VERSION ${_Python_VERSIONS})
 
     # Use the library's install prefix as a hint
     set(_Python_INCLUDE_PATH_HINT)
-    get_filename_component(_PREFIX ${PYTHON_LIBRARY} PATH)
-    get_filename_component(_PREFIX ${_PREFIX} PATH)
-    if(_PREFIX)
-      set(_Python_INCLUDE_PATH_HINT ${_PREFIX}/include)
+    get_filename_component(_Python_PREFIX ${PYTHON_LIBRARY} PATH)
+    get_filename_component(_Python_PREFIX ${_Python_PREFIX} PATH)
+    if(_Python_PREFIX)
+      set(_Python_INCLUDE_PATH_HINT ${_Python_PREFIX}/include)
     endif()
+    unset(_Python_PREFIX)
 
     # Add framework directories to the search paths
     set(PYTHON_FRAMEWORK_INCLUDES)
-- 
cgit v0.12