# 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") {
  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
  ]
}
