Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(442)

Unified Diff: services/service_manager/public/service_manifest.gni

Issue 2651953002: Revert of [Service Manager] Get rid of dynamic service discovery (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 96eb289959130eb242ded7ec67186a07ef2f42c0..70a8d50bccbd1a9621bf579c77a804d9a6982f89 100644
--- a/services/service_manager/public/service_manifest.gni
+++ b/services/service_manager/public/service_manifest.gni
@@ -3,91 +3,202 @@
# 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.
#
-# Service manifests may be subsequently aggregated into one or more catalog
-# manifests (see //services/catalog/public/tools/catalog.gni). A catalog
-# manifest provides the Service Manager at runtime with a static service layout
-# configuration to dictate which services are supported by the runtime
-# environment as well as how individual services may be launched and
-# interconnected.
-#
-# Note that this target may be used to produce partial manifests, and partial
-# manifests may be aggregated by using one service_manifest target as the
-# |source_manifest| of another (see below.)
-#
# Parameters:
#
-# source (optional**)
-# The manifest template for this service. Must be the name of a valid JSON
-# file.
-#
-# source_manifest (optional**)
-# The manifest template for this service. Must be the name of another
-# service_manifest target.
-#
-# ** NOTE: Either |source| OR |source_manifest| MUST be specified.
-#
-# name (optional)
-# The name of the service whose manifest is to be generated. A script
-# validates that the value of this parameter matches the name set in the
-# source manifest and raises an error if it does not match.
+# source
+# The manifest file template for this service, must be valid JSON with
+# a valid 'url' key matching name.
#
# overlays (optional)
-# A list of other manifest targets whose outputs should be overlayed onto
-# the source manifest before emitting the final output. Overlays are
-# applied in-order as the last step of output generation, after any
-# |packaged_services| manifests are embedded.
+# 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.
+#
+# name
+# The host portion of the mojo: URL of the service. A script validates
+# that the value of this parameter matches the host name portion of the
+# 'url' property set in the manifest and throws a ValueError if they do
+# not.
+#
+# output_name (optional)
+# The name of the package to output. The default value is copied from
+# |name|. Note that this has no effect on the contents of the manifest,
+# but only determines the output subdirectory within ${out}/Packages.
+#
+# deps (optional)
+# An array of dependent instances of this template. This template enforces
+# that dependencies can only be instances of this template.
#
# packaged_services (optional)
-# A list of other manifest targets whose outputs should be packaged
-# within this output manifest, specifically within a toplevel "services"
-# list.
+# An array of names of the dependent services.
#
# Outputs:
#
-# An instantiation of this template produces a meta manifest from the source
-# template and the output manifests of all its |overlay| and
-# |packaged_services|dependencies. The output file is always
-# "$target_gen_dir/${target_name}.json".
+# An instantiation of this template produces in
+# $outdir/<name>/manifest.json
+# a meta manifest from the source template and the output manifest of all
+# dependent children.
#
template("service_manifest") {
- assert(
- defined(invoker.source) || defined(invoker.source_manifest),
- "\"source\" or \"source_manifest\" must be defined for the $target_name target")
- assert(
- !defined(invoker.source) || !defined(invoker.source_manifest),
- "Only one of \"source\" or \"source_manifest\" must be defined for the $target_name target")
+ assert(defined(invoker.source),
+ "\"source\" must be defined for the $target_name template")
+ assert(defined(invoker.name),
+ "\"name\" 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.")
+ }
action(target_name) {
script =
"//services/service_manager/public/tools/manifest/manifest_collator.py"
- deps = []
+ name = invoker.name
+ inputs = [
+ invoker.source,
+ ]
+ if (defined(invoker.overlays)) {
+ inputs += invoker.overlays
+ }
+
+ if (defined(invoker.output_name)) {
+ output = "$root_out_dir/$packages_directory/${invoker.output_name}/manifest.json"
+ } else {
+ output = "$root_out_dir/$packages_directory/$name/manifest.json"
+ }
+ outputs = [
+ output,
+ ]
+
+ rebase_parent = rebase_path(invoker.source, root_build_dir)
+ rebase_output = rebase_path(output, root_build_dir)
+
+ args = [
+ "--name=$name",
+ "--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
- }
-
- if (defined(invoker.source)) {
- source = invoker.source
- } else {
- source_target_dir =
- get_label_info(invoker.source_manifest, "target_gen_dir")
- source_target_name = get_label_info(invoker.source_manifest, "name")
- source = "$source_target_dir/${source_target_name}.json"
- deps += [ invoker.source_manifest ]
- }
+ data_deps += invoker.deps
+ }
+ }
+
+ all_deps = []
+ if (defined(invoker.deps)) {
+ all_deps += invoker.deps
+ }
+
+ 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.")
+ }
+
+ action(target_name) {
+ script =
+ "//services/service_manager/public/tools/manifest/manifest_collator.py"
+
inputs = [
- source,
- ]
-
- output = "$target_gen_dir/${target_name}.json"
+ 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(source, root_build_dir)
+ rebase_parent = rebase_path(invoker.source, root_build_dir)
rebase_output = rebase_path(output, root_build_dir)
args = [
@@ -95,56 +206,45 @@
"--output=$rebase_output",
]
- if (defined(invoker.name)) {
- args += [
- "--name",
- invoker.name,
- ]
- }
-
if (is_debug || dcheck_always_on) {
args += [ "--pretty" ]
}
if (defined(invoker.overlays)) {
args += [ "--overlays" ]
- foreach(manifest_target, invoker.overlays) {
- manifest_target_dir = get_label_info(manifest_target, "target_gen_dir")
- manifest_target_name = get_label_info(manifest_target, "name")
- manifest_filename = "$manifest_target_dir/${manifest_target_name}.json"
-
- inputs += [ manifest_filename ]
- deps += [ manifest_target ]
- args += [ rebase_path(manifest_filename, root_build_dir) ]
-
- # Ensure that each entry does in fact reference a manifest rule.
- label_no_toolchain =
- get_label_info(manifest_target, "label_no_toolchain")
- toolchain = get_label_info(manifest_target, "toolchain")
- deps += [ "${label_no_toolchain}__is_service_manifest(${toolchain})" ]
+ foreach(overlay_path, invoker.overlays) {
+ args += [ rebase_path(overlay_path, root_build_dir) ]
}
}
if (defined(invoker.packaged_services)) {
args += [ "--packaged-services" ]
- foreach(manifest_target, invoker.packaged_services) {
- manifest_target_dir = get_label_info(manifest_target, "target_gen_dir")
- manifest_target_name = get_label_info(manifest_target, "name")
- manifest_filename = "$manifest_target_dir/${manifest_target_name}.json"
-
- inputs += [ manifest_filename ]
- deps += [ manifest_target ]
- args += [ rebase_path(manifest_filename, root_build_dir) ]
-
- # Ensure that each entry does in fact reference a manifest rule.
- label_no_toolchain =
- get_label_info(manifest_target, "label_no_toolchain")
- toolchain = get_label_info(manifest_target, "toolchain")
- deps += [ "${label_no_toolchain}__is_service_manifest(${toolchain})" ]
- }
- }
- }
-
- group("${target_name}__is_service_manifest") {
+ 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
+ # 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})" ]
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698