02ff32a522
The tests seem to be unreliable (at least when SQLite is built by the Nix daemon). Sometimes they succeed, but they often do not. Even if SQLite were removed from the bootstrap, this would still be a problem, so disable the tests for now.
167 lines
4.4 KiB
Nix
167 lines
4.4 KiB
Nix
{
|
||
lib,
|
||
stdenv,
|
||
fetchurl,
|
||
unzip,
|
||
tcl,
|
||
zlib,
|
||
readline,
|
||
ncurses,
|
||
|
||
# for tests
|
||
python3Packages,
|
||
sqldiff,
|
||
sqlite-analyzer,
|
||
sqlite-rsync,
|
||
tinysparql,
|
||
|
||
# uses readline & ncurses for a better interactive experience if set to true
|
||
interactive ? false,
|
||
|
||
gitUpdater,
|
||
buildPackages,
|
||
}:
|
||
|
||
let
|
||
archiveVersion = import ./archive-version.nix lib;
|
||
in
|
||
|
||
stdenv.mkDerivation rec {
|
||
pname = "sqlite${lib.optionalString interactive "-interactive"}";
|
||
version = "3.51.2";
|
||
|
||
# nixpkgs-update: no auto update
|
||
# NB! Make sure to update ./tools.nix src (in the same directory).
|
||
src = fetchurl {
|
||
url = "https://sqlite.org/2026/sqlite-src-${archiveVersion version}.zip";
|
||
hash = "sha256-hREPdi1QeUFNmd1deRe8P/fgWHbmzL0T2ElqOBfyCCk=";
|
||
};
|
||
docsrc = fetchurl {
|
||
url = "https://sqlite.org/2026/sqlite-doc-${archiveVersion version}.zip";
|
||
hash = "sha256-xuMNB8XpwSaQHFTY18kKnBo3B4JFUX8GCzxpxN5Dv10=";
|
||
};
|
||
|
||
outputs = [
|
||
"bin"
|
||
"dev"
|
||
"man"
|
||
"doc"
|
||
"out"
|
||
];
|
||
separateDebugInfo = stdenv.hostPlatform.isLinux;
|
||
|
||
depsBuildBuild = [
|
||
buildPackages.stdenv.cc
|
||
];
|
||
|
||
nativeBuildInputs = [
|
||
unzip
|
||
tcl
|
||
];
|
||
buildInputs = [
|
||
zlib
|
||
]
|
||
++ lib.optionals interactive [
|
||
readline
|
||
ncurses
|
||
];
|
||
|
||
# required for aarch64 but applied for all arches for simplicity
|
||
preConfigure = ''
|
||
patchShebangs configure
|
||
'';
|
||
|
||
# sqlite relies on autosetup now; so many of the
|
||
# previously-understood flags are gone. They should instead be set
|
||
# on a per-output basis.
|
||
setOutputFlags = false;
|
||
|
||
env.TCLLIBDIR = "${placeholder "out"}/lib";
|
||
|
||
configureFlags = [
|
||
"--bindir=${placeholder "bin"}/bin"
|
||
"--includedir=${placeholder "dev"}/include"
|
||
"--libdir=${placeholder "out"}/lib"
|
||
(if stdenv.hostPlatform.isStatic then "--disable-tcl" else "--with-tcl=${lib.getLib tcl}/lib")
|
||
]
|
||
++ lib.optional (!interactive) "--disable-readline"
|
||
# autosetup only looks up readline.h in predefined set of directories.
|
||
++ lib.optional interactive "--with-readline-header=${lib.getDev readline}/include/readline/readline.h"
|
||
++ lib.optional (stdenv.hostPlatform.isStatic) "--disable-shared";
|
||
|
||
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_GEOPOLY"
|
||
"-DSQLITE_ENABLE_MATH_FUNCTIONS"
|
||
"-DSQLITE_ENABLE_PREUPDATE_HOOK"
|
||
"-DSQLITE_ENABLE_RBU"
|
||
"-DSQLITE_ENABLE_RTREE"
|
||
"-DSQLITE_ENABLE_SESSION"
|
||
"-DSQLITE_ENABLE_STMT_SCANSTATUS"
|
||
"-DSQLITE_ENABLE_UNLOCK_NOTIFY"
|
||
"-DSQLITE_SOUNDEX"
|
||
"-DSQLITE_SECURE_DELETE"
|
||
"-DSQLITE_MAX_VARIABLE_NUMBER=250000"
|
||
"-DSQLITE_MAX_EXPR_DEPTH=10000"
|
||
];
|
||
|
||
# Test for features which may not be available at compile time
|
||
preBuild = ''
|
||
# Necessary for FTS5 on Linux
|
||
export NIX_CFLAGS_LINK="$NIX_CFLAGS_LINK -lm"
|
||
|
||
echo ""
|
||
echo "NIX_CFLAGS_COMPILE = $NIX_CFLAGS_COMPILE"
|
||
echo ""
|
||
'';
|
||
|
||
postInstall = ''
|
||
mkdir -p $doc/share/doc
|
||
unzip $docsrc
|
||
mv sqlite-doc-${archiveVersion version} $doc/share/doc/sqlite
|
||
'';
|
||
|
||
# SQLite’s tests are unreliable on Darwin. Sometimes they run successfully, but often they do not.
|
||
doCheck = !stdenv.hostPlatform.isDarwin;
|
||
# When tcl is not available, only run test targets that don't need it.
|
||
checkTarget = lib.optionalString stdenv.hostPlatform.isStatic "fuzztest sourcetest";
|
||
|
||
passthru = {
|
||
tests = {
|
||
inherit (python3Packages) sqlalchemy;
|
||
inherit
|
||
sqldiff
|
||
sqlite-analyzer
|
||
sqlite-rsync
|
||
tinysparql
|
||
;
|
||
};
|
||
|
||
updateScript = gitUpdater {
|
||
# No nicer place to look for latest version.
|
||
url = "https://github.com/sqlite/sqlite.git";
|
||
# Expect tags like "version-3.43.0".
|
||
rev-prefix = "version-";
|
||
};
|
||
};
|
||
|
||
meta = {
|
||
changelog = "https://www.sqlite.org/releaselog/${lib.replaceStrings [ "." ] [ "_" ] version}.html";
|
||
description = "Self-contained, serverless, zero-configuration, transactional SQL database engine";
|
||
downloadPage = "https://sqlite.org/download.html";
|
||
homepage = "https://www.sqlite.org/";
|
||
license = lib.licenses.publicDomain;
|
||
mainProgram = "sqlite3";
|
||
maintainers = with lib.maintainers; [ np ];
|
||
platforms = lib.platforms.unix ++ lib.platforms.windows;
|
||
pkgConfigModules = [ "sqlite3" ];
|
||
};
|
||
}
|