# Copyright 2018 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/toolchain.gni")
import("//build/python/python_host_test.gni")
import("//build/toolchain/basic_toolchain.gni")

# A toolchain dedicated to processing Go code.
# The only targets in this toolchain are action() targets, so it
# has no real tools.  But every toolchain needs stamp and copy.
basic_toolchain("gopher") {
  expected_label = go_toolchain
}

if (is_host) {
  python_host_test("verify_golden_go_proto_file_test") {
    main_source = "verify_golden_go_proto_file_test.py"
    sources = [ "verify_golden_go_proto_file.py" ]
  }
}

# Used to restrict the set of `go_build` targets that can set `gopackages`.
# TODO(https://fxbug.dev/42153429): Enforce that only third-party libraries can use
# `gopackages` and recursive sources.
group("allow_gopackages") {
  # WARNING: Only third-party libraries should be added here.
  visibility = [
    "//src/testing/fuzzing/syzkaller:syz-sysgen",
    "//third_party/go:*",
    "//third_party/go/makefuchsia:*",
    "//third_party/go/makeroot:*",
    "//third_party/golibs/*",
  ]
}

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