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