mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-22 06:59:01 -06:00
FindPython: enhance windows registry handling
This commit is contained in:
@@ -14,6 +14,8 @@ cmake_policy(PUSH)
|
||||
cmake_policy (SET CMP0012 NEW)
|
||||
# IN_LIST operator
|
||||
cmake_policy (SET CMP0057 NEW)
|
||||
# registry view behavior
|
||||
cmake_policy (SET CMP0134 NEW)
|
||||
|
||||
if (NOT DEFINED _PYTHON_PREFIX)
|
||||
message (FATAL_ERROR "FindPython: INTERNAL ERROR")
|
||||
@@ -175,30 +177,31 @@ function (_PYTHON_GET_REGISTRIES _PYTHON_PGR_REGISTRY_PATHS)
|
||||
foreach (version IN LISTS _PGR_VERSION)
|
||||
string (REPLACE "." "" version_no_dots ${version})
|
||||
list (APPEND registries
|
||||
[HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${version}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath]
|
||||
[HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${version}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath])
|
||||
[HKEY_CURRENT_USER/SOFTWARE/Python/PythonCore/${version}-${_${_PYTHON_PREFIX}_ARCH}/InstallPath]
|
||||
[HKEY_CURRENT_USER/SOFTWARE/Python/PythonCore/${version}-${_${_PYTHON_PREFIX}_ARCH2}/InstallPath])
|
||||
if (version VERSION_GREATER_EQUAL "3.5")
|
||||
# cmake_host_system_information is not usable in bootstrap
|
||||
get_filename_component (arch "[HKEY_CURRENT_USER\\Software\\Python\\PythonCore\\${version};SysArchitecture]" NAME)
|
||||
if (arch MATCHES "(${_${_PYTHON_PREFIX}_ARCH}|${_${_PYTHON_PREFIX}_ARCH2})bit")
|
||||
list (APPEND registries
|
||||
[HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${version}\\InstallPath])
|
||||
[HKEY_CURRENT_USER/SOFTWARE/Python/PythonCore/${version}/InstallPath])
|
||||
endif()
|
||||
else()
|
||||
list (APPEND registries
|
||||
[HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${version}\\InstallPath])
|
||||
[HKEY_CURRENT_USER/SOFTWARE/Python/PythonCore/${version}/InstallPath])
|
||||
endif()
|
||||
list (APPEND registries
|
||||
[HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${version_no_dots}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath]
|
||||
[HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${version_no_dots}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath]
|
||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${version}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath]
|
||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${version}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath]
|
||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${version}\\InstallPath]
|
||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${version_no_dots}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath]
|
||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${version_no_dots}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath])
|
||||
[HKEY_CURRENT_USER/SOFTWARE/Python/ContinuumAnalytics/Anaconda${version_no_dots}-${_${_PYTHON_PREFIX}_ARCH}/InstallPath]
|
||||
[HKEY_CURRENT_USER/SOFTWARE/Python/ContinuumAnalytics/Anaconda${version_no_dots}-${_${_PYTHON_PREFIX}_ARCH2}/InstallPath]
|
||||
[HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${version}-${_${_PYTHON_PREFIX}_ARCH}/InstallPath]
|
||||
[HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${version}-${_${_PYTHON_PREFIX}_ARCH2}/InstallPath]
|
||||
[HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${version}/InstallPath]
|
||||
[HKEY_LOCAL_MACHINE/SOFTWARE/Python/ContinuumAnalytics/Anaconda${version_no_dots}-${_${_PYTHON_PREFIX}_ARCH}/InstallPath]
|
||||
[HKEY_LOCAL_MACHINE/SOFTWARE/Python/ContinuumAnalytics/Anaconda${version_no_dots}-${_${_PYTHON_PREFIX}_ARCH2}/InstallPath])
|
||||
endforeach()
|
||||
elseif (implementation STREQUAL "IronPython")
|
||||
foreach (version IN LISTS _PGR_VERSION)
|
||||
list (APPEND registries [HKEY_LOCAL_MACHINE\\SOFTWARE\\IronPython\\${version}\\InstallPath])
|
||||
list (APPEND registries [HKEY_LOCAL_MACHINE/SOFTWARE/IronPython/${version}/InstallPath])
|
||||
endforeach()
|
||||
endif()
|
||||
endforeach()
|
||||
@@ -1247,12 +1250,14 @@ if (DEFINED ${_PYTHON_PREFIX}_FIND_STRATEGY)
|
||||
endif()
|
||||
|
||||
# Python and Anaconda distributions: define which architectures can be used
|
||||
unset (_${_PYTHON_PREFIX}_REGISTRY_VIEW)
|
||||
if (CMAKE_SIZEOF_VOID_P)
|
||||
math (EXPR _${_PYTHON_PREFIX}_ARCH "${CMAKE_SIZEOF_VOID_P} * 8")
|
||||
if ("Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS
|
||||
OR "Development.Embed" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
|
||||
# In this case, search only for 64bit or 32bit
|
||||
set (_${_PYTHON_PREFIX}_ARCH2 ${_${_PYTHON_PREFIX}_ARCH})
|
||||
set (_${_PYTHON_PREFIX}_REGISTRY_VIEW REGISTRY_VIEW ${_${_PYTHON_PREFIX}_ARCH})
|
||||
else()
|
||||
if (_${_PYTHON_PREFIX}_ARCH EQUAL "32")
|
||||
set (_${_PYTHON_PREFIX}_ARCH2 64)
|
||||
@@ -1626,6 +1631,7 @@ if ("Interpreter" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
|
||||
HINTS ${_${_PYTHON_PREFIX}_HINTS}
|
||||
PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
|
||||
PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
|
||||
${_${_PYTHON_PREFIX}_REGISTRY_VIEW}
|
||||
NO_SYSTEM_ENVIRONMENT_PATH
|
||||
NO_CMAKE_SYSTEM_PATH)
|
||||
_python_validate_interpreter (${${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
|
||||
@@ -1676,6 +1682,7 @@ if ("Interpreter" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
|
||||
NAMES_PER_DIR
|
||||
PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
|
||||
PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
|
||||
${_${_PYTHON_PREFIX}_REGISTRY_VIEW}
|
||||
NO_DEFAULT_PATH)
|
||||
_python_validate_interpreter (${${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
|
||||
if (_${_PYTHON_PREFIX}_EXECUTABLE)
|
||||
@@ -1742,6 +1749,7 @@ if ("Interpreter" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
|
||||
HINTS ${_${_PYTHON_PREFIX}_HINTS}
|
||||
PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
|
||||
PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
|
||||
${_${_PYTHON_PREFIX}_REGISTRY_VIEW}
|
||||
NO_SYSTEM_ENVIRONMENT_PATH
|
||||
NO_CMAKE_SYSTEM_PATH)
|
||||
endif()
|
||||
@@ -1794,6 +1802,7 @@ if ("Interpreter" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
|
||||
NAMES_PER_DIR
|
||||
PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
|
||||
PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
|
||||
${_${_PYTHON_PREFIX}_REGISTRY_VIEW}
|
||||
NO_DEFAULT_PATH)
|
||||
endif()
|
||||
|
||||
@@ -2072,6 +2081,7 @@ if ("Compiler" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
|
||||
HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
|
||||
PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
|
||||
PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
|
||||
${_${_PYTHON_PREFIX}_REGISTRY_VIEW}
|
||||
NO_SYSTEM_ENVIRONMENT_PATH
|
||||
NO_CMAKE_SYSTEM_PATH)
|
||||
_python_validate_compiler (${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
|
||||
@@ -2123,6 +2133,7 @@ if ("Compiler" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
|
||||
NAMES_PER_DIR
|
||||
PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
|
||||
PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
|
||||
${_${_PYTHON_PREFIX}_REGISTRY_VIEW}
|
||||
NO_DEFAULT_PATH)
|
||||
_python_validate_compiler (${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
|
||||
if (_${_PYTHON_PREFIX}_COMPILER)
|
||||
@@ -2182,6 +2193,7 @@ if ("Compiler" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
|
||||
HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS}
|
||||
PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
|
||||
PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
|
||||
${_${_PYTHON_PREFIX}_REGISTRY_VIEW}
|
||||
NO_SYSTEM_ENVIRONMENT_PATH
|
||||
NO_CMAKE_SYSTEM_PATH)
|
||||
_python_validate_compiler (VERSION ${_${_PYTHON_PREFIX}_VERSION} ${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
|
||||
@@ -2223,6 +2235,7 @@ if ("Compiler" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS)
|
||||
NAMES_PER_DIR
|
||||
PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}
|
||||
PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES}
|
||||
${_${_PYTHON_PREFIX}_REGISTRY_VIEW}
|
||||
NO_DEFAULT_PATH)
|
||||
_python_validate_compiler (VERSION ${_${_PYTHON_PREFIX}_VERSION} ${_${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
|
||||
if (_${_PYTHON_PREFIX}_COMPILER)
|
||||
|
||||
Reference in New Issue
Block a user