# 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 = [ ":ureadahead-diff" ]
  if (use.test) {
    deps += [ ":ureadahead-diff_testrunner" ]
  }
}

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

config("target_defaults") {
  configs = [ ":target_defaults_pkg_deps" ]
  defines = [ "OS_CHROMEOS" ]
}

static_library("libureadahead_diff") {
  sources = [ "ureadahead_diff.cc" ]
  configs += [ ":target_defaults" ]
  defines = []
}

executable("ureadahead-diff") {
  sources = [ "main.cc" ]
  configs += [ ":target_defaults" ]
  deps = [ ":libureadahead_diff" ]
}

if (use.test) {
  pkg_config("ureadahead-diff_testrunner_pkg_deps") {
    pkg_deps = [
      "libbrillo-test",
      "libchrome-test",
    ]
  }
  executable("ureadahead-diff_testrunner") {
    sources = [ "ureadahead_diff_test.cc" ]
    configs += [
      "//common-mk:test",
      ":ureadahead-diff_testrunner_pkg_deps",
      ":target_defaults",
    ]

    deps = [
      ":libureadahead_diff",
      "../../common-mk/testrunner:testrunner",
    ]
  }
}
