summary refs log tree commit diff
path: root/pkgs/stdenv
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/stdenv')
-rw-r--r--pkgs/stdenv/adapters.nix18
-rw-r--r--pkgs/stdenv/booter.nix18
-rw-r--r--pkgs/stdenv/cross/default.nix11
-rw-r--r--pkgs/stdenv/generic/default.nix14
-rw-r--r--pkgs/stdenv/linux/make-bootstrap-tools-cross.nix21
5 files changed, 46 insertions, 36 deletions
diff --git a/pkgs/stdenv/adapters.nix b/pkgs/stdenv/adapters.nix
index 11f9a43c035..daa180c644f 100644
--- a/pkgs/stdenv/adapters.nix
+++ b/pkgs/stdenv/adapters.nix
@@ -66,12 +66,10 @@ rec {
 
             # In nixpkgs, sometimes 'null' gets in as a buildInputs element,
             # and we handle that through isAttrs.
-            getNativeDrv = drv: drv.nativeDrv or drv;
-            getCrossDrv = drv: drv.crossDrv or drv;
-            nativeBuildInputsDrvs = map getNativeDrv nativeBuildInputs;
-            buildInputsDrvs = map getCrossDrv buildInputs;
-            propagatedBuildInputsDrvs = map getCrossDrv propagatedBuildInputs;
-            propagatedNativeBuildInputsDrvs = map getNativeDrv propagatedNativeBuildInputs;
+            nativeBuildInputsDrvs = nativeBuildInputs;
+            buildInputsDrvs = buildInputs;
+            propagatedBuildInputsDrvs = propagatedBuildInputs;
+            propagatedNativeBuildInputsDrvs = propagatedNativeBuildInputs;
 
             # The base stdenv already knows that nativeBuildInputs and
             # buildInputs should be built with the usual gcc-wrapper
@@ -88,10 +86,7 @@ rec {
                 (drv: builtins.isAttrs drv && drv ? nativeDrv) buildInputs;
             nativeInputsFromBuildInputs = stdenv.lib.filter hostAsNativeDrv buildInputsNotNull;
 
-            # We should overwrite the input attributes in crossDrv, to overwrite
-            # the defaults for only-native builds in the base stdenv
-            crossDrv = if cross == null then nativeDrv else
-                stdenv.mkDerivation (args // {
+        in      stdenv.mkDerivation (args // {
                     name = name + "-" + cross.config;
                     nativeBuildInputs = nativeBuildInputsDrvs
                       ++ nativeInputsFromBuildInputs
@@ -112,9 +107,6 @@ rec {
 
                     crossConfig = cross.config;
                 } // args.crossAttrs or {});
-        in nativeDrv // {
-          inherit crossDrv nativeDrv;
-        };
     } // {
       inherit cross gccCross binutilsCross;
       ccCross = gccCross;
diff --git a/pkgs/stdenv/booter.nix b/pkgs/stdenv/booter.nix
index 11ca8e1440e..6e5d073e55a 100644
--- a/pkgs/stdenv/booter.nix
+++ b/pkgs/stdenv/booter.nix
@@ -57,12 +57,18 @@ stageFuns: let
   # debugging purposes.
   folder = stageFun: finalSoFar: let
     args = stageFun finalSoFar;
-    stdenv = args.stdenv // {
-      # For debugging
-      __bootPackages = finalSoFar;
+    args' = args // {
+      stdenv = args.stdenv // {
+        # For debugging
+        __bootPackages = finalSoFar;
+      };
     };
-    args' = args // { inherit stdenv; };
-  in
-    (if args.__raw or false then lib.id else allPackages) args';
+    self =
+      if args.__raw or false
+      then args'
+      else allPackages ((builtins.removeAttrs args' ["selfBuild"]) // {
+        buildPackages = if args.selfBuild or true then self else finalSoFar;
+      });
+  in self;
 
 in lib.lists.fold folder {} withAllowCustomOverrides
