# Copyright 2018 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("//testing/test.gni")
import("//third_party/protobuf/proto_library.gni")

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

declare_args() {
  # Instantiate real D-Bus clients instead of fakes.
  use_real_dbus_clients = false
}

component("dbus") {
  output_name = "chromeos_dbus"  # Avoid conflict with //dbus
  defines = [ "IS_CHROMEOS_DBUS_IMPL" ]
  public_deps = [
    ":common",
    "//chromeos/dbus/constants",
    "//chromeos/dbus/shill",
    "//dbus",
  ]
  deps = [
    ":cicerone_proto",
    ":concierge_proto",
    ":metrics_event_proto",
    ":oobe_config_proto",
    ":plugin_vm_service_proto",
    ":runtime_probe_proto",
    ":seneschal_proto",
    ":smbprovider_proto",
    ":vm_applications_apps_proto",
    "//base",
    "//components/account_id",
    "//components/device_event_log",
    "//components/policy/proto",
    "//net",
    "//url",
  ]
  sources = [
    "arc_appfuse_provider_client.cc",
    "arc_appfuse_provider_client.h",
    "arc_camera_client.cc",
    "arc_camera_client.h",
    "arc_midis_client.cc",
    "arc_midis_client.h",
    "arc_obb_mounter_client.cc",
    "arc_obb_mounter_client.h",
    "arc_oemcrypto_client.cc",
    "arc_oemcrypto_client.h",
    "cec_service_client.cc",
    "cec_service_client.h",
    "cicerone_client.cc",
    "cicerone_client.h",
    "concierge_client.cc",
    "concierge_client.h",
    "cros_disks_client.cc",
    "cros_disks_client.h",
    "dbus_client.h",
    "dbus_client_implementation_type.h",
    "dbus_clients_browser.cc",
    "dbus_clients_browser.h",
    "dbus_thread_manager.cc",
    "dbus_thread_manager.h",
    "debug_daemon_client.cc",
    "debug_daemon_client.h",
    "diagnosticsd_client.cc",
    "diagnosticsd_client.h",
    "easy_unlock_client.cc",
    "easy_unlock_client.h",
    "fake_arc_appfuse_provider_client.cc",
    "fake_arc_appfuse_provider_client.h",
    "fake_arc_camera_client.cc",
    "fake_arc_camera_client.h",
    "fake_arc_midis_client.cc",
    "fake_arc_midis_client.h",
    "fake_arc_obb_mounter_client.cc",
    "fake_arc_obb_mounter_client.h",
    "fake_arc_oemcrypto_client.cc",
    "fake_arc_oemcrypto_client.h",
    "fake_cec_service_client.cc",
    "fake_cec_service_client.h",
    "fake_cicerone_client.cc",
    "fake_cicerone_client.h",
    "fake_concierge_client.cc",
    "fake_concierge_client.h",
    "fake_cros_disks_client.cc",
    "fake_cros_disks_client.h",
    "fake_debug_daemon_client.cc",
    "fake_debug_daemon_client.h",
    "fake_diagnosticsd_client.cc",
    "fake_diagnosticsd_client.h",
    "fake_easy_unlock_client.cc",
    "fake_easy_unlock_client.h",
    "fake_image_burner_client.cc",
    "fake_image_burner_client.h",
    "fake_image_loader_client.cc",
    "fake_image_loader_client.h",
    "fake_lorgnette_manager_client.cc",
    "fake_lorgnette_manager_client.h",
    "fake_oobe_configuration_client.cc",
    "fake_oobe_configuration_client.h",
    "fake_runtime_probe_client.cc",
    "fake_runtime_probe_client.h",
    "fake_seneschal_client.cc",
    "fake_seneschal_client.h",
    "fake_smb_provider_client.cc",
    "fake_smb_provider_client.h",
    "fake_update_engine_client.cc",
    "fake_update_engine_client.h",
    "fake_virtual_file_provider_client.cc",
    "fake_virtual_file_provider_client.h",
    "image_burner_client.cc",
    "image_burner_client.h",
    "image_loader_client.cc",
    "image_loader_client.h",
    "lorgnette_manager_client.cc",
    "lorgnette_manager_client.h",
    "oobe_configuration_client.cc",
    "oobe_configuration_client.h",
    "runtime_probe_client.cc",
    "runtime_probe_client.h",
    "seneschal_client.cc",
    "seneschal_client.h",
    "smb_provider_client.cc",
    "smb_provider_client.h",
    "update_engine_client.cc",
    "update_engine_client.h",
    "util/version_loader.cc",
    "util/version_loader.h",
    "virtual_file_provider_client.cc",
    "virtual_file_provider_client.h",
  ]
}

