Index: build/config/mac/rules.gni |
diff --git a/build/config/mac/rules.gni b/build/config/mac/rules.gni |
index 832f635955fed0269b23d9bb7ff53395e56c8fc6..e3270a2235aa7c4113ea26f8026d1923a56622c2 100644 |
--- a/build/config/mac/rules.gni |
+++ b/build/config/mac/rules.gni |
@@ -400,6 +400,11 @@ set_defaults("mac_framework_bundle") { |
# |
# Arguments |
# |
+# package_type: |
+# (optional) string, the product package type to create. Options are: |
+# "app" to create a .app bundle (default) |
+# "xpc" to create an .xpc service bundle |
+# |
# info_plist: |
# (optional) string, path to the Info.plist file that will be used for |
# the bundle. |
@@ -430,6 +435,23 @@ template("mac_app_bundle") { |
_output_name = invoker.output_name |
} |
+ _package_type = "app" |
+ if (defined(invoker.package_type)) { |
+ _package_type = invoker.package_type |
+ } |
+ |
+ if (_package_type == "app") { |
+ _output_extension = "app" |
+ _product_type = "com.apple.product-type.application" |
+ _write_pkg_info = true |
+ } else if (_package_type == "xpc") { |
+ _output_extension = "xpc" |
+ _product_type = "com.apple.product-type.xpc-service" |
+ _write_pkg_info = false |
+ } else { |
+ assert(false, "Unsupported packge_type: " + packge_type) |
+ } |
+ |
_executable_target = target_name + "_executable" |
_executable_bundle_data = _executable_target + "_bundle_data" |
@@ -446,20 +468,22 @@ template("mac_app_bundle") { |
]) |
} |
- _pkg_info_target = target_name + "_pkg_info" |
+ if (_write_pkg_info) { |
+ _pkg_info_target = target_name + "_pkg_info" |
- action(_pkg_info_target) { |
- forward_variables_from(invoker, [ "testonly" ]) |
- script = "//build/config/mac/write_pkg_info.py" |
- sources = get_target_outputs(":$_info_plist_target") |
- outputs = [ |
- "$target_gen_dir/$_pkg_info_target", |
- ] |
- args = [ "--plist" ] + rebase_path(sources, root_build_dir) + |
- [ "--output" ] + rebase_path(outputs, root_build_dir) |
- deps = [ |
- ":$_info_plist_target", |
- ] |
+ action(_pkg_info_target) { |
+ forward_variables_from(invoker, [ "testonly" ]) |
+ script = "//build/config/mac/write_pkg_info.py" |
+ sources = get_target_outputs(":$_info_plist_target") |
+ outputs = [ |
+ "$target_gen_dir/$_pkg_info_target", |
+ ] |
+ args = [ "--plist" ] + rebase_path(sources, root_build_dir) + |
+ [ "--output" ] + rebase_path(outputs, root_build_dir) |
+ deps = [ |
+ ":$_info_plist_target", |
+ ] |
+ } |
} |
executable(_executable_target) { |
@@ -511,18 +535,20 @@ template("mac_app_bundle") { |
] |
} |
- _pkg_info_bundle_data = _pkg_info_target + "_bundle_data" |
+ if (_write_pkg_info) { |
+ _pkg_info_bundle_data = _pkg_info_target + "_bundle_data" |
- bundle_data(_pkg_info_bundle_data) { |
- forward_variables_from(invoker, [ "testonly" ]) |
- visibility = [ ":$_target_name" ] |
- sources = get_target_outputs(":$_pkg_info_target") |
- outputs = [ |
- "{{bundle_root_dir}}/PkgInfo", |
- ] |
- public_deps = [ |
- ":$_pkg_info_target", |
- ] |
+ bundle_data(_pkg_info_bundle_data) { |
+ forward_variables_from(invoker, [ "testonly" ]) |
+ visibility = [ ":$_target_name" ] |
+ sources = get_target_outputs(":$_pkg_info_target") |
+ outputs = [ |
+ "{{bundle_root_dir}}/PkgInfo", |
+ ] |
+ public_deps = [ |
+ ":$_pkg_info_target", |
+ ] |
+ } |
} |
create_bundle(_target_name) { |
@@ -539,10 +565,13 @@ template("mac_app_bundle") { |
deps += [ |
":$_executable_bundle_data", |
":$_info_plist_bundle_data", |
- ":$_pkg_info_bundle_data", |
] |
- product_type = "com.apple.product-type.application" |
- bundle_root_dir = "$root_out_dir/${_output_name}.app/Contents" |
+ if (_write_pkg_info) { |
+ deps += [ ":$_pkg_info_bundle_data" ] |
+ } |
+ product_type = _product_type |
+ bundle_root_dir = |
+ "$root_out_dir/${_output_name}.${_output_extension}/Contents" |
bundle_resources_dir = "$bundle_root_dir/Resources" |
bundle_executable_dir = "$bundle_root_dir/MacOS" |
} |