| Index: services/service_manager/public/service_manifest.gni
|
| diff --git a/services/service_manager/public/service_manifest.gni b/services/service_manager/public/service_manifest.gni
|
| index 58e38d48eac29a9961d840f6839d36b6b3d53ccd..22fc38eaa50a343bba9d2c2abbc608742cf23157 100644
|
| --- a/services/service_manager/public/service_manifest.gni
|
| +++ b/services/service_manager/public/service_manifest.gni
|
| @@ -2,6 +2,7 @@
|
| # Use of this source code is governed by a BSD-style license that can be
|
| # found in the LICENSE file.
|
|
|
| +import("//build/config/dcheck_always_on.gni")
|
| import("//services/service_manager/public/constants.gni")
|
|
|
| # Used to produce a Service Manifest for a Service.
|
| @@ -104,6 +105,10 @@ template("service_manifest") {
|
| "--output=$rebase_output",
|
| ]
|
|
|
| + if (is_debug || dcheck_always_on) {
|
| + args += [ "--pretty" ]
|
| + }
|
| +
|
| if (defined(invoker.overlays)) {
|
| args += [ "--overlays" ]
|
| foreach(overlay_path, invoker.overlays) {
|
| @@ -112,6 +117,7 @@ template("service_manifest") {
|
| }
|
|
|
| if (defined(invoker.packaged_services)) {
|
| + args += [ "--packaged-services" ]
|
| foreach(name, invoker.packaged_services) {
|
| input = "$root_out_dir/$packages_directory/$name/manifest.json"
|
| inputs += [ input ]
|
| @@ -131,17 +137,134 @@ template("service_manifest") {
|
| all_deps += invoker.deps
|
| }
|
|
|
| - group("${target_name}__is_service_manifest") {
|
| + group("${target_name}__is_service_manifest_or_overlay") {
|
| + }
|
| +
|
| + # Explicitly ensure that all dependencies are service_manifest
|
| + # or service_manifest_overlay targets themselves.
|
| + group("${target_name}__check_deps_are_all_service_manifest") {
|
| + deps = []
|
| + foreach(d, all_deps) {
|
| + name = get_label_info(d, "label_no_toolchain")
|
| + toolchain = get_label_info(d, "toolchain")
|
| + deps += [ "${name}__is_service_manifest_or_overlay(${toolchain})" ]
|
| + }
|
| + }
|
| +}
|
| +
|
| +# A simple derivative of the service_manifest template above. This allows for
|
| +# embedding of packaged services into a manifest overlay.
|
| +#
|
| +# Parameters:
|
| +#
|
| +# source
|
| +# The manifest overlay file to procss.
|
| +#
|
| +# overlays (optional)
|
| +# A list of partial manifests to overlay onto the source manifest before
|
| +# emitting the final output. Overlays are applied as the last step, after
|
| +# any packaged manifests are embedded.
|
| +#
|
| +# output_name (optional)
|
| +# The output name of the manifest. Defaults to the target name.
|
| +#
|
| +# deps (optional)
|
| +# An array of the service_manifest targets this overlay depends on.
|
| +#
|
| +# packaged_services (optional)
|
| +# An array of names of the services packaged into this overlay.
|
| +#
|
| +# Outputs:
|
| +#
|
| +# An instantiation of this template produces in
|
| +# ${root_gen_dir}/${output_name}.json
|
| +#
|
| +template("service_manifest_overlay") {
|
| + assert(defined(invoker.source),
|
| + "\"source\" must be defined for the $target_name template")
|
| + if (defined(invoker.deps)) {
|
| + assert(defined(invoker.packaged_services) || defined(invoker.overlays),
|
| + "\"deps\" implies that you also want \"packaged_services\" and/or" +
|
| + "\"overlays\", but you have neither.")
|
| + }
|
| + if (defined(invoker.packaged_services)) {
|
| + assert(defined(invoker.deps),
|
| + "\"deps\" building the dependent packaged services must be " +
|
| + "provided.")
|
| + }
|
| + if (defined(invoker.type)) {
|
| + assert(invoker.type == "mojo" || invoker.type == "exe",
|
| + "\"type\" must be one of \"mojo\" or \"exe\".")
|
| + }
|
| +
|
| + action(target_name) {
|
| + script =
|
| + "//services/service_manager/public/tools/manifest/manifest_collator.py"
|
| +
|
| + inputs = [
|
| + invoker.source,
|
| + ]
|
| + if (defined(invoker.overlays)) {
|
| + inputs += invoker.overlays
|
| + }
|
| +
|
| + output_name = target_name
|
| + if (defined(invoker.output_name)) {
|
| + output_name = invoker.output_name
|
| + }
|
| + output = "${root_gen_dir}/${output_name}.json"
|
| +
|
| + outputs = [
|
| + output,
|
| + ]
|
| +
|
| + rebase_parent = rebase_path(invoker.source, root_build_dir)
|
| + rebase_output = rebase_path(output, root_build_dir)
|
| +
|
| + args = [
|
| + "--parent=$rebase_parent",
|
| + "--output=$rebase_output",
|
| + ]
|
| +
|
| + if (is_debug || dcheck_always_on) {
|
| + args += [ "--pretty" ]
|
| + }
|
| +
|
| + if (defined(invoker.overlays)) {
|
| + args += [ "--overlays" ]
|
| + foreach(overlay_path, invoker.overlays) {
|
| + args += [ rebase_path(overlay_path, root_build_dir) ]
|
| + }
|
| + }
|
| +
|
| + if (defined(invoker.packaged_services)) {
|
| + args += [ "--packaged-services" ]
|
| + foreach(name, invoker.packaged_services) {
|
| + input = "$root_out_dir/$packages_directory/$name/manifest.json"
|
| + inputs += [ input ]
|
| + args += [ rebase_path(input, root_build_dir) ]
|
| + }
|
| + }
|
| +
|
| + deps = []
|
| + data_deps = []
|
| + if (defined(invoker.deps)) {
|
| + deps += invoker.deps
|
| + data_deps += invoker.deps
|
| + }
|
| + }
|
| +
|
| + group("${target_name}__is_service_manifest_or_overlay") {
|
| }
|
|
|
| # Explicitly ensure that all dependencies are service_manifest
|
| - # targets themselves.
|
| + # or service_manifest_overlay targets themselves.
|
| group("${target_name}__check_deps_are_all_service_manifest") {
|
| deps = []
|
| foreach(d, all_deps) {
|
| name = get_label_info(d, "label_no_toolchain")
|
| toolchain = get_label_info(d, "toolchain")
|
| - deps += [ "${name}__is_service_manifest(${toolchain})" ]
|
| + deps += [ "${name}__is_service_manifest_or_overlay(${toolchain})" ]
|
| }
|
| }
|
| }
|
|
|