# 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:chrome_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 = [
      "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",
      "storage/storage_test.cc",
      "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/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",
    ]
  }
}
