From 39753f5360134f1aab1a949260374a876c0983eb Mon Sep 17 00:00:00 2001 From: John Ericson Date: Sun, 27 Nov 2016 12:37:45 -0800 Subject: [PATCH] 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`. --- pkgs/stdenv/cross/default.nix | 12 ++++++------ pkgs/stdenv/custom/default.nix | 9 ++++++--- pkgs/stdenv/darwin/default.nix | 2 +- pkgs/stdenv/default.nix | 10 ++++++---- pkgs/stdenv/linux/default.nix | 2 +- pkgs/stdenv/native/default.nix | 2 +- pkgs/top-level/default.nix | 5 +++-- 7 files changed, 24 insertions(+), 18 deletions(-) diff --git a/pkgs/stdenv/cross/default.nix b/pkgs/stdenv/cross/default.nix index fcf06bcf1da..10e2a766356 100644 --- a/pkgs/stdenv/cross/default.nix +++ b/pkgs/stdenv/cross/default.nix @@ -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; }; diff --git a/pkgs/stdenv/custom/default.nix b/pkgs/stdenv/custom/default.nix index e8f203d69cf..174b8593c0a 100644 --- a/pkgs/stdenv/custom/default.nix +++ b/pkgs/stdenv/custom/default.nix @@ -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; diff --git a/pkgs/stdenv/darwin/default.nix b/pkgs/stdenv/darwin/default.nix index 49c4d9b8b2b..6182c8cc0c7 100644 --- a/pkgs/stdenv/darwin/default.nix +++ b/pkgs/stdenv/darwin/default.nix @@ -100,7 +100,7 @@ in rec { }; thisPkgs = allPackages { - inherit system platform; + inherit system platform config; allowCustomOverrides = false; stdenv = thisStdenv; }; diff --git a/pkgs/stdenv/default.nix b/pkgs/stdenv/default.nix index bd515181fc6..246e656f33b 100644 --- a/pkgs/stdenv/default.nix +++ b/pkgs/stdenv/default.nix @@ -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; diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index e0a68bdca2f..e4bf87c5202 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -106,7 +106,7 @@ rec { }; thisPkgs = allPackages { - inherit system platform; + inherit system platform config; allowCustomOverrides = false; stdenv = thisStdenv; }; diff --git a/pkgs/stdenv/native/default.nix b/pkgs/stdenv/native/default.nix index 22b4dc1400f..0f9aee214b3 100644 --- a/pkgs/stdenv/native/default.nix +++ b/pkgs/stdenv/native/default.nix @@ -126,7 +126,7 @@ rec { } // {inherit fetchurl;}; stdenvBoot1Pkgs = allPackages { - inherit system; + inherit system platform config; allowCustomOverrides = false; stdenv = stdenvBoot1; }; diff --git a/pkgs/top-level/default.nix b/pkgs/top-level/default.nix index d1e824a8070..9464a8012b3 100644 --- a/pkgs/top-level/default.nix +++ b/pkgs/top-level/default.nix @@ -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 {