From e9ee5f99615d0980538e60b1079c8438f8d8135c Mon Sep 17 00:00:00 2001 From: "William A. Kennington III" Date: Fri, 1 May 2015 19:13:14 -0700 Subject: [PATCH] libssh2: Modernize Build --- .../development/libraries/libssh2/default.nix | 64 +++++++++++++++++-- pkgs/top-level/all-packages.nix | 4 +- 2 files changed, 62 insertions(+), 6 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 ]; }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 4438916942f..e3dd92a1e08 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6903,7 +6903,9 @@ let libssh = callPackage ../development/libraries/libssh { }; - libssh2 = callPackage ../development/libraries/libssh2 { }; + libssh2 = callPackage ../development/libraries/libssh2 { + fetchurl = fetchurlBoot; + }; libstartup_notification = callPackage ../development/libraries/startup-notification { };