# Copyright 2022 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_library.gni")
import("//build/go/go_test.gni")

go_library("project") {
  sources = [
    "analyze.go",
    "config.go",
    "filter.go",
    "init.go",
    "metrics.go",
    "project.go",
    "project_test.go",
    "spdx.go",
  ]
  deps = [
    "//third_party/golibs:github.com/spdx/tools-golang(//build/toolchain:host_x64)",
    "//third_party/golibs:golang.org/x/sync",
    "//tools/check-licenses/file",
    "//tools/check-licenses/project/readme",
    "//tools/check-licenses/util",
    "//tools/lib/logger",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":check-licenses_project_tests($host_toolchain)",
    "readme:tests",
  ]
}

if (is_host) {
  go_test("check-licenses_project_tests") {
    library = ":project"
    args = [
      "--test_data_dir",
      rebase_path("$target_gen_dir/testdata", root_build_dir),
    ]
    non_go_deps = [ "testdata" ]
  }
}
