# Copyright 2019 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.

# This file lives at //build/zircon/template.gn; ONLY EDIT IT BY THAT NAME!
# This file is hard-linked to various //zircon/public/*/BUILD.gn files.
# See //zircon/public/README.md for details.

import("//build/config/fuchsia/zircon.gni")

dir = get_label_info(".", "name")
zircon_public = get_label_info("..", "name")

dir_target = false
foreach(target, zircon_legacy_targets) {
  if (target.target_name == dir && target._zircon_public == zircon_public) {
    assert(dir_target == false,
           "$dir appears twice in Zircon legacy_targets metadata:" +
               " $dir_target vs $target")
    dir_target = target
  }
}

import(dir_target.import)

target(dir_target.target_type, dir) {
  forward_variables_from(dir_target,
                         "*",
                         [
                           "import",
                           "target_name",
                           "target_type",
                         ])
}
