@@ -137,6 +137,11 @@ impl Metadata {
137
137
let mut all_targets: Vec < _ > = self . default_target . as_deref ( ) . into_iter ( ) . collect ( ) ;
138
138
match & self . extra_targets {
139
139
Some ( targets) => all_targets. extend ( targets. iter ( ) . map ( |s| s. as_str ( ) ) ) ,
140
+ None if all_targets. is_empty ( ) => {
141
+ // Make sure HOST_TARGET is first
142
+ all_targets. push ( HOST_TARGET ) ;
143
+ all_targets. extend ( TARGETS . iter ( ) . copied ( ) . filter ( |& t| t != HOST_TARGET ) ) ;
144
+ }
140
145
None => all_targets. extend ( TARGETS . iter ( ) . copied ( ) ) ,
141
146
} ;
142
147
@@ -242,48 +247,47 @@ mod test {
242
247
}
243
248
#[ test]
244
249
fn test_select_extra_targets ( ) {
245
- use crate :: docbuilder:: rustwide_builder:: TARGETS ;
246
-
247
- let mut metadata = Metadata {
248
- extra_targets : None ,
249
- ..Metadata :: default ( )
250
- } ;
251
- const DEFAULT_TARGET : & str = "x86-unknown-linux-gnu" ;
250
+ use crate :: docbuilder:: rustwide_builder:: { HOST_TARGET , TARGETS } ;
252
251
252
+ let mut metadata = Metadata :: default ( ) ;
253
253
// unchanged default_target, extra targets not specified
254
- let tier_one = metadata. select_extra_targets ( DEFAULT_TARGET ) ;
255
- // should be equal to TARGETS except for DEFAULT_TARGET
254
+ let ( default, tier_one) = metadata. select_extra_targets ( ) ;
255
+ assert_eq ! ( default , HOST_TARGET ) ;
256
+ // should be equal to TARGETS \ {HOST_TARGET}
256
257
for actual in & tier_one {
257
258
assert ! ( TARGETS . contains( actual) ) ;
258
259
}
259
260
for expected in TARGETS {
260
- if * expected == DEFAULT_TARGET {
261
- assert ! ( !tier_one. contains( DEFAULT_TARGET ) ) ;
261
+ if * expected == HOST_TARGET {
262
+ assert ! ( !tier_one. contains( & HOST_TARGET ) ) ;
262
263
} else {
263
264
assert ! ( tier_one. contains( expected) ) ;
264
265
}
265
266
}
266
267
267
268
// unchanged default_target, extra targets specified to be empty
268
269
metadata. extra_targets = Some ( Vec :: new ( ) ) ;
269
- assert ! ( metadata. select_extra_targets( DEFAULT_TARGET ) . is_empty( ) ) ;
270
+ let ( default, others) = metadata. select_extra_targets ( ) ;
271
+ assert_eq ! ( default , HOST_TARGET ) ;
272
+ assert ! ( others. is_empty( ) ) ;
270
273
271
- // unchanged default_target, extra targets includes targets besides default_target
274
+ // unchanged default_target, extra targets non-empty
272
275
metadata. extra_targets = Some ( vec ! [ "i686-pc-windows-msvc" . into( ) , "i686-apple-darwin" . into( ) ] ) ;
273
- let extras = metadata. select_extra_targets ( DEFAULT_TARGET ) ;
274
- assert_eq ! ( extras . len ( ) , 2 ) ;
275
- assert ! ( extras . contains ( "i686-pc-windows-msvc" ) ) ;
276
- assert ! ( extras . contains( "i686-apple-darwin" ) ) ;
276
+ let ( default , others ) = metadata. select_extra_targets ( ) ;
277
+ assert_eq ! ( default , "i686-pc-windows-msvc" ) ;
278
+ assert_eq ! ( others . len ( ) , 1 ) ;
279
+ assert ! ( others . contains( & "i686-apple-darwin" ) ) ;
277
280
278
281
// make sure that default_target is not built twice
279
- metadata. extra_targets = Some ( vec ! [ DEFAULT_TARGET . into( ) ] ) ;
280
- assert ! ( metadata. select_extra_targets( DEFAULT_TARGET ) . is_empty( ) ) ;
282
+ metadata. extra_targets = Some ( vec ! [ HOST_TARGET . into( ) ] ) ;
283
+ let ( default, others) = metadata. select_extra_targets ( ) ;
284
+ assert_eq ! ( default , HOST_TARGET ) ;
285
+ assert ! ( others. is_empty( ) ) ;
281
286
282
287
// make sure that duplicates are removed
283
288
metadata. extra_targets = Some ( vec ! [ "i686-pc-windows-msvc" . into( ) , "i686-pc-windows-msvc" . into( ) ] ) ;
284
- assert_eq ! ( metadata. select_extra_targets( DEFAULT_TARGET ) . len( ) , 1 ) ;
285
-
286
- // try it with a different default target just for sanity
287
- assert ! ( metadata. select_extra_targets( "i686-pc-windows-msvc" ) . is_empty( ) ) ;
289
+ let ( default, others) = metadata. select_extra_targets ( ) ;
290
+ assert_eq ! ( default , "i686-pc-windows-msvc" ) ;
291
+ assert ! ( others. is_empty( ) ) ;
288
292
}
289
293
}
0 commit comments