diff --git a/pkgs/build-support/bintools-wrapper/default.nix b/pkgs/build-support/bintools-wrapper/default.nix index 3c553f181f0d..7bb96b470687 100644 --- a/pkgs/build-support/bintools-wrapper/default.nix +++ b/pkgs/build-support/bintools-wrapper/default.nix @@ -8,7 +8,8 @@ { name ? "" , lib , stdenvNoCC -, bintools ? null, libc ? null, coreutils ? null, shell ? stdenvNoCC.shell, gnugrep ? null +, runtimeShell +, bintools ? null, libc ? null, coreutils ? null, gnugrep ? null , netbsd ? null, netbsdCross ? null , sharedLibraryLoader ? if libc == null then @@ -419,7 +420,8 @@ stdenvNoCC.mkDerivation { env = { # for substitution in utils.bash expandResponseParams = "${expand-response-params}/bin/expand-response-params"; - shell = getBin shell + shell.shellPath or ""; + # TODO(@sternenseemann): rename env var via stdenv rebuild + shell = (getBin runtimeShell + runtimeShell.shellPath or ""); gnugrep_bin = optionalString (!nativeTools) gnugrep; wrapperName = "BINTOOLS_WRAPPER"; inherit dynamicLinker targetPrefix suffixSalt coreutils_bin; diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index 11ae9868ce01..17aac3170971 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -8,7 +8,8 @@ { name ? "" , lib , stdenvNoCC -, cc ? null, libc ? null, bintools, coreutils ? null, shell ? stdenvNoCC.shell +, runtimeShell +, cc ? null, libc ? null, bintools, coreutils ? null , zlib ? null , nativeTools, noLibc ? false, nativeLibc, nativePrefix ? "" , propagateDoc ? cc != null && cc ? man @@ -739,7 +740,8 @@ stdenvNoCC.mkDerivation { # for substitution in utils.bash expandResponseParams = "${expand-response-params}/bin/expand-response-params"; - shell = getBin shell + shell.shellPath or ""; + # TODO(@sternenseemann): rename env var via stdenv rebuild + shell = getBin runtimeShell + runtimeShell.shellPath or ""; gnugrep_bin = optionalString (!nativeTools) gnugrep; # stdenv.cc.cc should not be null and we have nothing better for now. # if the native impure bootstrap is gotten rid of this can become `inherit cc;` again. diff --git a/pkgs/stdenv/darwin/default.nix b/pkgs/stdenv/darwin/default.nix index b1094630dd46..ef5314d92d77 100644 --- a/pkgs/stdenv/darwin/default.nix +++ b/pkgs/stdenv/darwin/default.nix @@ -117,6 +117,7 @@ let inherit (prevStage) coreutils gnugrep; stdenvNoCC = prevStage.ccWrapperStdenv; + runtimeShell = prevStage.ccWrapperStdenv.shell; }; bash = prevStage.bash or bootstrapTools; @@ -258,6 +259,7 @@ in inherit lib; inherit (self) stdenvNoCC coreutils gnugrep; + runtimeShell = self.stdenvNoCC.shell; bintools = selfDarwin.binutils-unwrapped; @@ -457,6 +459,8 @@ in bintools = selfDarwin.binutils-unwrapped; libc = selfDarwin.Libsystem; + # TODO(@sternenseemann): can this be removed? + runtimeShell = "${bootstrapTools}/bin/bash"; }; binutils-unwrapped = superDarwin.binutils-unwrapped.override { @@ -1044,8 +1048,6 @@ in }; binutils = superDarwin.binutils.override { - shell = self.bash + "/bin/bash"; - buildPackages = { inherit (prevStage) stdenv; }; @@ -1124,9 +1126,7 @@ in inherit (self.llvmPackages) libcxx; inherit lib; - inherit (self) stdenvNoCC coreutils gnugrep; - - shell = self.bash + "/bin/bash"; + inherit (self) stdenvNoCC coreutils gnugrep runtimeShell; }; }); libraries = super.llvmPackages.libraries.extend (_: _:{ diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index 0e1852805cfd..4f2e3b3cb0bc 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -196,6 +196,7 @@ let inherit (prevStage) coreutils gnugrep; stdenvNoCC = prevStage.ccWrapperStdenv; fortify-headers = prevStage.fortify-headers; + runtimeShell = prevStage.ccWrapperStdenv.shell; }).overrideAttrs(a: lib.optionalAttrs (prevStage.gcc-unwrapped.passthru.isXgcc or false) { # This affects only `xgcc` (the compiler which compiles the final compiler). postFixup = (a.postFixup or "") + '' @@ -265,6 +266,7 @@ in inherit lib; inherit (self) stdenvNoCC coreutils gnugrep; bintools = bootstrapTools; + runtimeShell = "${bootstrapTools}/bin/bash"; }; coreutils = bootstrapTools; gnugrep = bootstrapTools; @@ -332,6 +334,14 @@ in inherit (prevStage) ccWrapperStdenv coreutils gnugrep gettext bison texinfo zlib gnum4 perl patchelf; ${localSystem.libc} = getLibc prevStage; gmp = super.gmp.override { cxx = false; }; + # This stage also rebuilds binutils which will of course be used only in the next stage. + # We inherit this until stage3, in stage4 it will be rebuilt using the adjacent bash/runtimeShell pkg. + # TODO(@sternenseemann): Can we already build the wrapper with the actual runtimeShell here? + # Historically, the wrapper didn't use runtimeShell, so the used shell had to be changed explicitly + # (or stdenvNoCC.shell would be used) which happened in stage4. + binutils = super.binutils.override { + runtimeShell = "${bootstrapTools}/bin/bash"; + }; gcc-unwrapped = (super.gcc-unwrapped.override (commonGccOverrides // { # The most logical name for this package would be something like @@ -544,9 +554,8 @@ in # other purposes (binutils and top-level pkgs) too. inherit (prevStage) gettext gnum4 bison perl texinfo zlib linuxHeaders libidn2 libunistring; ${localSystem.libc} = getLibc prevStage; + # Since this is the first fresh build of binutils since stage2, our own runtimeShell will be used. binutils = super.binutils.override { - # Don't use stdenv's shell but our own - shell = self.bash + "/bin/bash"; # Build expand-response-params with last stage like below buildPackages = { inherit (prevStage) stdenv; @@ -568,8 +577,7 @@ in bintools = self.binutils; libc = getLibc self; inherit lib; - inherit (self) stdenvNoCC coreutils gnugrep; - shell = self.bash + "/bin/bash"; + inherit (self) stdenvNoCC coreutils gnugrep runtimeShell; fortify-headers = self.fortify-headers; }; };