mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-03-08 04:44:08 +01:00
168 lines
4.5 KiB
Nix
168 lines
4.5 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_PERCENTILE"
|
||
"-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" ];
|
||
identifiers.cpeParts = lib.meta.cpeFullVersionWithVendor "sqlite" version;
|
||
};
|
||
}
|