xref: /aosp_15_r20/external/angle/build/apple/compile_plist.gni (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1# Copyright 2021 The Chromium Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5# Template to merge multiple plist files and perform variable substitutions.
6#
7# Arguments
8#
9#     plist_templates:
10#         string array, paths to plist files which will be used for the bundle.
11#
12#     format:
13#         string, the format to `plutil -convert` the plist to when
14#         generating the output.
15#
16#     substitutions:
17#         string array, 'key=value' pairs used to replace ${key} by value
18#         when generating the output plist file.
19#
20#     output_name:
21#         string, name of the generated plist file.
22template("compile_plist") {
23  assert(defined(invoker.plist_templates),
24         "A list of template plist files must be specified for $target_name")
25  assert(defined(invoker.format),
26         "The plist format must be specified for $target_name")
27  assert(defined(invoker.substitutions),
28         "A list of key=value pairs must be specified for $target_name")
29  assert(defined(invoker.output_name),
30         "The name of the output file must be specified for $target_name")
31
32  _output_name = invoker.output_name
33  _merged_name = get_path_info(_output_name, "dir") + "/" +
34                 get_path_info(_output_name, "name") + "_merged." +
35                 get_path_info(_output_name, "extension")
36
37  _merge_target = target_name + "_merge"
38
39  action(_merge_target) {
40    forward_variables_from(invoker,
41                           [
42                             "deps",
43                             "testonly",
44                           ])
45
46    script = "//build/apple/plist_util.py"
47    sources = invoker.plist_templates
48    outputs = [ _merged_name ]
49    args = [
50             "merge",
51             "-f=" + invoker.format,
52             "-o=" + rebase_path(_merged_name, root_build_dir),
53           ] + rebase_path(invoker.plist_templates, root_build_dir)
54  }
55
56  action(target_name) {
57    forward_variables_from(invoker,
58                           [
59                             "testonly",
60                             "visibility",
61                           ])
62    script = "//build/apple/plist_util.py"
63    sources = [ _merged_name ]
64    outputs = [ _output_name ]
65    args = [
66      "substitute",
67      "-f=" + invoker.format,
68      "-o=" + rebase_path(_output_name, root_build_dir),
69      "-t=" + rebase_path(_merged_name, root_build_dir),
70    ]
71    foreach(_substitution, invoker.substitutions) {
72      args += [ "-s=$_substitution" ]
73    }
74    deps = [ ":$_merge_target" ]
75  }
76}
77