config("use_real_dbus_clients_config") {
  if (use_real_dbus_clients) {
    defines = [ "USE_REAL_DBUS_CLIENTS" ]
  }
}

component("common") {
  output_name = "chromeos_dbus_common"
  defines = [ "IS_CHROMEOS_DBUS_IMPL" ]

  all_dependent_configs = [ ":use_real_dbus_clients_config" ]
  public_deps = [
    "//chromeos/dbus/constants",
  ]

  deps = [
    "//base",
    "//dbus",
    "//net",
  ]

  sources = [
    "blocking_method_caller.cc",
    "blocking_method_caller.h",
    "dbus_method_call_status.cc",
    "dbus_method_call_status.h",
    "initialize_dbus_client.h",
    "pipe_reader.cc",
    "pipe_reader.h",
  ]
}

source_set("test_support") {
  testonly = true
  configs += [ "//build/config/linux/dbus" ]
  public_deps = [
    ":dbus",
    "//chromeos/dbus/constants",
    "//dbus",
    "//dbus:test_support",
  ]
  deps = [
    "//base",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

source_set("unit_tests") {
  configs += [ "//build/config/linux/dbus" ]
  testonly = true
  deps = [
    ":dbus",
    ":oobe_config_proto",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//chromeos/dbus/audio",
    "//chromeos/dbus/auth_policy",
    "//chromeos/dbus/biod:test_support",
    "//chromeos/dbus/cryptohome",
    "//chromeos/dbus/cryptohome:attestation_proto",
    "//chromeos/dbus/power:power_manager_proto",
    "//chromeos/dbus/power:test_support",
    "//chromeos/dbus/session_manager",
    "//chromeos/dbus/shill:test_support",
    "//chromeos/tpm:test_support",
    "//components/account_id",
    "//dbus",
    "//dbus:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/icu",
  ]
  sources = [
    "audio/cras_audio_client_unittest.cc",
    "auth_policy/fake_auth_policy_client_unittest.cc",
    "biod/biod_client_unittest.cc",
    "biod/fake_biod_client_unittest.cc",
    "blocking_method_caller_unittest.cc",
    "cec_service_client_unittest.cc",
    "cros_disks_client_unittest.cc",
    "cryptohome/fake_cryptohome_client_unittest.cc",
    "dbus_thread_manager_unittest.cc",
    "fake_easy_unlock_client_unittest.cc",
    "native_timer_unittest.cc",
    "oobe_configuration_client_unittest.cc",
    "pipe_reader_unittest.cc",
    "update_engine_client_unittest.cc",
    "util/version_loader_unittest.cc",
  ]
}

proto_library("cicerone_proto") {
  sources = [
    "//third_party/cros_system_api/dbus/vm_cicerone/cicerone_service.proto",
  ]

  proto_out_dir = "chromeos/dbus/cicerone"
}

proto_library("concierge_proto") {
  sources = [
    "//third_party/cros_system_api/dbus/vm_concierge/service.proto",
  ]

  proto_out_dir = "chromeos/dbus/concierge"
}

proto_library("metrics_event_proto") {
  sources = [
    "//third_party/cros_system_api/dbus/metrics_event/metrics_event.proto",
  ]

  proto_out_dir = "chromeos/dbus/metrics_event"
}

proto_library("oobe_config_proto") {
  sources = [
    "//third_party/cros_system_api/dbus/oobe_config/oobe_config.proto",
  ]

  proto_out_dir = "chromeos/dbus/oobe_config"
}

proto_library("plugin_vm_service_proto") {
  sources = [
    "//third_party/cros_system_api/dbus/plugin_vm_service/plugin_vm_service.proto",
  ]

  proto_out_dir = "chromeos/dbus/plugin_vm_service"
}

proto_library("runtime_probe_proto") {
  sources = [
    "//third_party/cros_system_api/dbus/runtime_probe/runtime_probe.proto",
  ]

  # chromeos side uses full runtime, so we don't specify lite runtime in proto
  # file, instead we specify lite runtime here.
  cc_generator_options = "lite=true:"

  proto_out_dir = "chromeos/dbus/runtime_probe"
}

proto_library("seneschal_proto") {
  sources = [
    "//third_party/cros_system_api/dbus/seneschal/seneschal_service.proto",
  ]

  proto_out_dir = "chromeos/dbus/seneschal"
}

proto_library("smbprovider_proto") {
  sources = [
    "//third_party/cros_system_api/dbus/smbprovider/directory_entry.proto",
  ]

  proto_out_dir = "chromeos/dbus/smbprovider"
}

proto_library("vm_applications_apps_proto") {
  sources = [
    "//third_party/cros_system_api/dbus/vm_applications/apps.proto",
  ]

  proto_out_dir = "chromeos/dbus/vm_applications"
}
