@@ -129,6 +129,12 @@ pub struct Metadata {
129129 /// List of command line arguments for `rustdoc`.
130130 #[ serde( default ) ]
131131 rustdoc_args : Vec < String > ,
132+
133+ /// List of command line arguments for `cargo`.
134+ ///
135+ /// These cannot be a subcommand, they may only be options.
136+ #[ serde( default ) ]
137+ cargo_args : Vec < String > ,
132138}
133139
134140/// The targets that should be built for a crate.
@@ -264,6 +270,7 @@ impl Metadata {
264270 }
265271
266272 cargo_args. extend ( additional_args. iter ( ) . map ( |s| s. to_owned ( ) ) ) ;
273+ cargo_args. extend_from_slice ( & self . cargo_args ) ;
267274 cargo_args. push ( "--" . into ( ) ) ;
268275 cargo_args. extend_from_slice ( & self . rustdoc_args ) ;
269276 cargo_args. extend ( rustdoc_args. iter ( ) . map ( |s| s. to_owned ( ) ) ) ;
@@ -336,6 +343,7 @@ mod test_parsing {
336343 targets = [ "x86_64-apple-darwin", "x86_64-pc-windows-msvc" ]
337344 rustc-args = [ "--example-rustc-arg" ]
338345 rustdoc-args = [ "--example-rustdoc-arg" ]
346+ cargo-args = [ "-Zbuild-std" ]
339347 "# ;
340348
341349 let metadata = Metadata :: from_str ( manifest) . unwrap ( ) ;
@@ -369,6 +377,9 @@ mod test_parsing {
369377 assert_eq ! ( rustdoc_args[ 0 ] , "--example-rustdoc-arg" . to_owned( ) ) ;
370378 assert_eq ! ( rustdoc_args[ 1 ] , "-Z" . to_owned( ) ) ;
371379 assert_eq ! ( rustdoc_args[ 2 ] , "unstable-options" . to_owned( ) ) ;
380+
381+ let cargo_args = metadata. cargo_args ;
382+ assert_eq ! ( cargo_args. as_slice( ) , & [ "-Zbuild-std" ] ) ;
372383 }
373384
374385 #[ test]
@@ -678,5 +689,19 @@ mod test_calculations {
678689 "--" . into( ) ,
679690 ] ;
680691 assert_eq ! ( metadata. cargo_args( & [ ] , & [ ] ) , expected_args) ;
692+
693+ // cargo flags
694+ let metadata = Metadata {
695+ cargo_args : vec ! [ "-Zbuild-std" . into( ) ] ,
696+ ..Metadata :: default ( )
697+ } ;
698+ let expected_args = vec ! [
699+ String :: from( "rustdoc" ) ,
700+ "--lib" . into( ) ,
701+ "-Zrustdoc-map" . into( ) ,
702+ "-Zbuild-std" . into( ) ,
703+ "--" . into( ) ,
704+ ] ;
705+ assert_eq ! ( metadata. cargo_args( & [ ] , & [ ] ) , expected_args) ;
681706 }
682707}
0 commit comments