xref: /aosp_15_r20/external/angle/build/util/process_version.gni (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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