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