Index: build/config/mac/rules.gni |
diff --git a/build/config/mac/rules.gni b/build/config/mac/rules.gni |
index 9d624a7bac72f4a7744ba5b275492fe10a3d21e3..9d13d8c4d69e1fa16a96578c02ba338ddbbd605e 100644 |
--- a/build/config/mac/rules.gni |
+++ b/build/config/mac/rules.gni |
@@ -5,7 +5,88 @@ |
import("//build/toolchain/toolchain.gni") |
import("//build/config/mac/mac_sdk.gni") |
-# This is used as the base template for both iOS and Mac frameworks.. |
+# 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. |
+# |
+# extra_substitutions: |
+# (optional) string array, 'key=value' pairs for extra fields which are |
+# specified in a source Info.plist template. |
+template("info_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") |
+ executable_name = invoker.executable_name |
+ |
+ action(target_name) { |
+ script = "//build/config/mac/gen_plist.py" |
+ sources = invoker.plist_templates |
+ outputs = [ |
+ "$target_gen_dir/$target_name.plist", |
+ ] |
+ extra_args = [] |
+ if (defined(invoker.extra_substitutions)) { |
+ foreach(substitution, invoker.extra_substitutions) { |
+ extra_args += [ "-s=$substitution" ] |
+ } |
+ } |
+ response_file_contents = |
+ extra_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", |
+ "-o=" + rebase_path(outputs[0], root_build_dir), |
+ ] + rebase_path(sources, root_build_dir) |
+ args = [ "@{{response_file_name}}" ] |
+ } |
+} |
+ |
+# Generates Info.plist files for Mac apps and frameworks. |
+# |
+# Arguments |
+# |
+# info_plist: |
+# string, the path to an plist file that will be included in the final |
+# Info.plist generated. |
+# |
+# executable_name: |
+# string, name of the generated target used for the product |
+# and executable name as specified in the output Info.plist. |
+# |
+# extra_substitutions: |
+# (optional) string array, 'key=value' pairs for extra fields which are |
+# specified in a source Info.plist template. |
+template("mac_info_plist") { |
+ info_plist(target_name) { |
+ extra_substitutions = [] |
+ if (defined(invoker.extra_substitutions)) { |
+ extra_substitutions = invoker.extra_substitutions |
+ } |
+ extra_substitutions += [ |
+ "MAC_SDK_BUILD=$mac_sdk_build", |
+ "MAC_SDK_NAME=$mac_sdk_name$mac_sdk_version", |
+ ] |
+ plist_templates = [ |
+ "//build/config/mac/BuildInfo.plist", |
+ invoker.info_plist, |
+ ] |
+ forward_variables_from(invoker, [ "executable_name" ]) |
+ } |
+} |
+ |
+# This is used as the base template for both iOS and Mac frameworks. |
# |
# By default, the bundle target this template generates does not link the |
# resulting framework into anything that depends on it. If a dependency wants |
@@ -98,7 +179,7 @@ template("framework_bundle") { |
_output_name = invoker.output_name |
} |
- # If the framework is unversionned, the final _target_name will be the |
+ # If the framework is unversioned, the final _target_name will be the |
# create_bundle(_framework_target), otherwise an action with the name |
# _target_name will depends on the the create_bundle() in order to prepare |
# the versioned directory structure. |
@@ -342,18 +423,25 @@ template("mac_framework_bundle") { |
_info_plist_target = target_name + "_info_plist" |
- # TODO(rsesek): Process Info.plist variables. |
+ mac_info_plist(_info_plist_target) { |
+ executable_name = target_name |
+ if (defined(invoker.output_name)) { |
+ executable_name = invoker.output_name |
+ } |
+ forward_variables_from(invoker, [ "info_plist" ]) |
+ } |
_info_plist_bundle_data = _info_plist_target + "_bundle_data" |
bundle_data(_info_plist_bundle_data) { |
forward_variables_from(invoker, [ "testonly" ]) |
- sources = [ |
- invoker.info_plist, |
- ] |
+ sources = get_target_outputs(":$_info_plist_target") |
outputs = [ |
"{{bundle_root_dir}}/Info.plist", |
] |
+ public_deps = [ |
+ ":$_info_plist_target", |
+ ] |
} |
framework_bundle(target_name) { |
@@ -420,19 +508,23 @@ template("mac_app_bundle") { |
_info_plist_target = target_name + "_info_plist" |
- # TODO(rsesek): Process Info.plist variables. |
+ mac_info_plist(_info_plist_target) { |
+ executable_name = _output_name |
+ forward_variables_from(invoker, [ "info_plist" ]) |
+ } |
_info_plist_bundle_data = _info_plist_target + "_bundle_data" |
bundle_data(_info_plist_bundle_data) { |
forward_variables_from(invoker, [ "testonly" ]) |
visibility = [ ":$_target_name" ] |
- sources = [ |
- invoker.info_plist, |
- ] |
+ sources = get_target_outputs(":$_info_plist_target") |
outputs = [ |
"{{bundle_root_dir}}/Info.plist", |
] |
+ public_deps = [ |
+ ":$_info_plist_target", |
+ ] |
} |
create_bundle(_target_name) { |