summary refs log tree commit diff
path: root/pkgs/development/libraries/libssh2
diff options
context:
space:
mode:
authorWilliam A. Kennington III <william@wkennington.com>2015-05-01 19:13:14 -0700
committerWilliam A. Kennington III <william@wkennington.com>2015-05-01 19:13:14 -0700
commite9ee5f99615d0980538e60b1079c8438f8d8135c (patch)
treee64b32ccde31b25649acd9df9e554437558432de /pkgs/development/libraries/libssh2
parent42663e41a527f0c4ebdfbf220cba1cc85197a596 (diff)
downloadnixpkgs-e9ee5f99615d0980538e60b1079c8438f8d8135c.tar
nixpkgs-e9ee5f99615d0980538e60b1079c8438f8d8135c.tar.gz
nixpkgs-e9ee5f99615d0980538e60b1079c8438f8d8135c.tar.bz2
nixpkgs-e9ee5f99615d0980538e60b1079c8438f8d8135c.tar.lz
nixpkgs-e9ee5f99615d0980538e60b1079c8438f8d8135c.tar.xz
nixpkgs-e9ee5f99615d0980538e60b1079c8438f8d8135c.tar.zst
nixpkgs-e9ee5f99615d0980538e60b1079c8438f8d8135c.zip
libssh2: Modernize Build
Diffstat (limited to 'pkgs/development/libraries/libssh2')
-rw-r--r--pkgs/development/libraries/libssh2/default.nix64
1 files changed, 59 insertions, 5 deletions
diff --git a/pkgs/development/libraries/libssh2/default.nix b/pkgs/development/libraries/libssh2/default.nix
index daeb39bc982..dfaee909620 100644
--- a/pkgs/development/libraries/libssh2/default.nix
+++ b/pkgs/development/libraries/libssh2/default.nix
@@ -1,19 +1,73 @@
-{stdenv, fetchurlBoot, openssl, zlib}:
+{ stdenv, fetchurl
 
+# Optional Dependencies
+, zlib ? null
+
+# Crypto Dependencies
+, openssl ? null, libgcrypt ? null
+}:
+
+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 && stdenv.lib.any (x: x == stdenv.system) pkg.meta.platforms then pkg else null;
+
+  # Prefer openssl
+  cryptoStr = if shouldUsePkg openssl != null then "openssl"
+    else if shouldUsePkg libgcrypt != null then "libgcrypt"
+      else "none";
+  crypto = {
+    openssl = openssl;
+    libgcrypt = libgcrypt;
+    none = null;
+  }.${cryptoStr};
+
+  optZlib = shouldUsePkg zlib;
+in
+
+assert crypto != null;
+
+with stdenv.lib;
 stdenv.mkDerivation rec {
   name = "libssh2-1.5.0";
 
-  src = fetchurlBoot {
+  src = fetchurl {
     url = "${meta.homepage}/download/${name}.tar.gz";
     sha256 = "1z6hfgak00yz0azx6lk6n688mywhdxx03j6sdf95p3w6ssnnn6c3";
   };
 
-  buildInputs = [ openssl zlib ];
+  buildInputs = [ crypto optZlib ];
+
+  configureFlags = [
+    (mkWith   (cryptoStr == "openssl")   "openssl"        null)
+    (mkWith   (cryptoStr == "libgcrypt") "libgcrypt"      null)
+    (mkWith   false                      "wicng"          null)
+    (mkWith   optZlib                    "libz"           null)
+    (mkEnable false                      "crypt-none"     null)
+    (mkEnable false                      "mac-none"       null)
+    (mkEnable true                       "gex-new"        null)
+    (mkEnable false                      "debug"          null)
+    (mkEnable false                      "examples-build" null)
+  ];
+
+  postInstall = optionalString (optZlib != null) ''
+    sed -i 's,\(-lz\),-L${optZlib}/lib \1,' $out/lib/libssh2.la
+  '' + optionalString (cryptoStr == "openssl") ''
+    sed -i 's,\(-lssl\|-lcrypto\),-L${openssl}/lib \1,' $out/lib/libssh2.la
+  '' + optionalString (cryptoStr == "libgcrypt") ''
+    sed -i 's,\(-lgcrypt\),-L${libgcrypt}/lib \1,' $out/lib/libssh2.la
+  '';
 
   meta = {
     description = "A client-side C library implementing the SSH2 protocol";
     homepage = http://www.libssh2.org;
-    platforms = stdenv.lib.platforms.all;
-    maintainers = [ stdenv.lib.maintainers.urkud ];
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ urkud wkennington ];
   };
 }