summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2022-08-23 17:21:31 -0400
committerNat Goodspeed <nat@lindenlab.com>2022-08-23 17:21:31 -0400
commit94c571887b853781efdb19f951c85ab7350f71a2 (patch)
tree62481700ae55af71cc674f23fdff5d42d34287c1
parent7d996857cc04b83f73714fca3c723fd7528a688c (diff)
DRTVWR-558: Streamline and generalize Windows Python search.
-rw-r--r--indra/cmake/Python.cmake36
1 files changed, 26 insertions, 10 deletions
diff --git a/indra/cmake/Python.cmake b/indra/cmake/Python.cmake
index 5be3cbdf11..dbf5033ce5 100644
--- a/indra/cmake/Python.cmake
+++ b/indra/cmake/Python.cmake
@@ -5,20 +5,36 @@ set(PYTHONINTERP_FOUND)
if (WINDOWS)
# On Windows, explicitly avoid Cygwin Python.
+ # if the user has their own version of Python installed, prefer that
+ foreach(hive HKEY_CURRENT_USER HKEY_LOCAL_MACHINE)
+ # prefer more recent Python versions to older ones, if multiple versions
+ # are installed
+ foreach(pyver 3.11 3.10 3.9 3.8 3.7)
+ list(APPEND regpaths "[${hive}\\SOFTWARE\\Python\\PythonCore\\${pyver}\\InstallPath]")
+ endforeach()
+ endforeach()
+
+ # TODO: This logic has the disadvantage that if you have multiple versions
+ # of Python installed, the selected path won't necessarily be the newest -
+ # e.g. this GLOB will prefer Python310 to Python311. But since pymaybe is
+ # checked AFTER the registry entries, this will only surface as a problem if
+ # no installed Python appears in the registry.
+ file(GLOB pymaybe
+ "$ENV{PROGRAMFILES}/Python*"
+## "$ENV{PROGRAMFILES(X86)}/Python*"
+ # The Windows environment variable is in fact as shown above, but CMake
+ # disallows querying an environment variable containing parentheses -
+ # thanks, Windows. Fudge by just appending " (x86)" to $PROGRAMFILES and
+ # hoping for the best.
+ "$ENV{PROGRAMFILES} (x86)/Python*"
+ "c:/Python*")
+
find_program(python
NAMES python3.exe python.exe
NO_DEFAULT_PATH # added so that cmake does not find cygwin python
PATHS
- [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\3.7\\InstallPath]
- [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\3.8\\InstallPath]
- [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\3.9\\InstallPath]
- [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\3.10\\InstallPath]
- [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\3.11\\InstallPath]
- [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\3.7\\InstallPath]
- [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\3.8\\InstallPath]
- [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\3.9\\InstallPath]
- [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\3.10\\InstallPath]
- [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\3.11\\InstallPath]
+ ${regpaths}
+ ${pymaybe}
)
include(FindPythonInterp)
else()