From 62969d1d377d61215a3f7ba6bce8e99b176279a4 Mon Sep 17 00:00:00 2001 From: Jan Likar Date: Fri, 29 Jan 2016 00:32:47 +0100 Subject: [PATCH] Fix issues Fix #1570 based on commits from PR #2056 by @tsurai to master --- src/cargo/ops/cargo_compile.rs | 48 ++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/src/cargo/ops/cargo_compile.rs b/src/cargo/ops/cargo_compile.rs index a899fcefc20..5263c594b34 100644 --- a/src/cargo/ops/cargo_compile.rs +++ b/src/cargo/ops/cargo_compile.rs @@ -155,7 +155,7 @@ pub fn compile_pkg<'a>(root_package: &Package, if spec.len() > 0 && (no_default_features || features.len() > 0) { bail!("features cannot be modified when the main package \ - is not being built"); + is not being built"); } if jobs == Some(0) { @@ -166,7 +166,6 @@ pub fn compile_pkg<'a>(root_package: &Package, try!(resolve_dependencies(root_package, config, source, features, no_default_features)) }; - let all_feature = resolve_with_overrides.features(resolve_with_overrides.root()); let mut invalid_spec = vec![]; let pkgids = if spec.len() > 0 { @@ -199,8 +198,9 @@ pub fn compile_pkg<'a>(root_package: &Package, panic!("`rustc` and `rustdoc` should not accept multiple `-p` flags") } (Some(args), _) => { + let all_features = resolve_with_overrides.features(to_builds[0].package_id()); let targets = try!(generate_targets(to_builds[0], profiles, - mode, filter, all_feature, release)); + mode, filter, all_features, release)); if targets.len() == 1 { let (target, profile) = targets[0]; let mut profile = profile.clone(); @@ -213,8 +213,9 @@ pub fn compile_pkg<'a>(root_package: &Package, } } (None, Some(args)) => { + let all_features = resolve_with_overrides.features(to_builds[0].package_id()); let targets = try!(generate_targets(to_builds[0], profiles, - mode, filter, all_feature, release)); + mode, filter, all_features, release)); if targets.len() == 1 { let (target, profile) = targets[0]; let mut profile = profile.clone(); @@ -228,8 +229,9 @@ pub fn compile_pkg<'a>(root_package: &Package, } (None, None) => { for &to_build in to_builds.iter() { + let all_features = resolve_with_overrides.features(to_build.package_id()); let targets = try!(generate_targets(to_build, profiles, mode, - filter, all_feature, release)); + filter, all_features, release)); package_targets.push((to_build, targets)); } } @@ -316,13 +318,13 @@ fn generate_targets<'a>(pkg: &'a Package, CompileMode::Build => build, CompileMode::Doc { .. } => &profiles.doc, }; - let targets = match *filter { + let mut targets = match *filter { CompileFilter::Everything => { match mode { CompileMode::Bench => { - Ok(pkg.targets().iter().filter(|t| t.benched()).map(|t| { + pkg.targets().iter().filter(|t| t.benched()).map(|t| { (t, profile) - }).collect::>()) + }).collect::>() } CompileMode::Test => { let mut base = pkg.targets().iter().filter(|t| { @@ -338,16 +340,16 @@ fn generate_targets<'a>(pkg: &'a Package, base.push((t, build)); } } - Ok(base) + base } CompileMode::Build => { - Ok(pkg.targets().iter().filter(|t| { + pkg.targets().iter().filter(|t| { t.is_bin() || t.is_lib() - }).map(|t| (t, profile)).collect()) + }).map(|t| (t, profile)).collect() } CompileMode::Doc { .. } => { - Ok(pkg.targets().iter().filter(|t| t.documented()) - .map(|t| (t, profile)).collect()) + pkg.targets().iter().filter(|t| t.documented()) + .map(|t| (t, profile)).collect() } } } @@ -392,19 +394,19 @@ fn generate_targets<'a>(pkg: &'a Package, try!(find(tests, "test", TargetKind::Test, test)); try!(find(benches, "bench", TargetKind::Bench, &profiles.bench)); } - Ok(targets) + targets } }; - targets.map(|x| x.iter().filter_map(|&(t, p)| { - match (t.is_lib(), t.features()) { - (true, _) | (false, None) => Some((t, p)), - (false, Some(v)) if v.iter().filter(|&f| { - features.map_or(true, |x| !x.contains(f)) - }).count() == 0 => Some((t, p)), - _ => None - } - }).collect()) + targets.retain(|&(t, _)| { + t.is_lib() || + t.features().is_none() || + t.features().unwrap().iter().filter(|&f| { + features.map_or(true, |x| !x.contains(f)) + }).count() == 0 + }); + + Ok(targets) } /// Read the `paths` configuration variable to discover all path overrides that