mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-12-01 09:46:09 +03:00
118 lines
3.8 KiB
Python
118 lines
3.8 KiB
Python
|
#!/usr/bin/env 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.
|
||
|
|
||
|
"""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 python
|
||
|
#
|
||
|
# 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}]
|
||
|
bootclasspath = [{bootclasspath}]
|
||
|
extra_program_args = {extra_program_args}
|
||
|
if os.getcwd() != self_dir:
|
||
|
offset = os.path.relpath(self_dir, os.getcwd())
|
||
|
classpath = [os.path.join(offset, p) for p in classpath]
|
||
|
bootclasspath = [os.path.join(offset, p) for p in bootclasspath]
|
||
|
java_cmd = ["java"]
|
||
|
# This is a simple argparser for jvm and jar arguments.
|
||
|
parser = argparse.ArgumentParser()
|
||
|
parser.add_argument('--jar-args')
|
||
|
parser.add_argument('--jvm-args')
|
||
|
|
||
|
known_args, unknown_args = parser.parse_known_args(sys.argv[1:])
|
||
|
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
|
||
|
|
||
|
{noverify_flag}
|
||
|
if bootclasspath:
|
||
|
java_cmd.append("-Xbootclasspath/p:" + ":".join(bootclasspath))
|
||
|
java_cmd.extend(
|
||
|
["-classpath", ":".join(classpath), "-enableassertions", \"{main_class}\"])
|
||
|
java_cmd.extend(extra_program_args)
|
||
|
java_cmd.extend(jar_arguments)
|
||
|
os.execvp("java", java_cmd)
|
||
|
"""
|
||
|
|
||
|
def main(argv):
|
||
|
argv = build_utils.ExpandFileArgs(argv)
|
||
|
parser = optparse.OptionParser()
|
||
|
build_utils.AddDepfileOption(parser)
|
||
|
parser.add_option('--output', help='Output path for executable script.')
|
||
|
parser.add_option('--jar-path', help='Path to the main jar.')
|
||
|
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('--bootclasspath', action='append', default=[],
|
||
|
help='zip/jar files to add to bootclasspath for java cmd.')
|
||
|
parser.add_option('--noverify', action='store_true',
|
||
|
help='JVM flag: noverify.')
|
||
|
|
||
|
options, extra_program_args = parser.parse_args(argv)
|
||
|
|
||
|
if (options.noverify):
|
||
|
noverify_flag = 'java_cmd.append("-noverify")'
|
||
|
else:
|
||
|
noverify_flag = ''
|
||
|
|
||
|
classpath = [options.jar_path]
|
||
|
for cp_arg in options.classpath:
|
||
|
classpath += build_utils.ParseGnList(cp_arg)
|
||
|
|
||
|
bootclasspath = []
|
||
|
for bootcp_arg in options.bootclasspath:
|
||
|
bootclasspath += build_utils.ParseGnList(bootcp_arg)
|
||
|
|
||
|
run_dir = os.path.dirname(options.output)
|
||
|
bootclasspath = [os.path.relpath(p, run_dir) for p in bootclasspath]
|
||
|
classpath = [os.path.relpath(p, run_dir) for p in classpath]
|
||
|
|
||
|
with open(options.output, 'w') as script:
|
||
|
script.write(script_template.format(
|
||
|
classpath=('"%s"' % '", "'.join(classpath)),
|
||
|
bootclasspath=('"%s"' % '", "'.join(bootclasspath)
|
||
|
if bootclasspath else ''),
|
||
|
main_class=options.main_class,
|
||
|
extra_program_args=repr(extra_program_args),
|
||
|
noverify_flag=noverify_flag))
|
||
|
|
||
|
os.chmod(options.output, 0750)
|
||
|
|
||
|
if options.depfile:
|
||
|
build_utils.WriteDepfile(options.depfile, options.output)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
sys.exit(main(sys.argv[1:]))
|