# Copyright 2021 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")

if (is_host) {
  go_library("staticlints_lib") {
    sources = [
      "main.go",
      "main_test.go",
    ]

    deps = [
      "//tools/build",
      "//tools/lib/color",
      "//tools/lib/jsonutil",
      "//tools/lib/logger",
      "//tools/lib/streams",
      "//tools/staticanalysis",
      "//tools/staticanalysis/analyzers:clippy",
      "//tools/staticanalysis/analyzers:codelinks",
    ]
  }

  go_test("staticlints_tests") {
    gopackages =
        [ "go.fuchsia.dev/fuchsia/tools/staticanalysis/cmd/staticlints" ]
    deps = [ ":staticlints_lib" ]
  }

  go_binary("staticlints") {
    gopackage = "go.fuchsia.dev/fuchsia/tools/staticanalysis/cmd/staticlints"
    deps = [ ":staticlints_lib" ]
  }
}

group("tests") {
  testonly = true
  deps = [ ":staticlints_tests($host_toolchain)" ]
}
