Index: third_party/closure_compiler/runner/build_runner_jar.py |
diff --git a/third_party/closure_compiler/runner/build_runner_jar.py b/third_party/closure_compiler/runner/build_runner_jar.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..e9f3a254dbac81fa2892981b743dc3a6b7f415ba |
--- /dev/null |
+++ b/third_party/closure_compiler/runner/build_runner_jar.py |
@@ -0,0 +1,82 @@ |
+#!/usr/bin/python |
+# Copyright 2014 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+import os |
+import shutil |
+import subprocess |
+import sys |
+import tempfile |
+ |
+ |
+def rel_to_abs(rel_path): |
+ script_path = os.path.dirname(os.path.abspath(__file__)) |
+ return os.path.join(script_path, rel_path) |
+ |
+ |
+java_bin_path = os.getenv('JAVA_HOME', '') |
+if java_bin_path: |
+ java_bin_path = os.path.join(java_bin_path, 'bin') |
+ |
+main_class = 'org.chromium.closure.compiler.Runner' |
+jar_name = 'runner.jar' |
+src_dir = 'src' |
+closure_jar_relpath = os.path.join('..', 'compiler', 'compiler.jar') |
+src_path = rel_to_abs(src_dir) |
+ |
+ |
+def run_and_communicate(command, error_template): |
+ proc = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) |
+ proc.communicate() |
+ if proc.returncode: |
+ print >> sys.stderr, error_template % proc.returncode |
+ sys.exit(proc.returncode) |
+ |
+ |
+def build_artifacts(): |
+ print 'Compiling...' |
+ java_files = [] |
+ for root, dirs, files in sorted(os.walk(src_path)): |
+ for file_name in files: |
+ java_files.append(os.path.join(root, file_name)) |
+ |
+ bin_path = tempfile.mkdtemp() |
+ manifest_file = tempfile.NamedTemporaryFile(mode='wt', delete=False) |
+ try: |
+ manifest_file.write('Class-Path: %s\n' % closure_jar_relpath) |
+ manifest_file.close() |
+ javac_path = os.path.join(java_bin_path, 'javac') |
+ javac_command = '%s -d %s -cp %s %s' % ( |
+ javac_path, bin_path, rel_to_abs(closure_jar_relpath), |
+ ' '.join(java_files)) |
+ run_and_communicate(javac_command, 'Error: javac returned %d') |
+ |
+ print 'Building jar...' |
+ artifact_path = rel_to_abs(jar_name) |
+ jar_path = os.path.join(java_bin_path, 'jar') |
+ jar_command = '%s cvfme %s %s %s -C %s .' % ( |
+ jar_path, artifact_path, manifest_file.name, main_class, bin_path) |
+ run_and_communicate(jar_command, 'Error: jar returned %d') |
+ finally: |
+ os.remove(manifest_file.name) |
+ shutil.rmtree(bin_path, True) |
+ |
+ print 'Done.' |
+ |
+ |
+def show_usage_and_die(): |
+ print 'usage: %s' % os.path.basename(__file__) |
+ print 'Builds runner.jar from the %s directory contents' % src_dir |
+ sys.exit(1) |
+ |
+ |
+def main(): |
+ if len(sys.argv) > 1: |
+ show_usage_and_die() |
+ |
+ build_artifacts() |
+ |
+ |
+if __name__ == '__main__': |
+ main() |