summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/stdenv/cross/default.nix2
-rw-r--r--pkgs/stdenv/custom/default.nix2
-rw-r--r--pkgs/stdenv/darwin/default.nix5
-rw-r--r--pkgs/stdenv/default.nix5
-rw-r--r--pkgs/stdenv/freebsd/default.nix2
-rw-r--r--pkgs/stdenv/linux/default.nix3
-rw-r--r--pkgs/stdenv/native/default.nix3
-rw-r--r--pkgs/top-level/default.nix37
-rw-r--r--pkgs/top-level/stage.nix27
-rw-r--r--pkgs/top-level/stdenv.nix13
10 files changed, 55 insertions, 44 deletions
diff --git a/pkgs/stdenv/cross/default.nix b/pkgs/stdenv/cross/default.nix
index e48124f1c4d..fcf06bcf1da 100644
--- a/pkgs/stdenv/cross/default.nix
+++ b/pkgs/stdenv/cross/default.nix
@@ -20,7 +20,7 @@ rec {
     inherit system platform crossSystem config;
     # It's OK to change the built-time dependencies
     allowCustomOverrides = true;
-    bootStdenv = vanillaStdenv;
+    stdenv = vanillaStdenv;
   };
 
   stdenvCross = buildPackages.makeStdenvCross
diff --git a/pkgs/stdenv/custom/default.nix b/pkgs/stdenv/custom/default.nix
index 4c14d6411f1..e8f203d69cf 100644
--- a/pkgs/stdenv/custom/default.nix
+++ b/pkgs/stdenv/custom/default.nix
@@ -10,7 +10,7 @@ rec {
     inherit system platform crossSystem config;
     # It's OK to change the built-time dependencies
     allowCustomOverrides = true;
-    bootStdenv = vanillaStdenv;
+    stdenv = vanillaStdenv;
   };
 
   stdenvCustom = config.replaceStdenv { pkgs = buildPackages; };
