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

import("//build/components.gni")
import("//sdk/cts/build/cts_element.gni")
import("//sdk/cts/build/write_cts_file.gni")

# A Fuchsia package that can be used in CTS.
#
# An equivalent to fuchsia_package, but ensures dependencies are allowed in CTS.
template("cts_fuchsia_package") {
  if (defined(invoker.deps) && invoker.deps != []) {
    cts_element("${target_name}_verify_deps") {
      deps = invoker.deps
      invoker_label = get_label_info(invoker.target_name, "label_no_toolchain")
    }
  }

  fuchsia_package(target_name) {
    forward_variables_from(invoker, "*")
    if (defined(deps) && deps != []) {
      deps += [
        ":${target_name}_cts_file",
        ":${target_name}_verify_deps",
      ]
    } else {
      deps = [ ":${target_name}_cts_file" ]
    }
  }

  write_cts_file(target_name) {
  }
}
