# 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/allowed_cts_deps.gni")

# Defines a CTS element.
#
# Ensures that dependencies are allowed in CTS. This template should not be used
# directly, but through the other CTS templates.
template("cts_element") {
  assert(defined(invoker.deps))
  assert(defined(invoker.invoker_label))

  fully_qualified_deps = []
  foreach(dep, invoker.deps) {
    fully_qualified_deps += [ get_label_info(dep, "label_no_toolchain") ]
  }

  action(target_name) {
    forward_variables_from(invoker, "*")

    inputs = []
    foreach(sdk, ALLOWED_CTS_SDKS) {
      sdk_manifest_copy = sdk + "_copy($target_toolchain)"
      sdk_manifest = get_label_info(sdk_manifest_copy, "root_out_dir") +
                     "/sdk/manifest/" + get_label_info(sdk, "name")
      deps += [ sdk_manifest_copy ]
      inputs += [ sdk_manifest ]
    }

    testonly = true

    script = "//sdk/cts/build/scripts/verify_cts_deps.py"

    # GN requires an action to output a file. This file is written, but not used.
    outputs = [ "${target_gen_dir}/${target_name}_DEPFILE" ]

    args = [
             "--root_build_dir",
             rebase_path(root_build_dir),
             "--output",
             rebase_path(outputs[0]),
             "--invoker_label",
             invoker_label,
             "--deps",
           ] + fully_qualified_deps + [ "--allowed_cts_deps" ] +
           ALLOWED_CTS_DEPS + ALLOWED_RUST_DEPS + [ "--allowed_cts_dirs" ] +
           ALLOWED_CTS_DIRS + [ "--sdk_manifests" ] + rebase_path(inputs)
  }
}
