From c57dca5220a2f121331d46691aadb8e7f3168f75 Mon Sep 17 00:00:00 2001 From: Charlie Turner Date: Mon, 6 Jan 2020 13:22:54 +0000 Subject: [PATCH] dev environment: allow printing only env without starting a shell allow for workflows that don't want the gst scripts to start shells, this can be awkward for higher-level scripts setting up shells themselves. this is especially useful in combination with eval, and mimics the sort of thing you can do with ssh-agent -s. --- README.md | 10 ++++++++++ gst-env.py | 13 ++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ff16c00..c5b7c85 100644 --- a/README.md +++ b/README.md @@ -314,6 +314,16 @@ You can get into the development environment the usual way: ninja -C $BUILDDIR/ devenv ``` +Alternatively, if you'd rather not start a shell in your workflow, you +can mutate the current environment into a suitable state like so: + +``` +gst-env.py --only-environment +``` + +This will print output suitable for an sh-compatible `eval` function, +just like `ssh-agent -s`. + After setting up [binfmt] to use wine for windows binaries, you can run GStreamer tools under wine by running: diff --git a/gst-env.py b/gst-env.py index 2f83fc1..86bb32b 100755 --- a/gst-env.py +++ b/gst-env.py @@ -7,6 +7,7 @@ import os import platform import re import site +import shlex import shutil import subprocess import sys @@ -371,6 +372,10 @@ if __name__ == "__main__": parser.add_argument("--winepath", default='', help="Exra path to set to WINEPATH.") + parser.add_argument("--only-environment", + action='store_true', + default=False, + help="Do not start a shell, only print required environment.") options, args = parser.parse_known_args() if not os.path.exists(options.builddir): @@ -440,6 +445,12 @@ if __name__ == "__main__": tmprc.flush() env['ZDOTDIR'] = tmpdir.name try: - exit(subprocess.call(args, close_fds=False, env=env)) + if options.only_environment: + for name, value in env.items(): + print('{}={}'.format(name, shlex.quote(value))) + print('export {}'.format(name)) + else: + exit(subprocess.call(args, close_fds=False, env=env)) + except subprocess.CalledProcessError as e: exit(e.returncode) -- 2.7.4