# Copyright 2018 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.

import("//build/sdk/sdk_atom.gni")

# Declares a component manifest shard to be added to an SDK.
#
# Parameters
#
#   category (required)
#     Publication level of the data set in SDKs.
#     See //build/sdk/sdk_atom.gni.
#
#   sdk_area (optional)
#     [string] The API area responsible for maintaining this shard.
#     See //build/sdk/sdk_atom.gni.
#
#   name (required)
#     Name of the component manifest in the SDK.
#
#   manifests (required)
#     List of paths to the component manifest files to add to the SDK.
#
#   non_sdk_deps (optional)
#     List of GN labels which this target needs built.

template("sdk_component_manifests") {
  assert(defined(invoker.category), "Must define an SDK category")
  assert(defined(invoker.name), "Must define an SDK name")
  assert(defined(invoker.manifests), "Must define component manifests")
  assert(invoker.manifests != [], "Must define component manifests")

  file_base = "pkg/${invoker.name}"
  meta_dest = "$file_base/$target_name.json"
  file_records = []
  file_dests = []

  foreach(manifest, invoker.manifests) {
    manifest_extension = get_path_info(manifest, "extension")
    assert(manifest_extension == "cml",
           "Unknown manifest format for \"${manifest}\", must be \".cml\"")
    manifest_file = get_path_info(manifest, "file")
    file_dest = "$file_base/$manifest_file"
    file_records += [
      {
        source = manifest
        dest = file_dest
      },
    ]
    file_dests += [ file_dest ]
  }

  sdk_atom(target_name) {
    forward_variables_from(invoker,
                           [
                             "category",
                             "sdk_area",
                             "non_sdk_deps",
                           ])
    id = "sdk://component_manifest/${invoker.name}"
    files = file_records
    meta = {
      schema = "data"
      dest = meta_dest
      value = {
        type = "component_manifest"
        name = invoker.name
        data = file_dests
      }
    }
  }
}
