# 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("ash.gyp") ],
    "scope",
    [ "ash.gyp" ])

component("ash") {
  sources = gypi_values.ash_sources

  defines = [ "ASH_IMPLEMENTATION" ]

  public_deps = [
    "//ash/resources",
    "//ash/strings",
  ]
  deps = [
    "//base",
    "//base:i18n",
    "//base/third_party/dynamic_annotations",
    "//cc",
    "//components/user_manager",
    "//content/public/browser",
    "//media",
    "//net",
    "//skia",
    "//third_party/icu",
    "//ui/accelerometer",
    "//ui/accessibility",
    "//ui/app_list",
    "//ui/aura",
    "//ui/base",
    "//ui/compositor",
    "//ui/events",
    "//ui/events:events_base",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/keyboard",
    "//ui/message_center",
    "//ui/resources",
    "//ui/strings",
    "//ui/views",
    "//ui/views/controls/webview",
    "//ui/web_dialogs",
    "//ui/wm",
    "//url",
  ]

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

  if (use_x11) {
    configs += [
      "//build/config/linux:xfixes",
    ]
  } else {
    sources -= [
      "accelerators/key_hold_detector.cc",
      "accelerators/key_hold_detector.h",
      "accelerators/magnifier_key_scroller.cc",
      "accelerators/magnifier_key_scroller.h",
      "accelerators/spoken_feedback_toggler.cc",
      "accelerators/spoken_feedback_toggler.h",
    ]
  }

  if (is_chromeos) {
    deps += [
      "//device/bluetooth",
      "//ui/display",
      "//ui/display/util",
      #'../chromeos/chromeos.gyp:chromeos',  TODO(GYP)
      # Ash #includes power_supply_properties.pb.h directly.
      #'../chromeos/chromeos.gyp:power_manager_proto',  TODO(GYP)
      #'../ui/chromeos/ui_chromeos.gyp:ui_chromeos_resources',  TODO(GYP)
      #'../ui/chromeos/ui_chromeos.gyp:ui_chromeos_strings',  TODO(GYP)
      #'../ui/chromeos/ui_chromeos.gyp:ui_chromeos',  TODO(GYP)
    ]
  } else {
    sources -= [
      "display/display_configurator_animation.cc",
      "display/display_configurator_animation.h",
      "display/resolution_notification_controller.cc",
      "display/resolution_notification_controller.h",
      "system/tray/media_security/media_capture_observer.h",
      "system/tray/media_security/multi_profile_media_tray_item.cc",
      "system/tray/media_security/multi_profile_media_tray_item.h",
    ]
  }

  if (!use_x11 || !is_chromeos) {
    sources -= [
      "touch/touch_transformer_controller.cc",
      "touch/touch_transformer_controller.h",
      "touch/touchscreen_util.cc",
      "touch/touchscreen_util.h",
    ]
  }

  if (!use_ozone) {
    sources -= [
      "host/ash_window_tree_host_ozone.cc",
    ]
  }
}

component("ash_with_content") {
  sources = [
    "content_support/ash_with_content_export.h",
    "content_support/gpu_support_impl.cc",
    "content_support/gpu_support_impl.h",
    "screensaver/screensaver_view.cc",
    "screensaver/screensaver_view.h",
    "keyboard_overlay/keyboard_overlay_delegate.cc",
    "keyboard_overlay/keyboard_overlay_delegate.h",
    "keyboard_overlay/keyboard_overlay_view.cc",
    "keyboard_overlay/keyboard_overlay_view.h",
  ]

  defines = [ "ASH_WITH_CONTENT_IMPLEMENTATION" ]

  public_deps = [
    ":ash",
  ]
  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//content/public/browser",
    "//ipc",
    "//skia",
    "//ui/aura",
    "//ui/base",
    "//ui/compositor",
    "//ui/events",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/resources",
    "//ui/strings",
    "//ui/views",
    "//ui/views/controls/webview",
    "//ui/web_dialogs",
    "//url",
  ]
}

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

  public_deps = [
    ":ash",
  ]
  deps = [
    "//ash/resources",
    "//content/test:test_support",
    "//skia",
    "//testing/gtest",
    "//ui/accessibility",
    "//ui/app_list",
    "//ui/app_list:test_support",
    "//ui/events:events_base",
    "//ui/gl",
    "//ui/views",
    "//ui/views:test_support",
  ]

  if (is_win) {
    sources += [
      "test/test_metro_viewer_process_host.cc",
      "test/test_metro_viewer_process_host.h",
    ]
    deps += [
      "//ipc",
      #'../ui/metro_viewer/metro_viewer.gyp:metro_viewer_messages',  TODO(GYP)
      #'../win8/win8.gyp:metro_viewer',  TODO(GYP)
      #'../win8/win8.gyp:test_support_win8',  TODO(GYP)
      #'../win8/win8_tests.gyp:test_registrar',  TODO(GYP)
    ]
  }
}

