# 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")
import("//third_party/abseil-cpp/absl.gni")

absl_source_set("strings") {
  sources = [
    "ascii.cc",
    "charconv.cc",
    "escaping.cc",
    "internal/charconv_bigint.cc",
    "internal/charconv_bigint.h",
    "internal/charconv_parse.cc",
    "internal/charconv_parse.h",
    "internal/memutil.cc",
    "internal/memutil.h",
    "internal/stl_type_traits.h",
    "internal/str_join_internal.h",
    "internal/str_split_internal.h",
    "match.cc",
    "numbers.cc",
    "str_cat.cc",
    "str_replace.cc",
    "str_split.cc",
    "string_view.cc",
    "substitute.cc",
  ]
  public = [
    "ascii.h",
    "charconv.h",
    "escaping.h",
    "internal/string_constant.h",
    "match.h",
    "numbers.h",
    "str_cat.h",
    "str_join.h",
    "str_replace.h",
    "str_split.h",
    "string_view.h",
    "strip.h",
    "substitute.h",
  ]
  deps = [
    ":internal",
    "//third_party/abseil-cpp/absl/base",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:endian",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
    "//third_party/abseil-cpp/absl/base:throw_delegate",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/numeric:bits",
    "//third_party/abseil-cpp/absl/numeric:int128",
  ]
}

absl_source_set("internal") {
  sources = [
    "internal/escaping.cc",
    "internal/ostringstream.cc",
    "internal/utf8.cc",
  ]
  public = [
    "internal/char_map.h",
    "internal/escaping.h",
    "internal/ostringstream.h",
    "internal/resize_uninitialized.h",
    "internal/utf8.h",
  ]
  deps = [
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:endian",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
    "//third_party/abseil-cpp/absl/meta:type_traits",
  ]
}

absl_source_set("str_format") {
  public = [ "str_format.h" ]
  deps = [ ":str_format_internal" ]
}

absl_source_set("str_format_internal") {
  sources = [
    "internal/str_format/arg.cc",
    "internal/str_format/bind.cc",
    "internal/str_format/extension.cc",
    "internal/str_format/float_conversion.cc",
    "internal/str_format/output.cc",
    "internal/str_format/parser.cc",
  ]
  public = [
    "internal/str_format/arg.h",
    "internal/str_format/bind.h",
    "internal/str_format/checker.h",
    "internal/str_format/extension.h",
    "internal/str_format/float_conversion.h",
    "internal/str_format/output.h",
    "internal/str_format/parser.h",
  ]
  visibility = [ ":*" ]
  deps = [
    ":strings",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/functional:function_ref",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/numeric:bits",
    "//third_party/abseil-cpp/absl/numeric:int128",
    "//third_party/abseil-cpp/absl/numeric:representation",
    "//third_party/abseil-cpp/absl/types:optional",
    "//third_party/abseil-cpp/absl/types:span",
  ]
}

absl_source_set("cord_internal") {
  sources = [
    "internal/cord_internal.cc",
    "internal/cord_rep_btree.cc",
    "internal/cord_rep_btree_navigator.cc",
    "internal/cord_rep_btree_reader.cc",
    "internal/cord_rep_concat.cc",
    "internal/cord_rep_consume.cc",
    "internal/cord_rep_crc.cc",
    "internal/cord_rep_ring.cc",
  ]
  public = [
    "internal/cord_internal.h",
    "internal/cord_rep_btree.h",
    "internal/cord_rep_btree_navigator.h",
    "internal/cord_rep_btree_reader.h",
    "internal/cord_rep_consume.h",
    "internal/cord_rep_crc.h",
    "internal/cord_rep_flat.h",
    "internal/cord_rep_ring.h",
    "internal/cord_rep_ring_reader.h",
  ]
  visibility = [ ":*" ]
  deps = [
    ":strings",
    "//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:endian",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
    "//third_party/abseil-cpp/absl/base:throw_delegate",
    "//third_party/abseil-cpp/absl/container:compressed_tuple",
    "//third_party/abseil-cpp/absl/container:inlined_vector",
    "//third_party/abseil-cpp/absl/container:layout",
    "//third_party/abseil-cpp/absl/functional:function_ref",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/types:span",
  ]
}

