diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2005-02-21 16:03:34 +0000 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2005-02-21 16:03:34 +0000 |
commit | e6744d0f893e0641b22996382cc6dcb81f8acc3d (patch) | |
tree | ba656c68d6348d24c4814a6da79bb204e06ff2d7 /pkgs/system | |
parent | cdaecff49f9b06d74de87e217659c13b2b2bba98 (diff) | |
parent | 8125cd8915a1601280327503ce3ac14e0a356771 (diff) |
* Merge diff between trunk/pkgs@1646 and branches/nixos-pkgs@2256;
this contains mostly Armijn's pure stdenv-linux. * After unpacking the statically linked GCC, patch all store paths to /nix/store/ffffffffffffffffffffffffffffffff. Ugly hack to prevent undeclared references but it works. * We don't need Glib's dynamic libraries in the first bootstrap stage; delete them. Actually the downloaded Glibc binary is only needed for building Glibc, since GCC needs a C compiler to build some programs in `configure'. So static linking is fine for that. Maybe it would be better to patch `configure' so that we don't need a pre-built Glibc at all. * Set the svn:executable property on `cp' and `patchelf'. * In Glibc, revert to LinuxThreads. Maybe NPTL will work, but TLS support is a problem. * Delete most Glibc patches; they're no longer needed since the branch updated it to 20050110. * Some cleanups. svn path=/nixpkgs/trunk/; revision=2258
Diffstat (limited to 'pkgs/system')
-rw-r--r-- | pkgs/system/all-packages-generic.nix | 4 | ||||
-rw-r--r-- | pkgs/system/stdenvs.nix | 75 |
2 files changed, 46 insertions, 33 deletions
diff --git a/pkgs/system/all-packages-generic.nix b/pkgs/system/all-packages-generic.nix index 7e92044d662d8..1ccbe549a558f 100644 --- a/pkgs/system/all-packages-generic.nix +++ b/pkgs/system/all-packages-generic.nix @@ -869,6 +869,10 @@ rec { inherit fetchurl stdenv; }; + modutils = (import ../os-specific/linux/modutils) { + inherit fetchurl stdenv bison flex; + }; + shadowutils = (import ../os-specific/linux/shadow) { inherit fetchurl stdenv; }; diff --git a/pkgs/system/stdenvs.nix b/pkgs/system/stdenvs.nix index 7399767f7070b..efbbcb0faada2 100644 --- a/pkgs/system/stdenvs.nix +++ b/pkgs/system/stdenvs.nix @@ -28,41 +28,46 @@ inherit genericStdenv gccWrapper; }; - stdenvNativePkgsFun = bootstrap: allPackages { + stdenvNativePkgs = allPackages { stdenv = stdenvNative; bootCurl = null; noSysDirs = false; - gccWithCC = !bootstrap; - gccWithProfiling = !bootstrap; }; - stdenvNativePkgs = stdenvNativePkgsFun false; - # The Nix build environment. - stdenvNixFun = bootstrap: (import ../stdenv/nix) { + stdenvNix = (import ../stdenv/nix) { stdenv = stdenvNative; - pkgs = stdenvNativePkgsFun bootstrap; + pkgs = stdenvNativePkgs; inherit genericStdenv gccWrapper; }; - stdenvNix = stdenvNixFun false; - - stdenvNixPkgsFun = bootstrap: allPackages { - stdenv = stdenvNixFun bootstrap; - bootCurl = (stdenvNativePkgsFun bootstrap).curl; + stdenvNixPkgs = allPackages { + stdenv = stdenvNix; + bootCurl = stdenvNativePkgs.curl; noSysDirs = false; }; - stdenvNixPkgs = stdenvNixPkgs false; - # 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 = (stdenvNixPkgsFun true).glibc; + 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 @@ -70,11 +75,12 @@ # 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) { - stdenv = stdenvNative; - pkgs = stdenvNativePkgsFun true; + stdenvLinuxBoot1 = (import ../stdenv/nix-linux-static).stdenvBootFun { + # Use the statically linked gcc/binutils, but the glibc we just + # built. glibc = stdenvLinuxGlibc; - inherit genericStdenv gccWrapper; + staticGlibc = false; + inherit (import ../stdenv/nix-linux-static) gcc binutils; }; # 3) Now we can build packages that will link against the Nix @@ -84,36 +90,33 @@ # *doesn't* search in `/lib' etc. So these programs won't work. stdenvLinuxBoot1Pkgs = allPackages { stdenv = stdenvLinuxBoot1; - bootCurl = (stdenvNativePkgsFun true).curl; - noSysDirs = true; - gccWithCC = false; - gccWithProfiling = false; + 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) { - stdenv = stdenvLinuxBoot1; - pkgs = (stdenvNativePkgsFun true) // { - inherit (stdenvLinuxBoot1Pkgs) gcc binutils; - }; + stdenvLinuxBoot2 = (import ../stdenv/nix-linux-static).stdenvBootFun { + # Use the glibc/gcc/binutils we just built (but all other tools are still downloaded). glibc = stdenvLinuxGlibc; - inherit genericStdenv gccWrapper; + staticGlibc = false; + inherit (stdenvLinuxBoot1Pkgs) gcc binutils; }; # 5) So these packages should be pure. stdenvLinuxBoot2Pkgs = allPackages { stdenv = stdenvLinuxBoot2; - bootCurl = (stdenvNativePkgsFun true).curl; + 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; + pkgs = stdenvLinuxBoot2Pkgs // { + inherit (stdenvLinuxBoot1Pkgs) gcc binutils; + }; glibc = stdenvLinuxGlibc; inherit genericStdenv gccWrapper; }; @@ -148,7 +151,7 @@ # (essentially it's just the native environment). stdenvDarwin = (import ../stdenv/darwin) { stdenv = stdenvInitial; - genericStdenv = import ../stdenv/generic; + genericStdenv = import ../stdenv/generic-branch; inherit gccWrapper; }; @@ -157,5 +160,11 @@ bootCurl = null; noSysDirs = false; }; - + + + stdenvTestPkgs = allPackages { + stdenv = (import ../stdenv/nix-linux-static).stdenvInitial; + bootCurl = (import ../stdenv/nix-linux-static).curl; + noSysDirs = true; + }; } |