Index: services/catalog/public/tools/catalog.gni |
diff --git a/services/catalog/public/tools/catalog.gni b/services/catalog/public/tools/catalog.gni |
index 7683907c45f252f80ae2cf076240d6d96b3d47e4..ae112b4ad4f13857d5ff4a0ad7d7c088769ee3ac 100644 |
--- a/services/catalog/public/tools/catalog.gni |
+++ b/services/catalog/public/tools/catalog.gni |
@@ -3,7 +3,6 @@ |
# found in the LICENSE file. |
import("//build/config/dcheck_always_on.gni") |
-import("//services/service_manager/public/constants.gni") |
# Generates a static catalog manifest to be loaded at runtime. This manifest |
# contains the union of all individual service manifests specified by the |
@@ -19,14 +18,22 @@ import("//services/service_manager/public/constants.gni") |
# Parameters: |
# |
# embedded_services (optional) |
-# A list of names of services which must be embedded by the Service |
-# Manager embedder's binary in order to function. Services listed here |
-# should have a corresponding service_manifest rule entry in deps. |
+# A list of service manifest targets whose outputs correspond to services |
+# embedded by the Service Manager embedder's binary. Outputs of targets |
+# listed here will be embedded in the catalog within its |
+# "embedded_services" list. |
# |
# standalone_services (optional) |
-# A list of names of services which must be available to the Service |
-# Manager at runtime, in a Packages/ directory relative to the Service |
-# Manager embedder's binary. |
+# A list of service manifest targets whose outputs correspond to services |
+# with standalone binaries which must be available to the Service Manager |
+# at runtime. Outputs of targets listed here will be embedded in the |
+# catalog within its "standalone_services" list. |
+# |
+# Typically a standalone service binary is expected to live next to |
+# the Service Manager embedder's binary, with the name |
+# "${service_name}.service", with an additional ".exe" suffix on Windows. |
+# Binaries following this naming scheme are typically output by "service" |
+# targets (see //services/service_manager/public/cpp/service.gni). |
# |
# executable_overrides (optional) |
# A list of overrides to apply in catalog metadata for individual |
@@ -44,8 +51,12 @@ import("//services/service_manager/public/constants.gni") |
# "content_browser" service can be started by running the "chrome" |
# executable in the embedder's own directory. |
# |
-# included_catalogs (optional) |
-# A list of other catalog files to be included within this catalog. |
+# This overrides the default binary name expectation described in |
+# |standalone_services| above. |
+# |
+# catalog_deps (optional) |
+# A list of other catalog targets whose outputs will be included within |
+# this catalog. Targets in this list |
# |
template("catalog") { |
output_filename = "$target_gen_dir/${target_name}.json" |
@@ -54,25 +65,58 @@ template("catalog") { |
script = "//services/catalog/public/tools/generate_manifest.py" |
+ inputs = [] |
outputs = [ |
output_filename, |
] |
- args = [ |
- "--output=" + rebase_path(output_filename), |
- "--packages-dir=" + rebase_path("$root_out_dir/$packages_directory"), |
- ] |
+ args = [ "--output=" + rebase_path(output_filename) ] |
if (is_debug || dcheck_always_on) { |
args += [ "--pretty" ] |
} |
+ deps = [] |
+ if (defined(invoker.deps)) { |
+ deps += invoker.deps |
+ } |
+ |
if (defined(invoker.embedded_services)) { |
- args += [ "--embedded-services" ] + invoker.embedder_services |
+ args += [ "--embedded-services" ] |
+ foreach(manifest_target, invoker.embedded_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 service 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})" ] |
+ } |
} |
if (defined(invoker.standalone_services)) { |
- args += [ "--standalone-services" ] + invoker.standalone_services |
+ args += [ "--standalone-services" ] |
+ foreach(manifest_target, invoker.standalone_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 service 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})" ] |
+ } |
} |
if (defined(invoker.executable_overrides)) { |
@@ -80,15 +124,17 @@ template("catalog") { |
[ "--override-service-executables" ] + invoker.executable_overrides |
} |
- if (defined(invoker.included_catalogs)) { |
+ if (defined(invoker.catalog_deps)) { |
args += [ "--include-catalogs" ] |
- foreach(catalog_filename, invoker.included_catalogs) { |
- args += [ rebase_path(catalog_filename) ] |
- } |
- } |
+ foreach(catalog_target, invoker.catalog_deps) { |
+ catalog_target_dir = get_label_info(catalog_target, "target_gen_dir") |
+ catalog_target_name = get_label_info(catalog_target, "name") |
+ catalog_filename = "$catalog_target_dir/${catalog_target_name}.json" |
- if (defined(invoker.deps)) { |
- deps = invoker.deps |
+ inputs += [ "$catalog_filename" ] |
+ deps += [ catalog_target ] |
+ args += [ rebase_path(catalog_filename, root_build_dir) ] |
+ } |
} |
} |
} |