@@ -20,6 +20,7 @@ use failure::err_msg;
2020/// all-features = true
2121/// no-default-features = true
2222/// default-target = "x86_64-unknown-linux-gnu"
23+ /// extra-targets = [ "x86_64-apple-darwin", "x86_64-pc-windows-msvc" ]
2324/// rustc-args = [ "--example-rustc-arg" ]
2425/// rustdoc-args = [ "--example-rustdoc-arg" ]
2526/// ```
@@ -43,6 +44,11 @@ pub struct Metadata {
4344 /// is always built on this target. You can change default target by setting this.
4445 pub default_target : Option < String > ,
4546
47+ /// Docs.rs doesn't automatically build extra targets for crates. If you want a crate to build
48+ /// for multiple targets, set `extra-targets` to the list of targets to build, in addition to
49+ /// `default-target`.
50+ pub extra_targets : Vec < String > ,
51+
4652 /// List of command line arguments for `rustc`.
4753 pub rustc_args : Option < Vec < String > > ,
4854
@@ -87,6 +93,7 @@ impl Metadata {
8793 default_target : None ,
8894 rustc_args : None ,
8995 rustdoc_args : None ,
96+ extra_targets : Vec :: new ( ) ,
9097 }
9198 }
9299
@@ -111,6 +118,9 @@ impl Metadata {
111118 . and_then ( |v| v. as_bool ( ) ) . unwrap_or ( metadata. all_features ) ;
112119 metadata. default_target = table. get ( "default-target" )
113120 . and_then ( |v| v. as_str ( ) ) . map ( |v| v. to_owned ( ) ) ;
121+ metadata. extra_targets = table. get ( "extra-targets" ) . and_then ( |f| f. as_array ( ) )
122+ . and_then ( |f| f. iter ( ) . map ( |v| v. as_str ( ) . map ( |v| v. to_owned ( ) ) ) . collect ( ) )
123+ . unwrap_or_default ( ) ;
114124 metadata. rustc_args = table. get ( "rustc-args" ) . and_then ( |f| f. as_array ( ) )
115125 . and_then ( |f| f. iter ( ) . map ( |v| v. as_str ( ) . map ( |v| v. to_owned ( ) ) ) . collect ( ) ) ;
116126 metadata. rustdoc_args = table. get ( "rustdoc-args" ) . and_then ( |f| f. as_array ( ) )
@@ -140,6 +150,7 @@ mod test {
140150 all-features = true
141151 no-default-features = true
142152 default-target = "x86_64-unknown-linux-gnu"
153+ extra-targets = [ "x86_64-apple-darwin", "x86_64-pc-windows-msvc" ]
143154 rustc-args = [ "--example-rustc-arg" ]
144155 rustdoc-args = [ "--example-rustdoc-arg" ]
145156 "# ;
@@ -159,6 +170,11 @@ mod test {
159170
160171 assert_eq ! ( metadata. default_target. unwrap( ) , "x86_64-unknown-linux-gnu" . to_owned( ) ) ;
161172
173+ let extra_targets = metadata. extra_targets ;
174+ assert_eq ! ( extra_targets. len( ) , 2 ) ;
175+ assert_eq ! ( extra_targets[ 0 ] , "x86_64-apple-darwin" ) ;
176+ assert_eq ! ( extra_targets[ 1 ] , "x86_64-pc-windows-msvc" ) ;
177+
162178 let rustc_args = metadata. rustc_args . unwrap ( ) ;
163179 assert_eq ! ( rustc_args. len( ) , 1 ) ;
164180 assert_eq ! ( rustc_args[ 0 ] , "--example-rustc-arg" . to_owned( ) ) ;
0 commit comments