# Copyright 2017 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")

template("golib") {
  name = target_name + "/..."
  source_dir = "//third_party/golibs/vendor/$name"
  go_library(target_name) {
    forward_variables_from(invoker, [ "deps" ])
    allow_globbing = true
  }
}

##### NOTE: keep the following targets in alphabetical order.

### cloud.google.com/*
golib("cloud.google.com/go/compute/metadata") {
}
golib("cloud.google.com/go/iam") {
  deps = [
    ":cloud.google.com/go/internal",
    ":github.com/googleapis/gax-go/v2",
    ":google.golang.org/genproto/googleapis/iam/v1",
    ":google.golang.org/grpc",
  ]
}

# Actually aggregates the dependencies of other cloud.google.com/go/internal/*
# packages as well. Use this as a convenience target for any such package.
golib("cloud.google.com/go/internal") {
  deps = [
    ":github.com/golang/protobuf",
    ":github.com/google/go-cmp",
    ":go.opencensus.io",
    ":golang.org/x/oauth2",
    ":google.golang.org/api/googleapi",
    ":google.golang.org/genproto/googleapis/rpc/code",
    ":google.golang.org/grpc",
  ]
}
golib("cloud.google.com/go/storage") {
  deps = [
    ":cloud.google.com/go/iam",
    ":cloud.google.com/go/internal",
    ":github.com/googleapis/gax-go/v2",
    ":google.golang.org/api/googleapi",
    ":google.golang.org/api/iterator",
    ":google.golang.org/api/option",
    ":google.golang.org/api/storage/v1",
    ":google.golang.org/api/transport",
    ":google.golang.org/genproto/googleapis/iam/v1",
  ]
}

### github.com/*
golib("github.com/creack/pty") {
}
golib("github.com/dustin/go-humanize") {
}
golib("github.com/flynn/go-docopt") {
}
golib("github.com/theupdateframework/go-tuf") {
  deps = [
    ":github.com/flynn/go-docopt",
    ":github.com/tent/canonical-json-go",
    ":golang.org/x/crypto",
  ]
}
golib("github.com/fsnotify/fsnotify") {
  deps = [ ":golang.org/x/sys" ]
}
golib("gopkg.in/yaml.v2") {
}

golib("github.com/golang/glog") {
}

# Actually aggregates the dependencies of other google.golang.org/protobuf/*
# packages as well. Use this as a convenience target for any such package.
golib("github.com/golang/protobuf") {
  deps = [
    ":golang.org/x/net",
    ":google.golang.org/protobuf",
  ]
}
golib("github.com/googleapis/gax-go/v2") {
  deps = [ ":google.golang.org/grpc" ]
}
golib("github.com/google/btree") {
}
golib("github.com/google/go-cmp") {
  deps = [ ":golang.org/x/xerrors" ]
}
golib("github.com/golang/groupcache/lru") {
}
golib("github.com/google/shlex") {
}
golib("github.com/google/subcommands") {
}
golib("github.com/google/uuid") {
}
golib("github.com/kr/fs") {
}
golib("github.com/kr/pretty") {
  deps = [ ":github.com/kr/text" ]
}
golib("github.com/kr/text") {
}
golib("github.com/pkg/errors") {
}
golib("github.com/pkg/sftp") {
  deps = [
    ":github.com/kr/fs",
    ":github.com/pkg/errors",
    ":golang.org/x/crypto",
  ]
}
golib("github.com/spf13/pflag") {
}
golib("github.com/tent/canonical-json-go") {
}

### go.opencensus.io/*
# Actually aggregates the dependencies of other go.opencensus.io/*
# packages as well. Use this as a convenience target for any such package.
golib("go.opencensus.io") {
  deps = [
    ":github.com/golang/groupcache/lru",
    ":google.golang.org/grpc",
  ]
}

golib("go.uber.org/atomic") {
}
golib("go.uber.org/multierr") {
  deps = [ ":go.uber.org/atomic" ]
}

### golang.org/x/*
golib("golang.org/x/crypto") {
  deps = [
    ":golang.org/x/net",
    ":golang.org/x/sys",
  ]
}
golib("golang.org/x/net") {
  deps = [
    ":golang.org/x/sys",
    ":golang.org/x/text",
  ]
}
golib("golang.org/x/time") {
}
golib("golang.org/x/oauth2") {
  deps = [
    ":cloud.google.com/go/compute/metadata",
    ":golang.org/x/net",
  ]
}
golib("golang.org/x/sync") {
}
golib("golang.org/x/sys") {
}
golib("golang.org/x/text") {
}
golib("golang.org/x/xerrors") {
}

golib("gonum.org/v1/gonum") {
}

### google.golang.org/*
golib("google.golang.org/genproto/googleapis/api/annotations") {
  deps = [ ":github.com/golang/protobuf" ]
}
golib("google.golang.org/genproto/googleapis/iam/v1") {
  deps = [
    ":github.com/golang/protobuf",
    ":google.golang.org/genproto/googleapis/api/annotations",
    ":google.golang.org/genproto/googleapis/type/expr",
    ":google.golang.org/grpc",
  ]
}
golib("google.golang.org/genproto/googleapis/rpc/code") {
  deps = [ ":github.com/golang/protobuf" ]
}
golib("google.golang.org/genproto/googleapis/rpc/status") {
  deps = [ ":github.com/golang/protobuf" ]
}
golib("google.golang.org/genproto/googleapis/type/expr") {
  deps = [ ":github.com/golang/protobuf" ]
}

# Actually aggregates the dependencies of other google.golang.org/grpc/*
# packages as well. Use this as a convenience target for any such package.
golib("google.golang.org/grpc") {
  deps = [
    ":golang.org/x/net",
    ":golang.org/x/sys",
    ":google.golang.org/genproto/googleapis/rpc/status",
  ]
}
golib("google.golang.org/api/googleapi") {
}
golib("google.golang.org/api/internal") {
  deps = [
    ":golang.org/x/oauth2",
    ":google.golang.org/api/googleapi",
    ":google.golang.org/grpc",
  ]
}
golib("google.golang.org/api/iterator") {
}
golib("google.golang.org/api/option") {
  deps = [
    ":golang.org/x/oauth2",
    ":google.golang.org/api/internal",
    ":google.golang.org/grpc",
  ]
}
golib("google.golang.org/api/storage/v1") {
  deps = [
    ":google.golang.org/api/googleapi",
    ":google.golang.org/api/internal",
    ":google.golang.org/api/option",
    ":google.golang.org/api/transport",
  ]
}
golib("google.golang.org/api/transport") {
  deps = [
    ":go.opencensus.io",
    ":google.golang.org/api/googleapi",
    ":google.golang.org/api/internal",
    ":google.golang.org/api/option",
  ]
}
golib("google.golang.org/protobuf") {
}

golib("gvisor.dev/gvisor") {
  deps = [
    ":github.com/golang/protobuf",
    ":golang.org/x/sys",
    ":golang.org/x/time",
  ]
}
