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

  deps = [
    "//ash/resources",
    "//ash/strings",
    "//base",
    "//base:i18n",
    "//base/third_party/dynamic_annotations",
    "//cc",
    "//components/user_manager",
    "//content/public/browser",
    "//media",
    "//net",
    "//skia",
    "//third_party/icu",
    "//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",
  ]

  forward_dependent_configs_from = [
    "//ash/resources",
    "//ash/strings",
  ]

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

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

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

  deps = [
    ":ash",
    "//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",
  ]

  forward_dependent_configs_from = [
    ":ash",
  ]
}

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

  deps = [
    ":ash",
    "//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") {
  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/examples.gyp:views_examples_lib',  TODO(GYP)
    #'../ui/views/examples/examples.gyp:views_examples_with_content_lib',  TODO(GYP)
  ]
}

if (false) {  # TODO(GYP) enable ash shell and unit tests when they link.

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/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",
    "//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.
      "accelerators/nested_dispatcher_controller_unittest.cc",
      "wm/drag_window_resizer_unittest.cc",
      # Can't resize on Windows Ash. http://crbug.com/165962
      "ash_root_window_transformer_unittest.cc",
      "magnifier/magnification_controller_unittest.cc",
      "wm/workspace/workspace_window_resizer_unittest.cc",
      "sticky_keys/sticky_keys_overlay_unittest.cc",
      "sticky_keys/sticky_keys_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",
      "touch/touch_transformer_controller_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/touch_transformer_controller_unittest.cc",
    ]
  }

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

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

executable("ash_shell") {
  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/bluetooth.gyp:device_bluetooth",
    ]
  }
}

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

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

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

}  # if false