static_library("ash_shell_lib") {
  testonly = true
  sources = gypi_values.ash_shell_lib_sources

  deps = [
    ":ash",
    ":ash_with_content",
    ":test_support",
    "//ash/resources",
    "//ash/strings",
    "//base",
    "//base:i18n",
    #"//chrome:packed_resources",  TODO(GYP)
    "//content",
    "//content/shell:content_shell_lib",
    "//net",
    "//skia",
    "//third_party/icu",
    "//ui/app_list",
    "//ui/aura",
    "//ui/base",
    "//ui/compositor",
    "//ui/events",
    "//ui/events:events_base",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/keyboard",
    "//ui/message_center",
    "//ui/resources",
    "//ui/views",
    "//ui/views:test_support",
    "//ui/views/examples:views_examples_lib",
    "//ui/views/examples:views_examples_with_content_lib",
  ]
}

test("ash_unittests") {
  sources = gypi_values.ash_unittests_sources

  deps = [
    ":ash",
    ":ash_with_content",
    ":test_support",
    "//ash/resources",
    "//ash/strings",
    "//base",
    "//base/allocator",
    "//base/test:test_support",
    "//components/user_manager",
    "//content/public/browser",
    "//content/test:test_support",
    "//skia",
    "//testing/gtest",
    "//third_party/icu",
    "//ui/accelerometer",
    "//ui/accessibility",
    "//ui/aura",
    "//ui/aura:test_support",
    "//ui/base",
    "//ui/base:test_support",
    "//ui/compositor",
    "//ui/compositor:test_support",
    "//ui/events",
    "//ui/events:test_support",
    "//ui/events:gesture_detection",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/keyboard",
    "//ui/message_center",
    "//ui/message_center:test_support",
    "//ui/resources",
    "//ui/views",
    "//ui/views:test_support",
    "//ui/views/controls/webview:test_support",
    "//ui/web_dialogs:test_support",
    "//ui/wm",
    "//url",
  ]

  if (!is_chromeos) {
    sources -= [
      # TODO(zork): fix this test to build on Windows. See: crosbug.com/26906
      "focus_cycler_unittest.cc",
      # All tests for multiple displays: not supported on Windows Ash.
      "wm/drag_window_resizer_unittest.cc",
      # Can't resize on Windows Ash. http://crbug.com/165962
      "magnifier/magnification_controller_unittest.cc",
      "wm/workspace/workspace_window_resizer_unittest.cc",
      "sticky_keys/sticky_keys_overlay_unittest.cc",
      "system/tray/media_security/multi_profile_media_tray_item_unittest.cc",
      "autoclick/autoclick_unittest.cc",
    ]
    sources += [
      #'<(SHARED_INTERMEDIATE_DIR)/ui/resources/ui_unscaled_resources.rc',  TODO(GYP)
    ]
  }

  if (is_win) {
    cflags = [ "/wd4267" ]
  }

  if (!use_x11) {
    sources -= [
      "accelerators/magnifier_key_scroller_unittest.cc",
      "accelerators/spoken_feedback_toggler_unittest.cc",
    ]
  }
  if (is_chromeos) {
    sources += [ "first_run/first_run_helper_unittest.cc" ]
    deps += [
      "//device/bluetooth",
      "//ui/display",
      "//ui/display:test_util",
      "//ui/display/types",
      #'../chromeos/chromeos.gyp:chromeos_test_support_without_gmock',  TODO(GYP)
      #'../chromeos/chromeos.gyp:power_manager_proto',  TODO(GYP)
    ]
  } else {
    sources -= [
      "display/resolution_notification_controller_unittest.cc",
      "touch/touchscreen_util_unittest.cc",
    ]
  }

  if (!use_x11 || !is_chromeos) {
    sources -= [ "touch/touch_transformer_controller_unittest.cc", ]
  }

  # TODO(GYP) is this necessary?
  #['OS=="linux" and component=="shared_library" and use_allocator!="none"', {
  # ldflags = "-rdynamic"

  if (!is_chromeos || use_ozone) {
    sources -= [
      "sticky_keys/sticky_keys_unittest.cc",  # crbug.com/354035
    ]
  }
}

executable("ash_shell") {
  testonly = true
  sources = [
    "shell/shell_main.cc",
  ]

  deps = [
    ":ash_shell_lib",
    "//components/user_manager",
  ]

  if (is_win) {
    configs -= [ "//build/config/win:console" ]
    configs += [ "//build/config/win:windowed" ]
    deps += [
      "//sandbox",
    ]
  }

  if (is_chromeos) {
    deps += [
      "//device/bluetooth",
    ]
  }
}

test("ash_shell_unittests") {
  sources = [
    "shell/window_watcher_unittest.cc",
    "test/ash_unittests.cc",
  ]

  deps = [
    ":ash_shell_lib",
    ":test_support",
    "//base/test:test_support",
    "//components/user_manager",
    "//content/test:test_support",
    "//skia",
    "//testing/gtest",
    "//ui/accessibility",
  ]

  if (is_chromeos) {
    deps += [ "//ui/display" ]
  }
}