From 4a1ba1c8e5e37cdbeaa6b02a0fdfa8a168d6ffe2 Mon Sep 17 00:00:00 2001 From: Takayuki Nakata Date: Fri, 17 Jan 2020 22:26:58 +0900 Subject: [PATCH] Support out-dir in build section of Cargo configuration file Fixed #7555. --- src/bin/cargo/commands/build.rs | 7 ++++++- src/cargo/util/config/mod.rs | 1 + src/doc/src/reference/unstable.md | 7 +++++++ tests/testsuite/out_dir.rs | 24 ++++++++++++++++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/bin/cargo/commands/build.rs b/src/bin/cargo/commands/build.rs index df3a69c18d0..1ab83848bc5 100644 --- a/src/bin/cargo/commands/build.rs +++ b/src/bin/cargo/commands/build.rs @@ -63,7 +63,12 @@ pub fn exec(config: &mut Config, args: &ArgMatches<'_>) -> CliResult { ProfileChecking::Checked, )?; - compile_opts.export_dir = args.value_of_path("out-dir", config); + if let Some(out_dir) = args.value_of_path("out-dir", config) { + compile_opts.export_dir = Some(out_dir); + } else if let Some(out_dir) = config.build_config()?.out_dir.as_ref() { + let out_dir = out_dir.resolve_path(config); + compile_opts.export_dir = Some(out_dir); + } if compile_opts.export_dir.is_some() { config .cli_unstable() diff --git a/src/cargo/util/config/mod.rs b/src/cargo/util/config/mod.rs index bb30992ba52..44674401162 100644 --- a/src/cargo/util/config/mod.rs +++ b/src/cargo/util/config/mod.rs @@ -1643,6 +1643,7 @@ pub struct CargoBuildConfig { pub rustc_wrapper: Option, pub rustc: Option, pub rustdoc: Option, + pub out_dir: Option, } /// A type to deserialize a list of strings from a toml file. diff --git a/src/doc/src/reference/unstable.md b/src/doc/src/reference/unstable.md index efe8ac54599..cace3c97320 100644 --- a/src/doc/src/reference/unstable.md +++ b/src/doc/src/reference/unstable.md @@ -76,6 +76,13 @@ directory. Example: cargo +nightly build --out-dir=out -Z unstable-options ``` +This can also be specified in `.cargo/config` files. + +```toml +[build] +out-dir = "out" +``` + ### doctest-xcompile * Tracking Issue: [#7040](https://github.com/rust-lang/cargo/issues/7040) * Tracking Rustc Issue: [#64245](https://github.com/rust-lang/rust/issues/64245) diff --git a/tests/testsuite/out_dir.rs b/tests/testsuite/out_dir.rs index 9c2f774fab8..77079cb41f8 100644 --- a/tests/testsuite/out_dir.rs +++ b/tests/testsuite/out_dir.rs @@ -246,6 +246,30 @@ fn avoid_build_scripts() { ); } +#[cargo_test] +fn cargo_build_out_dir() { + let p = project() + .file("src/main.rs", r#"fn main() { println!("Hello, World!") }"#) + .file( + ".cargo/config", + r#" + [build] + out-dir = "out" + "#, + ) + .build(); + + p.cargo("build -Z unstable-options") + .masquerade_as_nightly_cargo() + .run(); + check_dir_contents( + &p.root().join("out"), + &["foo"], + &["foo", "foo.dSYM"], + &["foo.exe", "foo.pdb"], + ); +} + fn check_dir_contents( out_dir: &Path, expected_linux: &[&str],