diff --git a/pkgs/stdenv/cross/default.nix b/pkgs/stdenv/cross/default.nix
index 16f41671b76..e684c14da4a 100644
--- a/pkgs/stdenv/cross/default.nix
+++ b/pkgs/stdenv/cross/default.nix
@@ -12,13 +12,11 @@ let
 
 in bootStages ++ [
 
-  # Build Packages.
-  #
-  # For now, this is just used to build the native stdenv. Eventually, it
-  # should be used to build compilers and other such tools targeting the cross
-  # platform. Then, `forceNativeDrv` can be removed.
+  # Build Packages
   (vanillaPackages: {
     inherit system platform crossSystem config overlays;
+    # Should be false, but we're trying to preserve hashes for now
+    selfBuild = true;
     # It's OK to change the built-time dependencies
     allowCustomOverrides = true;
     stdenv = vanillaPackages.stdenv // {
@@ -28,9 +26,10 @@ in bootStages ++ [
     };
   })
 
-  # Run packages
+  # Run Packages
   (buildPackages: {
     inherit system platform crossSystem config overlays;
+    selfBuild = false;
     stdenv = if crossSystem.useiOSCross or false
       then let
           inherit (buildPackages.darwin.ios-cross {
diff --git a/pkgs/stdenv/generic/default.nix b/pkgs/stdenv/generic/default.nix
index 32e0d894818..269d7ef893a 100644
--- a/pkgs/stdenv/generic/default.nix
+++ b/pkgs/stdenv/generic/default.nix
@@ -115,7 +115,19 @@ let
     , sandboxProfile ? ""
     , propagatedSandboxProfile ? ""
     , ... } @ attrs:
-    let
+    let # Rename argumemnts to avoid cycles
+      buildInputs__ = buildInputs;
+      nativeBuildInputs__ = nativeBuildInputs;
+      propagatedBuildInputs__ = propagatedBuildInputs;
+      propagatedNativeBuildInputs__ = propagatedNativeBuildInputs;
+    in let
+      getNativeDrv = drv: drv.nativeDrv or drv;
+      getCrossDrv = drv: drv.crossDrv or drv;
+      nativeBuildInputs = map getNativeDrv nativeBuildInputs__;
+      buildInputs = map getCrossDrv buildInputs__;
+      propagatedBuildInputs = map getCrossDrv propagatedBuildInputs__;
+      propagatedNativeBuildInputs = map getNativeDrv propagatedNativeBuildInputs__;
+    in let
       pos' =
         if pos != null then
           pos
diff --git a/pkgs/stdenv/linux/make-bootstrap-tools-cross.nix b/pkgs/stdenv/linux/make-bootstrap-tools-cross.nix
index 9f4a4517627..a1b1f02d83d 100644
--- a/pkgs/stdenv/linux/make-bootstrap-tools-cross.nix
+++ b/pkgs/stdenv/linux/make-bootstrap-tools-cross.nix
@@ -55,11 +55,12 @@ let
     if toolsArch == "armv6l" then raspberrypiCrossSystem else
     if toolsArch == "armv7l" then armv7l-hf-multiplatform-crossSystem else null;
 
-  pkgs = pkgsFun ({inherit system;} // selectedCrossSystem);
+  pkgsUnspliced = pkgsFun ({inherit system;} // selectedCrossSystem);
+  pkgs = pkgsUnspliced.splicedPackages;
 
-  inherit (pkgs) stdenv nukeReferences cpio binutilsCross;
+  inherit (pkgsUnspliced.buildPackages) stdenv nukeReferences cpio binutilsCross;
 
-  glibc = pkgs.libcCross;
+  glibc = pkgs.libcCross.nativeDrv;
   bash = pkgs.bash.crossDrv;
   findutils = pkgs.findutils.crossDrv;
   diffutils = pkgs.diffutils.crossDrv;
@@ -71,7 +72,7 @@ let
   gnumake = pkgs.gnumake.crossDrv;
   patch = pkgs.patch.crossDrv;
   patchelf = pkgs.patchelf.crossDrv;
-  gcc = pkgs.gcc.cc.crossDrv;
+  gcc = pkgs.gcc.crossDrv.cc;
   gmpxx = pkgs.gmpxx.crossDrv;
   mpfr = pkgs.mpfr.crossDrv;
   zlib = pkgs.zlib.crossDrv;
@@ -86,17 +87,17 @@ in
 rec {
 
 
-  coreutilsMinimal = (pkgs.coreutils.override (args: {
+  coreutilsMinimal = pkgs.coreutils.override (args: {
     # We want coreutils without ACL/attr support.
     aclSupport = false;
     attrSupport = false;
     # Our tooling currently can't handle scripts in bin/, only ELFs and symlinks.
     singleBinary = "symlinks";
-  })).crossDrv;
+  });
 
-  tarMinimal = (pkgs.gnutar.override { acl = null; }).crossDrv;
+  tarMinimal = pkgs.gnutar.override { acl = null; };
 
-  busyboxMinimal = (pkgs.busybox.override {
+  busyboxMinimal = pkgs.busybox.override {
     useMusl = true;
     enableStatic = true;
     enableMinimal = true;
@@ -109,13 +110,13 @@ rec {
       CONFIG_TAR y
       CONFIG_UNXZ y
     '';
-  }).crossDrv;
+  };
 
   build =
 
     stdenv.mkDerivation {
       name = "stdenv-bootstrap-tools-cross";
-      crossConfig = stdenv.cross.config;
+      crossConfig = pkgsUnspliced.crossSystem.config;
 
       buildInputs = [nukeReferences cpio binutilsCross];