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

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

defines = [ "LEVELDB_PLATFORM_CHROMIUM=1" ]

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

  if (is_win) {
    # windows.h #defines DeleteFile to DeleteFileW on Unicode builds. This
    # definition is in effect in a large part of Chromium's compilation units.
    # leveldb::Env has a DeleteFile method, which becomes DeleteFileW when the
    # definition is in effect.
    #
    # Define the macro everywhere, to avoid reasoning about which headers bring
    # windows.h in.
    defines += [ "DeleteFile=DeleteFileW" ]

    # OS_WIN is defined in base_export.h, but needs to be defined earlier for
    # leveldb to use it.
    defines += [ "OS_WIN" ]
  }
}

leveldb_sources = [
  "env_chromium.cc",
  "env_chromium.h",
  "leveldb_chrome.cc",
  "leveldb_chrome.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/dbformat.cc",
  "src/db/dbformat.h",
  "src/db/dumpfile.cc",
  "src/db/filename.cc",
  "src/db/filename.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/dumpfile.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/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",
]

component("leveldatabase") {
  sources = leveldb_sources

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

  if (is_component_build) {
    defines += [ "LEVELDB_SHARED_LIBRARY" ]
  }

  public_configs = [ ":leveldb_config" ]

  deps = [
    "//base",
    "//third_party/crc32c",
    "//third_party/re2",
    "//third_party/snappy",
  ]

  if (is_win) {
    # leveldb compiles with a limited set of warnings enabled, and is not
    # likely to accept fixes for other warnings. See crbug.com/698013
    cflags = [ "/wd4018" ]  # Signed/unsigned mismatch in comparison.

    if (is_official_build) {
      # Function recursive on all control paths, crbug.com/620018
      cflags += [ "/wd4717" ]
    }
  }
  defines += [ "LEVELDB_COMPILE_LIBRARY" ]
}

static_library("leveldb") {
  visibility = [ ":*" ]
  sources = leveldb_sources

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

  public_configs = [ ":leveldb_config" ]

  deps = [
    "//base",
    "//third_party/crc32c",
    "//third_party/re2",
    "//third_party/snappy",
  ]

  if (is_win) {
    # leveldb compiles with a limited set of warnings enabled, and is not
    # likely to accept fixes for other warnings. See crbug.com/698013
    cflags = [ "/wd4018" ]  # Signed/unsigned mismatch in comparison.

    if (is_official_build) {
      # Function recursive on all control paths, crbug.com/620018
      cflags += [ "/wd4717" ]
    }
  }
}

if (!is_ios && !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 = [
      ":leveldb",
    ]
    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",
    ]

    if (is_win) {
      # util\cache_test.cc(167): warning C4018: '<': signed/unsigned mismatch
      # util\cache_test.cc(171): warning C4018: '<': signed/unsigned mismatch
      cflags = [ "/wd4018" ]  # Signed/unsigned mismatch in comparison.
    }
  }

  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",
    ]

    if (is_win) {
      cflags = [ "/wd4018" ]  # Signed/unsigned mismatch in comparison.
    }
  }

  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",
    ]
  }

  executable("leveldb_leveldbutil") {
    sources = [
      "src/db/leveldbutil.cc",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    deps = [
      ":leveldb",
    ]
  }

  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",
    ]

    if (is_win) {
      # db\log_test.cc(486) triggers two warnings:
      # util\testharness.h(91): warning C4018: '<=': signed/unsigned mismatch
      # util\testharness.h(89): warning C4018: '>=': signed/unsigned mismatch
      cflags = [ "/wd4018" ]  # Signed/unsigned mismatch in comparison.
    }
  }

  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",
    ]
  }

  group("leveldb_test_targets") {
    testonly = true
    deps = [
      ":env_chromium_unittests",
      ":leveldb_arena_test",
      ":leveldb_bloom_test",
      ":leveldb_cache_test",
      ":leveldb_corruption_test",
      ":leveldb_crc32c_test",
      ":leveldb_db_bench",
      ":leveldb_db_test",
      ":leveldb_dbformat_test",
      ":leveldb_env_test",
      ":leveldb_filename_test",
      ":leveldb_filter_block_test",
      ":leveldb_log_test",
      ":leveldb_skiplist_test",
      ":leveldb_table_test",
      ":leveldb_version_edit_test",
      ":leveldb_write_batch_test",
    ]
  }
}
