# Copyright 2018 The Chromium 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_overrides/build.gni")

# Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
# adding projects to this list please reach out to cxx@chromium.org and CC:
# - https://cs.chromium.org/chromium/src/third_party/abseil-cpp/OWNERS
#
# More information can be found at:
# https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
if (build_with_chromium) {
  visibility = [
    "//libassistant/*",
    "//third_party/webrtc/*",
    "//third_party/abseil-cpp/*",
    "//third_party/googletest:gtest",
    "//third_party/openscreen/*",
  ]
} else {
  visibility = [ "*" ]
}

source_set("any") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  public = [
    "any.h",
  ]
  deps = [
    ":bad_any_cast",
    "../base:config",
    "../base:core_headers",
    "../meta:type_traits",
    "../utility",
  ]
}

source_set("bad_any_cast") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  public = [
    "bad_any_cast.h",
  ]
  deps = [
    ":bad_any_cast_impl",
    "../base:config",
  ]
}

source_set("bad_any_cast_impl") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  sources = [
    "bad_any_cast.cc",
  ]
  public = [
    "bad_any_cast.h",
  ]
  deps = [
    "../base",
    "../base:config",
  ]
  visibility = []
  visibility += [ ":*" ]
}

source_set("span") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  public = [
    "span.h",
  ]
  sources = [
    "internal/span.h",
  ]
  deps = [
    "../algorithm",
    "../base:core_headers",
    "../base:throw_delegate",
    "../meta:type_traits",
  ]
}

source_set("optional") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  sources = [
    "internal/optional.h",
  ]
  public = [
    "optional.h",
  ]
  deps = [
    ":bad_optional_access",
    "../base:base_internal",
    "../base:config",
    "../base:core_headers",
    "../memory",
    "../meta:type_traits",
    "../utility",
  ]
}

source_set("bad_optional_access") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  sources = [
    "bad_optional_access.cc",
  ]
  public = [
    "bad_optional_access.h",
  ]
  deps = [
    "../base",
    "../base:config",
  ]
}

source_set("bad_variant_access") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  sources = [
    "bad_variant_access.cc",
  ]
  public = [
    "bad_variant_access.h",
  ]
  deps = [
    "../base",
    "../base:config",
  ]
}

source_set("variant") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  sources = [
    "internal/variant.h",
  ]
  public = [
    "variant.h",
  ]
  deps = [
    ":bad_variant_access",
    "../base:base_internal",
    "../base:config",
    "../base:core_headers",
    "../meta:type_traits",
    "../utility",
  ]
}

source_set("compare") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  public = [
    "compare.h",
  ]
  deps = [
    "../base:core_headers",
    "../meta:type_traits",
  ]
}
