From b8066677171bf3b4f4d860992ed45c4c6a596b51 Mon Sep 17 00:00:00 2001 From: Vasily Date: Wed, 2 Jan 2019 19:37:53 +0100 Subject: [PATCH] Use python build script --- build_scripts/win/build.cmd | 8 +- build_scripts/win/build.py | 141 +++++++----------------------------- build_scripts/win/common.py | 133 ++++++++++++++++++++++++++++++++++ 3 files changed, 166 insertions(+), 116 deletions(-) create mode 100644 build_scripts/win/common.py diff --git a/build_scripts/win/build.cmd b/build_scripts/win/build.cmd index 1118d41..f821e4c 100644 --- a/build_scripts/win/build.cmd +++ b/build_scripts/win/build.cmd @@ -112,4 +112,10 @@ IF EXIST %JOM_LOC% ( CD %original_dir% -ECHO %current_activity%: %current_activity% DONE. \ No newline at end of file +ECHO %current_activity%: %current_activity% DONE. +======= +@ECHO OFF +python build.py +call test.bat +rm test.bat +PAUSE diff --git a/build_scripts/win/build.py b/build_scripts/win/build.py index 174da6a..80602ac 100644 --- a/build_scripts/win/build.py +++ b/build_scripts/win/build.py @@ -1,121 +1,31 @@ import os -import sys -import argparse -import subprocess - -#Const globals -EXIT_CODE_SUCCESS = 0 -EXIT_CODE_FAILURE_BUILD_APP = 1 -EXIT_CODE_FAILURE_BUILD_LOCATION = 2 - -QT_LOC_VAR_NAME = "QT_LOC" -VS_LOC_VAR_NAME = "VS_LOC" -JOM_LOC_VAR_NAME = "JOM_LOC" -ZIP_LOC_VAR_NAME = "ZIP_LOC" -NSIS_LOC_VAR_NAME = "NSIS_LOC" -LLVM_LOC_VAR_NAME = "LLVM_LOC" - -QT_LOC_DEFAULT = r"C:\Qt\5.11.1\msvc2017_64\bin\"" -VS_LOC_DEFAULT = r"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" -JOM_LOC_DEFAULT = r"C:\Qt\Tools\QtCreator\bin\jom.exe" -ZIP_LOC_DEFAULT = r"C:\Program Files\7-Zip\7z.exe" -NSIS_LOC_DEFAULT = r"C:\Program Files (x86)\NSIS\"" -LLVM_LOC_DEFAULT = r"C:\Program Files\LLVM\bin\"" - -ORIGINAL_DIR = os.getcwd() -PROJECT_DIR = os.path.abspath(os.path.join(ORIGINAL_DIR , "..\..")) - -PLATFORM_TARGET = "AMD64" - -#Mutable globals -current_activity = "" - -bat_file_contents = "" - - -###### Utility funcs - -def say(message: str): - print(current_activity + ": " + message) - -def say_error(message: str): - print(current_activity + ": " + message) - -def exit_on_error(error_number): - os.chdir(ORIGINAL_DIR) - sys.exit(error_number) - -def get_env_var_and_test_validity(env_var_name: str, default_env_var_value: str): - if not is_env_var_set(env_var_name): - say(f"{env_var_name} not defined. Using default value.") - path = default_env_var_value - else: - path = os.getenv(env_var_name) - say(f"{env_var_name} set to '{path}'") - if not os.path.exists(path): - say_error(f"{env_var_name} does not exist. Exiting") - exit_on_error(EXIT_CODE_FAILURE_BUILD_LOCATION) - say(f"{env_var_name} exists.") - return path - -def is_env_var_set(env_var_name: str): - var = os.getenv(env_var_name) - if var is None: - return False - return True - -def run_process(process: list): - proc = subprocess.run(process, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - print("STDOUT:") - print(proc.stdout.decode("utf-8")) - print("STDERR:") - print(proc.stderr.decode("utf-8")) - if proc.returncode != 0: - exit_on_error(proc.returncode) - -def add_line_to_run_bat_file(line: str): - global bat_file_contents - bat_file_contents += line + "\n" - -def add_error_handling_line_to_bat_file(): - global bat_file_contents - bat_file_contents += "IF ERRORLEVEL 1 EXIT /B " + str(EXIT_CODE_FAILURE_BUILD_APP) + "\n" - -def create_batch_file(): - file = open("test.bat", "w+") - file.write(bat_file_contents) - file.close() - -###### End of utility funcs +from common import * def build(): - #Mutable global variables are bad, mmkay - global current_activity - current_activity = "BUILD" + set_current_activity("BUILD") + set_original_folder(os.getcwd()) + set_project_folder(os.path.abspath(os.path.join(ORIGINAL_DIR , "..\.."))) + COMPILE_MODE = "" COMPILER = "" say("Testing if all required build environment variables are set:") - QT_LOC = get_env_var_and_test_validity(QT_LOC_VAR_NAME, QT_LOC_DEFAULT) - VS_LOC = get_env_var_and_test_validity(VS_LOC_VAR_NAME, VS_LOC_DEFAULT) + QT_LOC = get_required_env_var_path(QT_LOC_VAR_NAME, QT_LOC_DEFAULT) + VS_LOC = get_required_env_var_path(VS_LOC_VAR_NAME, VS_LOC_DEFAULT) - if is_env_var_set("BUILD_CLANG"): - say("BUILD_CLANG defined. Building for win32-clang-msvc.") - get_env_var_and_test_validity(LLVM_LOC_VAR_NAME, LLVM_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) COMPILER = "win32-clang-msvc" else: - say("BUILD_CLANG not defined. Building for msvc.") + say(f"{BUILD_CLANG_VAR_NAME} not defined. Building for msvc.") COMPILER = "win32-msvc" say("All required build environment values are set.") - say("Testing optional build environment variables:") + #Otherwise qmake gets confused + add_line_to_run_bat_file("cd " + get_project_dir()) - add_line_to_run_bat_file("cd " + PROJECT_DIR) - - #SET UP VS say("Adding 'vcvarsall.bat' to batch file.") add_line_to_run_bat_file("@ECHO Setting up environment with Visual Studio 'vcvarsall.bat':") add_line_to_run_bat_file("call " + '"' + VS_LOC + '"' + " " + PLATFORM_TARGET) @@ -125,21 +35,21 @@ def build(): QMAKE_LOC = QT_LOC + r"\qmake.exe" - if is_env_var_set("BUILD_VSPROJ"): - say("BUILD_VSPROJ defined. Building Visual Studio project files.") + if is_env_var_set(BUILD_VSPROJ_VAR_NAME): + say(f"{BUILD_VSPROJ_VAR_NAME} defined. Building Visual Studio project files.") add_line_to_run_bat_file("@ECHO Running Visual Studio project file building:") add_line_to_run_bat_file('"' + QMAKE_LOC + '"' + " -tp vc") add_error_handling_line_to_bat_file() add_line_to_run_bat_file("@ECHO Done building Visual Studio project files.") else: - say("BUILD_VSPROJ not defined. Not building Visual Studio project files.") + say(f"{BUILD_VSPROJ_VAR_NAME} not defined. Not building Visual Studio project files.") - if is_env_var_set("BUILD_DEBUG"): + if is_env_var_set(BUILD_DEBUG_VAR_NAME): COMPILE_MODE = "debug" - say("BUILD_DEBUG defined. Building '{COMPILE_MODE}' version.") + say(f"{BUILD_DEBUG_VAR_NAME} defined. Building '{COMPILE_MODE}' version.") else: COMPILE_MODE = "release" - say("BUILD_DEBUG not defined. Building '{COMPILE_MODE}' version.") + say(f"{BUILD_DEBUG_VAR_NAME} not defined. Building '{COMPILE_MODE}' version.") add_line_to_run_bat_file("@ECHO Running qmake:") add_line_to_run_bat_file('"' + QMAKE_LOC + '"' + " -spec " + COMPILER + " CONFIG+=X86_64 " + "CONFIG+=" + COMPILE_MODE) @@ -169,12 +79,13 @@ def build(): add_line_to_run_bat_file("@ECHO nmake done.") say("nmake added to batch file.") - create_and_run_batch_file() + add_line_to_run_bat_file("cd " + get_original_dir()) + + create_batch_file() if __name__ == "__main__": build() - #parser = argparse.ArgumentParser(description='Builds OpenVR Advanced Settings on Windows.') - #parser.add_argument('action', type=str, help='action to perform. Can be build, deploy, package or format') - #args = parser.parse_args() - #if args.action == "build": - # build() + + + + diff --git a/build_scripts/win/common.py b/build_scripts/win/common.py new file mode 100644 index 0000000..72a6904 --- /dev/null +++ b/build_scripts/win/common.py @@ -0,0 +1,133 @@ +""" +Utility functions for building OpenVR Advanced Settings. +""" +import os +import sys +import argparse +import subprocess + +#Const globals +EXIT_CODE_SUCCESS = 0 +EXIT_CODE_FAILURE_BUILD_APP = 1 +EXIT_CODE_FAILURE_BUILD_LOCATION = 2 + +QT_LOC_VAR_NAME = "QT_LOC" +VS_LOC_VAR_NAME = "VS_LOC" +JOM_LOC_VAR_NAME = "JOM_LOC" +ZIP_LOC_VAR_NAME = "ZIP_LOC" +NSIS_LOC_VAR_NAME = "NSIS_LOC" +LLVM_LOC_VAR_NAME = "LLVM_LOC" + +QT_LOC_DEFAULT = r"C:\Qt\5.11.1\msvc2017_64\bin\"" +VS_LOC_DEFAULT = r"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" +JOM_LOC_DEFAULT = r"C:\Qt\Tools\QtCreator\bin\jom.exe" +ZIP_LOC_DEFAULT = r"C:\Program Files\7-Zip\7z.exe" +NSIS_LOC_DEFAULT = r"C:\Program Files (x86)\NSIS\"" +LLVM_LOC_DEFAULT = r"C:\Program Files\LLVM\bin\"" + +BUILD_CLANG_VAR_NAME = "BUILD_CLANG" +BUILD_VSPROJ_VAR_NAME = "BUILD_VSPROJ" +BUILD_DEBUG_VAR_NAME = "BUILD_DEBUG" + +PLATFORM_TARGET = "AMD64" + +#Mutable globals +ORIGINAL_DIR = "" +PROJECT_DIR = "" + +current_activity = "" + +bat_file_contents = "" + +def set_current_activity(activity: str): + global current_activity + current_activity = activity + +def say(message: str): + global current_activity + print(current_activity + ": " + message) + +def say_error(message: str): + global current_activity + print(current_activity + ": " + message) + +def is_env_var_set(env_var_name: str): + var = os.getenv(env_var_name) + if var is None: + return False + return True + +def add_line_to_run_bat_file(line: str): + global bat_file_contents + bat_file_contents += line + "\n" + +def add_error_handling_line_to_bat_file(): + global bat_file_contents + bat_file_contents += "IF ERRORLEVEL 1 EXIT /B " + str(EXIT_CODE_FAILURE_BUILD_APP) + "\n" + +def get_required_env_var_path(env_var_name: str, default_env_var_value: str): + if not is_env_var_set(env_var_name): + say(f"{env_var_name} not defined. Using default value.") + path = default_env_var_value.replace('"', '') + else: + path = os.getenv(env_var_name).replace('"', '') + say(f"{env_var_name} set to '{path}'") + if not os.path.exists(path): + say_error(f"{env_var_name} does not exist. Exiting") + exit_on_error(EXIT_CODE_FAILURE_BUILD_LOCATION) + say(f"{env_var_name} exists.") + return path + +def create_batch_file(): + file = open("test.bat", "w+") + file.write(bat_file_contents) + file.close() + +def exit_on_error(error_number): + sys.exit(error_number) + +def set_original_folder(path): + global ORIGINAL_DIR + ORIGINAL_DIR = path + +def set_project_folder(path): + global PROJECT_DIR + PROJECT_DIR = path + +def get_project_dir(): + return PROJECT_DIR + +def get_original_dir(): + return ORIGINAL_DIR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file