# 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.

visibility = [ "$cobalt_root/*" ]

import("//build/go/go_library.gni")
import("//third_party/protobuf/proto_library.gni")

config("proto_config") {
  defines = [ "PROTO_LITE" ]
}

_registry_protos = [
  "cobalt_registry",
  "metric_definition",
  "project",
  "report_definition",
  "window_size",
]

proto_library("cobalt_registry_proto") {
  proto_in_dir = "$cobalt_root"

  sources = []

  foreach(name, _registry_protos) {
    sources += [ "${name}.proto" ]
  }

  import_protobuf_full = false
  generate_python = false
  generate_go = true
  cc_generator_options = "lite"

  extra_configs = [
    ":proto_config",
    "$cobalt_root:cobalt_config",
  ]

  visibility += [ "//src/cobalt/bin/testapp:cobalt_testapp" ]
}

go_library("cobalt_registry_proto_go") {
  name = "config"
  source_dir = "$root_gen_dir/go-proto-gen/src/$cobalt_root/src/registry"
  non_go_deps = [ ":cobalt_registry_proto" ]
  sources = []

  foreach(name, _registry_protos) {
    sources += [ "${name}.pb.go" ]
  }
  deps = [ "//third_party/golibs:google.golang.org/protobuf" ]
}

source_set("project_configs") {
  sources = [
    "project_configs.cc",
    "project_configs.h",
  ]

  public_configs = [
    "$cobalt_root:cobalt_config",
    "$cobalt_root/src/registry:proto_config",
  ]

  deps = [ "$cobalt_root/src/public/lib:registry_identifiers" ]
  public_deps = [
    "$cobalt_root/src:logging",
    "$cobalt_root/src/lib/util:not_null",
    "$cobalt_root/src/registry:cobalt_registry_proto",
    "//third_party/abseil-cpp/absl/strings",
  ]
}

source_set("project_configs_test") {
  testonly = true
  sources = [ "project_configs_test.cc" ]
  deps = [
    ":project_configs",
    "$cobalt_root/src/public/lib:registry_identifiers",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/googletest:gtest",
  ]
  configs += [ "$cobalt_root:cobalt_config" ]
}

group("tests") {
  testonly = true

  deps = [ ":project_configs_test" ]
}
