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