nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 openssl,
6 tcl,
7 buildPackages,
8 readline,
9 ncurses,
10 zlib,
11 sqlite,
12 util-linux,
13}:
14
15stdenv.mkDerivation (finalAttrs: {
16 pname = "sqlcipher";
17 version = "4.13.0";
18
19 src = fetchFromGitHub {
20 owner = "sqlcipher";
21 repo = "sqlcipher";
22 tag = "v${finalAttrs.version}";
23 hash = "sha256-3Qt7nOB0iMyNXfENC3gv3F6sENU7OUTZ3n2mo0M2CSA=";
24 };
25
26 nativeBuildInputs = [
27 tcl
28 util-linux
29 ];
30
31 buildInputs = [
32 readline
33 ncurses
34 openssl
35 zlib
36 ];
37
38 depsBuildBuild = [
39 buildPackages.stdenv.cc
40 ];
41
42 configureFlags = [
43 "--enable-threadsafe"
44 "--with-readline-inc=-I${lib.getDev readline}/include"
45 "--enable-load-extension"
46 ];
47
48 env = {
49 NIX_CFLAGS_COMPILE = toString [
50 # We want feature parity with sqlite
51 sqlite.NIX_CFLAGS_COMPILE
52 "-DSQLITE_HAS_CODEC"
53 "-DSQLITE_EXTRA_INIT=sqlcipher_extra_init"
54 "-DSQLITE_EXTRA_SHUTDOWN=sqlcipher_extra_shutdown"
55 "-DSQLITE_TEMP_STORE=3"
56 ];
57 LDFLAGS = toString [
58 "-lssl"
59 "-lcrypto"
60 ];
61 BUILD_CC = "$(CC_FOR_BUILD)";
62 TCLLIBDIR = "${placeholder "out"}/lib/tcl${lib.versions.majorMinor tcl.version}";
63 };
64
65 # Rename files from sqlite3 to sqlcipher to prevent file collisons
66 postInstall = ''
67 mv $out/bin/{sqlite3,sqlcipher}
68 mkdir $out/include/sqlcipher
69 mv $out/include/sqlite3.h $out/include/sqlcipher/sqlite3.h
70 mv $out/include/sqlite3ext.h $out/include/sqlcipher/sqlite3ext.h
71 mv $out/lib/lib{sqlite3,sqlcipher}.a
72 rm -f $out/lib/libsqlite3.0.dylib $out/lib/libsqlite3.dylib $out/lib/libsqlite3.so $out/lib/libsqlite3.so.0
73 rename libsqlite3 libsqlcipher $out/lib/libsqlite3*
74 mv $out/lib/pkgconfig/{sqlite3,sqlcipher}.pc
75 mv $out/share/man/man1/{sqlite3,sqlcipher}.1
76 substituteInPlace $out/lib/pkgconfig/sqlcipher.pc \
77 --replace-fail "-lsqlite3" "-lsqlcipher" \
78 --replace-fail "-lz" "-lz -lcrypto" \
79 --replace-fail "includedir}" "includedir}/sqlcipher"
80 ''
81 + lib.optionalString stdenv.hostPlatform.isDarwin ''
82 f=$(echo $out/lib/libsqlcipher.*.dylib)
83 ln --symbolic --force "$f" $out/lib/libsqlcipher.0.dylib
84 ln --symbolic --force "$f" $out/lib/libsqlcipher.dylib
85 ln --symbolic --force "$f" $out/lib/libsqlite3.dylib
86 ''
87 + lib.optionalString stdenv.hostPlatform.isLinux ''
88 f=$(echo $out/lib/libsqlcipher.so.*)
89 ln --symbolic --force "$f" $out/lib/libsqlcipher.so.0
90 ln --symbolic --force "$f" $out/lib/libsqlcipher.so
91 '';
92
93 meta = {
94 changelog = "https://github.com/sqlcipher/sqlcipher/blob/${finalAttrs.src.rev}/CHANGELOG.md";
95 description = "SQLite extension that provides 256 bit AES encryption of database files";
96 mainProgram = "sqlcipher";
97 homepage = "https://www.zetetic.net/sqlcipher/";
98 license = lib.licenses.bsd3;
99 maintainers = [ ];
100 platforms = lib.platforms.unix;
101 };
102})