@@ -57,6 +57,24 @@ fn check_cli<const N: usize>(paths: [&str; N]) {
5757 );
5858}
5959
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+
6078#[test]
6179fn test_valid() {
6280 // make sure multi suite paths are accepted
@@ -117,6 +135,17 @@ fn test_exclude_kind() {
117135 assert!(run_build(&[path], config).contains::<tool::CargoTest>());
118136}
119137
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+
120149mod defaults {
121150 use super::{configure, first, run_build};
122151 use crate::builder::*;
@@ -130,10 +159,7 @@ mod defaults {
130159 let a = TargetSelection::from_user("A");
131160 assert_eq!(
132161 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),]
137163 );
138164 assert!(!cache.all::<compile::Assemble>().is_empty());
139165 // Make sure rustdoc is only built once.
@@ -143,10 +169,7 @@ mod defaults {
143169 // - this is the compiler it's _linked_ to, not built with.
144170 &[tool::Rustdoc { compiler: Compiler { host: a, stage: 1 } }],
145171 );
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)],);
150173 }
151174
152175 #[test]
@@ -155,10 +178,7 @@ mod defaults {
155178 let mut cache = run_build(&[], config);
156179
157180 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)]);
162182 assert!(!cache.all::<compile::Assemble>().is_empty());
163183 assert_eq!(
164184 first(cache.all::<tool::Rustdoc>()),
@@ -185,10 +205,10 @@ mod defaults {
185205 assert_eq!(
186206 first(cache.all::<compile::Std>()),
187207 &[
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) ,
192212 ]
193213 );
194214 assert_eq!(
@@ -208,10 +228,7 @@ mod defaults {
208228 );
209229 assert_eq!(
210230 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),]
215232 );
216233 }
217234
@@ -334,19 +351,18 @@ mod dist {
334351 assert_eq!(
335352 first(cache.all::<compile::Std>()),
336353 &[
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) ,
342359 ],
343360 );
344361 assert_eq!(first(cache.all::<dist::Src>()), &[dist::Src]);
345362 }
346363
347364 #[test]
348365 fn dist_only_cross_host() {
349- let a = TargetSelection::from_user("A");
350366 let b = TargetSelection::from_user("B");
351367 let mut config = configure(&["A", "B"], &["A", "B"]);
352368 config.docs = false;
@@ -360,10 +376,7 @@ mod dist {
360376 );
361377 assert_eq!(
362378 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),]
367380 );
368381 }
369382
@@ -450,11 +463,11 @@ mod dist {
450463 assert_eq!(
451464 first(cache.all::<compile::Std>()),
452465 &[
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) ,
458471 ]
459472 );
460473 assert_eq!(
@@ -474,33 +487,29 @@ mod dist {
474487 let mut builder = Builder::new(&build);
475488 builder.run_step_descriptions(
476489 &Builder::get_step_descriptions(Kind::Build),
477- &["compiler/rustc".into(), "library/std ".into()],
490+ &["compiler/rustc".into(), "library".into()],
478491 );
479492
480- let a = TargetSelection::from_user("A");
481- let b = TargetSelection::from_user("B");
482- let c = TargetSelection::from_user("C");
483-
484493 assert_eq!(
485494 first(builder.cache.all::<compile::Std>()),
486495 &[
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) ,
493502 ]
494503 );
495- assert!(! builder.cache.all::<compile::Assemble>().is_empty() );
504+ assert_eq!( builder.cache.all::<compile::Assemble>().len(), 5 );
496505 assert_eq!(
497506 first(builder.cache.all::<compile::Rustc>()),
498507 &[
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) ,
504513 ]
505514 );
506515 }
@@ -513,15 +522,10 @@ mod dist {
513522 builder.run_step_descriptions(&Builder::get_step_descriptions(Kind::Build), &[]);
514523
515524 let a = TargetSelection::from_user("A");
516- let c = TargetSelection::from_user("C");
517525
518526 assert_eq!(
519527 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),]
525529 );
526530 assert_eq!(
527531 first(builder.cache.all::<compile::Assemble>()),
@@ -533,10 +537,7 @@ mod dist {
533537 );
534538 assert_eq!(
535539 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),]
540541 );
541542 }
542543
0 commit comments