| # Copyright 2020 The Fuchsia Authors. All rights reserved. | 
 | # Use of this source code is governed by a BSD-style license that can be | 
 | # found in the LICENSE file. | 
 |  | 
 | # Generate a list of package metadata exported from all packages in the | 
 | # transitive closure of declared dependencies. | 
 | # | 
 | # Parameters | 
 | # | 
 | #   data_keys (required) | 
 | #     [list of strings] A list of package target metadata keys to collect into a | 
 | #     list. See gn help for data_keys for more information. | 
 | # | 
 | #     Well known package metadata: | 
 | # | 
 | #       package_names | 
 | # | 
 | #       snapshot_entries | 
 | #         The snapshot entries are consumed for the production of the snapshots | 
 | #         that feed into `fx delta` for version to version OTA size computations. | 
 | # | 
 | #       blob_manifests | 
 | #         The blob manifests are aggregated by the image build process to produce | 
 | #         manifests to publish to repositories and to produce manifests to write | 
 | #         into blobfs images. | 
 | # | 
 | #       meta_far_merkle_index_entries | 
 | #         The metafar merkle index entries are aggregated in image builds to | 
 | #         produce package server indices for base serving. | 
 | # | 
 | #       package_output_manifests | 
 | #         The path of each output manifest for each package. | 
 | # | 
 | #       package_barrier | 
 | #         Metadata barrier. | 
 | # | 
 | #   data_deps (optional) | 
 | #   data_keys (optional) | 
 | #   deps (optional) | 
 | #   output_conversion (optional) | 
 | #   outputs (optional) | 
 | #   public_deps (optional) | 
 | #   rebase (optional) | 
 | #   testonly (optional) | 
 | #   visibility (optional) | 
 | #     Same as for any GN `generated_file()` target. | 
 | template("generate_package_metadata") { | 
 |   generated_file(target_name) { | 
 |     forward_variables_from(invoker, | 
 |                            [ | 
 |                              "data_deps", | 
 |                              "data_keys", | 
 |                              "deps", | 
 |                              "output_conversion", | 
 |                              "outputs", | 
 |                              "public_deps", | 
 |                              "rebase", | 
 |                              "testonly", | 
 |                              "visibility", | 
 |                            ]) | 
 |  | 
 |     if (!defined(outputs)) { | 
 |       outputs = [ target_gen_dir + "/" + target_name ] | 
 |     } | 
 |  | 
 |     walk_keys = [ "package_barrier" ] | 
 |   } | 
 | } | 
 |  | 
 | # Defines package metadata. | 
 | # | 
 | # This metadata is collected by `generate_package_metadata`. | 
 | # The caller should add a dep on the given target name for the metadata to take effect. | 
 | # | 
 | # Parameters (see `generate_package_metadata` for full definitions) | 
 | # | 
 | #   package_name (required) | 
 | #   snapshot_entry (required) | 
 | #   blob_manifest (required) | 
 | #   meta_far_merkle_index_entry (required) | 
 | #   package_output_manifest (required) | 
 | #   testonly (optional) | 
 | #   visibility (optional) | 
 | template("define_package_metadata") { | 
 |   assert(defined(invoker.package_name), "Missing package_name") | 
 |   assert(defined(invoker.snapshot_entry), "Missing snapshot_entry") | 
 |   assert(defined(invoker.blob_manifest), "Missing blob_manifest") | 
 |   assert(defined(invoker.meta_far_merkle_index_entry), | 
 |          "Missing meta_far_merkle_index_entry") | 
 |   assert(defined(invoker.package_output_manifest), | 
 |          "Missing package_output_manifest") | 
 |  | 
 |   group(target_name) { | 
 |     forward_variables_from(invoker, | 
 |                            [ | 
 |                              "testonly", | 
 |                              "visibility", | 
 |                            ]) | 
 |     metadata = { | 
 |       package_names = [ invoker.package_name ] | 
 |       snapshot_entries = [ invoker.snapshot_entry ] | 
 |       blob_manifests = [ rebase_path(invoker.blob_manifest, root_build_dir) ] | 
 |       meta_far_merkle_index_entries = [ invoker.meta_far_merkle_index_entry ] | 
 |       package_output_manifests = [ invoker.package_output_manifest ] | 
 |     } | 
 |   } | 
 | } |