# Copyright 2014 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.

# Snappy is a compression library we use.
# TODO(brettw) It's not clear why this needs to be parameterized.

import("//testing/test.gni")

use_snappy = true

defines = [ "LEVELDB_PLATFORM_CHROMIUM=1" ]

config("leveldatabase_config") {
  include_dirs = [
    ".",
    "src",
    "src/include",
  ]
}

static_library("leveldatabase") {
  sources = [
    "env_chromium.cc",
    "env_chromium.h",
    "env_idb.h",
    "port/port_chromium.cc",
    "port/port_chromium.h",
    "src/db/builder.cc",
    "src/db/builder.h",
    "src/db/db_impl.cc",
    "src/db/db_impl.h",
    "src/db/db_iter.cc",
    "src/db/db_iter.h",
    "src/db/filename.cc",
    "src/db/filename.h",
    "src/db/dbformat.cc",
    "src/db/dbformat.h",
    "src/db/log_format.h",
    "src/db/log_reader.cc",
    "src/db/log_reader.h",
    "src/db/log_writer.cc",
    "src/db/log_writer.h",
    "src/db/memtable.cc",
    "src/db/memtable.h",
    "src/db/repair.cc",
    "src/db/skiplist.h",
    "src/db/snapshot.h",
    "src/db/table_cache.cc",
    "src/db/table_cache.h",
    "src/db/version_edit.cc",
    "src/db/version_edit.h",
    "src/db/version_set.cc",
    "src/db/version_set.h",
    "src/db/write_batch.cc",
    "src/db/write_batch_internal.h",
    "src/helpers/memenv/memenv.cc",
    "src/helpers/memenv/memenv.h",
    "src/include/leveldb/cache.h",
    "src/include/leveldb/comparator.h",
    "src/include/leveldb/db.h",
    "src/include/leveldb/env.h",
    "src/include/leveldb/filter_policy.h",
    "src/include/leveldb/iterator.h",
    "src/include/leveldb/options.h",
    "src/include/leveldb/slice.h",
    "src/include/leveldb/status.h",
    "src/include/leveldb/table.h",
    "src/include/leveldb/table_builder.h",
    "src/include/leveldb/write_batch.h",
    "src/port/port.h",
    "src/port/port_example.h",

    #"src/port/port_posix.cc",  # We use the chromium port instead of this.
    #"src/port/port_posix.h",
    "src/table/block.cc",
    "src/table/block.h",
    "src/table/block_builder.cc",
    "src/table/block_builder.h",
    "src/table/filter_block.cc",
    "src/table/filter_block.h",
    "src/table/format.cc",
    "src/table/format.h",
    "src/table/iterator.cc",
    "src/table/iterator_wrapper.h",
    "src/table/merger.cc",
    "src/table/merger.h",
    "src/table/table.cc",
    "src/table/table_builder.cc",
    "src/table/two_level_iterator.cc",
    "src/table/two_level_iterator.h",
    "src/util/arena.cc",
    "src/util/arena.h",
    "src/util/bloom.cc",
    "src/util/cache.cc",
    "src/util/coding.cc",
    "src/util/coding.h",
    "src/util/comparator.cc",
    "src/util/crc32c.cc",
    "src/util/crc32c.h",
    "src/util/env.cc",
    "src/util/filter_policy.cc",
    "src/util/hash.cc",
    "src/util/hash.h",
    "src/util/logging.cc",
    "src/util/logging.h",
    "src/util/mutexlock.h",
    "src/util/options.cc",
    "src/util/random.h",
    "src/util/status.cc",
  ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]

  public_configs = [ ":leveldatabase_config" ]

  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//third_party/re2",
  ]

  if (use_snappy) {
    defines += [ "USE_SNAPPY=1" ]
    deps += [ "//third_party/snappy" ]
  }
}

if (!is_android) {
  test("env_chromium_unittests") {
    sources = [
      "env_chromium_unittest.cc",
    ]
    deps = [
      ":leveldatabase",
      "//base/test:test_support",
      "//testing/gtest",
    ]
  }

  static_library("leveldb_testutil") {
    sources = [
      "src/util/histogram.cc",
      "src/util/histogram.h",
      "src/util/testharness.cc",
      "src/util/testharness.h",
      "src/util/testutil.cc",
      "src/util/testutil.h",
    ]

    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]

    public_deps = [
      ":leveldatabase",
    ]
    deps = [
      "//base",
    ]
  }

  test("leveldb_arena_test") {
    sources = [
      "src/util/arena_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_bloom_test") {
    sources = [
      "src/util/bloom_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_cache_test") {
    sources = [
      "src/util/cache_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_corruption_test") {
    sources = [
      "src/db/corruption_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_crc32c_test") {
    sources = [
      "src/util/crc32c_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_db_bench") {
    sources = [
      "src/db/db_bench.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_db_test") {
    sources = [
      "src/db/db_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_dbformat_test") {
    sources = [
      "src/db/dbformat_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_env_test") {
    sources = [
      "src/util/env_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_filename_test") {
    sources = [
      "src/db/filename_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_filter_block_test") {
    sources = [
      "src/table/filter_block_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_log_test") {
    sources = [
      "src/db/log_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_skiplist_test") {
    sources = [
      "src/db/skiplist_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_table_test") {
    sources = [
      "src/table/table_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_version_edit_test") {
    sources = [
      "src/db/version_edit_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }

  test("leveldb_write_batch_test") {
    sources = [
      "src/db/write_batch_test.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb_testutil",
    ]
  }
}
