ballistica/tools/spinoff
2024-04-22 00:02:51 -07:00

46 lines
1.5 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__':
from batools.spinoff import spinoff_main
# Our initial invocation actually just sets up the env for our
# *real* invocation (so we can run under our desired venv/etc.)
if os.environ.get('BA_SPINOFF_HAVE_ENV') != '1':
# Our shebang line gives us a generic 'pythonX.Y' environment, but
# we actually want to run under the virtual-env of the source
# project so we have all the pip stuff we expect. So if we are
# getting invoked via a symlink we assume it points to the source
# project, and if not then we assume we are the source project.
if os.path.islink(sys.argv[0]):
src_spinoff_path = os.path.realpath(sys.argv[0])
else:
src_spinoff_path = sys.argv[0]
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, sys.argv[0]] + sys.argv[1:]
# Make sure the src project is properly bootstrapped.
subprocess.run(['make', 'prereqs'], check=True, cwd=src_proj_root)
# Finally, run for realz.
subprocess.run(
cmd, check=True, env=dict(os.environ, BA_SPINOFF_HAVE_ENV='1')
)
else:
spinoff_main()