# Copyright 2019 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 = [ ":policy" ]
  if (use.test) {
    deps += [ ":libmgmt_test" ]
  }
}

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

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

executable("policy") {
  configs += [ ":target_defaults" ]
  deps = [ ":libmgmt" ]
  sources = [
    "main.cc",
    "policy_tool.cc",
  ]
}

if (use.test) {
  executable("libmgmt_test") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libmgmt",
      "../common-mk/testrunner:testrunner",
    ]
    pkg_deps = [ "libchrome-test" ]
    sources = [
      "policy_tool.cc",
      "policy_tool_test.cc",
      "policy_writer_test.cc",
    ]
  }
}
