From 350bd8d2bf1b528668c96602a1564eada6df6f18 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Wed, 11 Mar 2015 13:32:59 -0700 Subject: [PATCH] Don't intermingle targets between packages When loading targets to compile, be sure to use the targets from the package that's being passed down to the compilation step, not the one that was passed in which is overridden. Closes #1404 --- src/cargo/ops/cargo_compile.rs | 11 ++++------- tests/test_cargo_package.rs | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/cargo/ops/cargo_compile.rs b/src/cargo/ops/cargo_compile.rs index 2c8fd0b1aa3..e848ce9f130 100644 --- a/src/cargo/ops/cargo_compile.rs +++ b/src/cargo/ops/cargo_compile.rs @@ -131,14 +131,11 @@ pub fn compile_pkg(package: &Package, options: &CompileOptions) (packages, resolved_with_overrides, registry.move_sources()) }; - let to_build = match spec { - Some(spec) => { - let pkgid = try!(resolve_with_overrides.query(spec)); - packages.iter().find(|p| p.package_id() == pkgid).unwrap() - } - None => package, + let pkgid = match spec { + Some(spec) => try!(resolve_with_overrides.query(spec)), + None => package.package_id(), }; - + let to_build = packages.iter().find(|p| p.package_id() == pkgid).unwrap(); let targets = to_build.targets().iter().filter(|target| { target.profile().is_custom_build() || match env { // doc-all == document everything, so look for doc targets diff --git a/tests/test_cargo_package.rs b/tests/test_cargo_package.rs index c2c2ab44727..a3fcbbcb07b 100644 --- a/tests/test_cargo_package.rs +++ b/tests/test_cargo_package.rs @@ -244,3 +244,21 @@ test!(include { {archiving} [..] ", packaging = PACKAGING, archiving = ARCHIVING).as_slice())); }); + +test!(package_lib_with_bin { + let p = project("foo") + .file("Cargo.toml", r#" + [project] + name = "foo" + version = "0.0.1" + authors = [] + "#) + .file("src/main.rs", r#" + extern crate foo; + fn main() {} + "#) + .file("src/lib.rs", ""); + + assert_that(p.cargo_process("package").arg("-v"), + execs().with_status(0)); +});