@@ -137,6 +137,11 @@ impl Metadata {
137137 let mut all_targets: Vec < _ > = self . default_target . as_deref ( ) . into_iter ( ) . collect ( ) ;
138138 match & self . extra_targets {
139139 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+ }
140145 None => all_targets. extend ( TARGETS . iter ( ) . copied ( ) ) ,
141146 } ;
142147
@@ -242,48 +247,47 @@ mod test {
242247 }
243248 #[ test]
244249 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 } ;
252251
252+ let mut metadata = Metadata :: default ( ) ;
253253 // 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}
256257 for actual in & tier_one {
257258 assert ! ( TARGETS . contains( actual) ) ;
258259 }
259260 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 ) ) ;
262263 } else {
263264 assert ! ( tier_one. contains( expected) ) ;
264265 }
265266 }
266267
267268 // unchanged default_target, extra targets specified to be empty
268269 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( ) ) ;
270273
271- // unchanged default_target, extra targets includes targets besides default_target
274+ // unchanged default_target, extra targets non-empty
272275 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" ) ) ;
277280
278281 // 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( ) ) ;
281286
282287 // make sure that duplicates are removed
283288 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( ) ) ;
288292 }
289293}
0 commit comments