# Copyright (c) 2013 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")

if (is_android) {
  import("//build/config/android/rules.gni")
}

# Shared sources between url and url_lib_use_icu_alternatives_on_android.
url_shared_sources = [
  "gurl.cc",
  "gurl.h",
  "origin.cc",
  "origin.h",
  "scheme_host_port.cc",
  "scheme_host_port.h",
  "third_party/mozilla/url_parse.cc",
  "third_party/mozilla/url_parse.h",
  "url_canon.h",
  "url_canon_etc.cc",
  "url_canon_filesystemurl.cc",
  "url_canon_fileurl.cc",
  "url_canon_host.cc",
  "url_canon_internal.cc",
  "url_canon_internal.h",
  "url_canon_internal_file.h",
  "url_canon_ip.cc",
  "url_canon_ip.h",
  "url_canon_mailtourl.cc",
  "url_canon_path.cc",
  "url_canon_pathurl.cc",
  "url_canon_query.cc",
  "url_canon_relative.cc",
  "url_canon_stdstring.cc",
  "url_canon_stdstring.h",
  "url_canon_stdurl.cc",
  "url_constants.cc",
  "url_constants.h",
  "url_export.h",
  "url_file.h",
  "url_parse_file.cc",
  "url_parse_internal.h",
  "url_util.cc",
  "url_util.h",
]

component("url") {
  sources = url_shared_sources + [
              "url_canon_icu.cc",
              "url_canon_icu.h",
            ]

  if (is_win) {
    # Don't conflict with Windows' "url.dll".
    output_name = "url_lib"
  }
  defines = [ "URL_IMPLEMENTATION" ]

  configs += [
    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    "//build/config/compiler:no_size_t_to_int_warning",
  ]

  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//third_party/icu",
    "//third_party/icu:icudata",
  ]
}

if (is_android) {
  android_library("url_java") {
    DEPRECATED_java_in_dir = "android/java/src"
    deps = [
      "//base:base_java",
    ]
  }

  generate_jni("url_jni_headers") {
    sources = [
      "android/java/src/org/chromium/url/IDNStringUtil.java",
    ]
    jni_package = "url"
  }

  component("url_lib_use_icu_alternatives_on_android") {
    sources = url_shared_sources + [
                "android/url_jni_registrar.cc",
                "android/url_jni_registrar.h",
                "url_canon_icu_alternatives_android.cc",
                "url_canon_icu_alternatives_android.h",
              ]

    defines = [
      "URL_IMPLEMENTATION",
      "USE_ICU_ALTERNATIVES_ON_ANDROID=1",
    ]

    configs += [
      # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
      "//build/config/compiler:no_size_t_to_int_warning",
    ]

    deps = [
      ":url_java",
      ":url_jni_headers",
      "//base",
      "//base/third_party/dynamic_annotations",
    ]
  }
}

# TODO(dpranke): crbug.com/360936. Get this to build and run on Android.
if (!is_android) {
  # TODO(GYP): Delete this after we've converted everything to GN.
  # The _run targets exist only for compatibility w/ GYP.
  group("url_unittests_run") {
    testonly = true
    deps = [
      ":url_unittests",
    ]
  }

  test("url_unittests") {
    sources = [
      "gurl_unittest.cc",
      "origin_unittest.cc",
      "scheme_host_port_unittest.cc",
      "url_canon_icu_unittest.cc",
      "url_canon_unittest.cc",
      "url_parse_unittest.cc",
      "url_test_utils.h",
      "url_util_unittest.cc",
    ]

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

    #if (is_posix && !is_mac && !is_ios) {
    #  if (use_allocator!="none") {
    #    deps += "//base/allocator"
    #  }
    #}

    deps = [
      ":url",
      "//base",
      "//base/test:run_all_unittests",
      "//testing/gtest",
      "//third_party/icu:icuuc",
    ]
  }
}
