# 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" ]
  }
}
