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

group("all") {
  deps = [
    ":croslog",
    ":log-metrics-collector",
    "//croslog/log_rotator",
  ]
  if (use.test) {
    deps += [
      ":croslog_testrunner",
      "//croslog/log_rotator:log_rotator_testrunner",
    ]
  }
}

source_set("log_constants") {
  sources = [ "constants.h" ]
}

static_library("libcroslog_static") {
  sources = [
    "boot_records.cc",
    "boot_records.h",
    "config.cc",
    "config.h",
    "cursor_util.cc",
    "cursor_util.h",
    "file_change_watcher.cc",
    "file_change_watcher.h",
    "file_map_reader.cc",
    "file_map_reader.h",
    "log_entry.cc",
    "log_entry.h",
    "log_entry_reader.cc",
    "log_entry_reader.h",
    "log_line_reader.cc",
    "log_line_reader.h",
    "log_parser.cc",
    "log_parser.h",
    "log_parser_audit.cc",
    "log_parser_audit.h",
    "log_parser_syslog.cc",
    "log_parser_syslog.h",
    "metrics_collector_util.cc",
    "metrics_collector_util.h",
    "multiplexer.cc",
    "multiplexer.h",
    "severity.cc",
    "severity.h",
    "viewer_journal.cc",
    "viewer_journal.h",
    "viewer_plaintext.cc",
    "viewer_plaintext.h",
  ]
  configs += [ ":target_defaults" ]
  deps = [ ":log_constants" ]
  pkg_deps = [ "re2" ]
}

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

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

if (use.test) {
  executable("croslog_testrunner") {
    sources = [
      "boot_records_test.cc",
      "config_test.cc",
      "cursor_util_test.cc",
      "file_change_watcher_test.cc",
      "log_entry_reader_test.cc",
      "log_line_reader_test.cc",
      "log_parser_audit_test.cc",
      "log_parser_syslog_test.cc",
      "metrics_collector_util_test.cc",
      "multiplexer_test.cc",
      "test_util.cc",
      "test_util.h",
      "testrunner.cc",
      "viewer_plaintext_test.cc",
    ]
    run_test = true
    defines = [ "UNIT_TEST" ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    pkg_deps = [ "libchrome-test" ]
    deps = [ ":libcroslog_static" ]
  }
}

executable("log-metrics-collector") {
  sources = [ "metrics_collector.cc" ]
  install_path = "sbin"
  configs += [ ":target_defaults" ]
  pkg_deps = [ "libmetrics" ]
  deps = [ ":libcroslog_static" ]
}
