# Copyright (c) 2013 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.
use_snappy = true

defines = [ "LEVELDB_PLATFORM_CHROMIUM=1" ]

config("leveldatabase_config") {
  include_dirs = [
    ".",
    "src",
    "src/include",
  ]
  if (is_win) {
    include_dirs += "src/port/win"
  }
}

static_library("leveldatabase") {
  external = true
  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"

  direct_dependent_configs = [ ":leveldatabase_config" ]

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

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

test("env_chromium_unittests") {
  sources = [
    "env_chromium_unittest.cc",
  ]
  deps = [
    ":leveldatabase",
    "//base:test_support_base",
    "//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",
  ]

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

  deps = [
    ":leveldatabase",
    "//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",
  ]
}