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

template("cts_host_test_data") {
  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")
    }
  }
  host_test_data(target_name) {
    forward_variables_from(invoker, "*")
    if (defined(deps) && deps != []) {
      deps += [ ":${target_name}_verify_deps" ]
    }
  }

  write_cts_file(target_name) {
  }
}
