# Copyright 2018 The Fuchsia 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("//build/package.gni")

executable("bin") {
  output_name = "google_auth_provider"

  sources = [
    "main.cc",
  ]

  public_deps = [
    "//zircon/public/lib/fit",
  ]

  deps = [
    ":lib",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fsl",
    "//src/lib/fxl",
    "//garnet/public/lib/network_wrapper",
    "//sdk/fidl/fuchsia.auth",
    "//sdk/lib/fidl/cpp",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/trace-provider",
  ]
}

source_set("lib") {
  sources = [
    "constants.h",
    "factory_impl.cc",
    "factory_impl.h",
    "google_auth_provider_impl.cc",
    "google_auth_provider_impl.h",
    "settings.h",
  ]

  deps = [
    "//garnet/public/lib/rapidjson_utils",
    "//garnet/public/lib/svc/cpp",
    "//peridot/lib/rapidjson",
    "//sdk/fidl/fuchsia.net.oldhttp",
    "//topaz/auth_providers/oauth",
  ]

  public_deps = [
    "//garnet/public/lib/callback",
    "//garnet/public/lib/component/cpp",
    "//src/lib/fxl",
    "//garnet/public/lib/network_wrapper",
    "//sdk/fidl/fuchsia.auth",
    "//sdk/fidl/fuchsia.auth.testing",
    "//sdk/fidl/fuchsia.ui.app",
    "//sdk/lib/fidl/cpp",
    "//topaz/runtime/chromium:chromium.web",
    "//zircon/public/lib/async-default",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/syslog",
    "//zircon/public/lib/zx",
  ]
}

source_set("unittests") {
  testonly = true

  sources = [
    "factory_impl_unittest.cc",
    "google_auth_provider_impl_unittest.cc",
  ]

  deps = [
    ":lib",
    "//src/lib/fxl:printers",
    "//garnet/public/lib/gtest:gtest",
    "//garnet/public/lib/network_wrapper:fake",
    "//peridot/lib/rapidjson",
    "//sdk/fidl/fuchsia.auth",
    "//sdk/lib/fidl/cpp",
    "//third_party/googletest:gtest_main",
  ]
}

package("google_auth_provider") {
  deps = [
    ":bin",
  ]

  binary = "google_auth_provider"

  meta = [
    {
      path = rebase_path("meta/google_auth_provider.cmx")
      dest = "google_auth_provider.cmx"
    },
  ]
}
