summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2019-03-15 22:36:13 +0100
committerDavid Robillard <d@drobilla.net>2019-03-17 00:31:46 +0100
commitb1d95050a447acc12cf169652315754911c8cecf (patch)
tree1a0df151106c13abe11bb18ae1bc39b26b7cf9e4
parent387c1dfa6fbebc9d75bd80231f69baf94346dce1 (diff)
downloadautowaf-b1d95050a447acc12cf169652315754911c8cecf.tar.gz
autowaf-b1d95050a447acc12cf169652315754911c8cecf.tar.bz2
autowaf-b1d95050a447acc12cf169652315754911c8cecf.zip
Add ExecutionContext for setting runtime environment
-rw-r--r--extras/autowaf.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/extras/autowaf.py b/extras/autowaf.py
index 91edfee..07200fd 100644
--- a/extras/autowaf.py
+++ b/extras/autowaf.py
@@ -762,6 +762,30 @@ def build_i18n(bld, srcdir, dir, name, sources, copyright_holder=None):
build_i18n_po(bld, srcdir, dir, name, sources, copyright_holder)
build_i18n_mo(bld, srcdir, dir, name, sources, copyright_holder)
+class ExecutionEnvironment:
+ """Context that sets system environment variables for program execution"""
+ def __init__(self, changes):
+ self.original_environ = os.environ.copy()
+
+ self.diff = {}
+ for path_name, paths in changes.items():
+ value = os.pathsep.join(paths)
+ if path_name in os.environ:
+ value += os.pathsep + os.environ[path_name]
+
+ self.diff[path_name] = value
+
+ os.environ.update(self.diff)
+
+ def __str__(self):
+ return '\n'.join({'%s="%s"' % (k, v) for k, v in self.diff.items()})
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, type, value, traceback):
+ os.environ = self.original_environ
+
def cd_to_build_dir(ctx, appname):
top_level = (len(ctx.stack_path) > 1)
if top_level: