Index: build/config/mac/base_rules.gni |
diff --git a/build/config/mac/base_rules.gni b/build/config/mac/base_rules.gni |
index 8adb6cca5205192f943390a4afb3e5f629d17bc8..074074eb347f1eb73e1b31e32a7a6f4711ebd52c 100644 |
--- a/build/config/mac/base_rules.gni |
+++ b/build/config/mac/base_rules.gni |
@@ -56,48 +56,41 @@ template("convert_plist") { |
} |
} |
-# The base template used to generate Info.plist files for iOS and Mac apps and |
-# frameworks. |
+# Template to merge multiple plist files and perform variable substitutions. |
# |
# Arguments |
# |
# plist_templates: |
# string array, paths to plist files which will be used for the bundle. |
# |
-# executable_name: |
-# string, name of the generated target used for the product |
-# and executable name as specified in the output Info.plist. |
-# |
# format: |
# string, the format to `plutil -convert` the plist to when |
# generating the output. |
# |
-# extra_substitutions: |
-# (optional) string array, 'key=value' pairs for extra fields which are |
-# specified in a source Info.plist template. |
+# substitutions: |
+# string array, 'key=value' pairs used to replace ${key} by value |
+# when generating the output plist file. |
# |
# output_name: |
-# (optional) string, name of the generated plist file, default to |
-# "$target_gen_dir/$target_name.plist". |
-template("info_plist") { |
+# string, name of the generated plist file. |
+template("compile_plist") { |
assert(defined(invoker.plist_templates), |
"A list of template plist files must be specified for $target_name") |
- assert(defined(invoker.executable_name), |
- "The executable_name must be specified for $target_name") |
assert(defined(invoker.format), |
"The plist format must be specified for $target_name") |
- executable_name = invoker.executable_name |
- |
- _output_name = "$target_gen_dir/$target_name.plist" |
- if (defined(invoker.output_name)) { |
- _output_name = invoker.output_name |
- } |
+ assert(defined(invoker.substitutions), |
+ "A list of key=value pairs must be specified for $target_name") |
+ assert(defined(invoker.output_name), |
+ "The name of the output file must be specified for $target_name") |
+ _output_name = invoker.output_name |
_merged_name = get_path_info(_output_name, "dir") + "/" + |
- get_path_info(_output_name, "name") + "_merged" + |
+ get_path_info(_output_name, "name") + "_merged." + |
get_path_info(_output_name, "extension") |
- action(target_name + "_merge_templates") { |
+ _merge_target = target_name + "_merge" |
+ |
+ action(_merge_target) { |
forward_variables_from(invoker, |
[ |
"deps", |
@@ -113,7 +106,7 @@ template("info_plist") { |
"merge", |
"-f=" + invoker.format, |
"-o=" + rebase_path(_merged_name, root_build_dir), |
- ] + rebase_path(sources, root_build_dir) |
+ ] + rebase_path(invoker.plist_templates, root_build_dir) |
} |
action(target_name) { |
@@ -129,29 +122,79 @@ template("info_plist") { |
outputs = [ |
_output_name, |
] |
- args = [ "substitute" ] |
- if (defined(invoker.extra_substitutions)) { |
- foreach(substitution, invoker.extra_substitutions) { |
- args += [ "-s=$substitution" ] |
- } |
- } |
- args += [ |
- "-s=BUILD_MACHINE_OS_BUILD=$machine_os_build", |
- "-s=EXECUTABLE_NAME=$executable_name", |
- "-s=GCC_VERSION=com.apple.compilers.llvm.clang.1_0", |
- "-s=PRODUCT_NAME=$executable_name", |
- "-s=XCODE_BUILD=$xcode_build", |
- "-s=XCODE_VERSION=$xcode_version", |
+ args = [ |
+ "substitute", |
+ "-f=" + invoker.format, |
"-o=" + rebase_path(_output_name, root_build_dir), |
"-t=" + rebase_path(_merged_name, root_build_dir), |
- "-f=" + invoker.format, |
] |
+ foreach(_substitution, invoker.substitutions) { |
+ args += [ "-s=$_substitution" ] |
+ } |
deps = [ |
- ":" + target_name + "_merge_templates", |
+ ":$_merge_target", |
] |
} |
} |
+# The base template used to generate Info.plist files for iOS and Mac apps and |
+# frameworks. |
+# |
+# Arguments |
+# |
+# plist_templates: |
+# string array, paths to plist files which will be used for the bundle. |
+# |
+# executable_name: |
+# string, name of the generated target used for the product |
+# and executable name as specified in the output Info.plist. |
+# |
+# format: |
+# string, the format to `plutil -convert` the plist to when |
+# generating the output. |
+# |
+# extra_substitutions: |
+# (optional) string array, 'key=value' pairs for extra fields which are |
+# specified in a source Info.plist template. |
+# |
+# output_name: |
+# (optional) string, name of the generated plist file, default to |
+# "$target_gen_dir/$target_name.plist". |
+template("info_plist") { |
+ assert(defined(invoker.executable_name), |
+ "The executable_name must be specified for $target_name") |
+ executable_name = invoker.executable_name |
+ |
+ compile_plist(target_name) { |
+ forward_variables_from(invoker, |
+ [ |
+ "plist_templates", |
+ "testonly", |
+ "deps", |
+ "visibility", |
+ "format", |
+ ]) |
+ |
+ if (defined(invoker.output_name)) { |
+ output_name = invoker.output_name |
+ } else { |
+ output_name = "$target_gen_dir/$target_name.plist" |
+ } |
+ |
+ substitutions = [ |
+ "BUILD_MACHINE_OS_BUILD=$machine_os_build", |
+ "EXECUTABLE_NAME=$executable_name", |
+ "GCC_VERSION=com.apple.compilers.llvm.clang.1_0", |
+ "PRODUCT_NAME=$executable_name", |
+ "XCODE_BUILD=$xcode_build", |
+ "XCODE_VERSION=$xcode_version", |
+ ] |
+ if (defined(invoker.extra_substitutions)) { |
+ substitutions += invoker.extra_substitutions |
+ } |
+ } |
+} |
+ |
# Template to combile .xib or .storyboard files. |
# |
# Arguments |