@@ -110,7 +110,7 @@ rec {
110
110
drv = testCrate . override
111
111
(
112
112
_ : {
113
- buildTests = true ;
113
+ buildKinds = [ "test" ] ;
114
114
}
115
115
) ;
116
116
# If the user hasn't set any pre/post commands, we don't want to
@@ -176,7 +176,8 @@ rec {
176
176
, features ? rootFeatures
177
177
, crateOverrides ? defaultCrateOverrides
178
178
, buildRustCrateForPkgsFunc ? null
179
- , runTests ? false
179
+ # Available: [ "lib" "bin" ] or ["test" "bench" "example"]
180
+ , buildKinds ? [ "lib" "bin" ]
180
181
, testCrateFlags ? [ ]
181
182
, testInputs ? [ ]
182
183
# Any command to run immediatelly before a test is executed.
@@ -188,13 +189,25 @@ rec {
188
189
(
189
190
{ features
190
191
, crateOverrides
191
- , runTests
192
+ , buildKinds
192
193
, testCrateFlags
193
194
, testInputs
194
195
, testPreRun
195
196
, testPostRun
196
197
} :
197
198
let
199
+ isDevBuild =
200
+ let
201
+ inherit ( pkgs . buildRustCrateHelpers . kinds ) isLib isBin isExample isTest isBench ;
202
+
203
+ notDev = builtins . any ( k : isLib k || isBin k ) buildKinds ;
204
+ isDev = builtins . any ( k : isBench k || isExample k || isTest k ) buildKinds ;
205
+ in
206
+ assert ( buildKinds != [ ] ) ;
207
+ # Can't have build dev and non dev kinds
208
+ assert ( notDev != isDev ) ;
209
+ isDev ;
210
+
198
211
buildRustCrateForPkgsFuncOverriden =
199
212
if buildRustCrateForPkgsFunc != null
200
213
then buildRustCrateForPkgsFunc
@@ -207,31 +220,16 @@ rec {
207
220
defaultCrateOverrides = crateOverrides ;
208
221
}
209
222
) ;
223
+
210
224
builtRustCrates = builtRustCratesWithFeatures {
211
- inherit packageId features ;
212
- buildRustCrateForPkgsFunc = buildRustCrateForPkgsFuncOverriden ;
213
- runTests = false ;
214
- } ;
215
- builtTestRustCrates = builtRustCratesWithFeatures {
216
- inherit packageId features ;
225
+ inherit packageId features buildKinds isDevBuild ;
217
226
buildRustCrateForPkgsFunc = buildRustCrateForPkgsFuncOverriden ;
218
- runTests = true ;
219
227
} ;
220
- drv = builtRustCrates . crates . ${ packageId } ;
221
- testDrv = builtTestRustCrates . crates . ${ packageId } ;
222
- derivation =
223
- if runTests then
224
- crateWithTest
225
- {
226
- crate = drv ;
227
- testCrate = testDrv ;
228
- inherit testCrateFlags testInputs testPreRun testPostRun ;
229
- }
230
- else drv ;
228
+
231
229
in
232
- derivation
230
+ builtRustCrates . crates . ${ packageId }
233
231
)
234
- { inherit features crateOverrides runTests testCrateFlags testInputs testPreRun testPostRun ; } ;
232
+ { inherit features crateOverrides buildKinds testCrateFlags testInputs testPreRun testPostRun ; } ;
235
233
236
234
/* Returns an attr set with packageId mapped to the result of buildRustCrateForPkgsFunc
237
235
for the corresponding crate.
@@ -241,21 +239,24 @@ rec {
241
239
, features
242
240
, crateConfigs ? crates
243
241
, buildRustCrateForPkgsFunc
244
- , runTests
242
+ , buildKinds
243
+ , isDevBuild
245
244
, makeTarget ? makeDefaultTarget
246
245
} @ args :
247
246
assert ( builtins . isAttrs crateConfigs ) ;
248
247
assert ( builtins . isString packageId ) ;
249
248
assert ( builtins . isList features ) ;
250
249
assert ( builtins . isAttrs ( makeTarget stdenv . hostPlatform ) ) ;
251
- assert ( builtins . isBool runTests ) ;
250
+ assert ( builtins . isBool isDevBuild ) ;
251
+ assert ( builtins . isList buildKinds ) ;
252
252
let
253
253
rootPackageId = packageId ;
254
254
mergedFeatures = mergePackageFeatures
255
255
(
256
256
args // {
257
257
inherit rootPackageId ;
258
- target = makeTarget stdenv . hostPlatform // { test = runTests ; } ;
258
+ # What does test do for target?
259
+ target = makeTarget stdenv . hostPlatform // { test = false ; } ;
259
260
}
260
261
) ;
261
262
# Memoize built packages so that reappearing packages are only built once.
@@ -277,7 +278,7 @@ rec {
277
278
builtins . removeAttrs crateConfig' [ "resolvedDefaultFeatures" "devDependencies" ] ;
278
279
devDependencies =
279
280
lib . optionals
280
- ( runTests && packageId == rootPackageId )
281
+ ( isDevBuild && packageId == rootPackageId )
281
282
( crateConfig' . devDependencies or [ ] ) ;
282
283
dependencies =
283
284
dependencyDerivations {
@@ -351,6 +352,7 @@ rec {
351
352
}
352
353
) ;
353
354
extraRustcOpts = lib . lists . optional ( targetFeatures != [ ] ) "-C target-feature=${ lib . concatMapStringsSep "," ( x : "+${ x } " ) targetFeatures } " ;
355
+ buildKinds = if ( packageId == rootPackageId ) then buildKinds else [ "lib" ] ;
354
356
inherit features dependencies buildDependencies crateRenames release ;
355
357
}
356
358
) ;
@@ -472,7 +474,7 @@ rec {
472
474
, featuresByPackageId ? { }
473
475
, target
474
476
# Adds devDependencies to the crate with rootPackageId.
475
- , runTests ? false
477
+ , isDevBuild ? false
476
478
, ...
477
479
} @ args :
478
480
assert ( builtins . isAttrs crateConfigs ) ;
@@ -482,7 +484,7 @@ rec {
482
484
assert ( builtins . isList dependencyPath ) ;
483
485
assert ( builtins . isAttrs featuresByPackageId ) ;
484
486
assert ( builtins . isAttrs target ) ;
485
- assert ( builtins . isBool runTests ) ;
487
+ assert ( builtins . isBool isDevBuild ) ;
486
488
let
487
489
crateConfig = crateConfigs . "${ packageId } " or ( builtins . throw "Package not found: ${ packageId } " ) ;
488
490
expandedFeatures = expandFeatures ( crateConfig . features or { } ) features ;
@@ -517,7 +519,7 @@ rec {
517
519
mergePackageFeatures {
518
520
features = combinedFeatures ;
519
521
featuresByPackageId = cache ;
520
- inherit crateConfigs packageId target runTests rootPackageId ;
522
+ inherit crateConfigs packageId target isDevBuild rootPackageId ;
521
523
}
522
524
) ;
523
525
cacheWithSelf =
@@ -533,7 +535,7 @@ rec {
533
535
(
534
536
crateConfig . dependencies or [ ]
535
537
++ lib . optionals
536
- ( runTests && packageId == rootPackageId )
538
+ ( isDevBuild && packageId == rootPackageId )
537
539
( crateConfig . devDependencies or [ ] )
538
540
) ;
539
541
cacheWithAll =
0 commit comments