# Copyright 2016 The Chromium 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("//services/service_manager/public/cpp/service_executable.gni")
import("//testing/test.gni")

static_library("lib") {
  sources = [
    "env_mojo.cc",
    "env_mojo.h",
    "leveldb_database_impl.cc",
    "leveldb_database_impl.h",
    "leveldb_mojo_proxy.cc",
    "leveldb_mojo_proxy.h",
    "leveldb_service_impl.cc",
    "leveldb_service_impl.h",
  ]

  public_deps = [
    "//components/services/filesystem/public/interfaces",
    "//components/services/leveldb/public/cpp",
    "//components/services/leveldb/public/interfaces",
  ]

  deps = [
    "//mojo/public/cpp/system",
    "//services/service_manager/public/cpp",
    "//third_party/leveldatabase",
  ]
}

service_executable("leveldb") {
  sources = [
    "leveldb_app.cc",
    "leveldb_app.h",
    "main.cc",
  ]

  deps = [
    ":lib",
    "//components/services/leveldb/public/interfaces",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//services/service_manager/public/cpp",
  ]
}

test("leveldb_service_unittests") {
  sources = [
    "leveldb_mojo_unittest.cc",
    "leveldb_service_unittest.cc",
    "remote_iterator_unittest.cc",
  ]

  deps = [
    "//base",
    "//base/test:test_support",
    "//components/services/filesystem/public/cpp:manifest",
    "//components/services/filesystem/public/interfaces",
    "//components/services/leveldb/public/cpp",
    "//components/services/leveldb/public/cpp:manifest",
    "//components/services/leveldb/public/interfaces",
    "//mojo/core/test:run_all_unittests",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/cpp/test:test_support",
    "//testing/gtest",
    "//third_party/leveldatabase",
  ]

  data_deps = [
    ":leveldb",
    "//components/services/filesystem:filesystem",
  ]
}
