# 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/go/go_binary.gni")
import("//build/go/go_library.gni")
import("//build/go/go_test.gni")
import("//build/testing/host_test_data.gni")

go_binary("check-licenses") {
  gopackage = "go.fuchsia.dev/fuchsia/tools/check-licenses/cmd"
  deps = [ ":main" ]
}

go_library("main") {
  source_dir = "cmd"
  deps = [
    ":golden",
    ":lib",
    "//third_party/golibs:cloud.google.com/go/storage",
    "//third_party/golibs:github.com/google/subcommands",
    "//tools/lib/logger",
  ]

  sources = [
    "main.go",
    "main_test.go",
    "skipLists.go",
  ]
}

go_library("templates") {
  source_dir = "templates"

  sources = [
    "html.tmpl.go",
    "json.tmpl.go",
    "txt.tmpl.go",
  ]
}

go_library("lib") {
  sources = [
    "config.go",
    "config_test.go",
    "file.go",
    "file_test.go",
    "file_tree.go",
    "file_tree_test.go",
    "flutter.go",
    "license.go",
    "license_test.go",
    "licenses.go",
    "licenses_test.go",
    "metrics.go",
    "metrics_test.go",
    "template.go",
    "template_test.go",
    "traverse.go",
    "traverse_test.go",
  ]

  deps = [
    ":noticetxt",
    ":templates",
    "//third_party/golibs:golang.org/x/sync",
    "//tools/lib/logger",
  ]
}

go_library("noticetxt") {
  source_dir = "noticetxt"
  sources = [
    "noticetxt.go",
    "noticetxt_test.go",
  ]
  deps = [ "//third_party/golibs:github.com/google/go-cmp" ]
}

go_library("golden") {
  source_dir = "golden"
  sources = [ "golden_test.go" ]
}

install_host_tools("host") {
  deps = [ ":check-licenses" ]
  outputs = [ "check-licenses" ]
}

group("tests") {
  testonly = true
  deps = [
    ":check-licenses_golden_tests($host_toolchain)",
    ":check-licenses_lib_tests($host_toolchain)",
    ":check-licenses_main_tests($host_toolchain)",
    ":check-licenses_noticetxt_tests($host_toolchain)",
  ]
}

if (is_host) {
  go_test("check-licenses_main_tests") {
    gopackages = [ "go.fuchsia.dev/fuchsia/tools/check-licenses/cmd" ]
    deps = [ ":main" ]
  }

  go_test("check-licenses_lib_tests") {
    gopackages = [ "go.fuchsia.dev/fuchsia/tools/check-licenses" ]
    args = [
      "--test_data_dir",
      rebase_path("$target_gen_dir/testdata", root_build_dir),
    ]
    deps = [ ":lib" ]
    non_go_deps = [
      ":config_test_data",
      ":lib_test_data",
    ]
  }

  host_test_data("config_test_data") {
    sources = [ "config" ]
    outputs = [ "$target_gen_dir/config" ]
  }

  host_test_data("lib_test_data") {
    sources = [ "testdata" ]
    outputs = [ "$target_gen_dir/testdata" ]
  }

  _golden_testdata_path = "$target_gen_dir/golden"

  go_test("check-licenses_noticetxt_tests") {
    gopackages = [ "go.fuchsia.dev/fuchsia/tools/check-licenses/noticetxt" ]
    deps = [ ":noticetxt" ]
  }

  go_test("check-licenses_golden_tests") {
    gopackages = [ "go.fuchsia.dev/fuchsia/tools/check-licenses/golden" ]
    args = [
      "--test_data_dir",
      rebase_path(_golden_testdata_path, root_build_dir),
    ]
    deps = [ ":golden" ]
    non_go_deps = [ ":golden_test_data" ]
  }

  host_test_data("golden_test_data") {
    sources = [ "golden" ]
    outputs = [ _golden_testdata_path ]
  }
}
