# 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("//garnet/public/lib/fidl/build/fidl/fidl.gni")

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

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

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

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

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("equals") {
  sources = [
    "equals.h",
  ]
  public_deps = [
    "//peridot/public/lib:fidl",
  ]
}

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

  public_deps = [
    "//garnet/public/lib/app/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/lib/app/cpp",
    "//garnet/public/lib/app/fidl",
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fxl",
    "//garnet/public/lib/ui/views/fidl:v1",
    "//peridot/public/lib:fidl",
  ]
}

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

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

  deps = [
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//garnet/public/lib/ui/view_framework",
    "//garnet/public/lib/ui/views/fidl:v1",
  ]
}

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

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

fidl("app_client_unittest_fidl") {
  testonly = true

  name = "modular_test"

  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/lib/gtest",
    "//garnet/public/lib/app/cpp",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//peridot/lib/testing:fake_application_launcher",
    "//third_party/googletest:gtest",
  ]
}

fidl("json_xdr_unittest_fidl") {
  testonly = true

  name = "json_xdr_unittest"

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