# Copyright 2016 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/fidl/fidl.gni")

source_set("app_client") {
  sources = [
    "app_client.cc",
    "app_client.h",
  ]

  public_deps = [
    "//garnet/public/lib/component/cpp",
  ]

  deps = [
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//garnet/public/lib/svc/cpp",
    "//peridot/lib/common:async_holder",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

source_set("array_to_string") {
  sources = [
    "array_to_string.h",
  ]

  deps = [
    "//garnet/public/lib/fidl/cpp",
  ]
}

source_set("json_xdr") {
  sources = [
    "json_xdr.cc",
    "json_xdr.h",
  ]

  # MUST be public so clients pick up the defines from
  # //third_party/rapidjson:rapidjson_config
  public_deps = [
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fxl",
    "//peridot/lib/rapidjson",
    "//third_party/rapidjson",
  ]
}

source_set("proxy") {
  sources = [
    "proxy.cc",
    "proxy.h",
  ]

  deps = [
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fxl",
  ]
}

source_set("clone") {
  sources = [
    "clone.h",
  ]
  deps = [
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fxl",
  ]
}

source_set("environment") {
  sources = [
    "environment.cc",
    "environment.h",
  ]

  public_deps = [
    "//garnet/public/lib/component/cpp",
  ]

  deps = [
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fxl",
  ]
}

source_set("single_service_app") {
  sources = [
    "single_service_app.h",
  ]

  public_deps = [
    "//garnet/public/fidl/fuchsia.sys",
    "//garnet/public/fidl/fuchsia.ui.app",
    "//garnet/public/fidl/fuchsia.ui.viewsv1",
    "//garnet/public/fidl/fuchsia.ui.viewsv1token",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fxl",
    "//peridot/public/fidl/fuchsia.modular",
    "//zircon/public/lib/zx",
  ]
}

source_set("view_host") {
  sources = [
    "view_host.cc",
    "view_host.h",
  ]

  public_deps = [
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/ui/base_view/cpp",
    "//zircon/public/lib/zx",
  ]

  deps = [
    "//garnet/public/fidl/fuchsia.ui.app",
    "//garnet/public/fidl/fuchsia.ui.viewsv1",
    "//garnet/public/fidl/fuchsia.ui.viewsv1token",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
  ]
}

fidl("app_client_unittest_fidl") {
  testonly = true
  cpp_legacy_callbacks = true

  name = "test.peridot.lib.fidl.appclient"

  sources = [
    "app_client_unittest.fidl",
  ]
}

group("unittests") {
  testonly = true

  deps = [
    ":app_client_unittest",
    ":json_xdr_unittest",
  ]
}

source_set("app_client_unittest") {
  testonly = true

  sources = [
    "app_client_unittest.cc",
  ]

  deps = [
    ":app_client",
    ":app_client_unittest_fidl",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/component/cpp/testing:fake_launcher",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//garnet/public/lib/gtest",
    "//third_party/googletest:gtest",
  ]
}

fidl("json_xdr_unittest_fidl") {
  testonly = true
  cpp_legacy_callbacks = true

  name = "test.peridot.lib.fidl.jsonxdr"

  sources = [
    "json_xdr_unittest.fidl",
  ]
}

source_set("json_xdr_unittest") {
  testonly = true

  sources = [
    "json_xdr_unittest.cc",
  ]

  deps = [
    ":json_xdr",
    ":json_xdr_unittest_fidl",
    "//third_party/googletest:gtest",
  ]
}
