mirror of
https://github.com/alliedmodders/metamod-source.git
synced 2025-02-27 20:54:14 +01:00
This also moves env var control back into the local build, so we don't have to restart buildbot to change that.
104 lines
2.9 KiB
Python
104 lines
2.9 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)
|
|
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.isdir(os.path.join(amb2_dir, 'graph')):
|
|
return True
|
|
if not os.path.isdir(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[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',
|
|
'--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()
|