Files
OpenUxAS-bootstrap/lib/anod_printenv.py
M. Anthony Aiello b5749b1aab Be specific about python version. (#1)
Make sure references to python in shebangs and in text specify python3
rather than simply python. This better supports convention of fresh
machines.
2020-08-04 15:41:19 -04:00

94 lines
2.6 KiB
Python

#!/usr/bin/env python3
"""Anod environment printer."""
from __future__ import annotations
from lib.anod.util import check_common_tools, create_anod_context, create_anod_sandbox
from lib.anod.paths import SPEC_DIR, SBX_DIR
from e3.main import Main
from e3.env import BaseEnv
import logging
import os
# Help users who can't remember to use eval.
BANNER = """
# ----------------------------------------------------------------------------
# If you are seeing this, then you forgot eval.
#
# You need to run anod printenv like this:
#
# eval "$( ./anod printenv %s )"
#
# Otherwise, no changes will be made to your environment.
# ----------------------------------------------------------------------------
"""
def do_printenv(m: Main, set_prog: bool = True) -> int:
"""Print the environment for the given spec."""
if set_prog:
m.argument_parser.prog = m.argument_parser.prog + " printenv"
m.argument_parser.add_argument(
"spec_name",
help="spec to build. This is "
"the basename of an .anod file (without the extension)",
)
m.argument_parser.add_argument("--qualifier", help="optional qualifier")
m.argument_parser.add_argument(
"--sandbox-dir",
help="directory in which build artifacts are stored",
default=SBX_DIR,
)
m.argument_parser.add_argument(
"--build-env",
help="print build environment",
action="store_true",
default=False,
)
m.parse_args()
# Disable logging messages except errors
logging.getLogger("").setLevel(logging.ERROR)
check_common_tools()
ac = create_anod_context(SPEC_DIR)
sbx = create_anod_sandbox(m.args.sandbox_dir, SPEC_DIR)
anod_instance = ac.add_anod_action(
name=m.args.spec_name,
primitive="build",
qualifier=m.args.qualifier,
sandbox=sbx,
upload=False,
env=BaseEnv.from_env(),
).anod_instance
saved_env = {k: v for k, v in os.environ.items()}
if m.args.build_env:
if hasattr(anod_instance, "build_setenv"):
anod_instance.build_setenv()
else:
if hasattr(anod_instance, "setenv"):
anod_instance.setenv()
for var, value in os.environ.items():
if var not in saved_env or saved_env[var] != os.environ[var]:
print('export %s="%s";' % (var, value))
if m.args.verbose >= 1:
print('printf "I set %s=\\"%s\\"\\n\\n";' % (var, value))
print(" ")
print(BANNER % m.args.spec_name)
return 0
if __name__ == "__main__":
exit(do_printenv(Main(), set_prog=False))