# 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") {
  sources = [
    "components/feedback/feedback_report.cc",
    "components/feedback/feedback_uploader.cc",
    "feedback_service.cc",
    "feedback_uploader_http.cc",
    "feedback_util.cc",
  ]
  all_dependent_configs = [ ":libfeedback_daemon_config" ]
  configs += [ ":target_defaults" ]
  include_dirs = [ "." ]
  deps = [ ":feedback_proto" ]
}

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

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

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

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

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") {
    sources = [ "feedback_service_test.cc" ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libfeedback_client",
      ":libfeedback_daemon",
      "//common-mk/testrunner",
    ]
  }
}
