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

pkg_config("target_defaults") {
  pkg_deps = [ "libchrome-${libbase_ver}" ]
}

shared_library("libpasswordprovider") {
  configs += [ ":target_defaults" ]
  sources = [
    "password.cc",
    "password.h",
    "password_provider.cc",
    "password_provider.h",
  ]
  libs = [ "keyutils" ]
}

if (use.test) {
  executable("password_provider_test") {
    configs += [
      # //common-mk:test should be at the top. crbug.com/887845
      # TODO(crbug.com/887845): Remove this note after library order issue is resolved.
      "//common-mk:test",
      ":target_defaults",
    ]
    sources = [
      "password.cc",
      "password_provider.cc",
      "password_provider_test.cc",
      "password_test.cc",
    ]
    libs = [ "keyutils" ]
    deps = [
      ":libpasswordprovider",
      "//common-mk/testrunner",
    ]
  }
}
