# 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 cros_healthd's event functionality.
pkg_config("libcros_healthd_events_pkg_deps") {
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libmojo",
    "protobuf",
    "system_api",
  ]
}

source_set("libcros_healthd_events") {
  configs += [ ":libcros_healthd_events_pkg_deps" ]
  deps = [
    "//diagnostics/common:libcommon",
    "//diagnostics/cros_healthd/system:libcros_healthd_system",
    "//diagnostics/mojo:cros_healthd_mojo_bindings",
  ]
  sources = [
    "bluetooth_events_impl.cc",
    "lid_events_impl.cc",
    "power_events_impl.cc",
  ]
}

if (use.test) {
  pkg_config("libcros_healthd_events_test_pkg_deps") {
    pkg_deps = [
      "libchrome",
      "libchrome-test",
      "libmojo",
    ]
  }

  executable("libcros_healthd_events_test") {
    configs += [
      ":libcros_healthd_events_test_pkg_deps",
      "//common-mk:test",
    ]
    deps = [
      ":libcros_healthd_events",
      "//diagnostics/common:libcommon_test_utils",
      "//diagnostics/common:mojo_testrunner",
      "//diagnostics/cros_healthd/system:libcros_healthd_system_test_utils",
      "//diagnostics/mojo:cros_healthd_mojo_bindings",
    ]
    sources = [
      "bluetooth_events_impl_test.cc",
      "lid_events_impl_test.cc",
      "power_events_impl_test.cc",
    ]
  }
}
