# 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("//sdk/cts/build/cts_element.gni")
import("//sdk/cts/build/write_cts_file.gni")
import("//src/sys/build/components.gni")

# A Fuchsia component that can be used in CTS.
#
# An equivalent to fuchsia_component, but ensures dependencies are allowed in CTS.
#
# Example:
# ```
# cts_fuchsia_component("my-test-component") {
#   deps = [ ":my-test" ]
#   manifest = "meta/my-test.cmx"
#   testonly = true
# }
# ```
template("cts_fuchsia_component") {
  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_component(target_name) {
    forward_variables_from(invoker, "*")
    if (defined(deps) && deps != []) {
      deps += [ ":${target_name}_verify_deps" ]
    }
  }

  write_cts_file(target_name) {
  }
}
