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

# Please do not add more entries to this list. We plan to remove
# abseil-cpp from the Fuchsia platform source tree once cobalt
# moves out-of-tree.
visibility = [
  "//third_party/abseil-cpp/*",
  "$cobalt_root/*",
  "//third_party/tink/*",
]

static_library("strings") {
  public_configs = [ "//third_party/abseil-cpp:abseil_config" ]

  sources = [
    "ascii.cc",
    "ascii.h",
    "charconv.cc",
    "charconv.h",
    "escaping.cc",
    "escaping.h",
    "match.cc",
    "match.h",
    "numbers.cc",
    "numbers.h",
    "str_cat.cc",
    "str_cat.h",
    "str_format.h",
    "string_view.cc",
    "string_view.h",
    "strip.h",
    "str_join.h",
    "str_replace.cc",
    "str_replace.h",
    "str_split.cc",
    "str_split.h",
    "substitute.cc",
    "substitute.h",
  ]

  deps = [
    ":internal",
    "../base",
    "../base:config",
    "../base:core_headers",
    "../base:endian",
    "../base:throw_delegate",
    "../memory",
    "../meta:type_traits",
    "../numeric:int128",
  ]
}

static_library("internal") {
  public_configs = [ "//third_party/abseil-cpp:abseil_config" ]

  sources = [
    "internal/charconv_bigint.cc",
    "internal/charconv_bigint.h",
    "internal/charconv_parse.cc",
    "internal/charconv_parse.h",
    "internal/char_map.h",
    "internal/memutil.cc",
    "internal/memutil.h",
    "internal/ostringstream.cc",
    "internal/ostringstream.h",
    "internal/pow10_helper.cc",
    "internal/pow10_helper.h",
    "internal/resize_uninitialized.h",
    "internal/stl_type_traits.h",
    "internal/str_format/arg.cc",
    "internal/str_format/arg.h",
    "internal/str_format/bind.cc",
    "internal/str_format/bind.h",
    "internal/str_format/checker.h",
    "internal/str_format/extension.cc",
    "internal/str_format/extension.h",
    "internal/str_format/float_conversion.cc",
    "internal/str_format/float_conversion.h",
    "internal/str_format/output.cc",
    "internal/str_format/output.h",
    "internal/str_format/parser.cc",
    "internal/str_format/parser.h",
    "internal/str_join_internal.h",
    "internal/str_split_internal.h",
    "internal/utf8.cc",
    "internal/utf8.h",
  ]
}
