# 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/allocator.gni")
import("//build/config/ui.gni")
import("//third_party/protobuf/proto_library.gni")

assert(is_chromeos, "Non-ChromeOS builds must not depend on //chromeos")

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

component("chromeos") {
  configs += [
    "//net/third_party/nss/ssl:ssl_config",
  ]
  public_deps = [ "//dbus" ]
  deps = [
    "//base",
    "//base:prefs",
    "//base/third_party/dynamic_annotations",
    "//chromeos/ime:gencode",
    "//components/policy/proto",
    "//components/onc",
    "//crypto",
    "//google_apis",
    "//net/third_party/nss/ssl:libssl",
    "//third_party/icu",
    "//third_party/libxml",
    "//third_party/protobuf:protobuf_lite",
    "//ui/accelerometer",
    "//url",
    ":cryptohome_proto",
    ":power_manager_proto"
  ]
  sources = gypi_values.chromeos_sources
  defines = [ "CHROMEOS_IMPLEMENTATION" ]
  if (use_x11) {
    configs += [ "//build/config/linux:x11" ]
    deps += [ "//ui/gfx/x" ]
    sources -= [
      "ime/ime_keyboard_ozone.cc",
      "ime/ime_keyboard_ozone.h",
    ]
  } else {
    sources -= [
      "ime/ime_keyboard_x11.cc",
      "ime/ime_keyboard_x11.h",
    ]
  }
}

static_library("test_support") {
  testonly = true
  configs += [
    "//build/config/linux:dbus",
  ]
  deps = [
    "//testing/gmock",
    ":chromeos",
    ":cryptohome_proto",
    ":power_manager_proto",
    ":test_support_without_gmock",
  ]
  sources = [
    "attestation/mock_attestation_flow.cc",
    "attestation/mock_attestation_flow.h",
    "chromeos_test_utils.cc",
    "chromeos_test_utils.h",
    "cryptohome/mock_async_method_caller.cc",
    "cryptohome/mock_async_method_caller.h",
    "cryptohome/mock_homedir_methods.cc",
    "cryptohome/mock_homedir_methods.h",
    "dbus/mock_cryptohome_client.cc",
    "dbus/mock_cryptohome_client.h",
    "dbus/mock_lorgnette_manager_client.cc",
    "dbus/mock_lorgnette_manager_client.h",
    "dbus/mock_session_manager_client.cc",
    "dbus/mock_session_manager_client.h",
    "dbus/mock_shill_manager_client.cc",
    "dbus/mock_shill_manager_client.h",
    "dbus/mock_shill_profile_client.cc",
    "dbus/mock_shill_profile_client.h",
    "dbus/mock_shill_service_client.cc",
    "dbus/mock_shill_service_client.h",
    "disks/mock_disk_mount_manager.cc",
    "disks/mock_disk_mount_manager.h",
    "ime/mock_component_extension_ime_manager_delegate.cc",
    "ime/mock_component_extension_ime_manager_delegate.h",
    "login/auth/mock_auth_attempt_state_resolver.cc",
    "login/auth/mock_auth_attempt_state_resolver.h",
    "login/auth/mock_auth_status_consumer.cc",
    "login/auth/mock_auth_status_consumer.h",
    "login/auth/mock_authenticator.cc",
    "login/auth/mock_authenticator.h",
    "login/auth/mock_url_fetchers.cc",
    "login/auth/mock_url_fetchers.h",
    "network/fake_network_device_handler.cc",
    "network/fake_network_device_handler.h",
    "network/mock_managed_network_configuration_handler.cc",
    "network/mock_managed_network_configuration_handler.h",
    "network/onc/onc_test_utils.cc",
    "network/onc/onc_test_utils.h",
    "system/fake_statistics_provider.cc",
    "system/fake_statistics_provider.h",
  ]
}

static_library("test_support_without_gmock") {
  testonly = true
  configs += [
    "//build/config/linux:dbus",
  ]
  deps = [
    "//crypto",
    ":chromeos",
    ":cryptohome_proto",
    ":power_manager_proto",
  ]
  sources = [
    "dbus/fake_cros_disks_client.cc",
    "dbus/fake_cros_disks_client.h",
    "dbus/fake_power_manager_client.cc",
    "dbus/fake_power_manager_client.h",
    "dbus/fake_session_manager_client.cc",
    "dbus/fake_session_manager_client.h",
    "dbus/fake_shill_manager_client.cc",
    "dbus/fake_shill_manager_client.h",
    "dbus/fake_update_engine_client.cc",
    "dbus/fake_update_engine_client.h",
    "ime/fake_input_method_delegate.cc",
    "ime/fake_input_method_delegate.h",
  ]
}

test("chromeos_unittests") {
  configs += [
    "//build/config/linux:dbus",
    "//net/third_party/nss/ssl:ssl_config",
  ]
  deps = [
    "//base/test:run_all_unittests",
    "//base/test:test_support",
    "//components/onc",
    "//content/test:test_support",
    "//crypto",
    "//crypto:test_support",
    "//dbus:test_support",
    "//google_apis",
    "//net",
    "//net:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//url",
    ":cryptohome_proto",
    ":power_manager_proto",
    ":test_support",
  ]
  sources = gypi_values.chromeos_test_sources
  if (use_allocator != "none") {
    deps += [ "//base/allocator" ]
  }
  if (use_x11) {
    deps += [ "//ui/gfx/x" ]
  }
  if (use_ozone) {
    sources -= [
      "ime/ime_keyboard_x11_unittest.cc",
    ]
  }
}

proto_library("power_manager_proto") {
  sources = [
    "//third_party/cros_system_api/dbus/power_manager/input_event.proto",
    "//third_party/cros_system_api/dbus/power_manager/peripheral_battery_status.proto",
    "//third_party/cros_system_api/dbus/power_manager/policy.proto",
    "//third_party/cros_system_api/dbus/power_manager/power_supply_properties.proto",
    "//third_party/cros_system_api/dbus/power_manager/suspend.proto",
  ]

  proto_out_dir = "chromeos/dbus/power_manager"
}

proto_library("cryptohome_proto") {
  sources = [
    "//third_party/cros_system_api/dbus/cryptohome/key.proto",
    "//third_party/cros_system_api/dbus/cryptohome/rpc.proto",
  ]

  proto_out_dir = "chromeos/dbus/cryptohome"
}

proto_library("cryptohome_signkey_proto") {
  sources = [
    "//third_party/cros_system_api/dbus/cryptohome/signed_secret.proto",
  ]

  proto_out_dir = "chromeos/cryptohome"
}
