diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/devtools/scripts/compiler-runner/build_compiler_runner_jar.py')
-rwxr-xr-x | chromium/third_party/WebKit/Source/devtools/scripts/compiler-runner/build_compiler_runner_jar.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/chromium/third_party/WebKit/Source/devtools/scripts/compiler-runner/build_compiler_runner_jar.py b/chromium/third_party/WebKit/Source/devtools/scripts/compiler-runner/build_compiler_runner_jar.py new file mode 100755 index 00000000000..c0e8daca82b --- /dev/null +++ b/chromium/third_party/WebKit/Source/devtools/scripts/compiler-runner/build_compiler_runner_jar.py @@ -0,0 +1,73 @@ +#!/usr/bin/python + +import os +import shutil +import subprocess +import sys +import tempfile + + +def rel_to_abs(rel_path): + 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.devtools.compiler.Runner' +jar_name = 'closure-runner.jar' +src_dir = 'src' +script_path = os.path.dirname(os.path.abspath(__file__)) +closure_jar_relpath = os.path.join('..', 'closure', '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) + + +def help(): + print 'usage: %s' % os.path.basename(__file__) + print 'Builds compiler-runner.jar from the %s directory contents' % src_dir + + +def main(): + if len(sys.argv) > 1: + help() + return + build_artifacts() + print 'Done.' + +if __name__ == '__main__': + main() |