diff --git a/dtool/Package.cmake b/dtool/Package.cmake index 2990f448cc..391da573b2 100644 --- a/dtool/Package.cmake +++ b/dtool/Package.cmake @@ -79,17 +79,6 @@ if(THIRDPARTY_DIRECTORY) set(CMAKE_FIND_FRAMEWORK LAST) elseif(WIN32) - if(CMAKE_SIZEOF_VOID_P EQUAL 8) - file(GLOB _python_dirs "${THIRDPARTY_DIRECTORY}/win-python*-x64") - else() - file(GLOB _python_dirs "${THIRDPARTY_DIRECTORY}/win-python*") - endif() - - list(REVERSE _python_dirs) # Descending order of version - if(NOT DEFINED Python_ROOT) - set(Python_ROOT "${_python_dirs}") - endif() - set(BISON_ROOT "${THIRDPARTY_DIRECTORY}/win-util") set(FLEX_ROOT "${THIRDPARTY_DIRECTORY}/win-util") @@ -212,6 +201,27 @@ if(DEFINED _PREV_WANT_PYTHON_VERSION endif() +# Look for Python in the thirdparty directory on Windows. +if(WIN32 AND THIRDPARTY_DIRECTORY) + set(_python_dir_suffix "") + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_python_dir_suffix "-x64") + endif() + + if(WANT_PYTHON_VERSION) + set(Python_ROOT_DIR "${THIRDPARTY_DIRECTORY}/win-python${WANT_PYTHON_VERSION}${_python_dir_suffix}") + else() + # CMake doesn't support NATURAL sorting until 3.18, so we sort the 3.1x + # versions separately from the prior versions. + file(GLOB _python_dirs "${THIRDPARTY_DIRECTORY}/win-python3.[0-9][0-9]${_python_dir_suffix}") + file(GLOB _python_dirs2 "${THIRDPARTY_DIRECTORY}/win-python3.[0-9]${_python_dir_suffix}") + list(SORT _python_dirs COMPARE FILE_BASENAME CASE INSENSITIVE ORDER DESCENDING) + list(SORT _python_dirs2 COMPARE FILE_BASENAME CASE INSENSITIVE ORDER DESCENDING) + list(APPEND _python_dirs ${_python_dirs2}) + set(Python_ROOT_DIR "${_python_dirs}") + endif() +endif() + if(WANT_PYTHON_VERSION) # A specific version is requested; ensure we get that specific version list(APPEND WANT_PYTHON_VERSION "EXACT")