@@ -20,6 +20,7 @@ use failure::err_msg;
20
20
/// all-features = true
21
21
/// no-default-features = true
22
22
/// default-target = "x86_64-unknown-linux-gnu"
23
+ /// extra-targets = [ "x86_64-apple-darwin", "x86_64-pc-windows-msvc" ]
23
24
/// rustc-args = [ "--example-rustc-arg" ]
24
25
/// rustdoc-args = [ "--example-rustdoc-arg" ]
25
26
/// ```
@@ -43,6 +44,11 @@ pub struct Metadata {
43
44
/// is always built on this target. You can change default target by setting this.
44
45
pub default_target : Option < String > ,
45
46
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
+
46
52
/// List of command line arguments for `rustc`.
47
53
pub rustc_args : Option < Vec < String > > ,
48
54
@@ -87,6 +93,7 @@ impl Metadata {
87
93
default_target : None ,
88
94
rustc_args : None ,
89
95
rustdoc_args : None ,
96
+ extra_targets : Vec :: new ( ) ,
90
97
}
91
98
}
92
99
@@ -111,6 +118,9 @@ impl Metadata {
111
118
. and_then ( |v| v. as_bool ( ) ) . unwrap_or ( metadata. all_features ) ;
112
119
metadata. default_target = table. get ( "default-target" )
113
120
. 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 ( ) ;
114
124
metadata. rustc_args = table. get ( "rustc-args" ) . and_then ( |f| f. as_array ( ) )
115
125
. and_then ( |f| f. iter ( ) . map ( |v| v. as_str ( ) . map ( |v| v. to_owned ( ) ) ) . collect ( ) ) ;
116
126
metadata. rustdoc_args = table. get ( "rustdoc-args" ) . and_then ( |f| f. as_array ( ) )
@@ -140,6 +150,7 @@ mod test {
140
150
all-features = true
141
151
no-default-features = true
142
152
default-target = "x86_64-unknown-linux-gnu"
153
+ extra-targets = [ "x86_64-apple-darwin", "x86_64-pc-windows-msvc" ]
143
154
rustc-args = [ "--example-rustc-arg" ]
144
155
rustdoc-args = [ "--example-rustdoc-arg" ]
145
156
"# ;
@@ -159,6 +170,11 @@ mod test {
159
170
160
171
assert_eq ! ( metadata. default_target. unwrap( ) , "x86_64-unknown-linux-gnu" . to_owned( ) ) ;
161
172
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
+
162
178
let rustc_args = metadata. rustc_args . unwrap ( ) ;
163
179
assert_eq ! ( rustc_args. len( ) , 1 ) ;
164
180
assert_eq ! ( rustc_args[ 0 ] , "--example-rustc-arg" . to_owned( ) ) ;
0 commit comments