ballistica/tools/efrotools/genwrapper.py

72 lines
2.0 KiB
Python

# Released under the MIT License. See LICENSE for details.
#
"""Functionality related to android builds."""
from __future__ import annotations
import os
import sys
import stat
from typing import TYPE_CHECKING
if TYPE_CHECKING:
pass
if __name__ == '__main__':
from efrotools.project import (
getprojectconfig,
get_public_legal_notice,
get_non_public_legal_notice,
)
# We expect 3 args: tool-name, tool-module, output-path
if len(sys.argv) != 4:
raise RuntimeError('Expected 3 args')
toolname = sys.argv[1]
toolmodule = sys.argv[2]
outpath = sys.argv[3]
# We technically could stick the 'python' or 'python3' path in, but
# let's go with the full versioned one just to keep it clear what
# we're using currently. Just need to make sure this gets re-run
# when that changes.
pybinpath = os.path.join(
os.path.abspath(os.getcwd()), '.venv', 'bin', 'python3.12'
)
public = getprojectconfig(projroot='.').get('public', False)
assert isinstance(public, bool)
legalnotice: str = (
get_public_legal_notice('raw')
if public
else get_non_public_legal_notice()
)
# For some reason 'contents' is triggering Constant-name-not-uppercase
# errors only in spinoff projects.
# pylint: disable=useless-suppression
# pylint: disable=invalid-name
# pylint: enable=useless-suppression
contents = (
f'#!{pybinpath}\n'
f'# {legalnotice}\n'
f'# This file is autogenerated; do not edit.\n'
f'#\n'
f'"""Simple wrapper so {toolname} uses the project virtual'
f' environment."""\n'
f'from {toolmodule} import run_{toolname}_main\n'
f'\n'
f'if __name__ == "__main__":\n'
f' run_{toolname}_main()\n'
)
with open(outpath, 'w', encoding='utf-8') as outfile:
outfile.write(contents)
os.chmod(
outpath,
os.stat(outpath).st_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH,
)