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

group("all") {
  deps = [
    ":clobber-state",
    ":file_attrs_cleaner_tool",
    ":net_poll_tool",
    ":static_node_tool",
    ":usermode-helper",
  ]
  if (use.test) {
    deps += [
      ":clobber_state_test",
      ":file_attrs_cleaner_test",
      ":usermode-helper_test",
    ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [
    "libbrillo-${libbase_ver}",
    "libchrome-${libbase_ver}",
    "libmetrics-${libbase_ver}",
    "vboot_host",
  ]
  libs = [
    "rootdev",
    "secure_erase_file",
  ]
}

static_library("libcrossystem") {
  configs += [ ":target_defaults" ]
  sources = [
    "crossystem.cc",
    "crossystem_fake.cc",
    "crossystem_impl.cc",
  ]
}

executable("clobber-state") {
  configs += [ ":target_defaults" ]
  sources = [
    "clobber_state.cc",
    "clobber_state_main.cc",
  ]
  deps = [
    ":libcrossystem",
  ]
}

static_library("file_attrs_cleaner_lib") {
  configs += [ ":target_defaults" ]
  sources = [
    "file_attrs_cleaner_lib.cc",
  ]
}

executable("file_attrs_cleaner_tool") {
  configs += [ ":target_defaults" ]
  deps = [
    ":file_attrs_cleaner_lib",
  ]
  sources = [
    "file_attrs_cleaner_tool.cc",
  ]
}

executable("net_poll_tool") {
  configs += [ ":target_defaults" ]
  sources = [
    "net_poll_tool.cc",
  ]
}

executable("static_node_tool") {
  configs += [ ":target_defaults" ]
  sources = [
    "static_node_tool.cc",
  ]
}

static_library("usermode-helper_lib") {
  configs += [ ":target_defaults" ]
  sources = [
    "usermode-helper_lib.cc",
  ]
}

executable("usermode-helper") {
  configs += [ ":target_defaults" ]
  deps = [
    ":usermode-helper_lib",
  ]
  sources = [
    "usermode-helper.cc",
  ]
}

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

  executable("clobber_state_test") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":test_config",
    ]
    sources = [
      "clobber_state.cc",
      "clobber_state_test.cc",
    ]
    deps = [
      ":libcrossystem",
      "//common-mk/testrunner",
    ]
  }

  executable("file_attrs_cleaner_test") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":test_config",
    ]
    sources = [
      "file_attrs_cleaner_test.cc",
    ]
    deps = [
      ":file_attrs_cleaner_lib",
      "//common-mk/testrunner",
    ]
  }

  executable("usermode-helper_test") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":test_config",
    ]
    sources = [
      "usermode-helper_test.cc",
    ]
    deps = [
      ":usermode-helper_lib",
      "//common-mk/testrunner",
    ]
  }
}
