More work on prefab system

This commit is contained in:
Eric Froemling 2020-10-11 14:53:48 -07:00
parent 1a7c0ef728
commit 24cc7e9e99
6 changed files with 197 additions and 238 deletions

View File

@ -3948,8 +3948,8 @@
"build/prefab/lib/linux_x86_64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/32/03/d4dd9c398eab7c7da62b2e7a4096",
"build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/11/f5/cb2b3a42e4384d6ac4dfe7a98213",
"build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/06/aa/fc55996ce9a1a3e898d1348873ff",
"build/prefab/lib/mac_x86_64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f7/16/01f6978b6262c3033aadfb4ad24f",
"build/prefab/lib/mac_x86_64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d8/21/d65fb091c26cc7b683768ea19705",
"build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/13/0c/a2f421ae193496383524772a1e76",
"build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c9/a7/f55ab74860ab4f6ef4983e144e76"
"build/prefab/lib/mac_x86_64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/41/6b/19bf8c7fa531a27076d1c0babaff",
"build/prefab/lib/mac_x86_64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fd/66/69bc3327543d711753013b9fc821",
"build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/80/37/41e0842744af078a54e2477045e0",
"build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/cf/f5/f2df776067491dbc09500c9c3966"
}

View File

@ -541,6 +541,7 @@
<w>dstattr</w>
<w>dstbase</w>
<w>dstdata</w>
<w>dstdirname</w>
<w>dstfile</w>
<w>dstfin</w>
<w>dstjson</w>
@ -1098,6 +1099,7 @@
<w>levelname</w>
<w>lfull</w>
<w>lfval</w>
<w>libballisticacore</w>
<w>libcrypto</w>
<w>libdir</w>
<w>libegl</w>
@ -1262,6 +1264,7 @@
<w>modders</w>
<w>modename</w>
<w>modestr</w>
<w>modeval</w>
<w>modpack</w>
<w>modtimes</w>
<w>moduledir</w>
@ -1794,6 +1797,7 @@
<w>servercfg</w>
<w>servercmd</w>
<w>serverdialog</w>
<w>serverdst</w>
<w>serverget</w>
<w>servermanager</w>
<w>servermode</w>

166
Makefile
View File

