# 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 = [
    ":lib",
    "golden",
    "//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" ]
}

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 = [ "testdata" ]
  }

  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("$target_gen_dir/golden", root_build_dir),
    ]
    deps = [ "golden" ]
    non_go_deps = [ "golden:licenses" ]
  }
}
