diff options
| author | Nat Goodspeed <nat@lindenlab.com> | 2022-08-23 17:21:31 -0400 | 
|---|---|---|
| committer | Nat Goodspeed <nat@lindenlab.com> | 2022-08-23 17:21:31 -0400 | 
| commit | 94c571887b853781efdb19f951c85ab7350f71a2 (patch) | |
| tree | 62481700ae55af71cc674f23fdff5d42d34287c1 | |
| parent | 7d996857cc04b83f73714fca3c723fd7528a688c (diff) | |
DRTVWR-558: Streamline and generalize Windows Python search.
| -rw-r--r-- | indra/cmake/Python.cmake | 36 | 
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() | 
