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

gypi_values = exec_script(
    "//build/gypi_to_gn.py",
    [ rebase_path("views.gyp") ],
    "scope",
    [ "views.gyp" ])

component("views") {
  sources = gypi_values.views_sources

  defines = [ "VIEWS_IMPLEMENTATION" ]

  deps = [
    "//base:i18n",
    "//base/third_party/dynamic_annotations",
    "//skia",
    "//third_party/icu",
    "//ui/accessibility",
    "//ui/aura",
    "//ui/native_theme",
    "//ui/resources",
    "//ui/strings",
    "//ui/wm",
    "//url",
  ]

  public_deps = [
    "//base",
    "//ui/accessibility:ax_gen",
    "//ui/base",
    "//ui/compositor",
    "//ui/events",
    "//ui/events:events_base",
    "//ui/events/platform",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  if (use_x11 && !is_chromeos) {
    deps += [ "//ui/display/util" ]
  }
  if (is_linux && !is_chromeos) {
    sources -= [ "window/window_button_order_provider.cc" ]
    deps += [ "//ui/shell_dialogs" ]
  } else {
    sources -= [
      "linux_ui/linux_ui.h",
      "linux_ui/linux_ui.cc",
      "linux_ui/window_button_order_observer.h",
      "linux_ui/window_button_order_provider.cc",
    ]
  }

  if (is_chromeos) {
    sources -= [
      "linux_ui/status_icon_linux.h",
      "linux_ui/status_icon_linux.cc",
    ]
  }

  if (is_win) {
    sources += gypi_values.views_win_sources
    cflags = [ "/wd4267" ]  # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    libs = [ "/imm32.lib", "oleacc.lib" ]
    ldflags = [ "/DELAYLOAD:user32.dll" ]
    deps += [
      "//third_party/iaccessible2",
      "//third_party/wtl",
    ]
  }

  if (use_ozone) {
    deps += [ "//ui/ozone" ]
  }
  if (use_x11) {
    configs += [
      "//build/config/linux:x11",
      "//build/config/linux:xrandr",
    ]
    deps += [
      "//ui/events/platform/x11",
      "//ui/gfx/x",
    ]
  }

  if (use_aura) {
    sources += gypi_values.views_aura_sources
    if (!is_chromeos) {
      sources += gypi_values.views_desktop_aura_sources
      if (use_x11) {
        sources += gypi_values.views_desktop_aura_x11_sources
      } else if (is_win) {
        sources += gypi_values.views_desktop_aura_win_sources
      } else if (use_ozone) {
        sources += gypi_values.views_desktop_aura_ozone_sources
      }
    }
  }
}

static_library("test_support") {
  testonly = true
  sources = gypi_values.views_test_support_sources

  public_deps = [
    ":views",
  ]
  deps = [
    "//base",
    "//ipc:test_support",
    "//skia",
    "//testing/gtest",
    "//ui/aura",
    "//ui/base",
    "//ui/compositor",
    "//ui/compositor:test_support",
    "//ui/events",
    "//ui/events:events_base",
    "//ui/events:test_support",
    "//ui/events/platform",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/wm",
  ]

  if (is_chromeos) {
    sources -= [
      "test/ui_controls_factory_desktop_aurax11.cc",
      "test/ui_controls_factory_desktop_aurax11.h",
    ]
  }
  if (use_aura) {
    sources += gypi_values.views_test_support_aura_sources
    deps += [ "//ui/aura:test_support" ]
  }
  if (use_x11) {
    deps += [ "//ui/gfx/x" ]
  }
}

test("views_unittests") {
  sources = gypi_values.views_unittests_sources

  deps = [
    ":test_support",
    "//base",
    "//base:i18n",
    "//base/allocator",
    "//base/test:test_support",
    "//skia",
    "//testing/gtest",
    "//third_party/icu",
    "//ui/accessibility",
    "//ui/aura",
    "//ui/base",
    "//ui/base:test_support",
    "//ui/compositor:test_support",
    "//ui/events:test_support",
    "//ui/events:events_base",
    "//ui/events/platform",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gl",
    "//ui/resources",
    "//ui/strings",
    "//ui/wm",
    "//url",
  ]

  if (is_chromeos) {
    sources -= [
      "ime/input_method_bridge_unittest.cc",
    ]
  }

  if (is_win) {
    deps += [
      "//third_party/iaccessible2",
      "//third_party/wtl",
    ]
    libs = [
      "imm32.lib",
      "oleacc.lib",
      "comctl32.lib",
    ]
    # TOOD(GYP)
    #'msvs_settings': {
    #  'VCManifestTool': {
    #    'AdditionalManifestFiles': [
    #      '$(ProjectDir)\\test\\views_unittest.manifest',
    #    ],
    #  },
    #},
  }

  if (use_x11) {
    configs += [
      "//build/config/linux:x11",
      "//build/config/linux:xext",
    ]
    deps += [
      "//ui/events/platform/x11",
      "//ui/gfx/x",
    ]
  }

  if (use_aura) {
    sources += gypi_values.views_unittests_aura_sources
    deps += [ "//ui/aura:test_support" ]
    if (!is_chromeos) {
      sources += gypi_values.views_unittests_desktop_aura_sources
    }
  }
  if (use_x11) {
    deps += [
      "//ui/events/platform/x11",
      "//ui/gfx/x",
    ]
  }

  if (is_mac) {
    # views_unittests not yet compiling on Mac. http://crbug.com/378134
    sources -= [
      "bubble/bubble_window_targeter_unittest.cc",
      "controls/button/custom_button_unittest.cc",
      "controls/button/menu_button_unittest.cc",
      "controls/native/native_view_host_unittest.cc",
      "controls/menu/menu_controller_unittest.cc",
      "ime/input_method_bridge_unittest.cc",
      "focus/focus_manager_unittest.cc",
      "widget/window_reorderer_unittest.cc",
      "widget/widget_unittest.cc",
    ]
  }
}

if (is_mac) {
  test("macviews_interactive_ui_tests") {
    sources = [
      "run_all_unittests.cc",
      "widget/native_widget_mac_interactive_uitest.mm",
    ]
    deps = [
      ":test_support",
      ":views",
      "//base",
      "//base/test:test_support",
      "//skia",
      "//testing/gtest",
      "//ui/aura",
      "//ui/compositor",
      "//ui/resources",
      "//ui/resources:ui_test_pak",
      "//ui/strings",
      "//ui/wm",
    ]
  }
}