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

group("all") {
  deps = [
    ":install_upstart_config",
    ":secanomalyd",
  ]
  if (use.test) {
    deps += [ ":secanomalyd_testrunner" ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libmetrics",
    "libsession_manager-client",
    "vboot_host",
  ]
}

pkg_config("libsecanomaly_config") {
  pkg_deps = [ "re2" ]
}

static_library("libsecanomaly") {
  sources = [
    "daemon.cc",
    "metrics.cc",
    "mount_entry.cc",
    "mounts.cc",
    "processes.cc",
    "reporter.cc",
    "system_context.cc",
  ]
  configs += [
    ":target_defaults",
    ":libsecanomaly_config",
  ]
}

executable("secanomalyd") {
  sources = [ "main.cc" ]
  configs += [ ":target_defaults" ]
  install_path = "sbin"
  deps = [ ":libsecanomaly" ]
}

install_config("install_upstart_config") {
  sources = [ "secanomalyd.conf" ]
  install_path = "/etc/init"
}

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

  executable("secanomalyd_testrunner") {
    sources = [
      "mount_entry_test.cc",
      "mounts_test.cc",
      "processes_test.cc",
      "reporter_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":secanomalyd_testrunner_config",
      ":target_defaults",
    ]
    run_test = true
    deps = [
      ":libsecanomaly",
      "//common-mk/testrunner",
    ]
  }
}