@ -235,32 +235,11 @@ prefab-mac-arm64-server-debug: prefab-mac-arm64-server-debug-build
prefab-mac-x86-64-server-debug-build: prereqs assets-cmake \
build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless \
build/prefab/full/mac_x86_64_server/debug/ballisticacore_server \
build/prefab/full/mac_x86_64_server/debug/config_template.yaml \
build/prefab/full/mac_x86_64_server/debug/README.txt
@${STAGE_ASSETS} -cmakeserver build/prefab/full/mac_x86_64_server/debug/dist
@${STAGE_ASSETS} -cmakeserver -debug build/prefab/full/mac_x86_64_server/debug
prefab-mac-arm64-server-debug-build: prereqs assets-cmake \
build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless \
build/prefab/full/mac_arm64_server/debug/ballisticacore_server \
build/prefab/full/mac_arm64_server/debug/config_template.yaml \
build/prefab/full/mac_arm64_server/debug/README.txt
@${STAGE_ASSETS} -cmakeserver build/prefab/full/mac_arm64_server/debug/dist
build/prefab/full/mac_%_server/debug/ballisticacore_server: \
assets/src/server/ballisticacore_server.py tools/batools/pcommand.py
@tools/pcommand stage_server_file debug $< $@
build/prefab/full/mac_%_server/debug/config_template.yaml: \
assets/src/server/config_template.yaml \
tools/batools/build.py \
tools/batools/pcommand.py \
tools/bacommon/servermanager.py
@tools/pcommand stage_server_file debug $< $@
build/prefab/full/mac_%_server/debug/README.txt: \
assets/src/server/README.txt
@cp $< $@
@${STAGE_ASSETS} -cmakeserver -debug build/prefab/full/mac_arm64_server/debug
build/prefab/full/mac_%_server/debug/dist/ballisticacore_headless: .efrocachemap
@tools/pcommand efrocache_get $@
@ -286,32 +265,13 @@ prefab-mac-arm64-server-release: prefab-mac-arm64-server-release-build
prefab-mac-x86-64-server-release-build: prereqs assets-cmake \
build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless \
build/prefab/full/mac_x86_64_server/release/ballisticacore_server \
build/prefab/full/mac_x86_64_server/release/config_template.yaml \
build/prefab/full/mac_x86_64_server/release/README.txt
@${STAGE_ASSETS} -cmakeserver build/prefab/full/mac_x86_64_server/release/dist
@${STAGE_ASSETS} -cmakeserver -release \
build/prefab/full/mac_x86_64_server/release
prefab-mac-arm64-server-release-build: prereqs assets-cmake \
build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless \
build/prefab/full/mac_arm64_server/release/ballisticacore_server \
build/prefab/full/mac_arm64_server/release/config_template.yaml \
build/prefab/full/mac_arm64_server/release/README.txt
@${STAGE_ASSETS} -cmakeserver build/prefab/full/mac_arm64_server/release/dist
build/prefab/full/mac_%_server/release/ballisticacore_server: \
assets/src/server/ballisticacore_server.py tools/batools/pcommand.py
@tools/pcommand stage_server_file release $< $@
build/prefab/full/mac_%_server/release/config_template.yaml: \
assets/src/server/config_template.yaml \
tools/batools/build.py \
tools/batools/pcommand.py \
tools/bacommon/servermanager.py
@tools/pcommand stage_server_file release $< $@
build/prefab/full/mac_%_server/release/README.txt: \
assets/src/server/README.txt
@cp $< $@
@${STAGE_ASSETS} -cmakeserver -release \
build/prefab/full/mac_arm64_server/release
build/prefab/full/mac_%_server/release/dist/ballisticacore_headless: .efrocachemap
@tools/pcommand efrocache_get $@
@ -397,32 +357,13 @@ prefab-linux-arm64-server-debug: prefab-linux-arm64-server-debug-build
prefab-linux-x86-64-server-debug-build: prereqs assets-cmake \
build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless \
build/prefab/full/linux_x86_64_server/debug/ballisticacore_server \
build/prefab/full/linux_x86_64_server/debug/config_template.yaml \
build/prefab/full/linux_x86_64_server/debug/README.txt
@${STAGE_ASSETS} -cmakeserver build/prefab/full/linux_x86_64_server/debug/dist
@${STAGE_ASSETS} -cmakeserver -debug \
build/prefab/full/linux_x86_64_server/debug
prefab-linux-arm64-server-debug-build: prereqs assets-cmake \
build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless \
build/prefab/full/linux_arm64_server/debug/ballisticacore_server \
build/prefab/full/linux_arm64_server/debug/config_template.yaml \
build/prefab/full/linux_arm64_server/debug/README.txt
@${STAGE_ASSETS} -cmakeserver build/prefab/full/linux_arm64_server/debug/dist
build/prefab/full/linux_%_server/debug/ballisticacore_server: \
assets/src/server/ballisticacore_server.py tools/batools/pcommand.py
@tools/pcommand stage_server_file debug $< $@
build/prefab/full/linux_%_server/debug/config_template.yaml: \
assets/src/server/config_template.yaml \
tools/batools/build.py \
tools/batools/pcommand.py \
tools/bacommon/servermanager.py
@tools/pcommand stage_server_file debug $< $@
build/prefab/full/linux_%_server/debug/README.txt: \
assets/src/server/README.txt
@cp $< $@
@${STAGE_ASSETS} -cmakeserver -debug \
build/prefab/full/linux_arm64_server/debug
build/prefab/full/linux_%_server/debug/dist/ballisticacore_headless: .efrocachemap
@tools/pcommand efrocache_get $@
@ -442,28 +383,19 @@ prefab-linux-x86-64-server-release: prefab-linux-x86-64-server-release-build
@tools/pcommand ensure_prefab_platform linux_x86_64
@${RUN_PREFAB_LINUX_X86_64_SERVER_RELEASE}
prefab-linux-arm64-server-release: prefab-linux-arm64-server-release-build
@tools/pcommand ensure_prefab_platform linux_arm64
@${RUN_PREFAB_LINUX_ARM64_SERVER_RELEASE}
prefab-linux-x86-64-server-release-build: prereqs assets-cmake \
build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless \
build/prefab/full/linux_x86_64_server/release/ballisticacore_server \
build/prefab/full/linux_x86_64_server/release/config_template.yaml \
build/prefab/full/linux_x86_64_server/release/README.txt
@${STAGE_ASSETS} \
-cmakeserver build/prefab/full/linux_x86_64_server/release/dist
@${STAGE_ASSETS} -cmakeserver -release \
build/prefab/full/linux_x86_64_server/release
build/prefab/full/linux_%_server/release/ballisticacore_server: \
assets/src/server/ballisticacore_server.py tools/batools/pcommand.py
@tools/pcommand stage_server_file release $< $@
build/prefab/full/linux_%_server/release/config_template.yaml: \
assets/src/server/config_template.yaml \
tools/batools/build.py \
tools/batools/pcommand.py \
tools/bacommon/servermanager.py
@tools/pcommand stage_server_file release $< $@
build/prefab/full/linux_%_server/release/README.txt: \
assets/src/server/README.txt
@cp $< $@
prefab-linux-arm64-server-release-build: prereqs assets-cmake \
build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless \
@${STAGE_ASSETS} -cmakeserver -release \
build/prefab/full/linux_arm64_server/release
build/prefab/full/linux_%_server/release/dist/ballisticacore_headless: .efrocachemap
@tools/pcommand efrocache_get $@
@ -519,35 +451,12 @@ prefab-windows-x86-server-debug: prefab-windows-x86-server-debug-build
prefab-windows-x86-server-debug-build: prereqs \
assets-windows-${WINPLAT_X86} \
build/prefab/full/windows_x86_server/debug/dist/ballisticacore_headless.exe \
build/prefab/full/windows_x86_server/debug/launch_ballisticacore_server.bat \
build/prefab/full/windows_x86_server/debug/ballisticacore_server.py \
build/prefab/full/windows_x86_server/debug/config_template.yaml \
build/prefab/full/windows_x86_server/debug/README.txt
@${STAGE_ASSETS} -winserver-${WINPLAT_X86}-Debug \
build/prefab/full/windows_x86_server/debug/dist
build/prefab/full/windows_x86_server/debug
build/prefab/full/windows_x86_server/debug/dist/ballisticacore_headless.exe: .efrocachemap
@tools/pcommand efrocache_get $@
build/prefab/full/windows_%_server/debug/ballisticacore_server.py: \
assets/src/server/ballisticacore_server.py tools/batools/pcommand.py
@tools/pcommand stage_server_file debug $< $@
build/prefab/full/windows_%_server/debug/launch_ballisticacore_server.bat: \
assets/src/server/launch_ballisticacore_server.bat tools/batools/pcommand.py
@tools/pcommand stage_server_file debug $< $@
build/prefab/full/windows_%_server/debug/config_template.yaml: \
assets/src/server/config_template.yaml \
tools/batools/build.py \
tools/batools/pcommand.py \
tools/bacommon/servermanager.py
@tools/pcommand stage_server_file debug $< $@
build/prefab/full/windows_%_server/debug/README.txt: \
assets/src/server/README.txt
@cp $< $@
# Windows server release:
RUN_PREFAB_WINDOWS_X86_SERVER_RELEASE = cd \
@ -560,36 +469,13 @@ prefab-windows-x86-server-release: prefab-windows-x86-server-release-build
prefab-windows-x86-server-release-build: prereqs \
assets-windows-${WINPLAT_X86} \
build/prefab/full/windows_x86_server/release/dist/ballisticacore_headless.exe \
build/prefab/full/windows_x86_server/release/launch_ballisticacore_server.bat \
build/prefab/full/windows_x86_server/release/ballisticacore_server.py \
build/prefab/full/windows_x86_server/release/config_template.yaml \
build/prefab/full/windows_x86_server/release/README.txt
build/prefab/full/windows_x86_server/release/dist/ballisticacore_headless.exe
@${STAGE_ASSETS} -winserver-${WINPLAT_X86}-Release \
build/prefab/full/windows_x86_server/release/dist
build/prefab/full/windows_x86_server/release
build/prefab/full/windows_x86_server/release/dist/ballisticacore_headless.exe: .efrocachemap
@tools/pcommand efrocache_get $@
build/prefab/full/windows_%_server/release/ballisticacore_server.py: \
assets/src/server/ballisticacore_server.py tools/batools/pcommand.py
@tools/pcommand stage_server_file release $< $@
build/prefab/full/windows_%_server/release/launch_ballisticacore_server.bat: \
assets/src/server/launch_ballisticacore_server.bat tools/batools/pcommand.py
@tools/pcommand stage_server_file release $< $@
build/prefab/full/windows_%_server/release/config_template.yaml: \
assets/src/server/config_template.yaml \
tools/batools/build.py \
tools/batools/pcommand.py \
tools/bacommon/servermanager.py
@tools/pcommand stage_server_file release $< $@
build/prefab/full/windows_%_server/release/README.txt: \
assets/src/server/README.txt
@cp $< $@
# Tell make which of these targets don't represent files.
.PHONY: prefab-debug prefab-release prefab-debug-build prefab-release-build \
prefab-server-debug prefab-server-release prefab-server-debug-build \
@ -608,7 +494,9 @@ build/prefab/full/windows_%_server/release/README.txt: \
prefab-linux-x86-64-release-build prefab-linux-arm64-release-build \
prefab-linux-x86-64-server-debug prefab-linux-arm64-server-debug \
prefab-linux-x86-64-server-debug-build prefab-linux-arm64-server-debug-build \
prefab-linux-x86-64-server-release prefab-linux-x86-64-server-release-build \
prefab-linux-x86-64-server-release prefab-linux-arm64-server-release \
prefab-linux-x86-64-server-release-build \
prefab-linux-arm64-server-release-build \
prefab-windows-x86-debug prefab-windows-x86-debug-build \
prefab-windows-x86-release prefab-windows-x86-release-build \
prefab-windows-x86-server-debug prefab-windows-x86-server-debug-build \
@ -842,7 +730,7 @@ cmake-server: cmake-server-build
cmake-server-build: assets-cmake resources code
@tools/pcommand cmake_prep_dir build/cmake/server-$(CM_BT_LC)
@${STAGE_ASSETS} -cmakeserver build/cmake/server-$(CM_BT_LC)
@${STAGE_ASSETS} -cmakeserver -${CM_BT_LC} build/cmake/server-$(CM_BT_LC)
@cd build/cmake/server-$(CM_BT_LC) && test -f Makefile \
|| cmake -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) -DHEADLESS=true \
../../../ballisticacore-cmake

