]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/data/buildtool/renderers/common_exec.py
ICU-64232.0.1.tar.gz
[apple/icu.git] / icuSources / data / buildtool / renderers / common_exec.py
diff --git a/icuSources/data/buildtool/renderers/common_exec.py b/icuSources/data/buildtool/renderers/common_exec.py
new file mode 100644 (file)
index 0000000..803d416
--- /dev/null
@@ -0,0 +1,93 @@
+# Copyright (C) 2018 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+
+from . import *
+from .. import *
+from .. import utils
+from ..request_types import *
+
+import os
+import shutil
+import subprocess
+
+def run(build_dirs, requests, common_vars, **kwargs):
+    for bd in build_dirs:
+        os.makedirs(bd.format(**common_vars), exist_ok=True)
+    for request in requests:
+        status = run_helper(request, common_vars, **kwargs)
+        if status != 0:
+            print("!!! ERROR executing above command line: exit code %d" % status)
+            return 1
+    print("All data build commands executed")
+    return 0
+
+def run_helper(request, common_vars, is_windows, tool_dir, tool_cfg=None, **kwargs):
+    if isinstance(request, PrintFileRequest):
+        output_path = "{DIRNAME}/{FILENAME}".format(
+            DIRNAME = utils.dir_for(request.output_file).format(**common_vars),
+            FILENAME = request.output_file.filename,
+        )
+        print("Printing to file: %s" % output_path)
+        with open(output_path, "w") as f:
+            f.write(request.content)
+        return 0
+    if isinstance(request, CopyRequest):
+        input_path = "{DIRNAME}/{FILENAME}".format(
+            DIRNAME = utils.dir_for(request.input_file).format(**common_vars),
+            FILENAME = request.input_file.filename,
+        )
+        output_path = "{DIRNAME}/{FILENAME}".format(
+            DIRNAME = utils.dir_for(request.output_file).format(**common_vars),
+            FILENAME = request.output_file.filename,
+        )
+        print("Copying file to: %s" % output_path)
+        shutil.copyfile(input_path, output_path)
+        return 0
+    if isinstance(request, VariableRequest):
+        # No-op
+        return 0
+
+    assert isinstance(request.tool, IcuTool)
+    if is_windows:
+        cmd_template = "{TOOL_DIR}/{TOOL}/{TOOL_CFG}/{TOOL}.exe {{ARGS}}".format(
+            TOOL_DIR = tool_dir,
+            TOOL_CFG = tool_cfg,
+            TOOL = request.tool.name,
+            **common_vars
+        )
+    else:
+        cmd_template = "{TOOL_DIR}/{TOOL} {{ARGS}}".format(
+            TOOL_DIR = tool_dir,
+            TOOL = request.tool.name,
+            **common_vars
+        )
+
+    if isinstance(request, RepeatedExecutionRequest):
+        for loop_vars in utils.repeated_execution_request_looper(request):
+            command_line = utils.format_repeated_request_command(
+                request,
+                cmd_template,
+                loop_vars,
+                common_vars
+            )
+            if is_windows:
+                # Note: this / to \ substitution may be too aggressive?
+                command_line = command_line.replace("/", "\\")
+            print("Running: %s" % command_line)
+            res = subprocess.run(command_line, shell=True)
+            if res.returncode != 0:
+                return res.returncode
+        return 0
+    if isinstance(request, SingleExecutionRequest):
+        command_line = utils.format_single_request_command(
+            request,
+            cmd_template,
+            common_vars
+        )
+        if is_windows:
+            # Note: this / to \ substitution may be too aggressive?
+            command_line = command_line.replace("/", "\\")
+        print("Running: %s" % command_line)
+        res = subprocess.run(command_line, shell=True)
+        return res.returncode
+    assert False