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

import("//build/go/go_binary.gni")
import("//build/go/go_library.gni")
import("//build/go/go_test.gni")
import("//build/host.gni")

go_library("lib") {
  name = "fuchsia.googlesource.com/fuchsia/tools/whereiscl/lib"
  source_dir = "lib"
  deps = [ ":netutil" ]
}

go_library("main") {
  name = "main"
  source_dir = "."
  deps = [ ":lib" ]
}

go_library("netutil") {
  name = "fuchsia.googlesource.com/fuchsia/tools/whereiscl/netutil"
  source_dir = "netutil"
}

go_binary("whereiscl") {
  gopackage = "main"
  deps = [ ":main" ]
}

install_host_tools("host") {
  deps = [ ":whereiscl" ]
  outputs = [ "whereiscl" ]
}

go_library("testhelper") {
  name = "fuchsia.googlesource.com/fuchsia/tools/whereiscl/testhelper"
  source_dir = "testhelper"
}

go_test("whereiscl_test") {
  gopackages = [ "fuchsia.googlesource.com/fuchsia/tools/whereiscl/lib" ]
  deps = [
    ":lib",
    ":testhelper",
    "//third_party/golibs:github.com/google/go-cmp",
  ]
}
