Feature gate `--out-dir`
authorAleksey Kladov <aleksey.kladov@gmail.com>
Tue, 3 Apr 2018 12:43:45 +0000 (15:43 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Tue, 3 Apr 2018 12:52:45 +0000 (15:52 +0300)
src/bin/commands/build.rs
src/cargo/core/features.rs
tests/testsuite/out_dir.rs

index 21d4e860d0eecf0b84b5ec2532807db771944920..1b00ea4fdf3d6b063decc41999eb90d51b7e7dab 100644 (file)
@@ -52,6 +52,11 @@ pub fn exec(config: &mut Config, args: &ArgMatches) -> CliResult {
     let ws = args.workspace(config)?;
     let mut compile_opts = args.compile_options(config, CompileMode::Build)?;
     compile_opts.export_dir = args.value_of_path("out-dir", config);
+    if compile_opts.export_dir.is_some() && !config.cli_unstable().out_dir {
+        Err(format_err!(
+            "`--out-dir` flag is unstable, pass `-Z out-dir` to enable it"
+        ))?;
+    };
     ops::compile(&ws, &compile_opts)?;
     Ok(())
 }
index 09eff85455c4c6389a3269a888dc3736f5d29ed3..0b619d8044661cefcb8a2d9d8498a04075e6a83e 100644 (file)
@@ -286,6 +286,7 @@ pub struct CliUnstable {
     pub no_index_update: bool,
     pub avoid_dev_deps: bool,
     pub minimal_versions: bool,
+    pub out_dir: bool,
 }
 
 impl CliUnstable {
@@ -319,6 +320,7 @@ impl CliUnstable {
             "no-index-update" => self.no_index_update = true,
             "avoid-dev-deps" => self.avoid_dev_deps = true,
             "minimal-versions" => self.minimal_versions = true,
+            "out-dir" => self.out_dir = true,
             _ => bail!("unknown `-Z` flag specified: {}", k),
         }
 
index 775122c5f39499b82ed45b7212450f490b08677e..231f50122313900e7fc63f820db4efcb726cce36 100644 (file)
@@ -1,3 +1,4 @@
+use cargotest::ChannelChanger;
 use cargotest::support::{execs, project};
 use hamcrest::assert_that;
 use std::path::Path;
@@ -18,7 +19,11 @@ fn binary_with_debug() {
         .file("src/main.rs", r#"fn main() { println!("Hello, World!") }"#)
         .build();
 
-    assert_that(p.cargo("build --out-dir out"), execs().with_status(0));
+    assert_that(
+        p.cargo("build -Z out-dir --out-dir out")
+            .masquerade_as_nightly_cargo(),
+        execs().with_status(0),
+    );
     check_dir_contents(
         &p.root().join("out"),
         &["foo"],
@@ -51,7 +56,11 @@ fn static_library_with_debug() {
         )
         .build();
 
-    assert_that(p.cargo("build --out-dir out"), execs().with_status(0));
+    assert_that(
+        p.cargo("build -Z out-dir --out-dir out")
+            .masquerade_as_nightly_cargo(),
+        execs().with_status(0),
+    );
     check_dir_contents(
         &p.root().join("out"),
         &["libfoo.a"],
@@ -84,7 +93,11 @@ fn dynamic_library_with_debug() {
         )
         .build();
 
-    assert_that(p.cargo("build --out-dir out"), execs().with_status(0));
+    assert_that(
+        p.cargo("build -Z out-dir --out-dir out")
+            .masquerade_as_nightly_cargo(),
+        execs().with_status(0),
+    );
     check_dir_contents(
         &p.root().join("out"),
         &["libfoo.so"],
@@ -116,7 +129,11 @@ fn rlib_with_debug() {
         )
         .build();
 
-    assert_that(p.cargo("build --out-dir out"), execs().with_status(0));
+    assert_that(
+        p.cargo("build -Z out-dir --out-dir out")
+            .masquerade_as_nightly_cargo(),
+        execs().with_status(0),
+    );
     check_dir_contents(
         &p.root().join("out"),
         &["libfoo.rlib"],
@@ -166,7 +183,8 @@ fn include_only_the_binary_from_the_current_package() {
         .build();
 
     assert_that(
-        p.cargo("build --bin foo --out-dir out"),
+        p.cargo("build -Z out-dir --bin foo --out-dir out")
+            .masquerade_as_nightly_cargo(),
         execs().with_status(0),
     );
     check_dir_contents(