xref: /aosp_15_r20/external/cronet/build/util/process_version.gni (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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