From 183c59c0b3b953ac4a672a91f8b6c930911f7c16 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 23 May 2016 08:44:27 -0700 Subject: [PATCH] Fix build scripts and panic=abort Build scripts were apparently always compiled with the "dev" profile rather than the standard "match whatever the normal build was" profile, which meant that if dev/release disagreed on panic=abort you'd get compile errors. Seems bad! This commit fixes this by just having build scripts always compile with the same profile as libraries (for now), as this was the original intention anyway. Closes #2726 --- src/cargo/ops/cargo_rustc/context.rs | 6 ++-- tests/test_cargo_compile_custom_build.rs | 42 ++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/cargo/ops/cargo_rustc/context.rs b/src/cargo/ops/cargo_rustc/context.rs index 0c914b40693..bd5a76ba7a5 100644 --- a/src/cargo/ops/cargo_rustc/context.rs +++ b/src/cargo/ops/cargo_rustc/context.rs @@ -632,10 +632,10 @@ impl<'a, 'cfg> Context<'a, 'cfg> { } } - pub fn build_script_profile(&self, _pkg: &PackageId) -> &'a Profile { - // TODO: should build scripts always be built with a dev + pub fn build_script_profile(&self, pkg: &PackageId) -> &'a Profile { + // TODO: should build scripts always be built with the same library // profile? How is this controlled at the CLI layer? - &self.profiles.dev + self.lib_profile(pkg) } pub fn rustflags_args(&self, unit: &Unit) -> CargoResult> { diff --git a/tests/test_cargo_compile_custom_build.rs b/tests/test_cargo_compile_custom_build.rs index 8dcd4874a35..f2434f26bad 100644 --- a/tests/test_cargo_compile_custom_build.rs +++ b/tests/test_cargo_compile_custom_build.rs @@ -1930,3 +1930,45 @@ test!(custom_target_dir { assert_that(p.cargo_process("build").arg("-v"), execs().with_status(0)); }); + +test!(panic_abort_with_build_scripts { + if !::is_nightly() { + return + } + let p = project("foo") + .file("Cargo.toml", r#" + [project] + name = "foo" + version = "0.5.0" + authors = [] + + [profile.release] + panic = 'abort' + + [dependencies] + a = { path = "a" } + "#) + .file("src/lib.rs", "extern crate a;") + .file("a/Cargo.toml", r#" + [project] + name = "a" + version = "0.5.0" + authors = [] + build = "build.rs" + + [build-dependencies] + b = { path = "../b" } + "#) + .file("a/src/lib.rs", "") + .file("a/build.rs", "extern crate b; fn main() {}") + .file("b/Cargo.toml", r#" + [project] + name = "b" + version = "0.5.0" + authors = [] + "#) + .file("b/src/lib.rs", ""); + + assert_that(p.cargo_process("build").arg("-v").arg("--release"), + execs().with_status(0)); +});