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

# A Dart library that can be used in CTS.
#
# An equivalent to dart_library, but ensures dependencies are allowed in CTS.
template("cts_dart_library") {
  invoker_deps = []
  if (defined(invoker.deps)) {
    invoker_deps += invoker.deps
  }
  if (defined(invoker.non_dart_deps)) {
    invoker_deps += invoker.non_dart_deps
  }

  if (invoker_deps != []) {
    cts_element("${target_name}_verify_deps") {
      deps = invoker_deps
      invoker_label = get_label_info(invoker.target_name, "label_no_toolchain")
    }
  }

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

    if (invoker_deps != []) {
      if (defined(non_dart_deps)) {
        non_dart_deps += [ ":${target_name}_verify_deps" ]
      } else {
        non_dart_deps = [ ":${target_name}_verify_deps" ]
      }
    }
    if (defined(non_dart_deps)) {
      non_dart_deps += [ ":${target_name}_cts_file" ]
    } else {
      non_dart_deps = [ ":${target_name}_cts_file" ]
    }
  }

  write_cts_file(target_name) {
  }
}
