1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
# Copyright 2014 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/util/lastchange.gni")
# Runs the version processing script over the given template file to produce
# an output file. This is used for generating various forms of files that
# incorporate the product name and version.
#
# Unlike GYP, this will actually compile the resulting file, so you don't need
# to add it separately to the sources, just depend on the target.
#
# In GYP this is a rule that runs once per ".ver" file. In GN this just
# processes one file per invocation of the template so you may have to have
# multiple targets.
#
# Parameters:
# sources (optional):
# List of file names to read. When converting a GYP target, this should
# list the 'source' (see above) as well as any extra_variable_files.
# The files will be passed to version.py in the order specified here.
#
# output:
# File name of file to write. In GYP this is unspecified and it will
# make up a file name for you based on the input name, and tack on
# "_version.rc" to the end. But in GN you need to specify the full name.
#
# template_file (optional):
# Template file to use (not a list). Most Windows users that want to use
# this to process a .rc template should use process_version_rc_template(),
# defined in //chrome/process_version_rc_template.gni, instead.
#
# extra_args (optional):
# Extra arguments to pass to version.py. Any "-f <filename>" args should
# use sources instead.
#
# process_only (optional, defaults to false)
# Set to generate only one action that processes the version file and
# doesn't attempt to link the result into a source set. This is for if
# you are processing the version as data only.
#
# executable (optional, defaults to false)
# Sets the executable bit on the output file (POSIX only).
#
# visibility (optional)
#
# Example:
# process_version("myversion") {
# sources = [
# "//chrome/VERSION"
# "myfile.h.in"
# ]
# output = "$target_gen_dir/myfile.h"
# extra_args = [ "-e", "FOO=42" ]
# }
template("process_version") {
assert(defined(invoker.output), "Output must be defined for $target_name")
process_only = defined(invoker.process_only) && invoker.process_only
if (process_only) {
action_name = target_name
} else {
action_name = target_name + "_action"
source_set_name = target_name
}
action(action_name) {
script = "//build/util/version.py"
sources = [ "//build/util/android_chrome_version.py" ]
inputs = [ lastchange_file ]
if (defined(invoker.inputs)) {
inputs += invoker.inputs
}
if (defined(invoker.template_file)) {
inputs += [ invoker.template_file ]
}
outputs = [ invoker.output ]
args = []
if (is_official_build) {
args += [ "--official" ]
}
if (defined(invoker.sources)) {
inputs += invoker.sources
foreach(i, invoker.sources) {
args += [
"-f",
rebase_path(i, root_build_dir),
]
}
}
if (defined(invoker.executable) && invoker.executable) {
args += [ "-x" ]
}
if (defined(invoker.extra_args)) {
args += invoker.extra_args
}
args += [
"-o",
rebase_path(invoker.output, root_build_dir),
]
if (defined(invoker.template_file)) {
args += [ rebase_path(invoker.template_file, root_build_dir) ]
}
forward_variables_from(invoker, [ "deps" ])
if (process_only) {
# When processing only, visibility gets applied to this target.
forward_variables_from(invoker, [ "visibility" ])
} else {
# When linking the result, only the source set can depend on the action.
visibility = [ ":$source_set_name" ]
}
}
if (!process_only) {
source_set(source_set_name) {
forward_variables_from(invoker,
[
"visibility",
"deps",
])
sources = get_target_outputs(":$action_name")
public_deps = [ ":$action_name" ]
}
}
}
|