# vim: set sw=4 sts=4 ts=4 sw=99 et: from contextlib import contextmanager import argparse import json import os import platform import shutil import subprocess @contextmanager def Chdir(path): old = os.getcwd() os.chdir(path) print('> cd {} # {}'.format(path, os.getcwd())) try: yield finally: os.chdir(old) def run_shell(argv, env = None): if type(argv) is str: print('> {}'.format(argv)) shell = True else: print('> {}'.format(' '.join(argv))) shell = False try: output = subprocess.check_output(argv, stderr = subprocess.STDOUT, env = env, shell = shell) except subprocess.CalledProcessError as cpe: if not shell: print(cpe.output.decode('utf-8', 'ignore')) raise print(output.decode('utf-8', 'ignore')) def output_needs_cleaning(): if not os.path.isdir('OUTPUT'): return False amb2_dir = os.path.join('OUTPUT', '.ambuild2') if not os.path.exists(os.path.join(amb2_dir, 'graph')): return True if not os.path.exists(os.path.join(amb2_dir, 'vars')): return True return False def main(): parser = argparse.ArgumentParser() parser.add_argument('--config', type = str, required = True, help = 'Buildbot slave name') parser.add_argument('--hl2sdk-root', type = str, required = True, help = 'hl2sdk collection') parser.add_argument('--python-cmd', type = str, required = True, default = 'python3', help = 'Python command') args = parser.parse_args() run_shell("git submodule update --init --recursive") source = os.getcwd() with open(os.path.join('support', 'buildbot', 'buildconfig.json'), 'rt') as fp: config_root = json.load(fp) config = config_root.get(args.config, {}) # Set build properties. build_env = os.environ.copy() for env_var in ['CC', 'CXX']: if env_var not in config: continue build_env[env_var] = config[env_var] if platform.system() == 'Windows': hl2sdk_root = '/Volumes/hgshare' python_cmd = "C:\\Python38\\Python.exe" elif platform.system() == 'Linux': hl2sdk_root = '/hgshare' python_cmd = "python3" elif platform.system() == 'Windows': hl2sdk_root = 'H:\\' python_cmd = "python3" config_argv = [ args.python_cmd, os.path.join(source, 'configure.py'), '--enable-optimize', '--breakpad-dump', '--no-color', '--symbol-files', '--targets=x86,x86_64', '--sdks=all', '--out=OUTPUT', '--hl2sdk-root={}'.format(args.hl2sdk_root), ] print("Attempting to reconfigure...") with Chdir('..'): if output_needs_cleaning(): shutil.rmtree('OUTPUT') if not os.path.isdir('OUTPUT'): os.makedirs('OUTPUT') run_shell(config_argv, env = build_env) if __name__ == '__main__': main()