top-level: Close over fewer arguments for stdenv stages

This makes the flow of data easier to understand. There's little downside
because the args in question are already inspected by the stdenvs.

cross-compiling in particular is simpler because we don't need to worry
about overriding the config closed over by `allPackages`.
This commit is contained in:
John Ericson 2016-11-27 12:37:45 -08:00 committed by John Ericson
parent d240a0da1a
commit 39753f5360
7 changed files with 24 additions and 18 deletions

View File

@ -1,14 +1,14 @@
{ system, allPackages, platform, crossSystem, config, ... } @ args:
{ lib, allPackages
, system, platform, crossSystem, config
}:
rec {
argClobber = {
vanillaStdenv = (import ../. {
inherit lib allPackages system platform;
crossSystem = null;
# Ignore custom stdenvs when cross compiling for compatability
config = builtins.removeAttrs config [ "replaceStdenv" ];
};
vanillaStdenv = (import ../. (args // argClobber // {
allPackages = args: allPackages (argClobber // args);
})) // {
}) // {
# Needed elsewhere as a hacky way to pass the target
cross = crossSystem;
};

View File

@ -1,10 +1,13 @@
{ system, allPackages, platform, crossSystem, config, ... } @ args:
{ lib, allPackages
, system, platform, crossSystem, config
}:
rec {
vanillaStdenv = import ../. (args // {
vanillaStdenv = import ../. {
inherit lib allPackages system platform crossSystem;
# Remove config.replaceStdenv to ensure termination.
config = builtins.removeAttrs config [ "replaceStdenv" ];
});
};
buildPackages = allPackages {
inherit system platform crossSystem config;

View File

@ -100,7 +100,7 @@ in rec {
};
thisPkgs = allPackages {
inherit system platform;
inherit system platform config;
allowCustomOverrides = false;
stdenv = thisStdenv;
};

View File

@ -5,12 +5,13 @@
# Posix utilities, the GNU C compiler, and so on. On other systems,
# we use the native C library.
{ system, allPackages ? import ../top-level, platform, config, crossSystem, lib }:
{ # Args just for stdenvs' usage
lib, allPackages
# Args to pass on to `allPacakges` too
, system, platform, crossSystem, config
}:
let
# The native (i.e., impure) build environment. This one uses the
# tools installed on the system outside of the Nix environment,
# i.e., the stuff in /bin, /usr/bin, etc. This environment should
@ -19,6 +20,7 @@ let
inherit (import ./native { inherit system allPackages config; }) stdenvNative;
stdenvNativePkgs = allPackages {
inherit system platform crossSystem config;
allowCustomOverrides = false;
stdenv = stdenvNative;
noSysDirs = false;

View File

@ -106,7 +106,7 @@ rec {
};
thisPkgs = allPackages {
inherit system platform;
inherit system platform config;
allowCustomOverrides = false;
stdenv = thisStdenv;
};

View File

@ -126,7 +126,7 @@ rec {
} // {inherit fetchurl;};
stdenvBoot1Pkgs = allPackages {
inherit system;
inherit system platform config;
allowCustomOverrides = false;
stdenv = stdenvBoot1;
};

View File

@ -69,9 +69,10 @@ in let
# deterministically inferred the same way.
nixpkgsFun = newArgs: import ./. (args // newArgs);
# Partially apply some args for building bootstraping stage pkgs sets
# Partially apply some arguments for building bootstraping stage pkgs
# sets. Only apply arguments which no stdenv would want to override.
allPackages = newArgs: import ./stage.nix ({
inherit lib nixpkgsFun config;
inherit lib nixpkgsFun;
} // newArgs);
stdenv = import ../stdenv {