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

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

component("base") {
  output_name = "ui_base"
  sources = [
    "android/system_ui_resource_manager.h",
    "android/ui_base_jni_registrar.cc",
    "android/ui_base_jni_registrar.h",
    "android/view_android.cc",
    "android/view_android.h",
    "android/window_android.cc",
    "android/window_android.h",
    "android/window_android_compositor.h",
    "android/window_android_observer.h",
    "ui_base_export.h",
  ]

  defines = [ "UI_BASE_IMPLEMENTATION" ]

  public_deps = [
    "//base",
    "//skia",
    "//ui/events",
    "//ui/events/platform",
    "//ui/events:events_base",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]
  deps = [
    "//base/third_party/dynamic_annotations",
    "//base:base_static",
    "//base:i18n",
    "//net",
    "//third_party/icu",
    "//url",
  ]

  if (is_linux) {
    configs += [
      "//build/config/linux:fontconfig",
      "//build/config/linux:glib",
    ]
  }

  libs = []
  if (is_win) {
    cflags = [
      "/wd4267",  # TODO(jschuh): C4267: http://crbug.com/167187 size_t -> int.
      "/wd4324",  # Structure was padded due to __declspec(align()), which is
                  # uninteresting.
    ]
    ldflags = [
      "/DELAYLOAD:d2d1.dll",
      "/DELAYLOAD:d3d10_1.dll",
      "/DELAYLOAD:dwmapi.dll",
    ]
    libs += [
      "d2d1.lib",
      "d3d10_1.lib",
      "dwmapi.lib",
      "imm32.lib",
      "d2d1.lib",
      "dwmapi.lib",
      "oleacc.lib",
    ]
  }

  if (is_mac) {
    deps += [ "//third_party/mozilla" ]

    libs += [
      "Accelerate.framework",
      "AudioUnit.framework",
      "CoreVideo.framework",
    ]
  }

  if (use_x11) {
    #'all_dependent_settings': {
    #'ldflags': [
    #'-L<(PRODUCT_DIR)',
    #],
    #},
    configs += [ "//build/config/linux:x11" ]
  }

  if (is_android) {
    deps += [ ":ui_base_jni_headers" ]

    libs += [ "jnigraphics" ]
  }

  if (is_android && is_android_webview_build) {
    deps += [
      #TODO(GYP): port this component to GN.
      #"//ui/android:ui_java",
    ]
  }
}

if (is_android) {
  generate_jni("ui_base_jni_headers") {
    sources = [
      "../android/java/src/org/chromium/ui/base/DeviceFormFactor.java",
      "../android/java/src/org/chromium/ui/base/SelectFileDialog.java",
      "../android/java/src/org/chromium/ui/base/ViewAndroid.java",
      "../android/java/src/org/chromium/ui/base/WindowAndroid.java",
    ]
    jni_package = "base"
  }
}

if (false) {
  # TODO(GYP): Make this work on Android and reenable it.
  if (!is_android) {
    # TODO(tfarina): Rename this target to ui_base_unittests.
    # In order to do this we will need to keep this target, add a dummy
    # ui_base_unittests target that just points to ui_unittests, change
    # buildbot code to reference the new 'ui_base_unittests' target.
    # After buildbot is updated, we can make the changes in Chromium and
    # remove 'ui_unittests' target. crbug.com/331829
    test("ui_unittests") {
      sources = [
        "test/run_all_unittests.cc",
      ]

      sources += [ "test/data/resource.h" ]

      deps = [
        "//base",
        "//base/allocator",
        "//base/test:test_support",
        "//net",
        "//skia",
        "//testing/gmock",
        "//testing/gtest",
        "//third_party/icu",
        "//ui/base",
        "//ui/events:events_base",
        "//ui/events:test_support",
        "//ui/gfx:test_support",
        "//url",
      ]

      if (is_win) {
        ldflags = [
          "/DELAYLOAD:d2d1.dll",
          "/DELAYLOAD:d3d10_1.dll",
        ]
        libs = [
          "d2d1.lib",
          "d3d10_1.lib",
          "imm32.lib",
          "oleacc.lib",
        ]

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

      if (is_android) {
        deps += [
          #"testing/android/native_test.gyp:native_test_native_code"  TODO(GYP)
        ]
      }

      if (use_x11) {
        configs += [ "//build/config/linux:x11" ]

        deps += [
          "//ui/events/platform/x11",
          "//ui/gfx/x",
        ]

        datadeps = [
          "//tools/xdisplaycheck",
        ]
      }

      if (!is_win) {
        sources -= [ "view_prop_unittest.cc" ]
      }

      if (is_mac) {
        deps += [
          "//third_party/mozilla",
          #'ui_unittests_bundle',  TODO(GYP)
        ]
      }

      if (is_chromeos) {
        sources += [ "../chromeos/touch_exploration_controller_unittest.cc" ]
        deps += [
          "//chromeos",
          "//ui/aura:test_support",
          "//ui/events:gesture_detection",
          "//ui/chromeos:ui_chromeos",
        ]
      }
    }
  }
}
# TODO(GYP) Mac (ui_unittest_bundle) and Android (ui_unittests_apk).
