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

pkg_config("target_defaults") {
  pkg_deps = [
    "easy-unlock-crypto",
    "libbrillo",
    "libchrome",
  ]
}

static_library("libeasyunlock") {
  sources = [
    "dbus_adaptor.cc",
    "dbus_adaptor.h",
    "easy_unlock_service.cc",
    "easy_unlock_service.h",
  ]
  if (use.test) {
    sources += [
      "fake_easy_unlock_service.cc",
      "fake_easy_unlock_service.h",
    ]
  }
  configs += [ ":target_defaults" ]
}

executable("easy_unlock") {
  sources = [ "main.cc" ]
  configs += [ ":target_defaults" ]
  deps = [ ":libeasyunlock" ]
}

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

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