Index: build/config/mac/rules.gni |
diff --git a/build/config/mac/rules.gni b/build/config/mac/rules.gni |
index 4e9ea68fa1e7708009c4f746885b2f3be561a348..f8ec3613d48c35c17834f9b4f000f090df579337 100644 |
--- a/build/config/mac/rules.gni |
+++ b/build/config/mac/rules.gni |
@@ -172,3 +172,94 @@ template("mac_framework_bundle") { |
deps += [ ":$_info_plist_bundle_data" ] |
} |
} |
+ |
+# Template to create a Mac executable application bundle. |
+# |
+# Arguments |
+# |
+# info_plist: |
+# string, path to the Info.plist file that will be used for the bundle. |
+# |
+# output_name: |
+# (optional) string, name of the generated app without the |
+# .app suffix. If omitted, defaults to target_name. |
+template("mac_app_bundle") { |
+ assert(defined(invoker.info_plist), |
+ "The Info.plist file must be specified for $target_name") |
+ |
+ _target_name = target_name |
+ _output_name = target_name |
+ if (defined(invoker.output_name)) { |
+ _output_name = invoker.output_name |
+ } |
+ |
+ _executable_target = target_name + "_executable" |
+ _executable_bundle_data = _executable_target + "_bundle_data" |
+ |
+ executable(_executable_target) { |
+ visibility = [ ":$_executable_bundle_data" ] |
+ forward_variables_from(invoker, |
+ "*", |
+ [ |
+ "assert_no_deps", |
+ "data_deps", |
+ "info_plist", |
+ "output_name", |
+ "visibility", |
+ ]) |
+ output_name = _output_name |
+ output_dir = "$target_out_dir/$_executable_target" |
+ } |
+ |
+ bundle_data(_executable_bundle_data) { |
+ visibility = [ ":$_target_name" ] |
+ forward_variables_from(invoker, [ "testonly" ]) |
+ sources = [ |
+ "$target_out_dir/$_executable_target/$_output_name", |
+ ] |
+ outputs = [ |
+ "{{bundle_executable_dir}}/$_output_name", |
+ ] |
+ public_deps = [ |
+ ":$_executable_target", |
+ ] |
+ } |
+ |
+ _info_plist_target = target_name + "_info_plist" |
+ |
+ # TODO(rsesek): Process Info.plist variables. |
+ |
+ _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, |
+ ] |
+ outputs = [ |
+ "{{bundle_root_dir}}/Info.plist", |
+ ] |
+ } |
+ |
+ create_bundle(_target_name) { |
+ forward_variables_from(invoker, |
+ [ |
+ "data_deps", |
+ "deps", |
+ "public_deps", |
+ "testonly", |
+ ]) |
+ if (!defined(deps)) { |
+ deps = [] |
+ } |
+ deps += [ |
+ ":$_executable_bundle_data", |
+ ":$_info_plist_bundle_data", |
+ ] |
+ |
+ bundle_root_dir = "$root_out_dir/${_output_name}.app/Contents" |
+ bundle_resources_dir = "$bundle_root_dir/Resources" |
+ bundle_executable_dir = "$bundle_root_dir/MacOS" |
+ } |
+} |