1
0
Fork 0
mirror of https://github.com/NixOS/nixpkgs.git synced 2025-06-19 07:59:24 +03:00

curl: Modernize build

This commit is contained in:
William A. Kennington III 2015-05-01 14:38:31 -07:00
parent d74901170a
commit 5e3fe3916a
4 changed files with 121 additions and 85 deletions

View file

@ -92,11 +92,7 @@ rec {
aclSupport = false; aclSupport = false;
})).crossDrv; })).crossDrv;
curlMinimal = (pkgs.curl.override { curl-light = pkgs.curl-light.crossDrv;
zlibSupport = false;
sslSupport = false;
scpSupport = false;
}).crossDrv;
busyboxMinimal = (pkgs.busybox.override { busyboxMinimal = (pkgs.busybox.override {
# TBD: uClibc is broken. # TBD: uClibc is broken.
@ -170,8 +166,8 @@ rec {
cp -d ${gnumake}/bin/* $out/bin cp -d ${gnumake}/bin/* $out/bin
cp -d ${patch}/bin/* $out/bin cp -d ${patch}/bin/* $out/bin
cp ${patchelf}/bin/* $out/bin cp ${patchelf}/bin/* $out/bin
cp ${curlMinimal}/bin/curl $out/bin cp ${curl-light}/bin/curl $out/bin
cp -d ${curlMinimal}/lib/libcurl* $out/lib cp -d ${curl-light}/lib/libcurl* $out/lib
cp -d ${gnugrep.pcre.crossDrv}/lib/libpcre*.so* $out/lib # needed by grep cp -d ${gnugrep.pcre.crossDrv}/lib/libpcre*.so* $out/lib # needed by grep

View file

@ -10,12 +10,6 @@ rec {
aclSupport = false; aclSupport = false;
}); });
curlMinimal = curl.override {
zlibSupport = false;
sslSupport = false;
scpSupport = false;
};
busyboxMinimal = busybox.override { busyboxMinimal = busybox.override {
useUclibc = true; useUclibc = true;
enableStatic = true; enableStatic = true;
@ -83,8 +77,8 @@ rec {
cp -d ${gnumake}/bin/* $out/bin cp -d ${gnumake}/bin/* $out/bin
cp -d ${patch}/bin/* $out/bin cp -d ${patch}/bin/* $out/bin
cp ${patchelf}/bin/* $out/bin cp ${patchelf}/bin/* $out/bin
cp ${curlMinimal}/bin/curl $out/bin cp ${curl-light}/bin/curl $out/bin
cp -d ${curlMinimal}/lib/libcurl* $out/lib cp -d ${curl-light}/lib/libcurl* $out/lib
cp -d ${gnugrep.pcre}/lib/libpcre*.so* $out/lib # needed by grep cp -d ${gnugrep.pcre}/lib/libpcre*.so* $out/lib # needed by grep

View file

@ -1,81 +1,133 @@
{ stdenv, fetchurl { stdenv, fetchurl, pkgconfig
, idnSupport ? false, libidn ? null
, ldapSupport ? false, openldap ? null # Optional Dependencies
, zlibSupport ? false, zlib ? null , zlib ? null, openssl ? null, libssh2 ? null, libnghttp2 ? null, c-ares ? null
, sslSupport ? false, openssl ? null , gss ? null, rtmpdump ? null, openldap ? null, libidn ? null
, scpSupport ? false, libssh2 ? null
, gssSupport ? false, gss ? null # Extra arguments
, c-aresSupport ? false, c-ares ? null , suffix ? ""
}: }:
assert idnSupport -> libidn != null; let
assert ldapSupport -> openldap != null; mkFlag = trueStr: falseStr: cond: name: val:
assert zlibSupport -> zlib != null; if cond == null then null else
assert sslSupport -> openssl != null; "--${if cond != false then trueStr else falseStr}${name}${if val != null && cond != false then "=${val}" else ""}";
assert scpSupport -> libssh2 != null; mkEnable = mkFlag "enable-" "disable-";
assert c-aresSupport -> c-ares != null; 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;
isLight = suffix == "light";
isFull = suffix == "full";
nameSuffix = stdenv.lib.optionalString (suffix != "") "-${suffix}";
# Normal Depedencies
optZlib = if isLight then null else shouldUsePkg zlib;
optOpenssl = if isLight then null else shouldUsePkg openssl;
optLibssh2 = if isLight then null else shouldUsePkg libssh2;
optLibnghttp2 = if isLight then null else shouldUsePkg libnghttp2;
optC-ares = if isLight then null else shouldUsePkg c-ares;
# Full dependencies
optGss = if !isFull then null else shouldUsePkg gss;
optRtmpdump = if !isFull then null else shouldUsePkg rtmpdump;
optOpenldap = if !isFull then null else shouldUsePkg openldap;
optLibidn = if !isFull then null else shouldUsePkg libidn;
in
with stdenv.lib;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "curl-7.42.1"; name = "curl${nameSuffix}-${version}";
version = "7.42.1";
src = fetchurl { src = fetchurl {
url = "http://curl.haxx.se/download/${name}.tar.bz2"; url = "http://curl.haxx.se/download/curl-${version}.tar.bz2";
sha256 = "11y8racpj6m4j9w7wa9sifmqvdgf22nk901sfkbxzhhy75rmk472"; sha256 = "11y8racpj6m4j9w7wa9sifmqvdgf22nk901sfkbxzhhy75rmk472";
}; };
# Zlib and OpenSSL must be propagated because `libcurl.la' contains # Use pkgconfig only when necessary
# "-lz -lssl", which aren't necessary direct build inputs of nativeBuildInputs = optional (!isLight) pkgconfig;
# applications that use Curl. buildInputs = [
propagatedBuildInputs = with stdenv.lib; optZlib optOpenssl optLibssh2 optLibnghttp2 optC-ares
optional idnSupport libidn ++ optGss optRtmpdump optOpenldap optLibidn
optional ldapSupport openldap ++ ];
optional zlibSupport zlib ++
optional gssSupport gss ++
optional c-aresSupport c-ares ++
optional sslSupport openssl ++
optional scpSupport libssh2;
# for the second line see http://curl.haxx.se/mail/tracker-2014-03/0087.html # Make curl honor CURL_CA_BUNDLE & SSL_CERT_FILE
preConfigure = ''
sed -e 's|/usr/bin|/no-such-path|g' -i.bak configure
rm src/tool_hugehelp.c
'';
# make curl honor CURL_CA_BUNDLE & SSL_CERT_FILE
postConfigure = '' postConfigure = ''
echo '#define CURL_CA_BUNDLE (getenv("CURL_CA_BUNDLE") ? getenv("CURL_CA_BUNDLE") : getenv("SSL_CERT_FILE"))' >> lib/curl_config.h echo '#define CURL_CA_BUNDLE (getenv("CURL_CA_BUNDLE") ? getenv("CURL_CA_BUNDLE") : getenv("SSL_CERT_FILE"))' >> lib/curl_config.h
''; '';
configureFlags = [ configureFlags = [
( if sslSupport then "--with-ssl=${openssl}" else "--without-ssl" ) (mkEnable true "http" null)
( if scpSupport then "--with-libssh2=${libssh2}" else "--without-libssh2" ) (mkEnable true "ftp" null)
( if ldapSupport then "--enable-ldap" else "--disable-ldap" ) (mkEnable true "file" null)
( if ldapSupport then "--enable-ldaps" else "--disable-ldaps" ) (mkEnable (optOpenldap != null) "ldap" null)
( if idnSupport then "--with-libidn=${libidn}" else "--without-libidn" ) (mkEnable (optOpenldap != null) "ldaps" null)
] (mkEnable true "rtsp" null)
++ stdenv.lib.optional c-aresSupport "--enable-ares=${c-ares}" (mkEnable true "proxy" null)
++ stdenv.lib.optional gssSupport "--with-gssapi=${gss}"; (mkEnable true "dict" null)
(mkEnable true "telnet" null)
(mkEnable true "tftp" null)
(mkEnable true "pop3" null)
(mkEnable true "imap" null)
(mkEnable true "smb" null)
(mkEnable true "smtp" null)
(mkEnable true "gopher" null)
(mkEnable (!isLight) "manual" null)
(mkEnable true "libcurl_option" null)
(mkEnable false "libgcc" null) # TODO: Enable on gcc
(mkWith (optZlib != null) "zlib" null)
(mkEnable true "ipv4" null)
(mkWith (optGss != null) "gssapi" null)
(mkWith false "winssl" null)
(mkWith false "darwinssl" null)
(mkWith (optOpenssl != null) "ssl" null)
(mkWith false "gnutls" null)
(mkWith false "polarssl" null)
(mkWith false "cyassl" null)
(mkWith false "nss" null)
(mkWith false "axtls" null)
(mkWith false "libmetalink" null)
(mkWith (optLibssh2 != null) "libssh2" null)
(mkWith (optRtmpdump!= null) "librtmp" null)
(mkEnable false "versioned-symbols" null)
(mkWith false "winidn" null)
(mkWith (optLibidn != null) "libidn" null)
(mkWith (optLibnghttp2 != null) "nghttp2" null)
(mkEnable false "sspi" null)
(mkEnable true "crypto-auth" null)
(mkEnable (optOpenssl != null) "tls-srp" null)
(mkEnable true "unix-sockets" null)
(mkEnable true "cookies" null)
(mkEnable (optC-ares != null) "ares" null)
];
CXX = "g++"; # Fix all broken refernces to dependencies in .la and .pc files
CXXCPP = "g++ -E"; postInstall = optionalString (optZlib != null) ''
sed -i 's,\(-lz\),-L${optZlib}/lib \1,' $out/lib/{libcurl.la,pkgconfig/libcurl.pc}
'' + optionalString (optOpenssl != null) ''
sed -i 's,\(-lssl\|-lcrypto\),-L${optOpenssl}/lib \1,' $out/lib/pkgconfig/libcurl.pc
'' + optionalString (optLibssh2 != null) ''
sed -i 's,\(-lssh2\),-L${optLibssh2}/lib \1,' $out/lib/pkgconfig/libcurl.pc
'' + optionalString (optLibnghttp2 != null) ''
sed -i 's,\(-lnghttp2\),-L${optLibnghttp2}/lib \1,' $out/lib/pkgconfig/libcurl.pc
'' + optionalString (optC-ares != null) ''
sed -i 's,\(-lcares\),-L${optC-ares}/lib \1,' $out/lib/{libcurl.la,pkgconfig/libcurl.pc}
'' + optionalString (optGss != null) ''
sed -i 's,\(-lgss\),-L${optGss}/lib \1,' $out/lib/{libcurl.la,pkgconfig/libcurl.pc}
'' + optionalString (optRtmpdump != null) ''
sed -i 's,\(-lrtmp\),-L${optRtmpdump}/lib \1,' $out/lib/pkgconfig/libcurl.pc
'' + optionalString (optOpenldap != null) ''
sed -i 's,\(-lgss\),-L${optOpenldap}/lib \1,' $out/lib/{libcurl.la,pkgconfig/libcurl.pc}
'' + optionalString (optLibidn != null) ''
sed -i 's,\(-lidn\),-L${optLibidn}/lib \1,' $out/lib/pkgconfig/libcurl.pc
'';
crossAttrs = { meta = {
# 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" )
"--with-random /dev/urandom"
];
};
passthru = {
inherit sslSupport openssl;
};
meta = with stdenv.lib; {
description = "A command line tool for transferring files with URL syntax"; description = "A command line tool for transferring files with URL syntax";
homepage = http://curl.haxx.se/; homepage = http://curl.haxx.se/;
maintainers = with maintainers; [ lovek323 ]; license = licenses.mit;
platforms = platforms.all; platforms = platforms.all;
maintainers = with maintainers; [ lovek323 wkennington ];
}; };
} }

View file

@ -1097,18 +1097,12 @@ let
cudatoolkit = cudatoolkit5; cudatoolkit = cudatoolkit5;
curlFull = curl.override { curl-light = curl.override { suffix = "light"; };
idnSupport = true; curl = curl-full.override {
ldapSupport = true;
gssSupport = true;
};
curl = callPackage ../tools/networking/curl rec {
fetchurl = fetchurlBoot; fetchurl = fetchurlBoot;
zlibSupport = true; suffix = "";
sslSupport = zlibSupport;
scpSupport = zlibSupport && !stdenv.isSunOS && !stdenv.isCygwin;
}; };
curl-full = callPackage ../tools/networking/curl { suffix = "full"; };
curl3 = callPackage ../tools/networking/curl/7.15.nix rec { curl3 = callPackage ../tools/networking/curl/7.15.nix rec {
zlibSupport = true; zlibSupport = true;