diff --git a/pkgs/stdenv/darwin/default.nix b/pkgs/stdenv/darwin/default.nix
index 1bc983d6312..49c4d9b8b2b 100644
--- a/pkgs/stdenv/darwin/default.nix
+++ b/pkgs/stdenv/darwin/default.nix
@@ -22,7 +22,7 @@ let
     (import "${./standard-sandbox.sb}")
   '';
 in rec {
-  allPackages = import ../../..;
+  inherit allPackages;
 
   commonPreHook = ''
     export NIX_ENFORCE_PURITY="''${NIX_ENFORCE_PURITY-1}"
@@ -101,7 +101,8 @@ in rec {
 
       thisPkgs = allPackages {
         inherit system platform;
-        bootStdenv = thisStdenv;
+        allowCustomOverrides = false;
+        stdenv = thisStdenv;
       };
     in { stdenv = thisStdenv; pkgs = thisPkgs; };
 
diff --git a/pkgs/stdenv/default.nix b/pkgs/stdenv/default.nix
index ac84ea0f9a0..bd515181fc6 100644
--- a/pkgs/stdenv/default.nix
+++ b/pkgs/stdenv/default.nix
@@ -5,7 +5,7 @@
 # Posix utilities, the GNU C compiler, and so on.  On other systems,
 # we use the native C library.
 
-{ system, allPackages ? import ../.., platform, config, crossSystem, lib }:
+{ system, allPackages ? import ../top-level, platform, config, crossSystem, lib }:
 
 
 let
@@ -19,7 +19,8 @@ let
   inherit (import ./native { inherit system allPackages config; }) stdenvNative;
 
   stdenvNativePkgs = allPackages {
-    bootStdenv = stdenvNative;
+    allowCustomOverrides = false;
+    stdenv = stdenvNative;
     noSysDirs = false;
   };
 
diff --git a/pkgs/stdenv/freebsd/default.nix b/pkgs/stdenv/freebsd/default.nix
index 4c7ebc16239..13cb21fe1d8 100644
--- a/pkgs/stdenv/freebsd/default.nix
+++ b/pkgs/stdenv/freebsd/default.nix
@@ -5,7 +5,7 @@
 }:
 
 rec {
-  allPackages = import ../../..;
+  inherit allPackages;
 
   bootstrapTools = derivation {
     inherit system;
diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix
index e3aeafe178d..e0a68bdca2f 100644
--- a/pkgs/stdenv/linux/default.nix
+++ b/pkgs/stdenv/linux/default.nix
@@ -107,7 +107,8 @@ rec {
 
       thisPkgs = allPackages {
         inherit system platform;
-        bootStdenv = thisStdenv;
+        allowCustomOverrides = false;
+        stdenv = thisStdenv;
       };
 
     in { stdenv = thisStdenv; pkgs = thisPkgs; };
diff --git a/pkgs/stdenv/native/default.nix b/pkgs/stdenv/native/default.nix
index fcd0805275b..22b4dc1400f 100644
--- a/pkgs/stdenv/native/default.nix
+++ b/pkgs/stdenv/native/default.nix
@@ -127,7 +127,8 @@ rec {
 
   stdenvBoot1Pkgs = allPackages {
     inherit system;
-    bootStdenv = stdenvBoot1;
+    allowCustomOverrides = false;
+    stdenv = stdenvBoot1;
   };
 
 
diff --git a/pkgs/top-level/default.nix b/pkgs/top-level/default.nix
index c5b8bbac31c..d1e824a8070 100644
--- a/pkgs/top-level/default.nix
+++ b/pkgs/top-level/default.nix
@@ -1,8 +1,21 @@
-/* This file composes the Nix Packages collection.  That is, it
-   imports the functions that build the various packages, and calls
-   them with appropriate arguments.  The result is a set of all the
-   packages in the Nix Packages collection for some particular
-   platform. */
+/* This function composes the Nix Packages collection. It:
+
+     1. Applies the final stage to the given `config` if it is a function
+
+     2. Infers an appropriate `platform` based on the `system` if none is
+        provided
+
+     3. Defaults to no non-standard config and no cross-compilation target
+
+     4. Uses the above to infer the default standard environment (stdenv) if
+        none is provided
+
+     5. Builds the final stage --- a fully booted package set with the chosen
+        stdenv
+
+   Use `impure.nix` to also infer the `system` based on the one on which
+   evaluation is taking place, and the configuration from environment variables
+   or dot-files. */
 
 { # The system (e.g., `i686-linux') for which to build the packages.
   system
@@ -12,7 +25,6 @@
 
 , crossSystem ? null
 , platform ? null
-, ...
 } @ args:
 
 let # Rename the function arguments
@@ -57,8 +69,15 @@ in let
   # deterministically inferred the same way.
   nixpkgsFun = newArgs: import ./. (args // newArgs);
 
-  pkgs = import ./stage.nix ({
-    inherit lib nixpkgsFun config platform;
-  } // args);
+  # Partially apply some args for building bootstraping stage pkgs sets
+  allPackages = newArgs: import ./stage.nix ({
+    inherit lib nixpkgsFun config;
+  } // newArgs);
+
+  stdenv = import ../stdenv {
+    inherit lib allPackages system platform crossSystem config;
+  };
+
+  pkgs = allPackages { inherit system stdenv config crossSystem platform; };
 
 in pkgs
diff --git a/pkgs/top-level/stage.nix b/pkgs/top-level/stage.nix
index 9ab9d22e54f..0c621b81c7e 100644
--- a/pkgs/top-level/stage.nix
+++ b/pkgs/top-level/stage.nix
@@ -1,21 +1,24 @@
-/* This file composes the Nix Packages collection.  That is, it
-   imports the functions that build the various packages, and calls
-   them with appropriate arguments.  The result is a set of all the
-   packages in the Nix Packages collection for some particular
-   platform. */
+/* This file composes a single bootstrapping stage of the Nix Packages
+   collection. That is, it imports the functions that build the various
+   packages, and calls them with appropriate arguments. The result is a set of
+   all the packages in the Nix Packages collection for some particular platform
+   for some particular stage.
+
+   Default arguments are only provided for bootstrapping
+   arguments. Normal users should not import this directly but instead
+   import `pkgs/default.nix` or `default.nix`. */
 
 
 { # The system (e.g., `i686-linux') for which to build the packages.
   system
 
-, # The standard environment to use.  Only used for bootstrapping.  If
-  # null, the default standard environment is used.
-  bootStdenv ? null
+, # The standard environment to use for building packages.
+  stdenv
 
 , # This is used because stdenv replacement and the stdenvCross do benefit from
   # the overridden configuration provided by the user, as opposed to the normal
   # bootstrapping stdenvs.
-  allowCustomOverrides ? (bootStdenv == null)
+  allowCustomOverrides ? true
 
 , # Non-GNU/Linux OSes are currently "impure" platforms, with their libc
   # outside of the store.  Thus, GCC, GFortran, & co. must always look for
@@ -45,9 +48,7 @@ let
     };
 
   stdenvDefault = self: super:
-    import ./stdenv.nix {
-      inherit system bootStdenv crossSystem config platform lib nixpkgsFun;
-    };
+    { stdenv = stdenv // { inherit platform; }; };
 
   allPackages = self: super:
     let res = import ./all-packages.nix
@@ -81,9 +82,9 @@ let
 
   # The complete chain of package set builders, applied from top to bottom
   toFix = lib.foldl' (lib.flip lib.extends) (self: {}) [
+    stdenvDefault
     stdenvAdapters
     trivialBuilders
-    stdenvDefault
     allPackages
     aliases
     stdenvOverrides
diff --git a/pkgs/top-level/stdenv.nix b/pkgs/top-level/stdenv.nix
deleted file mode 100644
index adb8bdde6ad..00000000000
--- a/pkgs/top-level/stdenv.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-{ system, bootStdenv, crossSystem, config, platform, lib, nixpkgsFun }:
-
-rec {
-  defaultStdenv = import ../stdenv {
-    inherit system platform config crossSystem lib;
-    allPackages = nixpkgsFun;
-  } // { inherit platform; };
-
-  stdenv =
-    if bootStdenv != null
-    then (bootStdenv // { inherit platform; })
-    else defaultStdenv;
-}