From 3e0253618474df1e5a334d4f84ff49d33c2d13c1 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 21 Feb 2005 20:42:07 +0000 Subject: * Move the stdenv-linux bootstrap from stdenvs.nix to the nix-linux-static directory. * Get rid of the old nix-linux. * Commented the bootstrap process. svn path=/nixpkgs/trunk/; revision=2263 --- pkgs/system/stdenvs.nix | 98 +------------------------------------------------ 1 file changed, 2 insertions(+), 96 deletions(-) (limited to 'pkgs/system/stdenvs.nix') diff --git a/pkgs/system/stdenvs.nix b/pkgs/system/stdenvs.nix index efbbcb0faad..9127c6793c3 100644 --- a/pkgs/system/stdenvs.nix +++ b/pkgs/system/stdenvs.nix @@ -49,102 +49,8 @@ }; - # The Linux build environment is a fully bootstrapped Nix - # environment, that is, it should contain no external references. - - # 0) ... - stdenvLinuxBoot0 = (import ../stdenv/nix-linux-static).stdenvBootFun { - # Use the statically linked, downloaded glibc/gcc/binutils. - inherit (import ../stdenv/nix-linux-static) glibc gcc binutils; - staticGlibc = true; - }; - - stdenvLinuxBoot0Pkgs = allPackages { - stdenv = stdenvLinuxBoot0; - bootCurl = (import ../stdenv/nix-linux-static).curl; - noSysDirs = true; - }; - - # 1) Build glibc in the Nix build environment. The result is - # pure. - stdenvLinuxGlibc = stdenvLinuxBoot0Pkgs.glibc; - - # 2) Construct a stdenv consisting of the Nix build environment, but - # with a gcc-wrapper that causes linking against the glibc from - # step 1. However, since the gcc wrapper here *does* look in - # native system directories (e.g., `/usr/lib'), it doesn't - # prevent impurity in the things it builds (e.g., through - # `-lncurses'). - stdenvLinuxBoot1 = (import ../stdenv/nix-linux-static).stdenvBootFun { - # Use the statically linked gcc/binutils, but the glibc we just - # built. - glibc = stdenvLinuxGlibc; - staticGlibc = false; - inherit (import ../stdenv/nix-linux-static) gcc binutils; - }; - - # 3) Now we can build packages that will link against the Nix - # glibc. We are on thin ice here: the compiler used to build - # these packages doesn't prevent impurity, so e.g. bash ends up - # linking against `/lib/libncurses.so', but the glibc from step 1 - # *doesn't* search in `/lib' etc. So these programs won't work. - stdenvLinuxBoot1Pkgs = allPackages { - stdenv = stdenvLinuxBoot1; - bootCurl = (import ../stdenv/nix-linux-static).curl; - }; - - # 4) Therefore we build a new standard environment which is the same - # as the one in step 2, but with a gcc and binutils from step 3 - # merged in. Since these are pure (they don't search native - # system directories), things built by this stdenv should be pure. - stdenvLinuxBoot2 = (import ../stdenv/nix-linux-static).stdenvBootFun { - # Use the glibc/gcc/binutils we just built (but all other tools are still downloaded). - glibc = stdenvLinuxGlibc; - staticGlibc = false; - inherit (stdenvLinuxBoot1Pkgs) gcc binutils; - }; - - # 5) So these packages should be pure. - stdenvLinuxBoot2Pkgs = allPackages { - stdenv = stdenvLinuxBoot2; - bootCurl = (import ../stdenv/nix-linux-static).curl; - }; - - # 6) Finally we can construct the Nix build environment from the - # packages from step 5. - stdenvLinux = (import ../stdenv/nix-linux) { - stdenv = stdenvLinuxBoot2; - pkgs = stdenvLinuxBoot2Pkgs // { - inherit (stdenvLinuxBoot1Pkgs) gcc binutils; - }; - glibc = stdenvLinuxGlibc; - inherit genericStdenv gccWrapper; - }; - - # 7) And we can build all packages against that, but we don't - # rebuild stuff from step 6. - stdenvLinuxPkgs = - allPackages { - stdenv = stdenvLinux; - bootCurl = stdenvLinuxBoot2Pkgs.curl; - } // - {inherit (stdenvLinuxBoot2Pkgs) - gzip bzip2 bash binutils coreutils diffutils findutils gawk gcc - gnumake gnused gnutar gnugrep curl; - } // - {glibc = stdenvLinuxGlibc;}; - - # In summary, we build gcc (and binutils) three times: - # - in stdenvLinuxBoot1 (from stdenvNativePkgs); impure - # - in stdenvLinuxBoot2 (from stdenvLinuxBoot1Pkgs); pure - # - in stdenvLinux (from stdenvLinuxBoot2Pkgs); pure - # The last one may be redundant, but its good for validation (since - # the second one may use impure inputs). To reduce build time, we - # could reduce the number of bootstrap stages inside each gcc build. - # Right now there are 3 stages, so gcc is built 9 times! - - # On the other hand, a validating build of glibc is a good idea (it - # probably won't work right now due to --rpath madness). + # Linux standard environment. + inherit (import ../stdenv/nix-linux-static) stdenvLinux stdenvLinuxPkgs; # Darwin (Mac OS X) standard environment. Very simple for now -- cgit 1.4.1