Skip to content

Commit d61c223

Browse files
committedJun 29, 2017
Merge accepted cross compilation PRs into staging
2 parents 16be434 + ad8d8fb commit d61c223

File tree

1 file changed

+33
-36
lines changed

1 file changed

+33
-36
lines changed
 

Diff for: ‎pkgs/stdenv/generic/default.nix

+33-36
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,12 @@ let
126126
# * https://nixos.org/nix/manual/#ssec-derivation
127127
# Explanation about derivations in general
128128
mkDerivation =
129-
{ buildInputs ? []
130-
, nativeBuildInputs ? []
131-
, propagatedBuildInputs ? []
129+
{ nativeBuildInputs ? []
130+
, buildInputs ? []
131+
132132
, propagatedNativeBuildInputs ? []
133+
, propagatedBuildInputs ? []
134+
133135
, crossConfig ? null
134136
, meta ? {}
135137
, passthru ? {}
@@ -141,18 +143,15 @@ let
141143
, sandboxProfile ? ""
142144
, propagatedSandboxProfile ? ""
143145
, ... } @ attrs:
144-
let # Rename argumemnts to avoid cycles
145-
buildInputs__ = buildInputs;
146-
nativeBuildInputs__ = nativeBuildInputs;
147-
propagatedBuildInputs__ = propagatedBuildInputs;
148-
propagatedNativeBuildInputs__ = propagatedNativeBuildInputs;
149-
in let
150-
getNativeDrv = drv: drv.nativeDrv or drv;
151-
getCrossDrv = drv: drv.crossDrv or drv;
152-
nativeBuildInputs = map getNativeDrv nativeBuildInputs__;
153-
buildInputs = map getCrossDrv buildInputs__;
154-
propagatedBuildInputs = map getCrossDrv propagatedBuildInputs__;
155-
propagatedNativeBuildInputs = map getNativeDrv propagatedNativeBuildInputs__;
146+
let
147+
dependencies = [
148+
(map (drv: drv.nativeDrv or drv) nativeBuildInputs)
149+
(map (drv: drv.crossDrv or drv) buildInputs)
150+
];
151+
propagatedDependencies = [
152+
(map (drv: drv.nativeDrv or drv) propagatedNativeBuildInputs)
153+
(map (drv: drv.crossDrv or drv) propagatedBuildInputs)
154+
];
156155
in let
157156
pos' =
158157
if pos != null then
@@ -281,13 +280,16 @@ let
281280
outputs ++
282281
(if separateDebugInfo then assert targetPlatform.isLinux; [ "debug" ] else []);
283282

284-
buildInputs' = lib.chooseDevOutputs buildInputs ++
285-
(if separateDebugInfo then [ ../../build-support/setup-hooks/separate-debug-info.sh ] else []);
286-
287-
nativeBuildInputs' = lib.chooseDevOutputs nativeBuildInputs;
288-
propagatedBuildInputs' = lib.chooseDevOutputs propagatedBuildInputs;
289-
propagatedNativeBuildInputs' = lib.chooseDevOutputs propagatedNativeBuildInputs;
283+
dependencies' = let
284+
justMap = map lib.chooseDevOutputs dependencies;
285+
nativeBuildInputs = lib.elemAt justMap 0
286+
++ lib.optional targetPlatform.isWindows ../../build-support/setup-hooks/win-dll-link.sh;
287+
buildInputs = lib.elemAt justMap 1
288+
# TODO(@Ericson2314): Should instead also be appended to `nativeBuildInputs`.
289+
++ lib.optional separateDebugInfo ../../build-support/setup-hooks/separate-debug-info.sh;
290+
in [ nativeBuildInputs buildInputs ];
290291

292+
propagatedDependencies' = map lib.chooseDevOutputs propagatedDependencies;
291293
in
292294

293295
# Throw an error if trying to evaluate an non-valid derivation
@@ -302,14 +304,15 @@ let
302304
"__impureHostDeps" "__propagatedImpureHostDeps"
303305
"sandboxProfile" "propagatedSandboxProfile"])
304306
// (let
307+
# TODO(@Ericson2314): Reversing of dep lists is just temporary to avoid Darwin mass rebuild.
305308
computedSandboxProfile =
306-
lib.concatMap (input: input.__propagatedSandboxProfile or []) (extraBuildInputs ++ buildInputs' ++ nativeBuildInputs');
309+
lib.concatMap (input: input.__propagatedSandboxProfile or []) (extraBuildInputs ++ lib.concatLists (lib.reverseList dependencies'));
307310
computedPropagatedSandboxProfile =
308-
lib.concatMap (input: input.__propagatedSandboxProfile or []) (propagatedBuildInputs' ++ propagatedNativeBuildInputs');
311+
lib.concatMap (input: input.__propagatedSandboxProfile or []) (lib.concatLists (lib.reverseList propagatedDependencies'));
309312
computedImpureHostDeps =
310-
lib.unique (lib.concatMap (input: input.__propagatedImpureHostDeps or []) (extraBuildInputs ++ buildInputs' ++ nativeBuildInputs'));
313+
lib.unique (lib.concatMap (input: input.__propagatedImpureHostDeps or []) (extraBuildInputs ++ lib.concatLists (lib.reverseList dependencies')));
311314
computedPropagatedImpureHostDeps =
312-
lib.unique (lib.concatMap (input: input.__propagatedImpureHostDeps or []) (propagatedBuildInputs' ++ propagatedNativeBuildInputs'));
315+
lib.unique (lib.concatMap (input: input.__propagatedImpureHostDeps or []) (lib.concatLists (lib.reverseList propagatedDependencies')));
313316
in
314317
{
315318
builder = attrs.realBuilder or shell;
@@ -319,17 +322,11 @@ let
319322
userHook = config.stdenv.userHook or null;
320323
__ignoreNulls = true;
321324

322-
# Inputs built by the cross compiler.
323-
buildInputs = buildInputs';
324-
propagatedBuildInputs = propagatedBuildInputs';
325-
# Inputs built by the usual native compiler.
326-
nativeBuildInputs = nativeBuildInputs'
327-
++ lib.optional
328-
(hostPlatform.isCygwin
329-
|| (crossConfig != null && lib.hasSuffix "mingw32" crossConfig))
330-
../../build-support/setup-hooks/win-dll-link.sh
331-
;
332-
propagatedNativeBuildInputs = propagatedNativeBuildInputs';
325+
nativeBuildInputs = lib.elemAt dependencies' 0;
326+
buildInputs = lib.elemAt dependencies' 1;
327+
328+
propagatedNativeBuildInputs = lib.elemAt propagatedDependencies' 0;
329+
propagatedBuildInputs = lib.elemAt propagatedDependencies' 1;
333330
} // ifDarwin {
334331
# TODO: remove lib.unique once nix has a list canonicalization primitive
335332
__sandboxProfile =

0 commit comments

Comments
 (0)