|  | # Copyright 2019 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. | 
|  |  | 
|  | # Wraps a target and any of its arguments to an executable script. | 
|  | # | 
|  | # Many executable targets have build-time-constant arguments. This | 
|  | # template allows those to be wrapped into a single, user- or bot-friendly | 
|  | # script at build time. | 
|  | # | 
|  | # Paths to be wrapped should be relative to root_build_dir and should be | 
|  | # wrapped in "@WrappedPath(...)"; see Example below. | 
|  | # | 
|  | # Variables: | 
|  | #   generator_script: Path to the script to use to perform the wrapping. | 
|  | #     Defaults to //build/util/generate_wrapper.py. Generally should only | 
|  | #     be set by other templates. | 
|  | #   wrapper_script: Output path. | 
|  | #   executable: Path to the executable to wrap. Can be a script or a | 
|  | #     build product. Paths can be relative to the containing gn file | 
|  | #     or source-absolute. | 
|  | #   executable_args: List of arguments to write into the wrapper. | 
|  | #   use_vpython3: If true, invoke the generated wrapper with vpython3 instead | 
|  | #     of vpython. | 
|  | # | 
|  | # Example wrapping a checked-in script: | 
|  | #   generate_wrapper("sample_wrapper") { | 
|  | #     executable = "//for/bar/sample.py" | 
|  | #     wrapper_script = "$root_build_dir/bin/run_sample" | 
|  | # | 
|  | #     _sample_argument_path = "//sample/$target_cpu/lib/sample_lib.so" | 
|  | #     _rebased_sample_argument_path = rebase_path( | 
|  | #         _sample_argument_path, | 
|  | #         root_build_dir) | 
|  | #     executable_args = [ | 
|  | #       "--sample-lib", "@WrappedPath(${_rebased_sample_argument_path})", | 
|  | #     ] | 
|  | #   } | 
|  | # | 
|  | # Example wrapping a build product: | 
|  | #   generate_wrapper("sample_wrapper") { | 
|  | #     executable = "$root_build_dir/sample_build_product" | 
|  | #     wrapper_script = "$root_build_dir/bin/run_sample_build_product" | 
|  | #   } | 
|  | template("generate_wrapper") { | 
|  | _generator_script = "//build/util/generate_wrapper.py" | 
|  | if (defined(invoker.generator_script)) { | 
|  | _generator_script = invoker.generator_script | 
|  | } | 
|  | _executable_to_wrap = invoker.executable | 
|  | _wrapper_script = invoker.wrapper_script | 
|  | if (is_win) { | 
|  | _wrapper_script += ".bat" | 
|  | } | 
|  | if (defined(invoker.executable_args)) { | 
|  | _wrapped_arguments = invoker.executable_args | 
|  | } else { | 
|  | _wrapped_arguments = [] | 
|  | } | 
|  |  | 
|  | action(target_name) { | 
|  | forward_variables_from(invoker, | 
|  | TESTONLY_AND_VISIBILITY + [ | 
|  | "data", | 
|  | "data_deps", | 
|  | "deps", | 
|  | "sources", | 
|  | ]) | 
|  | script = _generator_script | 
|  | if (!defined(data)) { | 
|  | data = [] | 
|  | } | 
|  | data += [ _wrapper_script ] | 
|  | outputs = [ _wrapper_script ] | 
|  |  | 
|  | _rebased_executable_to_wrap = | 
|  | rebase_path(_executable_to_wrap, root_build_dir) | 
|  | _rebased_wrapper_script = rebase_path(_wrapper_script, root_build_dir) | 
|  | if (is_win) { | 
|  | _script_language = "batch" | 
|  | } else { | 
|  | _script_language = "bash" | 
|  | } | 
|  | args = [ | 
|  | "--executable", | 
|  | "@WrappedPath(${_rebased_executable_to_wrap})", | 
|  | "--wrapper-script", | 
|  | _rebased_wrapper_script, | 
|  | "--output-directory", | 
|  | rebase_path(root_build_dir, root_build_dir), | 
|  | "--script-language", | 
|  | _script_language, | 
|  | ] | 
|  |  | 
|  | if (defined(invoker.use_vpython3) && invoker.use_vpython3) { | 
|  | args += [ "--use-vpython3" ] | 
|  | } | 
|  | args += [ "--" ] | 
|  | args += _wrapped_arguments | 
|  |  | 
|  | if (defined(invoker.write_runtime_deps)) { | 
|  | write_runtime_deps = invoker.write_runtime_deps | 
|  | } | 
|  | } | 
|  | } |