diff options
Diffstat (limited to 'third_party/libwebrtc/build/android/gyp/create_java_binary_script.py')
-rwxr-xr-x | third_party/libwebrtc/build/android/gyp/create_java_binary_script.py | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/third_party/libwebrtc/build/android/gyp/create_java_binary_script.py b/third_party/libwebrtc/build/android/gyp/create_java_binary_script.py new file mode 100755 index 0000000000..91fe600ea8 --- /dev/null +++ b/third_party/libwebrtc/build/android/gyp/create_java_binary_script.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python3 +# +# 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. + +"""Creates a simple script to run a java "binary". + +This creates a script that sets up the java command line for running a java +jar. This includes correctly setting the classpath and the main class. +""" + +import optparse +import os +import sys + +from util import build_utils + +# The java command must be executed in the current directory because there may +# be user-supplied paths in the args. The script receives the classpath relative +# to the directory that the script is written in and then, when run, must +# recalculate the paths relative to the current directory. +script_template = """\ +#!/usr/bin/env python3 +# +# This file was generated by build/android/gyp/create_java_binary_script.py + +import argparse +import os +import sys + +self_dir = os.path.dirname(__file__) +classpath = [{classpath}] +extra_program_args = {extra_program_args} +java_path = {java_path} +if os.getcwd() != self_dir: + offset = os.path.relpath(self_dir, os.getcwd()) + fix_path = lambda p: os.path.normpath(os.path.join(offset, p)) + classpath = [fix_path(p) for p in classpath] + java_path = fix_path(java_path) +java_cmd = [java_path] +# This is a simple argparser for jvm, jar, and classpath arguments. +parser = argparse.ArgumentParser(add_help=False) +parser.add_argument('--jar-args') +parser.add_argument('--jvm-args') +parser.add_argument('--classpath') +# Test_runner parses the classpath for sharding junit tests. +parser.add_argument('--print-classpath', action='store_true', + help='Prints the classpass. Used by test_runner.') +known_args, unknown_args = parser.parse_known_args(sys.argv[1:]) + +if known_args.print_classpath: + sys.stdout.write(':'.join(classpath)) + sys.exit(0) + +if known_args.jvm_args: + jvm_arguments = known_args.jvm_args.strip('"').split() + java_cmd.extend(jvm_arguments) +if known_args.jar_args: + jar_arguments = known_args.jar_args.strip('"').split() + if unknown_args: + raise Exception('There are unknown arguments') +else: + jar_arguments = unknown_args + +if known_args.classpath: + classpath += [known_args.classpath] + +{extra_flags} +java_cmd.extend( + ['-classpath', ':'.join(classpath), '-enableassertions', \"{main_class}\"]) +java_cmd.extend(extra_program_args) +java_cmd.extend(jar_arguments) +os.execvp(java_cmd[0], java_cmd) +""" + +def main(argv): + argv = build_utils.ExpandFileArgs(argv) + parser = optparse.OptionParser() + parser.add_option('--output', help='Output path for executable script.') + parser.add_option('--main-class', + help='Name of the java class with the "main" entry point.') + parser.add_option('--classpath', action='append', default=[], + help='Classpath for running the jar.') + parser.add_option('--noverify', action='store_true', + help='JVM flag: noverify.') + parser.add_option('--tiered-stop-at-level-one', + action='store_true', + help='JVM flag: -XX:TieredStopAtLevel=1.') + + options, extra_program_args = parser.parse_args(argv) + + extra_flags = [] + if options.noverify: + extra_flags.append('java_cmd.append("-noverify")') + if options.tiered_stop_at_level_one: + extra_flags.append('java_cmd.append("-XX:TieredStopAtLevel=1")') + + classpath = [] + for cp_arg in options.classpath: + classpath += build_utils.ParseGnList(cp_arg) + + run_dir = os.path.dirname(options.output) + classpath = [os.path.relpath(p, run_dir) for p in classpath] + java_path = os.path.relpath( + os.path.join(build_utils.JAVA_HOME, 'bin', 'java'), run_dir) + + with build_utils.AtomicOutput(options.output, mode='w') as script: + script.write( + script_template.format(classpath=('"%s"' % '", "'.join(classpath)), + java_path=repr(java_path), + main_class=options.main_class, + extra_program_args=repr(extra_program_args), + extra_flags='\n'.join(extra_flags))) + + os.chmod(options.output, 0o750) + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) |