# 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/fidl/fuchsia.auth",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//garnet/public/lib/network_wrapper",
    "//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/fidl/fuchsia.net.oldhttp",
    "//garnet/public/lib/svc/cpp",
    "//peridot/lib/rapidjson",
    "//topaz/auth_providers/oauth",
  ]

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

source_set("unittests") {
  testonly = true

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

  deps = [
    ":lib",
    "//garnet/public/fidl/fuchsia.auth",
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fxl:fxl_printers",
    "//garnet/public/lib/gtest:gtest",
    "//garnet/public/lib/network_wrapper:fake",
    "//peridot/lib/rapidjson",
    "//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"
    },
  ]
}
