top-level: Normalize stdenv booting

Introduce new abstraction, `stdenv/booter.nix` for composing bootstraping
stages, and use it everywhere for consistency. See that file for more doc.

Stdenvs besides Linux and Darwin are completely refactored to utilize this.
Those two, due to their size and complexity, are minimally edited for
easier reviewing.

No hashes should be changed.
This commit is contained in:
John Ericson
2017-01-13 13:23:23 -05:00
parent 0ef8b69d12
commit 3e197f7d81
12 changed files with 391 additions and 270 deletions
+45 -31
View File
@@ -1,39 +1,53 @@
{ stdenv, pkgs, config, lib }:
{ lib
, crossSystem, config
, bootStages
, ...
}:
import ../generic rec {
inherit config;
assert crossSystem == null;
preHook =
''
export NIX_ENFORCE_PURITY="''${NIX_ENFORCE_PURITY-1}"
export NIX_ENFORCE_NO_NATIVE="''${NIX_ENFORCE_NO_NATIVE-1}"
export NIX_IGNORE_LD_THROUGH_GCC=1
'';
bootStages ++ [
(prevStage: let
inherit (prevStage) stdenv;
inherit (stdenv) system platform;
in {
inherit system platform crossSystem config;
initialPath = (import ../common-path.nix) {pkgs = pkgs;};
stdenv = import ../generic rec {
inherit config;
system = stdenv.system;
preHook = ''
export NIX_ENFORCE_PURITY="''${NIX_ENFORCE_PURITY-1}"
export NIX_ENFORCE_NO_NATIVE="''${NIX_ENFORCE_NO_NATIVE-1}"
export NIX_IGNORE_LD_THROUGH_GCC=1
'';
cc = import ../../build-support/cc-wrapper {
nativeTools = false;
nativePrefix = stdenv.lib.optionalString stdenv.isSunOS "/usr";
nativeLibc = true;
inherit stdenv;
inherit (pkgs) binutils coreutils gnugrep;
cc = pkgs.gcc.cc;
isGNU = true;
shell = pkgs.bash + "/bin/sh";
};
initialPath = (import ../common-path.nix) { pkgs = prevStage; };
shell = pkgs.bash + "/bin/sh";
system = stdenv.system;
fetchurlBoot = stdenv.fetchurlBoot;
cc = import ../../build-support/cc-wrapper {
nativeTools = false;
nativePrefix = stdenv.lib.optionalString stdenv.isSunOS "/usr";
nativeLibc = true;
inherit stdenv;
inherit (prevStage) binutils coreutils gnugrep;
cc = prevStage.gcc.cc;
isGNU = true;
shell = prevStage.bash + "/bin/sh";
};
overrides = self: super: {
inherit cc;
inherit (cc) binutils;
inherit (pkgs)
gzip bzip2 xz bash coreutils diffutils findutils gawk
gnumake gnused gnutar gnugrep gnupatch perl;
};
}
shell = prevStage.bash + "/bin/sh";
fetchurlBoot = stdenv.fetchurlBoot;
overrides = self: super: {
inherit cc;
inherit (cc) binutils;
inherit (prevStage)
gzip bzip2 xz bash coreutils diffutils findutils gawk
gnumake gnused gnutar gnugrep gnupatch perl;
};
};
})
]