summary refs log tree commit diff
path: root/pkgs/stdenv/adapters.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/stdenv/adapters.nix')
-rw-r--r--pkgs/stdenv/adapters.nix42
1 files changed, 32 insertions, 10 deletions
diff --git a/pkgs/stdenv/adapters.nix b/pkgs/stdenv/adapters.nix
index 1191748fb56..edf3980cd78 100644
--- a/pkgs/stdenv/adapters.nix
+++ b/pkgs/stdenv/adapters.nix
@@ -109,16 +109,38 @@ rec {
 
   # Return a modified stdenv that adds a cross compiler to the
   # builds.
-  makeStdenvCross = stdenv: binutilsCross : gccCross: stdenv //
-    { mkDerivation = args: stdenv.mkDerivation (args // {
-        
-        buildInputs =
-          (if args ? buildInputs then args.buildInputs else [])
-          ++ [ gccCross binutilsCross ];
-
-        crossConfig = gccCross.cross.config;
-      });
-    };
+  makeStdenvCross = stdenv: cross: binutilsCross: gccCross: stdenv //
+    { mkDerivation = {name, buildInputs ? null, hostInputs ? null,
+            propagatedBuildInputs ? null, propagatedHostInputs ? null, ...}@args: let
+            buildInputsList = if (buildInputs != null) then
+                buildInputs else [];
+            hostInputsList = if (hostInputs != null) then
+                hostInputs else [];
+            propagatedBuildInputsList = if (propagatedBuildInputs != null) then
+                propagatedBuildInputs else [];
+            propagatedHostInputsList = if (propagatedHostInputs != null) then
+                propagatedHostInputs else [];
+            buildInputsDrvs = map (drv: drv.buildDrv) buildInputsList;
+            hostInputsDrvs = map (drv: drv.hostDrv) hostInputsList;
+            propagatedBuildInputsDrvs = map (drv: drv.buildDrv) propagatedBuildInputsList;
+            propagatedHostInputsDrvs = map (drv: drv.buildDrv) propagatedHostInputsList;
+            buildDrv = stdenv.mkDerivation (args // {
+                buildInputs = buildInputsDrvs ++ hostInputsDrvs;
+                propagatedBuildInputs = propagatedBuildInputsDrvs ++
+                    propagatedHostInputsDrvs;
+            });
+            hostDrv = if (cross == null) then buildDrv else
+                stdenv.mkDerivation (args // { 
+                    name = name + "-" + cross.config;
+                    buildInputs = buildInputsDrvs
+                      ++ [ gccCross binutilsCross ];
+
+                    crossConfig = cross.config;
+                });
+        in hostDrv // {
+            inherit hostDrv buildDrv;
+        };
+    } // { inherit cross; };
 
   /* Modify a stdenv so that the specified attributes are added to
      every derivation returned by its mkDerivation function.