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.
This commit is contained in:
David Gobbi 2015-09-14 22:48:49 -06:00 committed by Brad King
parent ea2db3bb02
commit a9d32dffb9
1 changed files with 36 additions and 19 deletions

View File

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