#!/usr/bin/env python # # Copyright 2018 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 script to run a Fushsia executable by delegating to build/fuchsia/(exe|test)_runner.py. """ import argparse import os import re import sys SCRIPT_TEMPLATE = """\ #!/usr/bin/env python # # This file was generated by build/fuchsia/create_runner_script.py import os import sys def main(): script_directory = os.path.dirname(__file__) def ResolvePath(path): \"\"\"Returns an absolute filepath given a path relative to this script. \"\"\" return os.path.abspath(os.path.join(script_directory, path)) runner_path = ResolvePath('{runner_path}') runner_args = {runner_args} runner_path_args = {runner_path_args} for arg, path in runner_path_args: runner_args.extend([arg, ResolvePath(path)]) os.execv(runner_path, [runner_path] + runner_args + sys.argv[1:]) if __name__ == '__main__': sys.exit(main()) """ def main(args): parser = argparse.ArgumentParser() parser.add_argument('--runner-script', help='Name of the runner script to use.') parser.add_argument('--script-output-path', help='Output path for executable script.') parser.add_argument('--test-runner-path', help='Path to test_runner.py (optional).') group = parser.add_argument_group('Test runner path arguments.') group.add_argument('--output-directory') group.add_argument('--package') group.add_argument('--package-manifest') args, runner_args = parser.parse_known_args(args) def RelativizePathToScript(path): """Returns the path relative to the output script directory.""" return os.path.relpath(path, os.path.dirname(args.script_output_path)) runner_path = args.test_runner_path or os.path.join( os.path.dirname(__file__), args.runner_script) runner_path = RelativizePathToScript(runner_path) runner_path_args = [] runner_path_args.append( ('--output-directory', RelativizePathToScript(args.output_directory))) runner_path_args.append( ('--package', RelativizePathToScript(args.package))) runner_path_args.append( ('--package-manifest', RelativizePathToScript(args.package_manifest))) with open(args.script_output_path, 'w') as script: script.write(SCRIPT_TEMPLATE.format( runner_path=str(runner_path), runner_args=repr(runner_args), runner_path_args=repr(runner_path_args))) # Sets the mode of the generated script so that it is executable by the # current user. os.chmod(args.script_output_path, 0750) if __name__ == '__main__': sys.exit(main(sys.argv[1:]))