1
0
mirror of https://github.com/alliedmodders/metamod-source.git synced 2024-12-03 15:24:15 +01:00
HLMetaModOfficial/support/buildbot/bootstrap.py
2023-10-13 21:30:02 -07:00

106 lines
3.0 KiB
Python

# 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()