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

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

  binary = "google_auth_provider"

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

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

  sources = [
    "main.cc",
  ]

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

executable("google_auth_provider_unittests") {
  testonly = true

  deps = [
    ":unittests",
    "//third_party/googletest:gtest_main",
  ]
}

source_set("unittests") {
  testonly = true
  output_name = "google_auth_provider_unittests"

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

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

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",
    "//peridot/lib/rapidjson",
    "//sdk/lib/ui/scenic/cpp",
    "//src/identity/lib/oauth:lib",
    "//src/lib/fxl",
  ]

  public_deps = [
    "//garnet/public/lib/callback",
    "//garnet/public/lib/network_wrapper",
    "//sdk/fidl/fuchsia.auth",
    "//sdk/fidl/fuchsia.auth.testing",
    "//sdk/fidl/fuchsia.net.oldhttp",
    "//sdk/fidl/fuchsia.ui.views",
    "//sdk/fidl/fuchsia.web",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//zircon/public/lib/async-default",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/syslog",
    "//zircon/public/lib/zx",
  ]
}
