summary refs log tree commit diff
path: root/pkgs/system/stdenvs.nix
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2005-02-21 16:03:34 +0000
committerEelco Dolstra <eelco.dolstra@logicblox.com>2005-02-21 16:03:34 +0000
commite6744d0f893e0641b22996382cc6dcb81f8acc3d (patch)
treeba656c68d6348d24c4814a6da79bb204e06ff2d7 /pkgs/system/stdenvs.nix
parentcdaecff49f9b06d74de87e217659c13b2b2bba98 (diff)
parent8125cd8915a1601280327503ce3ac14e0a356771 (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/stdenvs.nix')
-rw-r--r--pkgs/system/stdenvs.nix75
1 files changed, 42 insertions, 33 deletions
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;
+  };
 }