# 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/host.gni")
import("//build/testing/host_test_data.gni")
import("//sdk/cts/build/cts_element.gni")
import("//sdk/cts/build/cts_version.gni")
import("//sdk/cts/build/write_cts_file.gni")

# Defines host_test_data that can be used in the CTS.
#
# An equivalent to host_test_data, but ensures dependencies are allowed in the CTS.
#
# See host_test_data() for parameters.
template("cts_host_test_data") {
  if (!defined(invoker.deps)) {
    invoker.deps = []
  }

  if (invoker.deps != [] && cts_version == "") {
    verify_target = target_name + "_verify_deps"
  }
  write_file_target = target_name + "_cts_file"

  if (defined(verify_target)) {
    cts_element(verify_target) {
      deps = invoker.deps
      invoker_label = get_label_info(invoker.target_name, "label_no_toolchain")
    }
  }

  write_cts_file(write_file_target) {
  }

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

    if (defined(verify_target)) {
      deps += [ ":$verify_target" ]
    }
    deps += [ ":$write_file_target" ]
  }
}
