# Copyright 2021 The Chromium OS 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("//common-mk/generate-dbus-adaptors.gni")
import("//common-mk/generate-dbus-proxies.gni")
import("//common-mk/pkg_config.gni")
import("//common-mk/proto_library.gni")

group("all") {
  deps = [
    ":libmessaging_layer",
    ":missived",
  ]
  if (use.test) {
    deps += [ ":missived_testrunner" ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [
    "dbus-1",
    "libbrillo",
    "libchrome",

    # system_api depends on protobuf(or protobuf - lite).It must appear
    # before protobuf here or the linker flags won't be in the right
    # order.
    "system_api",
  ]
  if (use.fuzzer) {
    pkg_deps += [ "protobuf" ]
  } else {
    pkg_deps += [ "protobuf-lite" ]
  }
}

generate_dbus_adaptors("missive_dbus_adaptors") {
  dbus_adaptors_out_dir = "include/dbus_adaptors"
  dbus_service_config = "dbus/dbus-service-config.json"
  sources = [ "dbus/org.chromium.Missived.xml" ]
}

# Used by other tools to interact with missived
generate_dbus_proxies("missive_dbus_proxies") {
  dbus_service_config = "dbus/dbus-service-config.json"
  proxy_output_file = "include/dbus_proxies/missive/dbus-proxies.h"
  mock_output_file = "include/dbus_proxies/missive/dbus-proxies-mocks.h"
  proxy_path_in_mocks = "missive/dbus-proxies.h"
  sources = [ "dbus/org.chromium.Missived.xml" ]
}

static_library("libmessaging_layer") {
  sources = [ "missive_daemon.cc" ]
  configs += [ ":target_defaults" ]
  deps = [
    ":missive_dbus_adaptors",
    ":missive_dbus_proxies",
    "//missive/dbus:upload_client",
    "//missive/encryption:encryption_module",
    "//missive/encryption:verification",
    "//missive/proto:interface_proto",
    "//missive/scheduler",
    "//missive/scheduler:enqueue_job",
    "//missive/scheduler:upload_job",
    "//missive/storage:storage_configuration",
    "//missive/storage:storage_module",
    "//missive/storage:storage_module_interface",
    "//missive/storage:storage_uploader_interface",
    "//missive/util:status",
  ]
}

executable("missived") {
  sources = [ "main.cc" ]
  configs += [ ":target_defaults" ]
  deps = [ ":libmessaging_layer" ]
}

if (use.test) {
  pkg_config("target_test") {
    pkg_deps = [
      "libbrillo-test",
      "libchrome-test",
      "openssl",
    ]
  }

  executable("missived_testrunner") {
    sources = [
      "compression/compression_module_test.cc",
      "dbus/upload_client_test.cc",
      "missive_daemon_test.cc",
      "scheduler/enqueue_job_test.cc",
      "scheduler/scheduler_test.cc",
      "scheduler/upload_job_test.cc",
      "storage/resources/resource_interface_test.cc",
      "storage/storage_queue_stress_test.cc",
      # "storage/storage_queue_test.cc", flakiness, disabled by sheriff (b/194224371)
      # "storage/storage_test.cc", flakiness, disabled by sheriff (b/194224371)
      "util/shared_queue_test.cc",
      "util/status_macros_test.cc",
      "util/status_test.cc",
      "util/statusor_test.cc",
    ]

    configs += [
      ":target_defaults",
      ":target_test",
      "//common-mk:test",
    ]

    deps = [
      ":libmessaging_layer",
      "//common-mk/testrunner",
      "//missive/compression:compression_module",
      "//missive/compression:compression_test_support",
      "//missive/dbus:upload_client",
      "//missive/encryption:encryption_test_support",
      "//missive/encryption:unit_tests",
      "//missive/scheduler",
      "//missive/scheduler:enqueue_job",
      "//missive/scheduler:upload_job",
      "//missive/storage:storage_test_support",
      "//missive/storage:storage_uploader_interface",
      "//missive/storage/resources:resource_interface",
      "//missive/util:shared_queue",
      "//missive/util:status",
      "//missive/util:test_callbacks_support",
    ]
  }
}
