mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-01-19 13:25:31 +08:00
60 lines
2.1 KiB
Python
Executable File
60 lines
2.1 KiB
Python
Executable File
#!/usr/bin/env python3.12
|
|
# Released under the MIT License. See LICENSE for details.
|
|
#
|
|
"""Command line wrapper for the spinoff system."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
|
|
if __name__ == '__main__':
|
|
|
|
# The initial invocation of this script actually just sets the stage
|
|
# for the *real* invocation of this script, which always happens
|
|
# from the fully-inited virtual env of the source project. This way
|
|
# all modules used by the spinoff system are in place and there's no
|
|
# abiguity where we could be loading Python stuff from the dst
|
|
# project while we're in the process of modifying it.
|
|
if 'BA_SPINOFF_SRC_ROOT' not in os.environ:
|
|
|
|
# Calc absolute paths for our source (and possibly dst)
|
|
# projects. If we are getting invoked via a symlink, what it
|
|
# points to is src and we are dst. Otherwise we are src and
|
|
# there is no dst.
|
|
dst_proj_root: str | None
|
|
if os.path.islink(sys.argv[0]):
|
|
src_spinoff_path = os.path.realpath(sys.argv[0])
|
|
dst_proj_root = os.path.abspath(
|
|
os.path.join(os.path.dirname(sys.argv[0]), '..')
|
|
)
|
|
|
|
else:
|
|
src_spinoff_path = sys.argv[0]
|
|
dst_proj_root = None # pylint: disable=invalid-name
|
|
|
|
src_proj_root = os.path.abspath(
|
|
os.path.join(os.path.dirname(src_spinoff_path), '..')
|
|
)
|
|
src_proj_python = os.path.join(src_proj_root, '.venv/bin/python3.12')
|
|
|
|
cmd = [src_proj_python, 'tools/spinoff'] + sys.argv[1:]
|
|
|
|
env = dict(os.environ, BA_SPINOFF_SRC_ROOT=src_proj_root)
|
|
if dst_proj_root is not None:
|
|
env['BA_SPINOFF_DST_ROOT'] = dst_proj_root
|
|
|
|
# Make sure the src project is properly bootstrapped.
|
|
subprocess.run(['make', 'env'], check=True, cwd=src_proj_root)
|
|
|
|
# Finally, run for realz (from src proj dir).
|
|
result = subprocess.run(cmd, check=False, env=env, cwd=src_proj_root)
|
|
sys.exit(result.returncode)
|
|
|
|
else:
|
|
from batools.spinoff import spinoff_main
|
|
|
|
# Ok; we're a real invocation. Do our thing.
|
|
spinoff_main()
|