# Copyright 2015 The Chromium 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("//build/module_args/mojo.gni")
import("$mojo_sdk_root/mojo/public/mojo_application.gni")
import("$mojo_sdk_root/mojo/public/mojo_sdk.gni")

# log_client is a helper library for talking to the mojo log service (see
# log.mojo).
# TODO(vardhan): should this be an SDK source set?
mojo_sdk_source_set("log_client") {
  restrict_external_deps = false

  public_configs = [ "../../public/build/config:mojo_services" ]

  sources = [
    "lib/log_client.cc",
    "log_client.h",
  ]

  deps = [
    "../interfaces",
  ]

  mojo_sdk_deps = [
    "mojo/public/cpp/bindings",
    "mojo/public/cpp/environment",
    "mojo/public/cpp/system",
  ]
}

mojo_native_application("log_client_apptests") {
  output_name = "log_client_apptests"

  testonly = true

  sources = [
    "tests/log_client_unittest.cc",
  ]

  deps = [
    ":log_client",
    "$mojo_sdk_root/mojo/public/cpp/bindings",
    "$mojo_sdk_root/mojo/public/cpp/environment",
    "$mojo_sdk_root/mojo/public/cpp/application:standalone",
    "$mojo_sdk_root/mojo/public/cpp/application:test_support_standalone",
    "$mojo_sdk_root/mojo/public/cpp/utility",
    "$mojo_sdk_root/mojo/services/log/interfaces",
    "//testing/gtest",
  ]
}
