about summary refs log tree commit diff
path: root/pkgs/top-level/stage.nix
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2021-08-16 21:16:29 -0400
committerJohn Ericson <John.Ericson@Obsidian.Systems>2021-08-18 17:22:50 +0000
commitf110a182a66005782c0e58091bcda7243bf2a0ae (patch)
tree9dc114f30483a606958aea2685110a8382451539 /pkgs/top-level/stage.nix
parentaa045621af26840816c7760f0e0f3d41e91dfaa8 (diff)
stdenv: Fix overriding + `overrideAttrs`
The old stdenv adapters were subtly wrong in two ways:

 - `overrideAttrs` leaked the original, unoverridden `mkDerivation`.

 - `stdenv.override` would throw away any manually-set `mkDerivation`
   from a stdenv reverting to the original.

Now, `mkDerivation` is controlled (nearly directly) via an argument, and
always correctly closes over the final ("self") stdenv. This means the
adapters can work entirely via `.override` without any manual `stdenv //
...`, and both those issues are fixed.

Note hashes are changed, because stdenvs no previously overridden like
`stdenvNoCC` and `crossLibcStdenv` now are. I had to add some
`dontDisableStatic = true` accordingly. The flip side however is that
since the overrides compose, we no longer need to override anything but
the default `stdenv` from which all the others are created.
Diffstat (limited to 'pkgs/top-level/stage.nix')
-rw-r--r--pkgs/top-level/stage.nix7
1 files changed, 6 insertions, 1 deletions
diff --git a/pkgs/top-level/stage.nix b/pkgs/top-level/stage.nix
index dc43bbec9d33f..b01ef584d206e 100644
--- a/pkgs/top-level/stage.nix
+++ b/pkgs/top-level/stage.nix
@@ -65,7 +65,12 @@
 
 let
   stdenvAdapters = self: super:
-    let res = import ../stdenv/adapters.nix self; in res // {
+    let
+      res = import ../stdenv/adapters.nix {
+        inherit lib config;
+        pkgs = self;
+      };
+    in res // {
       stdenvAdapters = res;
     };