# Copyright 2014 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("//testing/test.gni")
import("//third_party/protobuf/proto_library.gni")

proto_library("proto") {
  sources = [
    "dist/resources/phonemetadata.proto",
    "dist/resources/phonenumber.proto",
  ]
  proto_out_dir = "third_party/libphonenumber/phonenumbers"
}

config("libphonenumber_config") {
  include_dirs = [
    "dist/cpp/src",
    "$root_gen_dir/third_party/libphonenumber",
  ]
  defines = [
    "I18N_PHONENUMBERS_USE_ICU_REGEXP=1",
    "I18N_PHONENUMBERS_USE_ALTERNATE_FORMATS=1",
  ]
  if (!is_android) {
    defines += [ "I18N_PHONENUMBERS_NO_THREAD_SAFETY=1" ]
  }
}

config("libphonenumber_config_internal") {
  if (is_clang) {
    cflags = [
      # https://github.com/googlei18n/libphonenumber/pull/741
      "-Wno-unused-private-field",
    ]
  }
}

static_library("libphonenumber_without_metadata") {
  sources = [
    "dist/cpp/src/phonenumbers/alternate_format.cc",
    "dist/cpp/src/phonenumbers/asyoutypeformatter.cc",
    "dist/cpp/src/phonenumbers/base/strings/string_piece.cc",
    "dist/cpp/src/phonenumbers/default_logger.cc",
    "dist/cpp/src/phonenumbers/logger.cc",
    "dist/cpp/src/phonenumbers/phonenumber.cc",
    "dist/cpp/src/phonenumbers/phonenumbermatch.cc",
    "dist/cpp/src/phonenumbers/phonenumbermatcher.cc",
    "dist/cpp/src/phonenumbers/phonenumberutil.cc",
    "dist/cpp/src/phonenumbers/regexp_adapter_icu.cc",
    "dist/cpp/src/phonenumbers/regexp_cache.cc",
    "dist/cpp/src/phonenumbers/string_byte_sink.cc",
    "dist/cpp/src/phonenumbers/stringutil.cc",
    "dist/cpp/src/phonenumbers/unicodestring.cc",
    "dist/cpp/src/phonenumbers/utf/rune.c",
    "dist/cpp/src/phonenumbers/utf/unicodetext.cc",
    "dist/cpp/src/phonenumbers/utf/unilib.cc",
  ]

  # libphonenumber's base/logging.h is a minimal implementation where DCHECKs
  # do not consume their arguments. This leads to unused variable warnings in
  # release builds.
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    ":libphonenumber_config_internal",
  ]

  public_configs = [ ":libphonenumber_config" ]

  public_deps = [
    ":proto",
  ]
  deps = [
    ":proto",
    "//third_party/icu",
    "//third_party/protobuf:protobuf_lite",
  ]
}

# Library used by clients that includes production metadata.
static_library("libphonenumber") {
  sources = [
    # Comment next line and uncomment the line after, if complete metadata
    # (with examples) is needed.
    "dist/cpp/src/phonenumbers/lite_metadata.cc",
    #"dist/cpp/src/phonenumbers/metadata.cc",
  ]

  public_deps = [
    ":libphonenumber_without_metadata",
  ]
}

test("libphonenumber_unittests") {
  sources = [
    "dist/cpp/src/phonenumbers/test_metadata.cc",
    "dist/cpp/test/phonenumbers/asyoutypeformatter_test.cc",
    "dist/cpp/test/phonenumbers/phonenumbermatch_test.cc",
    "dist/cpp/test/phonenumbers/phonenumbermatcher_test.cc",
    "dist/cpp/test/phonenumbers/phonenumberutil_test.cc",
    "dist/cpp/test/phonenumbers/regexp_adapter_test.cc",
    "dist/cpp/test/phonenumbers/stringutil_test.cc",
    "dist/cpp/test/phonenumbers/test_util.cc",
    "dist/cpp/test/phonenumbers/unicodestring_test.cc",
  ]

  configs += [ ":libphonenumber_config_internal" ]

  include_dirs = [ "dist/cpp/test" ]

  deps = [
    ":libphonenumber_without_metadata",
    "//base",
    "//base/test:run_all_unittests",
    "//base/third_party/dynamic_annotations",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/icu",
  ]
}
