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

import("//topaz/runtime/chromium/chromium.gni")

config("config") {
  if (enable_chromium) {
    defines = [ "DEFAULT_USE_CHROMIUM" ]
  }
}

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",
  ]

  public_configs = [ ":config" ]

  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",
    "//topaz/runtime/web_runner/services",
    "//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") {
  deprecated_bare_package_url = "//build"

  deps = [
    ":bin",
  ]

  binary = "google_auth_provider"

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