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

config("sqlite_config") {
  include_dirs = [ "." ]
}

source_set("sqlite") {
  sources = [
    "amalgamation/sqlite3.h",
    "amalgamation/sqlite3.c",
    # fts2.c currently has a lot of conflicts when added to
    # the amalgamation.  It is probably not worth fixing that.
    "src/ext/fts2/fts2.c",
    "src/ext/fts2/fts2.h",
    "src/ext/fts2/fts2_hash.c",
    "src/ext/fts2/fts2_hash.h",
    "src/ext/fts2/fts2_icu.c",
    "src/ext/fts2/fts2_porter.c",
    "src/ext/fts2/fts2_tokenizer.c",
    "src/ext/fts2/fts2_tokenizer.h",
    "src/ext/fts2/fts2_tokenizer1.c",
  ]

  cflags = []
  defines = [
    "SQLITE_CORE",
    "SQLITE_ENABLE_BROKEN_FTS2",
    "SQLITE_ENABLE_FTS2",
    "SQLITE_ENABLE_FTS3",
    "SQLITE_ENABLE_ICU",
    "SQLITE_ENABLE_MEMORY_MANAGEMENT",
    "SQLITE_SECURE_DELETE",
    "SQLITE_SEPARATE_CACHE_POOLS",
    "THREADSAFE",
    "_HAS_EXCEPTIONS=0",
  ]
  if (is_chromeos) {
    defines += [
      # Despite obvious warnings about not using this flag in deployment, we
      # are turning off sync in ChromeOS and relying on the underlying
      # journaling filesystem to do error recovery properly. It's much faster.
      "SQLITE_NO_SYNC",
    ]
  }

  include_dirs = [
    "amalgamation",
    "src/src",  # Needed for fts2 to build.
  ]

  if (is_starboard) {
    # Remove sources, defines, and include dirs related to full text search.
    sources -= [
      "src/ext/fts2/fts2.c",
      "src/ext/fts2/fts2.h",
      "src/ext/fts2/fts2_hash.c",
      "src/ext/fts2/fts2_hash.h",
      "src/ext/fts2/fts2_icu.c",
      "src/ext/fts2/fts2_porter.c",
      "src/ext/fts2/fts2_tokenizer.c",
      "src/ext/fts2/fts2_tokenizer.h",
      "src/ext/fts2/fts2_tokenizer1.c",
    ]
    defines -= [
      "SQLITE_ENABLE_BROKEN_FTS2",
      "SQLITE_ENABLE_FTS2",
      "SQLITE_ENABLE_FTS3",
      "SQLITE_ENABLE_ICU",
    ]
    include_dirs -= [ "src/src" ]

    # Additional defines for Starboard.
    defines += [
      # "write-ahead log", requires shared memory primitives
      # which we don't have on every platform.
      "SQLITE_OMIT_WAL=1",
      # Disable journaling, since we only use on-disk dbs as
      # an intermediate stage to the savegame manager.
      "SQLITE_NO_SYNC",
      # Disable sqlite plugins
      "SQLITE_OMIT_LOAD_EXTENSION",
      # Localtime functions are not accurate on all platforms.
      "SQLITE_OMIT_LOCALTIME",
      "HAVE_USLEEP=1",
    ]

    configs -= [ "//starboard/build/config:size" ]
  } else {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }

  if (is_win) {
    cflags += [ "/wd4267" ]  # Conversion from size_t to "type".
  } else if (is_linux) {
    cflags += [
      # SQLite doesn"t believe in compiler warnings,
      # preferring testing.
      #   http://www.sqlite.org/faq.html#q17
      "-Wno-int-to-pointer-cast",
      "-Wno-pointer-to-int-cast",
    ]
    libs = [ "dl" ]
  } else if (is_mac || is_ios) {
    libs = [ "CoreFoundation.framework" ]
  } else if (is_android) {
    defines += [
      "HAVE_USLEEP=1",
      "SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576",
      "SQLITE_DEFAULT_AUTOVACUUM=1",
      "SQLITE_TEMP_STORE=3",
      "SQLITE_ENABLE_FTS3_BACKWARDS",
      "DSQLITE_DEFAULT_FILE_FORMAT=4",
    ]
  }

  if (is_clang) {
    cflags += [
      # sqlite does `if (*a++ && *b++);` in a non-buggy way.
      "-Wno-empty-body",
      # sqlite has some `unsigned < 0` checks.
      "-Wno-tautological-compare",
    ]
    if (is_starboard) {
      cflags += [
        "-Wno-pointer-bool-conversion"
      ]
    }
  }

  public_configs = [ ":sqlite_config" ]

  deps = [
    "//third_party/icu",
  ]
}

if (is_linux && !is_starboard) {
  executable("sqlite_shell") {
    sources = [
      "src/src/shell.c",
      "src/src/shell_icu_linux.c",
      # Include a dummy c++ file to force linking of libstdc++.
      "build_as_cpp.cc",
    ]

    deps = [
      ":sqlite",
      "//third_party/icu",
    ]
  }
}

if (is_ios && !is_starboard) {
  source_set("sqlite_regexp") {
    sources = [ "src/ext/icu/icu.c" ]
    deps = [ "//third_party/icu" ]
  }
}
