# Copyright 2018 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")
import("//common-mk/proto_library.gni")

group("all") {
  deps = [
    ":feedback_client",
    ":feedback_daemon",
    ":feedback_proto",
  ]
  if (use.test) {
    deps += [ ":feedback_daemon_test" ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [
    "libbrillo",
    "libchrome",
  ]
}

pkg_config("libfeedback_daemon_config") {
  pkg_deps = [ "protobuf-lite" ]
}

static_library("libfeedback_daemon") {
  all_dependent_configs = [ ":libfeedback_daemon_config" ]
  configs += [ ":target_defaults" ]
  deps = [ ":feedback_proto" ]
  sources = [
    "components/feedback/feedback_report.cc",
    "components/feedback/feedback_uploader.cc",
    "feedback_service.cc",
    "feedback_uploader_http.cc",
    "feedback_util.cc",
  ]
  include_dirs = [ "." ]
}

executable("feedback_daemon") {
  configs += [ ":target_defaults" ]
  deps = [ ":libfeedback_daemon" ]
  sources = [ "feedback_daemon.cc" ]
}

pkg_config("libfeedback_client_config") {
  pkg_deps = [ "protobuf-lite" ]
}

static_library("libfeedback_client") {
  all_dependent_configs = [ ":libfeedback_client_config" ]
  configs += [ ":target_defaults" ]
  deps = [ ":feedback_proto" ]
  sources = [
    "components/feedback/feedback_common.cc",
    "feedback_service_interface.cc",
    "feedback_util.cc",
  ]
  include_dirs = [ "." ]
}

executable("feedback_client") {
  configs += [ ":target_defaults" ]
  deps = [
    ":libfeedback_client",
    ":libfeedback_daemon",
  ]
  sources = [ "feedback_client.cc" ]
}

proto_library("feedback_proto") {
  proto_in_dir = "components/feedback/proto"
  proto_out_dir = "include/components/feedback/proto"
  sources = [
    "${proto_in_dir}/annotations.proto",
    "${proto_in_dir}/chrome.proto",
    "${proto_in_dir}/common.proto",
    "${proto_in_dir}/config.proto",
    "${proto_in_dir}/dom.proto",
    "${proto_in_dir}/extension.proto",
    "${proto_in_dir}/math.proto",
    "${proto_in_dir}/web.proto",
  ]
}

if (use.test) {
  executable("feedback_daemon_test") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libfeedback_client",
      ":libfeedback_daemon",
      "//common-mk/testrunner",
    ]
    sources = [ "feedback_service_test.cc" ]
  }
}
