{ stdenv, lib, fetchurl, pkgconfig, perl , http2Support ? true, nghttp2 , idnSupport ? false, libidn ? null , ldapSupport ? false, openldap ? null , zlibSupport ? false, zlib ? null , sslSupport ? false, openssl ? null , gnutlsSupport ? false, gnutls ? null , scpSupport ? false, libssh2 ? null , gssSupport ? false, kerberos ? null , c-aresSupport ? false, c-ares ? null , brotliSupport ? false, brotli ? null }: assert http2Support -> nghttp2 != null; assert idnSupport -> libidn != null; assert ldapSupport -> openldap != null; assert zlibSupport -> zlib != null; assert sslSupport -> openssl != null; assert !(gnutlsSupport && sslSupport); assert gnutlsSupport -> gnutls != null; assert scpSupport -> libssh2 != null; assert c-aresSupport -> c-ares != null; assert brotliSupport -> brotli != null; assert gssSupport -> kerberos != null; stdenv.mkDerivation rec { name = "curl-7.59.0"; src = fetchurl { urls = [ "https://github.com/curl/curl/releases/download/${lib.replaceStrings ["."] ["_"] name}/${name}.tar.bz2" "https://curl.haxx.se/download/${name}.tar.bz2" ]; sha256 = "185mazhi4bc5mc6rvhrmnc67j8l3sg7f0w2hp5gmi5ccdbyhz4mm"; }; outputs = [ "bin" "dev" "out" "man" "devdoc" ]; separateDebugInfo = stdenv.isLinux; enableParallelBuilding = true; nativeBuildInputs = [ pkgconfig perl ]; # Zlib and OpenSSL must be propagated because `libcurl.la' contains # "-lz -lssl", which aren't necessary direct build inputs of # applications that use Curl. propagatedBuildInputs = with stdenv.lib; optional http2Support nghttp2 ++ optional idnSupport libidn ++ optional ldapSupport openldap ++ optional zlibSupport zlib ++ optional gssSupport kerberos ++ optional c-aresSupport c-ares ++ optional sslSupport openssl ++ optional gnutlsSupport gnutls ++ optional scpSupport libssh2 ++ optional brotliSupport brotli; # for the second line see https://curl.haxx.se/mail/tracker-2014-03/0087.html preConfigure = '' sed -e 's|/usr/bin|/no-such-path|g' -i.bak configure rm src/tool_hugehelp.c ''; configureFlags = [ "--with-ca-fallback" "--disable-manual" ( if sslSupport then "--with-ssl=${openssl.dev}" else "--without-ssl" ) ( if gnutlsSupport then "--with-gnutls=${gnutls.dev}" else "--without-gnutls" ) ( if scpSupport then "--with-libssh2=${libssh2.dev}" else "--without-libssh2" ) ( if ldapSupport then "--enable-ldap" else "--disable-ldap" ) ( if ldapSupport then "--enable-ldaps" else "--disable-ldaps" ) ( if idnSupport then "--with-libidn=${libidn.dev}" else "--without-libidn" ) ( if brotliSupport then "--with-brotli" else "--without-brotli" ) ] ++ stdenv.lib.optional c-aresSupport "--enable-ares=${c-ares}" ++ stdenv.lib.optional gssSupport "--with-gssapi=${kerberos.dev}"; CXX = "c++"; CXXCPP = "c++ -E"; postInstall = '' moveToOutput bin/curl-config "$dev" sed '/^dependency_libs/s|${libssh2.dev}|${libssh2.out}|' -i "$out"/lib/*.la '' + stdenv.lib.optionalString gnutlsSupport '' ln $out/lib/libcurl.so $out/lib/libcurl-gnutls.so ln $out/lib/libcurl.so $out/lib/libcurl-gnutls.so.4 ln $out/lib/libcurl.so $out/lib/libcurl-gnutls.so.4.4.0 ''; crossAttrs = { # We should refer to the cross built openssl # For the 'urandom', maybe it should be a cross-system option configureFlags = [ ( if sslSupport then "--with-ssl=${openssl.crossDrv}" else "--without-ssl" ) ( if gnutlsSupport then "--with-gnutls=${gnutls.crossDrv}" else "--without-gnutls" ) "--with-random /dev/urandom" ]; }; passthru = { inherit sslSupport openssl; }; meta = with stdenv.lib; { description = "A command line tool for transferring files with URL syntax"; homepage = https://curl.haxx.se/; maintainers = with maintainers; [ lovek323 ]; platforms = platforms.all; }; }