# 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("//url/config.gni")

# Sets the USE_ICU_ALTERNATIVES_ON_ANDROID define based on the build flag.
config("url_icu_config") {
  if (use_icu_alternatives_on_android) {
    defines = [ "USE_ICU_ALTERNATIVES_ON_ANDROID=1" ]
  }
}

component("url") {
  if (is_win) {
    # Don't conflict with Windows' "url.dll".
    output_name = "url_lib"
  }
  sources = [
    "android/url_jni_registrar.cc",
    "android/url_jni_registrar.h",
    "gurl.cc",
    "gurl.h",
    "origin.cc",
    "origin.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_icu.cc",
    "url_canon_icu.h",
    "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",
  ]

  defines = [ "URL_IMPLEMENTATION" ]

  configs += [ ":url_icu_config" ]

  if (is_win) {
    cflags = [
      "/wd4267", # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    ]
  }

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

  if (use_icu_alternatives_on_android) {
    sources -= [
      "url_canon_icu.cc",
      "url_canon_icu.h",
    ]
    deps -= [
      "//third_party/icu:icudata",
      "//third_party/icu",
    ]

    sources += [
      "url_canon_icu_alternatives_android.cc",
      "url_canon_icu_alternatives_android.h",
    ]
  }
}

# TODO(dpranke): crbug.com/360936. Get this to build and run on Android.
if (!is_android) {
  test("url_unittests") {
    sources = [
      "gurl_unittest.cc",
      "origin_unittest.cc",
      "url_canon_icu_unittest.cc",
      "url_canon_unittest.cc",
      "url_parse_unittest.cc",
      "url_test_utils.h",
      "url_util_unittest.cc",
    ]

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

    if (is_win) {
      cflags = [
        # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
        "/wd4267",
      ]
    }

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

    if (use_icu_alternatives_on_android) {
      sources -= [
        "url_canon_icu_unittest.cc",
      ]
      deps -= [
        "//third_party/icu:icuuc",
      ]
    }
  }
}
