summary refs log tree commit diff
path: root/pkgs/development/libraries/wiredtiger/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/libraries/wiredtiger/default.nix')
-rw-r--r--pkgs/development/libraries/wiredtiger/default.nix56
1 files changed, 46 insertions, 10 deletions
diff --git a/pkgs/development/libraries/wiredtiger/default.nix b/pkgs/development/libraries/wiredtiger/default.nix
index 395a4040153..347686014d1 100644
--- a/pkgs/development/libraries/wiredtiger/default.nix
+++ b/pkgs/development/libraries/wiredtiger/default.nix
@@ -1,34 +1,70 @@
 { stdenv, fetchFromGitHub, automake, autoconf, libtool
-, bzip2, snappy, zlib, db
+
+# Optional Dependencies
+, lz4 ? null, snappy ? null, zlib ? null, bzip2 ? null, db ? null
+, gperftools ? null, leveldb ? null
 }:
 
+with stdenv.lib;
+let
+  mkFlag = trueStr: falseStr: cond: name: val:
+    if cond == null then null else
+      "--${if cond != false then trueStr else falseStr}${name}${if val != null && cond != false then "=${val}" else ""}";
+  mkEnable = mkFlag "enable-" "disable-";
+  mkWith = mkFlag "with-" "without-";
+  mkOther = mkFlag "" "" true;
+
+  shouldUsePkg = pkg: if pkg != null && any (x: x == stdenv.system) pkg.meta.platforms then pkg else null;
+
+  optLz4 = shouldUsePkg lz4;
+  optSnappy = shouldUsePkg snappy;
+  optZlib = shouldUsePkg zlib;
+  optBzip2 = shouldUsePkg bzip2;
+  optDb = shouldUsePkg db;
+  optGperftools = shouldUsePkg gperftools;
+  optLeveldb = shouldUsePkg leveldb;
+in
 stdenv.mkDerivation rec {
   name = "wiredtiger-${version}";
-  version = "2.5.2";
+  version = "2.6.1";
 
   src = fetchFromGitHub {
     repo = "wiredtiger";
     owner = "wiredtiger";
     rev = version;
-    sha256 = "1rk26gfs4zpz88mkbdkhz65q4admpgf46x5zsnghl0ndirmnvq3p";
+    sha256 = "1nj319w3hvkq3za2dz9m0p1w683gycdb392v1jb910bhzpsq30pd";
   };
 
   nativeBuildInputs = [ automake autoconf libtool ];
-  buildInputs = [ bzip2 snappy zlib db ];
+  buildInputs = [ optLz4 optSnappy optZlib optBzip2 optDb optGperftools optLeveldb ];
 
   configureFlags = [
-    "--with-berkeleydb=${db}"
-    "--enable-bzip2"
-    "--enable-leveldb"
-    "--enable-snappy"
-    "--enable-zlib"
+    (mkWith   false                   "attach"     null)
+    (mkWith   true                    "builtins"   "")
+    (mkEnable (optBzip2 != null)      "bzip2"      null)
+    (mkEnable false                   "diagnostic" null)
+    (mkEnable false                   "java"       null)
+    (mkEnable (optLeveldb != null)    "leveldb"    null)
+    (mkEnable false                   "python"     null)
+    (mkEnable (optSnappy != null)     "snappy"     null)
+    (mkEnable (optLz4 != null)        "lz4"        null)
+    (mkEnable (optGperftools != null) "tcmalloc"   null)
+    (mkEnable (optZlib != null)       "zlib"       null)
+    (mkWith   (optDb != null)         "berkeleydb" optDb)
+    (mkWith   false                   "helium"     null)
   ];
 
   preConfigure = ''
     ./autogen.sh
   '';
 
-  meta = with stdenv.lib; {
+  prePatch = stdenv.lib.optionalString stdenv.isDarwin ''
+    substituteInPlace api/leveldb/leveldb_wt.h --replace \
+      '#include "wiredtiger.h"' \
+      ''$'#include "wiredtiger.h"\n#include "pthread.h"'
+  '';
+
+  meta = {
     homepage = http://wiredtiger.com/;
     description = "";
     license = licenses.gpl2;