summaryrefslogtreecommitdiffstats
path: root/pkgs/by-name/sq/sqlcipher/package.nix
blob: 4040b93152b9669828c52bd54de86fc33320870c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
{
  lib,
  stdenv,
  fetchFromGitHub,
  openssl,
  tcl,
  buildPackages,
  readline,
  ncurses,
  zlib,
  sqlite,
  util-linux,
}:

stdenv.mkDerivation (finalAttrs: {
  pname = "sqlcipher";
  version = "4.19.0";

  src = fetchFromGitHub {
    owner = "sqlcipher";
    repo = "sqlcipher";
    tag = "v${finalAttrs.version}";
    hash = "sha256-b3MDD3j0XQgU0tpaq1sA/nBrkB00pVbHrPAnOpyKv+s=";
  };

  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 collisions
  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;
  };
})