@@ -126,10 +126,12 @@ let
126
126
# * https://nixos.org/nix/manual/#ssec-derivation
127
127
# Explanation about derivations in general
128
128
mkDerivation =
129
- { buildInputs ? [ ]
130
- , nativeBuildInputs ? [ ]
131
- , propagatedBuildInputs ? [ ]
129
+ { nativeBuildInputs ? [ ]
130
+ , buildInputs ? [ ]
131
+
132
132
, propagatedNativeBuildInputs ? [ ]
133
+ , propagatedBuildInputs ? [ ]
134
+
133
135
, crossConfig ? null
134
136
, meta ? { }
135
137
, passthru ? { }
@@ -141,18 +143,15 @@ let
141
143
, sandboxProfile ? ""
142
144
, propagatedSandboxProfile ? ""
143
145
, ... } @ 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
+ ] ;
156
155
in let
157
156
pos' =
158
157
if pos != null then
@@ -281,13 +280,16 @@ let
281
280
outputs ++
282
281
( if separateDebugInfo then assert targetPlatform . isLinux ; [ "debug" ] else [ ] ) ;
283
282
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 ] ;
290
291
292
+ propagatedDependencies' = map lib . chooseDevOutputs propagatedDependencies ;
291
293
in
292
294
293
295
# Throw an error if trying to evaluate an non-valid derivation
@@ -302,14 +304,15 @@ let
302
304
"__impureHostDeps" "__propagatedImpureHostDeps"
303
305
"sandboxProfile" "propagatedSandboxProfile" ] )
304
306
// ( let
307
+ # TODO(@Ericson2314): Reversing of dep lists is just temporary to avoid Darwin mass rebuild.
305
308
computedSandboxProfile =
306
- lib . concatMap ( input : input . __propagatedSandboxProfile or [ ] ) ( extraBuildInputs ++ buildInputs' ++ nativeBuildInputs' ) ;
309
+ lib . concatMap ( input : input . __propagatedSandboxProfile or [ ] ) ( extraBuildInputs ++ lib . concatLists ( lib . reverseList dependencies' ) ) ;
307
310
computedPropagatedSandboxProfile =
308
- lib . concatMap ( input : input . __propagatedSandboxProfile or [ ] ) ( propagatedBuildInputs' ++ propagatedNativeBuildInputs' ) ;
311
+ lib . concatMap ( input : input . __propagatedSandboxProfile or [ ] ) ( lib . concatLists ( lib . reverseList propagatedDependencies' ) ) ;
309
312
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' ) ) ) ;
311
314
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' ) ) ) ;
313
316
in
314
317
{
315
318
builder = attrs . realBuilder or shell ;
@@ -319,17 +322,11 @@ let
319
322
userHook = config . stdenv . userHook or null ;
320
323
__ignoreNulls = true ;
321
324
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 ;
333
330
} // ifDarwin {
334
331
# TODO: remove lib.unique once nix has a list canonicalization primitive
335
332
__sandboxProfile =
0 commit comments