* curl: build with OpenSSL (https) support by default.

* Some fetchurl-related refactoring.  The `realCurl' attribute is
  gone, `curl' is the real thing.  To prevent an infinite recursion in
  `fetchurl' (because it depends on curl and building curl needs
  fetchurl), curl and its dependencies (openssl, zlib, perl) use
  `fetchurlBoot', which is the fetchurl used by the previous bootstrap
  phase (e.g. the statically linked version of curl for
  stdenv-linux).  So as a result you can use https:// urls almost
  everywhere.

  There's also some hackery to prevent a different curl from being
  built in every stdenv-linux bootstrap phase (namely the
  stdenv.fetchurl attribute which allows fetchurl to be overriden
  everywhere).

svn path=/nixpkgs/trunk/; revision=11905
This commit is contained in:
Eelco Dolstra 2008-05-27 07:49:55 +00:00
parent 2ead4b20b5
commit e21b6b6ee5
10 changed files with 58 additions and 29 deletions

View File

@ -17,7 +17,8 @@ genericStdenv {
shell = "/bin/bash"; shell = "/bin/bash";
extraAttrs = { fetchurlBoot = import ../../build-support/fetchurl {
inherit stdenv;
# Curl should be in /usr/bin or so. # Curl should be in /usr/bin or so.
curl = null; curl = null;
}; };

View File

@ -17,7 +17,8 @@ genericStdenv {
shell = "/bin/bash"; shell = "/bin/bash";
extraAttrs = { fetchurlBoot = import ../../build-support/fetchurl {
inherit stdenv;
# Curl should be in /usr/bin or so. # Curl should be in /usr/bin or so.
curl = null; curl = null;
}; };

View File

@ -1,6 +1,7 @@
{ stdenv, name, preHook ? null, postHook ? null, initialPath, gcc, shell { stdenv, name, preHook ? null, postHook ? null, initialPath, gcc, shell
, param1 ? "", param2 ? "", param3 ? "", param4 ? "", param5 ? "" , param1 ? "", param2 ? "", param3 ? "", param4 ? "", param5 ? ""
, extraAttrs ? {} , extraAttrs ? {}
, fetchurlBoot
}: }:
let { let {
@ -71,6 +72,8 @@ let {
# packages don't have to do that themselves. # packages don't have to do that themselves.
lib = import ../../lib; lib = import ../../lib;
inherit fetchurlBoot;
} }
# Propagate any extra attributes. For instance, we use this to # Propagate any extra attributes. For instance, we use this to

View File

@ -99,8 +99,13 @@ rec {
# the bootstrap. # the bootstrap.
stdenvBootFun = stdenvBootFun =
{gcc, staticGlibc, extraAttrs ? {}}: {gcc, staticGlibc, extraAttrs ? {}}:
import ../generic { let
fetchurlBoot = import ../../build-support/fetchurl {
stdenv = stdenvInitial;
inherit curl;
};
in import ../generic {
name = "stdenv-linux-boot"; name = "stdenv-linux-boot";
param1 = if staticGlibc then "static" else "dynamic"; param1 = if staticGlibc then "static" else "dynamic";
preHook = ./scripts/prehook.sh; preHook = ./scripts/prehook.sh;
@ -109,7 +114,9 @@ rec {
initialPath = [ initialPath = [
staticTools staticTools
]; ];
inherit gcc extraAttrs; inherit fetchurlBoot;
extraAttrs = extraAttrs // {fetchurl = fetchurlBoot;};
inherit gcc;
}; };
@ -120,7 +127,6 @@ rec {
# Use the statically linked, downloaded glibc/gcc/binutils. # Use the statically linked, downloaded glibc/gcc/binutils.
gcc = wrapGCC {libc = staticGlibc; binutils = staticBinutils;}; gcc = wrapGCC {libc = staticGlibc; binutils = staticBinutils;};
staticGlibc = true; staticGlibc = true;
extraAttrs = {inherit curl;};
}; };
@ -143,7 +149,7 @@ rec {
stdenvLinuxBoot2 = removeAttrs (stdenvBootFun { stdenvLinuxBoot2 = removeAttrs (stdenvBootFun {
staticGlibc = false; staticGlibc = false;
gcc = wrapGCC {binutils = staticBinutils; libc = stdenvLinuxGlibc;}; gcc = wrapGCC {binutils = staticBinutils; libc = stdenvLinuxGlibc;};
extraAttrs = {inherit curl; glibc = stdenvLinuxGlibc;}; extraAttrs = {glibc = stdenvLinuxGlibc;};
}) ["gcc" "binutils"]; }) ["gcc" "binutils"];
@ -164,7 +170,6 @@ rec {
libc = stdenvLinuxGlibc; libc = stdenvLinuxGlibc;
gcc = stdenvLinuxBoot2Pkgs.gcc.gcc; gcc = stdenvLinuxBoot2Pkgs.gcc.gcc;
}; };
extraAttrs = {inherit curl;};
}; };
@ -197,8 +202,9 @@ rec {
shell = stdenvLinuxBoot3Pkgs.bash + "/bin/sh"; shell = stdenvLinuxBoot3Pkgs.bash + "/bin/sh";
fetchurlBoot = stdenvLinuxBoot3.fetchurlBoot;
extraAttrs = { extraAttrs = {
curl = stdenvLinuxBoot3Pkgs.realCurl;
inherit (stdenvLinuxBoot2Pkgs) binutils /* gcc */ glibc; inherit (stdenvLinuxBoot2Pkgs) binutils /* gcc */ glibc;
inherit (stdenvLinuxBoot3Pkgs) inherit (stdenvLinuxBoot3Pkgs)
gzip bzip2 bash coreutils diffutils findutils gawk gzip bzip2 bash coreutils diffutils findutils gawk

View File

@ -28,7 +28,7 @@ let
inherit (pkgsDiet) inherit (pkgsDiet)
coreutils diffutils gnugrep coreutils diffutils gnugrep
gzip bzip2 gnumake bash patch binutils; gzip bzip2 gnumake bash patch binutils curl;
findutils = pkgsDiet.findutils4227; # 4.2.28 is broken findutils = pkgsDiet.findutils4227; # 4.2.28 is broken
@ -58,8 +58,6 @@ let
profiledCompiler = true; profiledCompiler = true;
}; };
curl = pkgsDiet.realCurl;
glibc = pkgs.glibc; glibc = pkgs.glibc;
# The result should not contain any references (store paths) so # The result should not contain any references (store paths) so

View File

@ -22,7 +22,8 @@ import ../generic {
shell = pkgs.bash + "/bin/sh"; shell = pkgs.bash + "/bin/sh";
extraAttrs = { fetchurlBoot = import ../../build-support/fetchurl {
curl = pkgs.realCurl; inherit stdenv;
curl = pkgs.curl;
}; };
} }

View File

@ -17,7 +17,8 @@ genericStdenv {
shell = "/bin/sh"; shell = "/bin/sh";
extraAttrs = { fetchurlBoot = import ../../build-support/fetchurl {
inherit stdenv;
# Curl should be in /usr/bin or so. # Curl should be in /usr/bin or so.
curl = null; curl = null;
}; };

View File

@ -18,7 +18,14 @@ stdenv.mkDerivation {
CFLAGS = if stdenv ? isDietLibC then "-DHAVE_INET_NTOA_R_2_ARGS=1" else ""; CFLAGS = if stdenv ? isDietLibC then "-DHAVE_INET_NTOA_R_2_ARGS=1" else "";
CXX = "g++"; CXX = "g++";
CXXCPP = "g++ -E"; CXXCPP = "g++ -E";
inherit sslSupport openssl;
passthru = {
inherit sslSupport openssl;
};
preConfigure = ''
substituteInPlace configure --replace /usr/bin /no-such-path
'';
patches = [ patches = [
/* Fixes broken retry support when a timeout is used. The /* Fixes broken retry support when a timeout is used. The

View File

@ -357,13 +357,22 @@ let pkgs = rec {
inherit stdenv mercurial nix; inherit stdenv mercurial nix;
}; };
# Allow the stdenv to determine fetchurl, to cater for strange # `fetchurl' downloads a file from the network. The `useFromStdenv'
# requirements. # is there to allow stdenv to determine fetchurl. Used during the
# stdenv-linux bootstrap phases to prevent lots of different curls
# from being built.
fetchurl = useFromStdenv "fetchurl" fetchurl = useFromStdenv "fetchurl"
(import ../build-support/fetchurl { (import ../build-support/fetchurl {
inherit stdenv curl; inherit stdenv curl;
}); });
# fetchurlBoot is used for curl and its dependencies in order to
# prevent a cyclic dependency (curl depends on curl.tar.bz2,
# curl.tar.bz2 depends on fetchurl, fetchurl depends on curl). It
# uses the curl from the previous bootstrap phase (e.g. a statically
# linked curl in the case of stdenv-linux).
fetchurlBoot = stdenv.fetchurlBoot;
makeInitrd = {contents}: import ../build-support/kernel/make-initrd.nix { makeInitrd = {contents}: import ../build-support/kernel/make-initrd.nix {
inherit stdenv perl cpio contents; inherit stdenv perl cpio contents;
}; };
@ -516,7 +525,12 @@ let pkgs = rec {
inherit fetchurl stdenv; inherit fetchurl stdenv;
}; };
curl = if stdenv ? curl then (stdenv.curl) else (assert false; null); curl = import ../tools/networking/curl {
fetchurl = fetchurlBoot;
inherit stdenv zlib openssl;
zlibSupport = !stdenv ? isDietLibC;
sslSupport = !stdenv ? isDietLibC;
};
curlftpfs = import ../tools/networking/curlftpfs { curlftpfs = import ../tools/networking/curlftpfs {
inherit fetchurl stdenv fuse curl pkgconfig zlib; inherit fetchurl stdenv fuse curl pkgconfig zlib;
@ -927,12 +941,6 @@ let pkgs = rec {
inherit (xlibs) libX11 libXext; inherit (xlibs) libX11 libXext;
}; };
realCurlFun = lib.sumArgs (import ../tools/networking/curl) {
inherit fetchurl stdenv zlib;
zlibSupport = !stdenv ? isDietLibC;
};
realCurl = realCurlFun null;
relfsFun = lib.sumArgs (selectVersion ../tools/misc/relfs "cvs.2008.03.05") { relfsFun = lib.sumArgs (selectVersion ../tools/misc/relfs "cvs.2008.03.05") {
inherit fetchcvs stdenv ocaml postgresql fuse pcre inherit fetchcvs stdenv ocaml postgresql fuse pcre
builderDefs e2fsprogs pkgconfig; builderDefs e2fsprogs pkgconfig;
@ -1856,7 +1864,8 @@ let pkgs = rec {
Qi = QiFun null; Qi = QiFun null;
realPerl = import ../development/interpreters/perl-5.10 { realPerl = import ../development/interpreters/perl-5.10 {
inherit fetchurl stdenv; fetchurl = fetchurlBoot;
inherit stdenv;
}; };
ruby = import ../development/interpreters/ruby { ruby = import ../development/interpreters/ruby {
@ -3129,7 +3138,8 @@ let pkgs = rec {
}; };
openssl = import ../development/libraries/openssl { openssl = import ../development/libraries/openssl {
inherit fetchurl stdenv perl; fetchurl = fetchurlBoot;
inherit stdenv perl;
}; };
ortp = selectVersion ../development/libraries/ortp "0.13.1" { ortp = selectVersion ../development/libraries/ortp "0.13.1" {
@ -3328,7 +3338,8 @@ let pkgs = rec {
}; };
zlib = import ../development/libraries/zlib { zlib = import ../development/libraries/zlib {
inherit fetchurl stdenv; fetchurl = fetchurlBoot;
inherit stdenv;
}; };
zlibStatic = lowPrio (appendToName "static" (import ../development/libraries/zlib { zlibStatic = lowPrio (appendToName "static" (import ../development/libraries/zlib {

View File

@ -247,6 +247,7 @@ let
aterm aterm
autoconf autoconf
#automake19x #automake19x
curl
docbook5 docbook5
docbook_xml_dtd_42 docbook_xml_dtd_42
docbook_xml_dtd_43 docbook_xml_dtd_43
@ -256,7 +257,6 @@ let
libxml2 libxml2
libxslt libxslt
nxml nxml
realCurl
subversion subversion
unzip unzip
;}; ;};