# 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("//peridot/build/executable_package.gni")
import("//peridot/build/tests_package.gni")

executable_package("context_engine") {
  deprecated_bare_package_url = "//build"

  meta = [
    {
      path = "meta/context_engine.cmx"
      dest = "context_engine.cmx"
    },
  ]

  sources = [
    "context_engine_main.cc",
  ]

  deps = [
    ":context_engine_impl",
    "//garnet/public/lib/component/cpp",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/app_driver/cpp",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

hermetic_tests_package("context_engine_unittests") {
  deps = [
    ":context_index_unittest",
    ":context_repository_unittest",
  ]
}

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

  deps = [
    "//garnet/public/lib/fxl",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

executable("context_index_unittest") {
  testonly = true

  sources = [
    "index_unittest.cc",
  ]

  deps = [
    ":context_index",
    "//garnet/public/lib/fsl",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/context/cpp:context_helper",
    "//third_party/googletest:gtest_main",
  ]
}

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

  deps = [
    ":context_repository",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

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

  public_deps = [
    "//peridot/lib/util:idle_waiter",
  ]

  deps = [
    ":context_index",
    "//garnet/public/lib/fsl",
    "//peridot/lib/bound_set",
    "//peridot/lib/rapidjson",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/fostr/fidl/fuchsia.modular",
    "//third_party/rapidjson",
  ]
}

executable("context_repository_unittest") {
  testonly = true

  sources = [
    "context_repository_unittest.cc",
  ]

  deps = [
    ":context_repository",
    "//garnet/public/lib/fsl",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/context/cpp:context_helper",
    "//peridot/public/lib/context/cpp:context_metadata_builder",
    "//third_party/googletest:gtest_main",
  ]
}

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

  deps = [
    ":context_repository",
    "//garnet/public/lib/fxl",
    "//peridot/lib/bound_set",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/async/cpp:future",
    "//peridot/public/lib/entity/cpp",
    "//peridot/public/lib/entity/cpp:json",
    "//third_party/rapidjson",
  ]
}

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

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

  deps = [
    ":context_reader_impl",
    ":context_repository",
    ":context_writer_impl",
    "//garnet/public/lib/fidl/cpp",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

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

  deps = [
    "//garnet/public/lib/fxl",
    "//peridot/public/fidl/fuchsia.modular",
    "//third_party/boringssl",  # for sha256
  ]
}
