diff --git a/build_scripts/win/build.py b/build_scripts/win/build.py index 87137c5..32dacb6 100644 --- a/build_scripts/win/build.py +++ b/build_scripts/win/build.py @@ -90,7 +90,7 @@ def deploy(): set_dirs() say("Testing if all required build environment variables are set:") - QT_LOC = get_required_env_var_path(QT_LOC_VAR_NAME, QT_LOC_DEFAULT) + QT_LOC = find_qt_path() say("All required build environment values are set.") if is_env_var_set(BUILD_DEBUG_VAR_NAME): @@ -153,13 +153,13 @@ def build(): COMPILE_MODE = "" COMPILER = "" - + say("Attempting to build version: " + VERSION_STRING) - + say("Testing if all required build environment variables are set:") - QT_LOC = get_required_env_var_path(QT_LOC_VAR_NAME, QT_LOC_DEFAULT) + QT_LOC = find_qt_path() VS_LOC = get_required_env_var_path(VS_LOC_VAR_NAME, VS_LOC_DEFAULT) - + if is_env_var_set(BUILD_CLANG_VAR_NAME): say(f"{BUILD_CLANG_VAR_NAME} defined. Building for win32-clang-msvc.") get_required_env_var_path(LLVM_LOC_VAR_NAME, LLVM_LOC_DEFAULT) diff --git a/build_scripts/win/common.py b/build_scripts/win/common.py index 2057909..f6fb9aa 100644 --- a/build_scripts/win/common.py +++ b/build_scripts/win/common.py @@ -7,6 +7,7 @@ import argparse import subprocess import shutil import distutils.dir_util +import string def get_version_string(): dir_path = os.path.dirname(os.path.realpath(__file__)) @@ -123,6 +124,46 @@ def get_required_env_var_path(env_var_name: str, default_env_var_value: str): say(f"{env_var_name} exists.") return path +def find_qt_path(): + if is_env_var_set(QT_LOC_VAR_NAME): + say(f"{QT_LOC_VAR_NAME} is defined. Attempting to find first.") + qt_path = os.getenv(QT_LOC_VAR_NAME).replace('"', '') + say(f"{QT_LOC_VAR_NAME} is set to '{qt_path}'.") + if os.path.exists(qt_path): + say(f"'{qt_path}' exists. Using this path.") + return qt_path + else: + say(f"'{qt_path}' does not exist, attempting to traverse filesystem.") + + qt_path = traverse_and_find_qt_path() + if qt_path == "NOTFOUND": + say("Qt path could not be find by traversal. Exiting.") + exit_on_error(EXIT_CODE_FAILURE_BUILD_LOCATION) + + return qt_path + +def traverse_and_find_qt_path(): + qt_folder_name = r":\\Qt\\" + qt_visual_studio_name = r"\\msvc2017_64\bin\\" + qt_major_version = 5 + qt_minor_versions = [12, 13, 14, 15, 16] + qt_patch_versions = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + # We search the A and B drive letters even though it's + # unlikely for the install to be there + windows_drive_letters = string.ascii_uppercase + for drive in windows_drive_letters: + # Go in reverse because we want the highest versions first + for minor in reversed(qt_minor_versions): + for patch in reversed(qt_patch_versions): + version = str(qt_major_version) + "." + str(minor) + "." + str(patch) + path = str(drive) + qt_folder_name + version + qt_visual_studio_name + if os.path.exists(path): + say("Found QT path: '" + path + "'") + return path + say("Did not find any valid QT path.") + return "NOTFOUND" + + def create_batch_file(): """ Creates a batch file in the dir. Must be called by another outside batch file.