# 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) {
  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_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",
    ]
  }
}
