# 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("main") {
    source_dir = "cmd"

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

    deps = [
      "//third_party/golibs:github.com/google/go-cmp",
      "//third_party/golibs:github.com/spf13/pflag",
      "//third_party/golibs:google.golang.org/protobuf",
      "//tools/integration/fint:fint_lib",
      "//tools/integration/fint:proto_lib",
      "//tools/lib/color",
      "//tools/lib/logger",
      "//tools/lib/osmisc",
      "//tools/lib/subprocess",
    ]
  }

  go_binary("fx-set") {
    gopackage = "go.fuchsia.dev/fuchsia/tools/build/fx-set/cmd"

    deps = [ ":main" ]
  }

  go_test("fx_set_tests") {
    output_name = "fx_set_tests"
    gopackages = [ "go.fuchsia.dev/fuchsia/tools/build/fx-set/cmd" ]
    deps = [ ":main" ]
  }
}

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