# 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")

pkg_config("libsystem_common_pkg_deps") {
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libdebugd-client",
    "protobuf",
    "system_api",
  ]
}

source_set("libsystem") {
  configs += [ ":libsystem_common_pkg_deps" ]
  sources = [
    "bluetooth_client.cc",
    "bluetooth_client_impl.cc",
    "debugd_adapter_impl.cc",
    "powerd_adapter_impl.cc",
  ]
}

if (use.test || use.fuzzer) {
  pkg_config("libsystem_test_utils_pkg_deps") {
    pkg_deps = [ "libdebugd-client-test" ]
  }

  source_set("libsystem_test_utils") {
    configs += [
      ":libsystem_test_utils_pkg_deps",
      ":libsystem_common_pkg_deps",
    ]
    deps = [ ":libsystem" ]
    sources = [
      "fake_bluetooth_client.cc",
      "fake_powerd_adapter.cc",
      "mock_debugd_adapter.cc",
    ]
  }
}

if (use.test) {
  pkg_config("libsystem_test_pkg_deps") {
    pkg_deps = [ "libdebugd-client-test" ]
  }

  source_set("libsystem_test") {
    configs += [
      ":libsystem_test_pkg_deps",
      ":libsystem_common_pkg_deps",
    ]
    deps = [
      ":libsystem",
      ":libsystem_test_utils",
    ]
    sources = [
      "bluetooth_client_impl_test.cc",
      "debugd_adapter_impl_test.cc",
      "powerd_adapter_impl_test.cc",
    ]
  }
}
