@@ -57,6 +57,24 @@ fn check_cli<const N: usize>(paths: [&str; N]) {
57
57
) ;
58
58
}
59
59
60
+ macro_rules! std {
61
+ ( $host: ident => $target: ident, stage = $stage: literal) => {
62
+ compile:: Std :: new(
63
+ Compiler { host: TargetSelection :: from_user( stringify!( $host) ) , stage: $stage } ,
64
+ TargetSelection :: from_user( stringify!( $target) ) ,
65
+ )
66
+ } ;
67
+ }
68
+
69
+ macro_rules! rustc {
70
+ ( $host: ident => $target: ident, stage = $stage: literal) => {
71
+ compile:: Rustc :: new(
72
+ Compiler { host: TargetSelection :: from_user( stringify!( $host) ) , stage: $stage } ,
73
+ TargetSelection :: from_user( stringify!( $target) ) ,
74
+ )
75
+ } ;
76
+ }
77
+
60
78
#[ test]
61
79
fn test_valid ( ) {
62
80
// make sure multi suite paths are accepted
@@ -117,6 +135,17 @@ fn test_exclude_kind() {
117
135
assert ! ( run_build( & [ path] , config) . contains:: <tool:: CargoTest >( ) ) ;
118
136
}
119
137
138
+ /// Ensure that if someone passes both a single crate and `library`, all library crates get built.
139
+ #[ test]
140
+ fn alias_and_path_for_library ( ) {
141
+ let mut cache =
142
+ run_build ( & [ "library" . into ( ) , "core" . into ( ) ] , configure ( "build" , & [ "A" ] , & [ "A" ] ) ) ;
143
+ assert_eq ! (
144
+ first( cache. all:: <compile:: Std >( ) ) ,
145
+ & [ std!( A => A , stage = 0 ) , std!( A => A , stage = 1 ) ]
146
+ ) ;
147
+ }
148
+
120
149
mod defaults {
121
150
use super :: { configure, first, run_build} ;
122
151
use crate :: builder:: * ;
@@ -130,10 +159,7 @@ mod defaults {
130
159
let a = TargetSelection :: from_user ( "A" ) ;
131
160
assert_eq ! (
132
161
first( cache. all:: <compile:: Std >( ) ) ,
133
- & [
134
- compile:: Std { compiler: Compiler { host: a, stage: 0 } , target: a } ,
135
- compile:: Std { compiler: Compiler { host: a, stage: 1 } , target: a } ,
136
- ]
162
+ & [ std!( A => A , stage = 0 ) , std!( A => A , stage = 1 ) , ]
137
163
) ;
138
164
assert ! ( !cache. all:: <compile:: Assemble >( ) . is_empty( ) ) ;
139
165
// Make sure rustdoc is only built once.
@@ -143,10 +169,7 @@ mod defaults {
143
169
// - this is the compiler it's _linked_ to, not built with.
144
170
& [ tool:: Rustdoc { compiler: Compiler { host: a, stage: 1 } } ] ,
145
171
) ;
146
- assert_eq ! (
147
- first( cache. all:: <compile:: Rustc >( ) ) ,
148
- & [ compile:: Rustc { compiler: Compiler { host: a, stage: 0 } , target: a } , ]
149
- ) ;
172
+ assert_eq ! ( first( cache. all:: <compile:: Rustc >( ) ) , & [ rustc!( A => A , stage = 0 ) ] , ) ;
150
173
}
151
174
152
175
#[ test]
@@ -155,10 +178,7 @@ mod defaults {
155
178
let mut cache = run_build ( & [ ] , config) ;
156
179
157
180
let a = TargetSelection :: from_user ( "A" ) ;
158
- assert_eq ! (
159
- first( cache. all:: <compile:: Std >( ) ) ,
160
- & [ compile:: Std { compiler: Compiler { host: a, stage: 0 } , target: a } , ]
161
- ) ;
181
+ assert_eq ! ( first( cache. all:: <compile:: Std >( ) ) , & [ std!( A => A , stage = 0 ) ] ) ;
162
182
assert ! ( !cache. all:: <compile:: Assemble >( ) . is_empty( ) ) ;
163
183
assert_eq ! (
164
184
first( cache. all:: <tool:: Rustdoc >( ) ) ,
@@ -185,10 +205,10 @@ mod defaults {
185
205
assert_eq ! (
186
206
first( cache. all:: <compile:: Std >( ) ) ,
187
207
& [
188
- compile :: Std { compiler : Compiler { host : a , stage: 0 } , target : a } ,
189
- compile :: Std { compiler : Compiler { host : a , stage: 1 } , target : a } ,
190
- compile :: Std { compiler : Compiler { host : a , stage: 0 } , target : b } ,
191
- compile :: Std { compiler : Compiler { host : a , stage: 1 } , target : b } ,
208
+ std! ( A => A , stage = 0 ) ,
209
+ std! ( A => A , stage = 1 ) ,
210
+ std! ( A => B , stage = 0 ) ,
211
+ std! ( A => B , stage = 1 ) ,
192
212
]
193
213
) ;
194
214
assert_eq ! (
@@ -208,10 +228,7 @@ mod defaults {
208
228
) ;
209
229
assert_eq ! (
210
230
first( cache. all:: <compile:: Rustc >( ) ) ,
211
- & [
212
- compile:: Rustc { compiler: Compiler { host: a, stage: 0 } , target: a } ,
213
- compile:: Rustc { compiler: Compiler { host: a, stage: 0 } , target: b } ,
214
- ]
231
+ & [ rustc!( A => A , stage = 0 ) , rustc!( A => B , stage = 0 ) , ]
215
232
) ;
216
233
}
217
234
@@ -334,19 +351,18 @@ mod dist {
334
351
assert_eq ! (
335
352
first( cache. all:: <compile:: Std >( ) ) ,
336
353
& [
337
- compile :: Std { compiler : Compiler { host : a , stage: 0 } , target : a } ,
338
- compile :: Std { compiler : Compiler { host : a , stage: 1 } , target : a } ,
339
- compile :: Std { compiler : Compiler { host : a , stage: 2 } , target : a } ,
340
- compile :: Std { compiler : Compiler { host : a , stage: 1 } , target : b } ,
341
- compile :: Std { compiler : Compiler { host : a , stage: 2 } , target : b } ,
354
+ std! ( A => A , stage = 0 ) ,
355
+ std! ( A => A , stage = 1 ) ,
356
+ std! ( A => A , stage = 2 ) ,
357
+ std! ( A => B , stage = 1 ) ,
358
+ std! ( A => B , stage = 2 ) ,
342
359
] ,
343
360
) ;
344
361
assert_eq ! ( first( cache. all:: <dist:: Src >( ) ) , & [ dist:: Src ] ) ;
345
362
}
346
363
347
364
#[ test]
348
365
fn dist_only_cross_host ( ) {
349
- let a = TargetSelection :: from_user ( "A" ) ;
350
366
let b = TargetSelection :: from_user ( "B" ) ;
351
367
let mut config = configure ( & [ "A" , "B" ] , & [ "A" , "B" ] ) ;
352
368
config. docs = false ;
@@ -360,10 +376,7 @@ mod dist {
360
376
) ;
361
377
assert_eq ! (
362
378
first( cache. all:: <compile:: Rustc >( ) ) ,
363
- & [
364
- compile:: Rustc { compiler: Compiler { host: a, stage: 0 } , target: a } ,
365
- compile:: Rustc { compiler: Compiler { host: a, stage: 1 } , target: b } ,
366
- ]
379
+ & [ rustc!( A => A , stage = 0 ) , rustc!( A => B , stage = 1 ) , ]
367
380
) ;
368
381
}
369
382
@@ -450,11 +463,11 @@ mod dist {
450
463
assert_eq ! (
451
464
first( cache. all:: <compile:: Std >( ) ) ,
452
465
& [
453
- compile :: Std { compiler : Compiler { host : a , stage: 0 } , target : a } ,
454
- compile :: Std { compiler : Compiler { host : a , stage: 1 } , target : a } ,
455
- compile :: Std { compiler : Compiler { host : a , stage: 2 } , target : a } ,
456
- compile :: Std { compiler : Compiler { host : a , stage: 1 } , target : b } ,
457
- compile :: Std { compiler : Compiler { host : a , stage: 2 } , target : b } ,
466
+ std! ( A => A , stage = 0 ) ,
467
+ std! ( A => A , stage = 1 ) ,
468
+ std! ( A => A , stage = 2 ) ,
469
+ std! ( A => B , stage = 1 ) ,
470
+ std! ( A => B , stage = 2 ) ,
458
471
]
459
472
) ;
460
473
assert_eq ! (
@@ -474,33 +487,29 @@ mod dist {
474
487
let mut builder = Builder :: new ( & build) ;
475
488
builder. run_step_descriptions (
476
489
& Builder :: get_step_descriptions ( Kind :: Build ) ,
477
- & [ "compiler/rustc" . into ( ) , "library/std " . into ( ) ] ,
490
+ & [ "compiler/rustc" . into ( ) , "library" . into ( ) ] ,
478
491
) ;
479
492
480
- let a = TargetSelection :: from_user ( "A" ) ;
481
- let b = TargetSelection :: from_user ( "B" ) ;
482
- let c = TargetSelection :: from_user ( "C" ) ;
483
-
484
493
assert_eq ! (
485
494
first( builder. cache. all:: <compile:: Std >( ) ) ,
486
495
& [
487
- compile :: Std { compiler : Compiler { host : a , stage: 0 } , target : a } ,
488
- compile :: Std { compiler : Compiler { host : a , stage: 1 } , target : a } ,
489
- compile :: Std { compiler : Compiler { host : a , stage: 2 } , target : a } ,
490
- compile :: Std { compiler : Compiler { host : a , stage: 1 } , target : b } ,
491
- compile :: Std { compiler : Compiler { host : a , stage: 2 } , target : b } ,
492
- compile :: Std { compiler : Compiler { host : a , stage: 2 } , target : c } ,
496
+ std! ( A => A , stage = 0 ) ,
497
+ std! ( A => A , stage = 1 ) ,
498
+ std! ( A => A , stage = 2 ) ,
499
+ std! ( A => B , stage = 1 ) ,
500
+ std! ( A => B , stage = 2 ) ,
501
+ std! ( A => C , stage = 2 ) ,
493
502
]
494
503
) ;
495
- assert ! ( ! builder. cache. all:: <compile:: Assemble >( ) . is_empty ( ) ) ;
504
+ assert_eq ! ( builder. cache. all:: <compile:: Assemble >( ) . len ( ) , 5 ) ;
496
505
assert_eq ! (
497
506
first( builder. cache. all:: <compile:: Rustc >( ) ) ,
498
507
& [
499
- compile :: Rustc { compiler : Compiler { host : a , stage: 0 } , target : a } ,
500
- compile :: Rustc { compiler : Compiler { host : a , stage: 1 } , target : a } ,
501
- compile :: Rustc { compiler : Compiler { host : a , stage: 2 } , target : a } ,
502
- compile :: Rustc { compiler : Compiler { host : a , stage: 1 } , target : b } ,
503
- compile :: Rustc { compiler : Compiler { host : a , stage: 2 } , target : b } ,
508
+ rustc! ( A => A , stage = 0 ) ,
509
+ rustc! ( A => A , stage = 1 ) ,
510
+ rustc! ( A => A , stage = 2 ) ,
511
+ rustc! ( A => B , stage = 1 ) ,
512
+ rustc! ( A => B , stage = 2 ) ,
504
513
]
505
514
) ;
506
515
}
@@ -513,15 +522,10 @@ mod dist {
513
522
builder. run_step_descriptions ( & Builder :: get_step_descriptions ( Kind :: Build ) , & [ ] ) ;
514
523
515
524
let a = TargetSelection :: from_user ( "A" ) ;
516
- let c = TargetSelection :: from_user ( "C" ) ;
517
525
518
526
assert_eq ! (
519
527
first( builder. cache. all:: <compile:: Std >( ) ) ,
520
- & [
521
- compile:: Std { compiler: Compiler { host: a, stage: 0 } , target: a } ,
522
- compile:: Std { compiler: Compiler { host: a, stage: 1 } , target: a } ,
523
- compile:: Std { compiler: Compiler { host: a, stage: 2 } , target: c } ,
524
- ]
528
+ & [ std!( A => A , stage = 0 ) , std!( A => A , stage = 1 ) , std!( A => C , stage = 2 ) , ]
525
529
) ;
526
530
assert_eq ! (
527
531
first( builder. cache. all:: <compile:: Assemble >( ) ) ,
@@ -533,10 +537,7 @@ mod dist {
533
537
) ;
534
538
assert_eq ! (
535
539
first( builder. cache. all:: <compile:: Rustc >( ) ) ,
536
- & [
537
- compile:: Rustc { compiler: Compiler { host: a, stage: 0 } , target: a } ,
538
- compile:: Rustc { compiler: Compiler { host: a, stage: 1 } , target: a } ,
539
- ]
540
+ & [ rustc!( A => A , stage = 0 ) , rustc!( A => A , stage = 1 ) , ]
540
541
) ;
541
542
}
542
543
0 commit comments