View File

@ -16,6 +16,7 @@ from efrotools import PYVER
if TYPE_CHECKING:
from typing import Optional, List
from pathlib import Path
# Suffix for the pyc files we include in stagings.
# We're using deterministic opt pyc files; see PEP 552.
@ -33,6 +34,7 @@ class Config:
# We always calc src relative to this script.
self.src = self.projroot + '/assets/build'
self.dst: Optional[str] = None
self.serverdst: Optional[str] = None
self.win_extras_src: Optional[str] = None
self.win_platform: Optional[str] = None
self.win_type: Optional[str] = None
@ -104,12 +106,13 @@ class Config:
self.win_platform = winplt
self.win_type = wintype
assert winempty == ''
self.dst = args[1]
self.tex_suffix = '.dds'
if wintype == 'win':
pass
self.dst = args[-1]
elif wintype == 'winserver':
self.dst = os.path.join(args[-1], 'dist')
self.serverdst = args[-1]
self.include_textures = False
self.include_audio = False
self.include_models = False
@ -143,10 +146,20 @@ class Config:
self.dst = args[1]
self.tex_suffix = '.dds'
elif '-cmakeserver' in args:
self.dst = args[1]
self.dst = os.path.join(args[-1], 'dist')
self.serverdst = args[-1]
self.include_textures = False
self.include_audio = False
self.include_models = False
# Require either -debug or -release in args.
if '-debug' in args:
self.debug = True
assert '-release' not in args
elif '-release' in args:
self.debug = False
else:
raise RuntimeError(
"Expected either '-debug' or '-release' in args.")
elif '-xcode-mac' in args:
self.src = os.environ['SOURCE_ROOT'] + '/assets/build'
self.dst = (os.environ['TARGET_BUILD_DIR'] + '/' +
@ -314,35 +327,7 @@ def _sync_pylib(cfg: Config) -> None:
_run(cmd)
def main(projroot: str, args: Optional[List[str]] = None) -> None:
"""Stage assets for a build."""
if args is None:
args = sys.argv
cfg = Config(projroot)
cfg.parse_args(args)
# Ok, now for every top level dir in src, come up with a nice single
# command to sync the needed subset of it to dst.
# We can now use simple speedy timestamp based updates since
# we no longer have to try to preserve timestamps to get .pyc files
# to behave (hooray!)
# Do our stripped down pylib dir for platforms that use that.
if cfg.include_pylib:
_sync_pylib(cfg)
else:
if cfg.dst is not None and os.path.isdir(cfg.dst + '/pylib'):
subprocess.run(['rm', '-rf', cfg.dst + '/pylib'], check=True)
# On windows we need to pull in some dlls and this and that
# (we also include a non-stripped-down set of python libs).
if cfg.win_extras_src is not None:
_sync_windows_extras(cfg)
# Now standard common game data.
def _sync_standard_game_data(cfg: Config) -> None:
assert cfg.dst is not None
_run('mkdir -p "' + cfg.dst + '/ba_data"')
cmd = ('rsync --recursive --update --delete --delete-excluded'
@ -374,15 +359,147 @@ def main(projroot: str, args: Optional[List[str]] = None) -> None:
cfg.dst + '/ba_data/"')
_run(cmd)
def _sync_server_files(cfg: Config) -> None:
assert cfg.serverdst is not None
modeval = 'debug' if cfg.debug else 'release'
stage_server_file(projroot=cfg.projroot,
mode=modeval,
infilename='assets/src/server/ballisticacore_server.py',
outfilename=os.path.join(
cfg.serverdst,
'ballisticacore_server.py' if cfg.win_type
is not None else 'ballisticacore_server'))
stage_server_file(projroot=cfg.projroot,
mode=modeval,
infilename='assets/src/server/README.txt',
outfilename=os.path.join(cfg.serverdst, 'README.txt'))
stage_server_file(projroot=cfg.projroot,
mode=modeval,
infilename='assets/src/server/config_template.yaml',
outfilename=os.path.join(cfg.serverdst,
'config_template.yaml'))
if cfg.win_type is not None:
stage_server_file(
projroot=cfg.projroot,
mode=modeval,
infilename='assets/src/server/launch_ballisticacore_server.bat',
outfilename=os.path.join(cfg.serverdst,
'launch_ballisticacore_server.bat'))
def _write_if_changed(path: str,
contents: str,
make_executable: bool = False) -> None:
changed: bool
try:
with open(path) as infile:
existing = infile.read()
changed = (contents != existing)
except FileNotFoundError:
changed = True
if changed:
with open(path, 'w') as outfile:
outfile.write(contents)
if make_executable:
subprocess.run(['chmod', '+x', path], check=True)
def stage_server_file(projroot: str, mode: str, infilename: str,
outfilename: str) -> None:
"""Stage files for the server environment with some filtering."""
import batools.build
from efrotools import replace_one
if mode not in ('debug', 'release'):
raise RuntimeError(f"Invalid server-file-staging mode '{mode}';"
f" expected 'debug' or 'release'.")
print(f'Building server file: {os.path.basename(outfilename)}')
os.makedirs(os.path.dirname(outfilename), exist_ok=True)
basename = os.path.basename(infilename)
if basename == 'config_template.yaml':
# Inject all available config values into the config file.
_write_if_changed(
outfilename,
batools.build.filter_server_config(str(projroot), infilename))
elif basename == 'ballisticacore_server.py':
# Run Python in opt mode for release builds.
with open(infilename) as infile:
lines = infile.read().splitlines()
if mode == 'release':
lines[0] = replace_one(lines[0],
f'#!/usr/bin/env python{PYVER}',
f'#!/usr/bin/env -S python{PYVER} -O')
_write_if_changed(outfilename,
'\n'.join(lines) + '\n',
make_executable=True)
elif basename == 'README.txt':
with open(infilename) as infile:
readme = infile.read()
_write_if_changed(outfilename, readme)
elif basename == 'launch_ballisticacore_server.bat':
# Run Python in opt mode for release builds.
with open(infilename) as infile:
lines = infile.read().splitlines()
if mode == 'release':
lines[1] = replace_one(
lines[1], ':: Python interpreter.', ':: Python interpreter.'
' (in opt mode so we use bundled .opt-1.pyc files)')
lines[2] = replace_one(
lines[2], 'dist\\\\python.exe ballisticacore_server.py',
'dist\\\\python.exe -O ballisticacore_server.py')
else:
# In debug mode we use the bundled debug interpreter.
lines[2] = replace_one(
lines[2], 'dist\\\\python.exe ballisticacore_server.py',
'dist\\\\python_d.exe ballisticacore_server.py')
with open(outfilename, 'w') as outfile:
outfile.write('\n'.join(lines) + '\n')
else:
raise RuntimeError(f"Unknown server file for staging: '{basename}'.")
def main(projroot: str, args: Optional[List[str]] = None) -> None:
"""Stage assets for a build."""
if args is None:
args = sys.argv
cfg = Config(projroot)
cfg.parse_args(args)
# Ok, now for every top level dir in src, come up with a nice single
# command to sync the needed subset of it to dst.
# We can now use simple speedy timestamp based updates since
# we no longer have to try to preserve timestamps to get .pyc files
# to behave (hooray!)
# Do our stripped down pylib dir for platforms that use that.
if cfg.include_pylib:
_sync_pylib(cfg)
else:
if cfg.dst is not None and os.path.isdir(cfg.dst + '/pylib'):
subprocess.run(['rm', '-rf', cfg.dst + '/pylib'], check=True)
# Sync our server files if we're doing that.
if cfg.serverdst is not None:
_sync_server_files(cfg)
# On windows we need to pull in some dlls and this and that
# (we also include a non-stripped-down set of python libs).
if cfg.win_extras_src is not None:
_sync_windows_extras(cfg)
# Standard stuff in ba_data
_sync_standard_game_data(cfg)
# On Android we need to build a payload file so it knows
# what to pull out of the apk.
if cfg.include_payload_file:
assert cfg.dst is not None
_write_payload_file(cfg.dst, cfg.is_payload_full)
# if __name__ == '__main__':
# try:
# main()
# except CleanError as exc:
# exc.pretty_print()
# sys.exit(1)

View File

@ -648,15 +648,12 @@ def _get_server_config_template_yaml(projroot: str) -> str:
return '\n'.join(lines_out)
def filter_server_config(projroot: str, infilepath: str,
outfilepath: str) -> None:
def filter_server_config(projroot: str, infilepath: str) -> str:
"""Add commented-out config options to a server config."""
with open(infilepath) as infile:
cfg = infile.read()
cfg = cfg.replace('#__CONFIG_TEMPLATE_VALUES__',
_get_server_config_template_yaml(projroot))
with open(outfilepath, 'w') as outfile:
outfile.write(cfg)
return cfg.replace('#__CONFIG_TEMPLATE_VALUES__',
_get_server_config_template_yaml(projroot))
def update_docs_md(check: bool) -> None:

View File

@ -20,61 +20,14 @@ if TYPE_CHECKING:
def stage_server_file() -> None:
"""Stage files for the server environment with some filtering."""
import os
import subprocess
import batools.build
from efro.error import CleanError
from efrotools import replace_one
from efrotools import PYVER
import batools.assetstaging
if len(sys.argv) != 5:
raise CleanError('Expected 3 args (mode, infile, outfile).')
mode, infilename, outfilename = sys.argv[2], sys.argv[3], sys.argv[4]
if mode not in ('debug', 'release'):
raise CleanError(f"Invalid mode '{mode}'; expected debug or release.")
print(f'Building server file: {os.path.basename(outfilename)}')
os.makedirs(os.path.dirname(outfilename), exist_ok=True)
basename = os.path.basename(infilename)
if basename == 'config_template.yaml':
# Inject all available config values into the config file.
batools.build.filter_server_config(str(PROJROOT), infilename,
batools.assetstaging.stage_server_file(str(PROJROOT), mode, infilename,
outfilename)
elif basename == 'ballisticacore_server.py':
# Run Python in opt mode for release builds.
with open(infilename) as infile:
lines = infile.read().splitlines()
if mode == 'release':
lines[0] = replace_one(lines[0],
f'#!/usr/bin/env python{PYVER}',
f'#!/usr/bin/env -S python{PYVER} -O')
with open(outfilename, 'w') as outfile:
outfile.write('\n'.join(lines) + '\n')
subprocess.run(['chmod', '+x', outfilename], check=True)
elif basename == 'launch_ballisticacore_server.bat':
# Run Python in opt mode for release builds.
with open(infilename) as infile:
lines = infile.read().splitlines()
if mode == 'release':
lines[1] = replace_one(
lines[1], ':: Python interpreter.', ':: Python interpreter.'
' (in opt mode so we use bundled .opt-1.pyc files)')
lines[2] = replace_one(
lines[2], 'dist\\\\python.exe ballisticacore_server.py',
'dist\\\\python.exe -O ballisticacore_server.py')
else:
# In debug mode we use the bundled debug interpreter.
lines[2] = replace_one(
lines[2], 'dist\\\\python.exe ballisticacore_server.py',
'dist\\\\python_d.exe ballisticacore_server.py')
with open(outfilename, 'w') as outfile:
outfile.write('\n'.join(lines) + '\n')
else:
raise CleanError(f"Unknown server file for staging: '{basename}'.")
def py_examine() -> None:
"""Run a python examination at a given point in a given file."""