summaryrefslogtreecommitdiffstats
path: root/python/mozbuild/mozbuild/action/file_generate_wrapper.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozbuild/mozbuild/action/file_generate_wrapper.py')
-rw-r--r--python/mozbuild/mozbuild/action/file_generate_wrapper.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/python/mozbuild/mozbuild/action/file_generate_wrapper.py b/python/mozbuild/mozbuild/action/file_generate_wrapper.py
new file mode 100644
index 0000000000..b6c030bbf6
--- /dev/null
+++ b/python/mozbuild/mozbuild/action/file_generate_wrapper.py
@@ -0,0 +1,38 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import json
+import os
+import subprocess
+import sys
+from pathlib import Path
+
+import buildconfig
+
+
+def action(fh, script, target_dir, *args):
+ fh.close()
+ os.unlink(fh.name)
+
+ args = list(args)
+ objdir = Path.cwd()
+ topsrcdir = Path(buildconfig.topsrcdir)
+
+ def make_absolute(base_path, p):
+ return Path(base_path) / Path(p.lstrip("/"))
+
+ try:
+ abs_target_dir = str(make_absolute(objdir, target_dir))
+ abs_script = make_absolute(topsrcdir, script)
+ script = [str(abs_script)]
+ if abs_script.suffix == ".py":
+ script = [sys.executable] + script
+ subprocess.check_call(script + args, cwd=abs_target_dir)
+ except Exception:
+ relative = os.path.relpath(__file__, topsrcdir)
+ print(
+ "%s:action caught exception. params=%s\n"
+ % (relative, json.dumps([script, target_dir] + args, indent=2))
+ )
+ raise