at 22.05-pre 3.5 kB view raw
1{ lib, stdenv, fetchurl, zlib, interactive ? false, readline, ncurses 2, python3Packages 3, enableDeserialize ? false 4}: 5 6with lib; 7 8let 9 archiveVersion = import ./archive-version.nix lib; 10in 11 12stdenv.mkDerivation rec { 13 pname = "sqlite"; 14 version = "3.36.0"; 15 16 # NB! Make sure to update ./tools.nix src (in the same directory). 17 src = fetchurl { 18 url = "https://sqlite.org/2021/sqlite-autoconf-${archiveVersion version}.tar.gz"; 19 sha256 = "sha256-vZDD65a+6ZYga4O+cGXJzhmu84w/T7Uwc62g0LabvOM="; 20 }; 21 22 outputs = [ "bin" "dev" "out" ]; 23 separateDebugInfo = stdenv.isLinux; 24 25 buildInputs = [ zlib ] ++ optionals interactive [ readline ncurses ]; 26 27 # required for aarch64 but applied for all arches for simplicity 28 preConfigure = '' 29 patchShebangs configure 30 ''; 31 32 configureFlags = [ "--enable-threadsafe" ] ++ optional interactive "--enable-readline"; 33 34 NIX_CFLAGS_COMPILE = toString ([ 35 "-DSQLITE_ENABLE_COLUMN_METADATA" 36 "-DSQLITE_ENABLE_DBSTAT_VTAB" 37 "-DSQLITE_ENABLE_JSON1" 38 "-DSQLITE_ENABLE_FTS3" 39 "-DSQLITE_ENABLE_FTS3_PARENTHESIS" 40 "-DSQLITE_ENABLE_FTS3_TOKENIZER" 41 "-DSQLITE_ENABLE_FTS4" 42 "-DSQLITE_ENABLE_FTS5" 43 "-DSQLITE_ENABLE_RTREE" 44 "-DSQLITE_ENABLE_STMT_SCANSTATUS" 45 "-DSQLITE_ENABLE_UNLOCK_NOTIFY" 46 "-DSQLITE_SOUNDEX" 47 "-DSQLITE_SECURE_DELETE" 48 "-DSQLITE_MAX_VARIABLE_NUMBER=250000" 49 "-DSQLITE_MAX_EXPR_DEPTH=10000" 50 ] ++ lib.optionals enableDeserialize [ 51 # Can be removed in v3.36+, as this will become the default 52 "-DSQLITE_ENABLE_DESERIALIZE" 53 ]); 54 55 # Test for features which may not be available at compile time 56 preBuild = '' 57 # Use pread(), pread64(), pwrite(), pwrite64() functions for better performance if they are available. 58 if cc -Werror=implicit-function-declaration -x c - -o "$TMPDIR/pread_pwrite_test" <<< \ 59 ''$'#include <unistd.h>\nint main()\n{\n pread(0, NULL, 0, 0);\n pwrite(0, NULL, 0, 0);\n return 0;\n}'; then 60 export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -DUSE_PREAD" 61 fi 62 if cc -Werror=implicit-function-declaration -x c - -o "$TMPDIR/pread64_pwrite64_test" <<< \ 63 ''$'#include <unistd.h>\nint main()\n{\n pread64(0, NULL, 0, 0);\n pwrite64(0, NULL, 0, 0);\n return 0;\n}'; then 64 export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -DUSE_PREAD64" 65 elif cc -D_LARGEFILE64_SOURCE -Werror=implicit-function-declaration -x c - -o "$TMPDIR/pread64_pwrite64_test" <<< \ 66 ''$'#include <unistd.h>\nint main()\n{\n pread64(0, NULL, 0, 0);\n pwrite64(0, NULL, 0, 0);\n return 0;\n}'; then 67 export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -DUSE_PREAD64 -D_LARGEFILE64_SOURCE" 68 fi 69 70 # Necessary for FTS5 on Linux 71 export NIX_LDFLAGS="$NIX_LDFLAGS -lm" 72 73 echo "" 74 echo "NIX_CFLAGS_COMPILE = $NIX_CFLAGS_COMPILE" 75 echo "" 76 ''; 77 78 postInstall = '' 79 # Do not contaminate dependent libtool-based projects with sqlite dependencies. 80 sed -i $out/lib/libsqlite3.la -e "s/dependency_libs=.*/dependency_libs='''/" 81 ''; 82 83 doCheck = false; # fails to link against tcl 84 85 passthru.tests = { 86 inherit (python3Packages) sqlalchemy; 87 }; 88 89 meta = { 90 description = "A self-contained, serverless, zero-configuration, transactional SQL database engine"; 91 downloadPage = "https://sqlite.org/download.html"; 92 homepage = "https://www.sqlite.org/"; 93 license = licenses.publicDomain; 94 mainProgram = "sqlite3"; 95 maintainers = with maintainers; [ eelco np ]; 96 platforms = platforms.unix ++ platforms.windows; 97 }; 98}