Files
2026-07-08 15:59:45 +00:00

103 lines
2.8 KiB
Nix

{
lib,
stdenv,
fetchFromGitHub,
openssl,
tcl,
buildPackages,
readline,
ncurses,
zlib,
sqlite,
util-linux,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "sqlcipher";
version = "4.17.0";
src = fetchFromGitHub {
owner = "sqlcipher";
repo = "sqlcipher";
tag = "v${finalAttrs.version}";
hash = "sha256-IMtyUfpwhvKPWyXYZCxw2F8pbWAnknW3kxf8Gx3kW5Q=";
};
nativeBuildInputs = [
tcl
util-linux
];
buildInputs = [
readline
ncurses
openssl
zlib
];
depsBuildBuild = [
buildPackages.stdenv.cc
];
configureFlags = [
"--enable-threadsafe"
"--with-readline-inc=-I${lib.getDev readline}/include"
"--enable-load-extension"
];
env = {
NIX_CFLAGS_COMPILE = toString [
# We want feature parity with sqlite
sqlite.NIX_CFLAGS_COMPILE
"-DSQLITE_HAS_CODEC"
"-DSQLITE_EXTRA_INIT=sqlcipher_extra_init"
"-DSQLITE_EXTRA_SHUTDOWN=sqlcipher_extra_shutdown"
"-DSQLITE_TEMP_STORE=3"
];
LDFLAGS = toString [
"-lssl"
"-lcrypto"
];
BUILD_CC = "$(CC_FOR_BUILD)";
TCLLIBDIR = "${placeholder "out"}/lib/tcl${lib.versions.majorMinor tcl.version}";
};
# Rename files from sqlite3 to sqlcipher to prevent file collisons
postInstall = ''
mv $out/bin/{sqlite3,sqlcipher}
mkdir $out/include/sqlcipher
mv $out/include/sqlite3.h $out/include/sqlcipher/sqlite3.h
mv $out/include/sqlite3ext.h $out/include/sqlcipher/sqlite3ext.h
mv $out/lib/lib{sqlite3,sqlcipher}.a
rm -f $out/lib/libsqlite3.0.dylib $out/lib/libsqlite3.dylib $out/lib/libsqlite3.so $out/lib/libsqlite3.so.0
rename libsqlite3 libsqlcipher $out/lib/libsqlite3*
mv $out/lib/pkgconfig/{sqlite3,sqlcipher}.pc
mv $out/share/man/man1/{sqlite3,sqlcipher}.1
substituteInPlace $out/lib/pkgconfig/sqlcipher.pc \
--replace-fail "-lsqlite3" "-lsqlcipher" \
--replace-fail "-lz" "-lz -lcrypto" \
--replace-fail "includedir}" "includedir}/sqlcipher"
''
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
f=$(echo $out/lib/libsqlcipher.*.dylib)
ln --symbolic --force "$f" $out/lib/libsqlcipher.0.dylib
ln --symbolic --force "$f" $out/lib/libsqlcipher.dylib
ln --symbolic --force "$f" $out/lib/libsqlite3.dylib
''
+ lib.optionalString stdenv.hostPlatform.isLinux ''
f=$(echo $out/lib/libsqlcipher.so.*)
ln --symbolic --force "$f" $out/lib/libsqlcipher.so.0
ln --symbolic --force "$f" $out/lib/libsqlcipher.so
'';
meta = {
changelog = "https://github.com/sqlcipher/sqlcipher/blob/${finalAttrs.src.rev}/CHANGELOG.md";
description = "SQLite extension that provides 256 bit AES encryption of database files";
mainProgram = "sqlcipher";
homepage = "https://www.zetetic.net/sqlcipher/";
license = lib.licenses.bsd3;
maintainers = [ ];
platforms = lib.platforms.unix;
};
})