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

if (build_with_chromium) {
  visibility = [
    "//third_party/webrtc/*",
    "//third_party/abseil-cpp/*",
    "//third_party/googletest:gtest",
  ]
} 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",
  ]
  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 = [
    "optional.cc",
  ]
  public = [
    "optional.h",
  ]
  deps = [
    ":bad_optional_access",
    "../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",
  ]
}