absl_source_set("cord_rep_concat_test") {
  testonly = true
  sources = [ "internal/cord_rep_concat_test.cc" ]
  deps = [
    ":cord_internal",
    ":cord_rep_test_util",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

absl_source_set("cord_rep_btree_test") {
  testonly = true
  sources = [ "internal/cord_rep_btree_test.cc" ]
  deps = [
    ":cord_internal",
    ":cord_rep_test_util",
    ":strings",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
    "//third_party/abseil-cpp/absl/cleanup",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

absl_source_set("cord_rep_btree_reader_test") {
  testonly = true
  sources = [ "internal/cord_rep_btree_reader_test.cc" ]
  deps = [
    ":cord",
    ":cord_internal",
    ":cord_rep_test_util",
    ":strings",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

absl_source_set("cord_rep_crc_test") {
  testonly = true
  sources = [ "internal/cord_rep_crc_test.cc" ]
  deps = [
    ":cord_internal",
    ":cord_rep_test_util",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

absl_source_set("cordz_update_tracker") {
  public = [ "internal/cordz_update_tracker.h" ]
  visibility = [ "//third_party/abseil-cpp/*" ]
  deps = [ "//third_party/abseil-cpp/absl/base:config" ]
}

absl_source_set("cordz_update_tracker_test") {
  testonly = true
  sources = [ "internal/cordz_update_tracker_test.cc" ]
  deps = [
    ":cordz_update_tracker",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/synchronization",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

absl_source_set("cord") {
  sources = [
    "cord.cc",
    "cord_analysis.cc",
    "cord_analysis.h",
  ]
  public = [ "cord.h" ]
  deps = [
    ":cord_internal",
    ":cordz_functions",
    ":cordz_info",
    ":cordz_statistics",
    ":cordz_update_scope",
    ":cordz_update_tracker",
    ":internal",
    ":str_format",
    ":strings",
    "//third_party/abseil-cpp/absl/base",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:endian",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
    "//third_party/abseil-cpp/absl/container:fixed_array",
    "//third_party/abseil-cpp/absl/container:inlined_vector",
    "//third_party/abseil-cpp/absl/functional:function_ref",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/numeric:bits",
    "//third_party/abseil-cpp/absl/types:optional",
    "//third_party/abseil-cpp/absl/types:span",
  ]
}

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

absl_source_set("cordz_info") {
  sources = [ "internal/cordz_info.cc" ]
  public = [ "internal/cordz_info.h" ]
  visibility = [ "//third_party/abseil-cpp/*" ]
  deps = [
    ":cord_internal",
    ":cordz_functions",
    ":cordz_handle",
    ":cordz_statistics",
    ":cordz_update_tracker",
    "//third_party/abseil-cpp/absl/base",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
    "//third_party/abseil-cpp/absl/container:inlined_vector",
    "//third_party/abseil-cpp/absl/debugging:stacktrace",
    "//third_party/abseil-cpp/absl/synchronization",
    "//third_party/abseil-cpp/absl/types:span",
  ]
}

absl_source_set("cordz_update_scope") {
  public = [ "internal/cordz_update_scope.h" ]
  visibility = [ "//third_party/abseil-cpp/*" ]
  deps = [
    ":cord_internal",
    ":cordz_info",
    ":cordz_update_tracker",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
  ]
}

absl_source_set("cordz_update_scope_test") {
  testonly = true
  sources = [ "internal/cordz_update_scope_test.cc" ]
  deps = [
    ":cord_internal",
    ":cordz_info",
    ":cordz_test_helpers",
    ":cordz_update_scope",
    ":cordz_update_tracker",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

absl_source_set("cordz_sample_token") {
  sources = [ "internal/cordz_sample_token.cc" ]
  public = [ "internal/cordz_sample_token.h" ]
  visibility = [ "//third_party/abseil-cpp/*" ]
  deps = [
    ":cordz_handle",
    ":cordz_info",
    "//third_party/abseil-cpp/absl/base:config",
  ]
}

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

absl_source_set("cordz_statistics") {
  public = [ "internal/cordz_statistics.h" ]
  visibility = [ "//third_party/abseil-cpp/*" ]
  deps = [
    ":cordz_update_tracker",
    "//third_party/abseil-cpp/absl/base:config",
  ]
}

absl_source_set("cordz_functions_test") {
  testonly = true
  sources = [ "internal/cordz_functions_test.cc" ]
  deps = [
    ":cordz_functions",
    ":cordz_test_helpers",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

# TODO(b/186638384): Re-enable when random is compilable on win32-archive-rel bot
# absl_source_set("cordz_handle_test") {
#   testonly = true
#   sources = [ "internal/cordz_handle_test.cc" ]
#   deps = [
#     ":cordz_handle",
#     "//third_party/abseil-cpp/absl/base:config",
#     "//third_party/abseil-cpp/absl/memory",
#     "//third_party/abseil-cpp/absl/random",
#     "//third_party/abseil-cpp/absl/random:distributions",
#     "//third_party/abseil-cpp/absl/synchronization",
#     "//third_party/abseil-cpp/absl/synchronization:thread_pool",
#     "//third_party/abseil-cpp/absl/time",
#     "//third_party/googletest:gmock",
#     "//third_party/googletest:gtest",
#   ]
# }

absl_source_set("cordz_info_test") {
  testonly = true
  sources = [ "internal/cordz_info_test.cc" ]
  deps = [
    ":cord_internal",
    ":cordz_handle",
    ":cordz_info",
    ":cordz_statistics",
    ":cordz_test_helpers",
    ":cordz_update_tracker",
    ":strings",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/debugging:stacktrace",
    "//third_party/abseil-cpp/absl/debugging:symbolize",
    "//third_party/abseil-cpp/absl/types:span",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

absl_source_set("cordz_info_statistics_test") {
  testonly = true
  sources = [ "internal/cordz_info_statistics_test.cc" ]
  deps = [
    ":cord",
    ":cord_internal",
    ":cordz_info",
    ":cordz_sample_token",
    ":cordz_statistics",
    ":cordz_update_scope",
    ":cordz_update_tracker",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/synchronization",
    "//third_party/abseil-cpp/absl/synchronization:thread_pool",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

# TODO(b/186638384): Re-enable when random is compilable on win32-archive-rel bot
# absl_source_set("cordz_sample_token_test") {
#   testonly = true
#   sources = [ "internal/cordz_sample_token_test.cc" ]
#   deps = [
#     ":cord_internal",
#     ":cordz_handle",
#     ":cordz_info",
#     ":cordz_sample_token",
#     ":cordz_test_helpers",
#     "//third_party/abseil-cpp/absl/base:config",
#     "//third_party/abseil-cpp/absl/memory",
#     "//third_party/abseil-cpp/absl/random",
#     "//third_party/abseil-cpp/absl/synchronization",
#     "//third_party/abseil-cpp/absl/synchronization:thread_pool",
#     "//third_party/abseil-cpp/absl/time",
#     "//third_party/googletest:gmock",
#     "//third_party/googletest:gtest",
#   ]
# }

absl_source_set("cord_test_helpers") {
  testonly = true
  public = [ "cord_test_helpers.h" ]
  deps = [
    ":cord",
    ":cord_internal",
    ":strings",
    "//third_party/abseil-cpp/absl/base:config",
  ]
}

absl_source_set("cord_rep_test_util") {
  testonly = true
  public = [ "internal/cord_rep_test_util.h" ]
  deps = [
    ":cord_internal",
    ":strings",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
  ]
}

absl_source_set("cordz_test_helpers") {
  testonly = true
  public = [ "cordz_test_helpers.h" ]
  deps = [
    ":cord",
    ":cord_internal",
    ":cordz_info",
    ":cordz_sample_token",
    ":cordz_statistics",
    ":cordz_update_tracker",
    ":strings",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/googletest:gtest",
  ]
}

# TODO(b/186638384): Re-enable when random is compilable on win32-archive-rel bot
# absl_source_set("cord_test") {
#   testonly = true
#   public = [ "cord_test.cc" ]
#   deps = [
#     ":cord",
#     ":cord_test_helpers",
#     ":cordz_functions",
#     ":cordz_test_helpers",
#     ":str_format",
#     ":strings",
#     "//third_party/abseil-cpp/absl/base",
#     "//third_party/abseil-cpp/absl/base:config",
#     "//third_party/abseil-cpp/absl/base:core_headers",
#     "//third_party/abseil-cpp/absl/base:endian",
#     "//third_party/abseil-cpp/absl/base:raw_logging_internal",
#     "//third_party/abseil-cpp/absl/container:fixed_array",
#     "//third_party/abseil-cpp/absl/hash",
#     "//third_party/abseil-cpp/absl/random",
#     "//third_party/googletest:gtest",
#   ]
# }

absl_source_set("cordz_test") {
  testonly = true
  sources = [ "cordz_test.cc" ]
  deps = [
    ":cord",
    ":cord_test_helpers",
    ":cordz_functions",
    ":cordz_info",
    ":cordz_sample_token",
    ":cordz_statistics",
    ":cordz_test_helpers",
    ":cordz_update_tracker",
    ":strings",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

absl_source_set("cord_rep_consume_test") {
  testonly = true
  sources = [ "internal/cord_rep_consume_test.cc" ]
  deps = [
    ":cord_internal",
    ":strings",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/debugging:leak_check",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

absl_source_set("pow10_helper") {
  testonly = true
  sources = [ "internal/pow10_helper.cc" ]
  public = [ "internal/pow10_helper.h" ]
  visibility = [ ":*" ]
  deps = [ "//third_party/abseil-cpp/absl/base:config" ]
}

absl_source_set("ascii_test") {
  testonly = true
  sources = [ "ascii_test.cc" ]
  deps = [
    ":strings",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/googletest:gtest",
  ]
}

absl_source_set("match_test") {
  testonly = true
  sources = [ "match_test.cc" ]
  deps = [
    ":strings",
    "//third_party/googletest:gtest",
  ]
}

absl_source_set("str_replace_test") {
  testonly = true
  sources = [ "str_replace_test.cc" ]
  deps = [
    ":strings",
    "//third_party/googletest:gtest",
  ]
}

absl_source_set("string_view_test") {
  testonly = true
  sources = [ "string_view_test.cc" ]
  deps = [
    ":strings",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:dynamic_annotations",
    "//third_party/googletest:gtest",
  ]
}

absl_source_set("cord_rep_btree_navigator_test") {
  testonly = true
  sources = [ "internal/cord_rep_btree_navigator_test.cc" ]
  deps = [
    ":cord_internal",
    ":cord_rep_test_util",
    ":strings",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}