# Copyright 2020 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/pkg_config.gni")

# Library that provides core functionality for the cros_healthd daemon.
pkg_config("libcros_healthd_pkg_deps") {
  pkg_deps = [
    "dbus-1",
    "libbrillo",
    "libchrome-${libbase_ver}",
    "libmojo-${libbase_ver}",
  ]
}

source_set("libcros_healthd") {
  configs += [ ":libcros_healthd_pkg_deps" ]
  deps = [
    "events:libcros_healthd_events",
    "fetchers:libcros_healthd_fetchers",
    "network_diagnostics:libnetwork_diagnostics_adapter",
    "process:libcros_healthd_process",
    "routines:libdiag_routine",
    "system:libcros_healthd_system",
    "//diagnostics/mojo:cros_healthd_mojo_bindings",
    "//diagnostics/mojo:network_diagnostics_mojo_bindings",
  ]
  sources = [
    "cros_healthd.cc",
    "cros_healthd_mojo_service.cc",
    "cros_healthd_routine_factory_impl.cc",
    "cros_healthd_routine_service_impl.cc",
    "fetch_aggregator.cc",
  ]
}

executable("cros_healthd") {
  deps = [
    ":libcros_healthd",
    "executor:libcros_healthd_executor",
    "minijail:libcros_healthd_minijail",
    "system:libcros_healthd_system",
  ]
  sources = [ "main.cc" ]
}

if (use.test) {
  pkg_config("cros_healthd_test_pkg_deps") {
    pkg_deps = [
      "libchrome-${libbase_ver}",
      "libchrome-test-${libbase_ver}",
    ]
  }

  executable("cros_healthd_test") {
    configs += [
      ":cros_healthd_test_pkg_deps",
      "//common-mk:test",
    ]
    deps = [
      ":libcros_healthd",
      "routines:libroutine_test_utils",
      "system:libcros_healthd_system_test_utils",
      "//diagnostics/common:libcommon_test_utils",
      "//diagnostics/common:mojo_testrunner",
    ]
    sources = [
      "cros_healthd_mojo_service_test.cc",
      "cros_healthd_routine_service_impl_test.cc",
      "fake_cros_healthd_routine_factory.cc",
    ]
  }
}
