about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/sqlite
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/sqlite')
-rw-r--r--nixpkgs/pkgs/development/libraries/sqlite/archive-version.nix9
-rw-r--r--nixpkgs/pkgs/development/libraries/sqlite/default.nix117
-rw-r--r--nixpkgs/pkgs/development/libraries/sqlite/sqlar.nix37
-rw-r--r--nixpkgs/pkgs/development/libraries/sqlite/tools.nix46
4 files changed, 209 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/sqlite/archive-version.nix b/nixpkgs/pkgs/development/libraries/sqlite/archive-version.nix
new file mode 100644
index 000000000000..601bb6a5889f
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/sqlite/archive-version.nix
@@ -0,0 +1,9 @@
+lib: version:
+
+let
+  fragments = lib.splitVersion version;
+  major = lib.head fragments;
+  minor = lib.concatMapStrings (lib.fixedWidthNumber 2) (lib.tail fragments);
+in
+
+major + minor + "00"
diff --git a/nixpkgs/pkgs/development/libraries/sqlite/default.nix b/nixpkgs/pkgs/development/libraries/sqlite/default.nix
new file mode 100644
index 000000000000..eb4d975a6e01
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/sqlite/default.nix
@@ -0,0 +1,117 @@
+{ lib, stdenv, fetchurl, zlib, readline, ncurses
+
+# for tests
+, python3Packages, sqldiff, sqlite-analyzer, tracker
+
+# uses readline & ncurses for a better interactive experience if set to true
+, interactive ? false
+# TODO: can be removed since 3.36 since it is the default now.
+, enableDeserialize ? false
+
+, gitUpdater
+}:
+
+let
+  archiveVersion = import ./archive-version.nix lib;
+in
+
+stdenv.mkDerivation rec {
+  pname = "sqlite${lib.optionalString interactive "-interactive"}";
+  version = "3.44.2";
+
+  # nixpkgs-update: no auto update
+  # NB! Make sure to update ./tools.nix src (in the same directory).
+  src = fetchurl {
+    url = "https://sqlite.org/2023/sqlite-autoconf-${archiveVersion version}.tar.gz";
+    hash = "sha256-HGcZoUi8Qc8PK7vjkm184/XKCdh48SRvzCB2exdbtAc=";
+  };
+
+  outputs = [ "bin" "dev" "out" ];
+  separateDebugInfo = stdenv.isLinux;
+
+  buildInputs = [ zlib ] ++ lib.optionals interactive [ readline ncurses ];
+
+  # required for aarch64 but applied for all arches for simplicity
+  preConfigure = ''
+    patchShebangs configure
+  '';
+
+  configureFlags = [ "--enable-threadsafe" ] ++ lib.optional interactive "--enable-readline";
+
+  env.NIX_CFLAGS_COMPILE = toString ([
+    "-DSQLITE_ENABLE_COLUMN_METADATA"
+    "-DSQLITE_ENABLE_DBSTAT_VTAB"
+    "-DSQLITE_ENABLE_JSON1"
+    "-DSQLITE_ENABLE_FTS3"
+    "-DSQLITE_ENABLE_FTS3_PARENTHESIS"
+    "-DSQLITE_ENABLE_FTS3_TOKENIZER"
+    "-DSQLITE_ENABLE_FTS4"
+    "-DSQLITE_ENABLE_FTS5"
+    "-DSQLITE_ENABLE_RTREE"
+    "-DSQLITE_ENABLE_STMT_SCANSTATUS"
+    "-DSQLITE_ENABLE_UNLOCK_NOTIFY"
+    "-DSQLITE_SOUNDEX"
+    "-DSQLITE_SECURE_DELETE"
+    "-DSQLITE_MAX_VARIABLE_NUMBER=250000"
+    "-DSQLITE_MAX_EXPR_DEPTH=10000"
+  ] ++ lib.optionals enableDeserialize [
+    # Can be removed in v3.36+, as this will become the default
+    "-DSQLITE_ENABLE_DESERIALIZE"
+  ]);
+
+  # Test for features which may not be available at compile time
+  preBuild = ''
+    # Use pread(), pread64(), pwrite(), pwrite64() functions for better performance if they are available.
+    if cc -Werror=implicit-function-declaration -x c - -o "$TMPDIR/pread_pwrite_test" <<< \
+      ''$'#include <unistd.h>\nint main()\n{\n  pread(0, NULL, 0, 0);\n  pwrite(0, NULL, 0, 0);\n  return 0;\n}'; then
+      export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -DUSE_PREAD"
+    fi
+    if cc -Werror=implicit-function-declaration -x c - -o "$TMPDIR/pread64_pwrite64_test" <<< \
+      ''$'#include <unistd.h>\nint main()\n{\n  pread64(0, NULL, 0, 0);\n  pwrite64(0, NULL, 0, 0);\n  return 0;\n}'; then
+      export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -DUSE_PREAD64"
+    elif cc -D_LARGEFILE64_SOURCE -Werror=implicit-function-declaration -x c - -o "$TMPDIR/pread64_pwrite64_test" <<< \
+      ''$'#include <unistd.h>\nint main()\n{\n  pread64(0, NULL, 0, 0);\n  pwrite64(0, NULL, 0, 0);\n  return 0;\n}'; then
+      export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -DUSE_PREAD64 -D_LARGEFILE64_SOURCE"
+    fi
+
+    # Necessary for FTS5 on Linux
+    export NIX_LDFLAGS="$NIX_LDFLAGS -lm"
+
+    echo ""
+    echo "NIX_CFLAGS_COMPILE = $NIX_CFLAGS_COMPILE"
+    echo ""
+  '';
+
+  postInstall = ''
+    # Do not contaminate dependent libtool-based projects with sqlite dependencies.
+    sed -i $out/lib/libsqlite3.la -e "s/dependency_libs=.*/dependency_libs='''/"
+  '';
+
+  doCheck = false; # fails to link against tcl
+
+  passthru = {
+    tests = {
+      inherit (python3Packages) sqlalchemy;
+      inherit sqldiff sqlite-analyzer tracker;
+    };
+
+    updateScript = gitUpdater {
+      # No nicer place to look for patest version.
+      url = "https://github.com/sqlite/sqlite.git";
+      # Expect tags like "version-3.43.0".
+      rev-prefix = "version-";
+    };
+  };
+
+  meta = with lib; {
+    changelog = "https://www.sqlite.org/releaselog/${lib.replaceStrings [ "." ] [ "_" ] version}.html";
+    description = "A self-contained, serverless, zero-configuration, transactional SQL database engine";
+    downloadPage = "https://sqlite.org/download.html";
+    homepage = "https://www.sqlite.org/";
+    license = licenses.publicDomain;
+    mainProgram = "sqlite3";
+    maintainers = with maintainers; [ eelco np ];
+    platforms = platforms.unix ++ platforms.windows;
+    pkgConfigModules = [ "sqlite3" ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/sqlite/sqlar.nix b/nixpkgs/pkgs/development/libraries/sqlite/sqlar.nix
new file mode 100644
index 000000000000..9063879b7e37
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/sqlite/sqlar.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, fuse, zlib
+, withFuse ? true }:
+
+stdenv.mkDerivation {
+  pname = "sqlar";
+  version = "2018-01-07";
+
+  src = fetchurl {
+    url = "https://www.sqlite.org/sqlar/tarball/4824e73896/sqlar-src-4824e73896.tar.gz";
+    sha256 = "09pikkbp93gqypn3da9zi0dzc47jyypkwc9vnmfzhmw7kpyv8nm9";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace 'gcc' '${stdenv.cc.targetPrefix}cc'
+  '';
+
+  buildInputs = [ zlib ]
+    ++ lib.optional withFuse fuse;
+
+  buildFlags = [ "CFLAGS=-Wno-error" "sqlar" ]
+    ++ lib.optional withFuse "sqlarfs";
+
+  installPhase = ''
+    install -D -t $out/bin sqlar
+  '' + lib.optionalString withFuse ''
+    install -D -t $out/bin sqlarfs
+  '';
+
+  meta = with lib; {
+    homepage = "https://sqlite.org/sqlar";
+    description = "SQLite Archive utilities";
+    license = licenses.bsd2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/sqlite/tools.nix b/nixpkgs/pkgs/development/libraries/sqlite/tools.nix
new file mode 100644
index 000000000000..dd092dd0f043
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/sqlite/tools.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl, unzip, sqlite, tcl, Foundation }:
+
+let
+  archiveVersion = import ./archive-version.nix lib;
+  mkTool = { pname, makeTarget, description, homepage, mainProgram }: stdenv.mkDerivation rec {
+    inherit pname;
+    version = "3.44.2";
+
+    # nixpkgs-update: no auto update
+    src = assert version == sqlite.version; fetchurl {
+      url = "https://sqlite.org/2023/sqlite-src-${archiveVersion version}.zip";
+      hash = "sha256-cxh0c/63RQk1fo+my5/WcVOy0BDQCusv3bbO6xirryc=";
+    };
+
+    nativeBuildInputs = [ unzip ];
+    buildInputs = [ tcl ] ++ lib.optional stdenv.isDarwin Foundation;
+
+    makeFlags = [ makeTarget ];
+
+    installPhase = "install -Dt $out/bin ${makeTarget}";
+
+    meta = with lib; {
+      inherit description homepage mainProgram;
+      downloadPage = "http://sqlite.org/download.html";
+      license = licenses.publicDomain;
+      maintainers = with maintainers; [ johnazoidberg ];
+      platforms = platforms.unix;
+    };
+  };
+in
+{
+  sqldiff = mkTool {
+    pname = "sqldiff";
+    makeTarget = "sqldiff";
+    description = "A tool that displays the differences between SQLite databases";
+    homepage = "https://www.sqlite.org/sqldiff.html";
+    mainProgram = "sqldiff";
+  };
+  sqlite-analyzer = mkTool {
+    pname = "sqlite-analyzer";
+    makeTarget = "sqlite3_analyzer";
+    description = "A tool that shows statistics about SQLite databases";
+    homepage = "https://www.sqlite.org/sqlanalyze.html";
+    mainProgram = "sqlite3_analyzer";
+  };
+}