# 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_chromium_stdio.cc",
    "env_chromium_stdio.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",
    ]
  }
}