# Copyright 2018 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build_overrides/build.gni")
import("//third_party/abseil-cpp/absl.gni")

absl_source_set("any") {
  public = [ "any.h" ]
  deps = [
    ":bad_any_cast",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:fast_type_id",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/utility",
  ]
}

absl_source_set("bad_any_cast") {
  public = [ "bad_any_cast.h" ]
  deps = [
    ":bad_any_cast_impl",
    "//third_party/abseil-cpp/absl/base:config",
  ]
}

absl_source_set("bad_any_cast_impl") {
  sources = [ "bad_any_cast.cc" ]
  public = [ "bad_any_cast.h" ]
  deps = [
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
  ]
  visibility = [ ":*" ]
}

absl_source_set("span") {
  public = [ "span.h" ]
  sources = [ "internal/span.h" ]
  deps = [
    "//third_party/abseil-cpp/absl/algorithm",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:nullability",
    "//third_party/abseil-cpp/absl/base:throw_delegate",
    "//third_party/abseil-cpp/absl/meta:type_traits",
  ]
}

absl_test("span_test") {
  sources = [ "span_test.cc" ]
  deps = [
    ":span",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:exception_testing",
    "//third_party/abseil-cpp/absl/container:fixed_array",
    "//third_party/abseil-cpp/absl/container:inlined_vector",
    "//third_party/abseil-cpp/absl/hash:hash_testing",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/strings",
  ]
}

absl_source_set("optional") {
  sources = [ "internal/optional.h" ]
  public = [ "optional.h" ]
  deps = [
    ":bad_optional_access",
    "//third_party/abseil-cpp/absl/base:base_internal",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:nullability",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/utility",
  ]
}

absl_source_set("bad_optional_access") {
  sources = [ "bad_optional_access.cc" ]
  public = [ "bad_optional_access.h" ]
  deps = [
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
  ]
}

absl_source_set("bad_variant_access") {
  sources = [ "bad_variant_access.cc" ]
  public = [ "bad_variant_access.h" ]
  deps = [
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
  ]
}

absl_source_set("variant") {
  sources = [ "internal/variant.h" ]
  public = [ "variant.h" ]
  deps = [
    ":bad_variant_access",
    "//third_party/abseil-cpp/absl/base:base_internal",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/utility",
  ]
}

absl_source_set("compare") {
  public = [ "compare.h" ]
  deps = [
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/meta:type_traits",
  ]
}

absl_test("optional_test") {
  sources = [ "optional_test.cc" ]
  deps = [
    ":optional",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/log",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

absl_test("variant_test") {
  sources = [ "variant_test.cc" ]
  deps = [
    ":variant",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}
