diff --git a/crates/metadata/lib.rs b/crates/metadata/lib.rs index 061b37338..c7b9d0480 100644 --- a/crates/metadata/lib.rs +++ b/crates/metadata/lib.rs @@ -129,6 +129,12 @@ pub struct Metadata { /// List of command line arguments for `rustdoc`. #[serde(default)] rustdoc_args: Vec, + + /// List of command line arguments for `cargo`. + /// + /// These cannot be a subcommand, they may only be options. + #[serde(default)] + cargo_args: Vec, } /// The targets that should be built for a crate. @@ -264,6 +270,7 @@ impl Metadata { } cargo_args.extend(additional_args.iter().map(|s| s.to_owned())); + cargo_args.extend_from_slice(&self.cargo_args); cargo_args.push("--".into()); cargo_args.extend_from_slice(&self.rustdoc_args); cargo_args.extend(rustdoc_args.iter().map(|s| s.to_owned())); @@ -336,6 +343,7 @@ mod test_parsing { targets = [ "x86_64-apple-darwin", "x86_64-pc-windows-msvc" ] rustc-args = [ "--example-rustc-arg" ] rustdoc-args = [ "--example-rustdoc-arg" ] + cargo-args = [ "-Zbuild-std" ] "#; let metadata = Metadata::from_str(manifest).unwrap(); @@ -369,6 +377,9 @@ mod test_parsing { assert_eq!(rustdoc_args[0], "--example-rustdoc-arg".to_owned()); assert_eq!(rustdoc_args[1], "-Z".to_owned()); assert_eq!(rustdoc_args[2], "unstable-options".to_owned()); + + let cargo_args = metadata.cargo_args; + assert_eq!(cargo_args.as_slice(), &["-Zbuild-std"]); } #[test] @@ -678,5 +689,19 @@ mod test_calculations { "--".into(), ]; assert_eq!(metadata.cargo_args(&[], &[]), expected_args); + + // cargo flags + let metadata = Metadata { + cargo_args: vec!["-Zbuild-std".into()], + ..Metadata::default() + }; + let expected_args = vec![ + String::from("rustdoc"), + "--lib".into(), + "-Zrustdoc-map".into(), + "-Zbuild-std".into(), + "--".into(), + ]; + assert_eq!(metadata.cargo_args(&[], &[]), expected_args); } } diff --git a/templates/core/Cargo.toml.example b/templates/core/Cargo.toml.example index 22bf5c74d..99adf847e 100644 --- a/templates/core/Cargo.toml.example +++ b/templates/core/Cargo.toml.example @@ -42,3 +42,8 @@ rustc-args = ["--example-rustc-arg"] # Additional `RUSTDOCFLAGS` to set (default: []) rustdoc-args = ["--example-rustdoc-arg"] + +# List of command line arguments for `cargo`. +# +# These cannot be a subcommand, they may only be options. +cargo-args = ["-Z", "build-std"]