From: Aleksey Kladov Date: Wed, 2 May 2018 17:26:52 +0000 (+0300) Subject: Extract Package::lib_target method X-Git-Tag: archive/raspbian/0.35.0-2+rpi1~3^2^2^2^2^2^2^2~22^2~1^2~6^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=42f7462b4b228590967dfca720183de0b23df2bc;p=cargo.git Extract Package::lib_target method --- diff --git a/src/cargo/core/compiler/context/unit_dependencies.rs b/src/cargo/core/compiler/context/unit_dependencies.rs index e53c3da37..ba742456a 100644 --- a/src/cargo/core/compiler/context/unit_dependencies.rs +++ b/src/cargo/core/compiler/context/unit_dependencies.rs @@ -122,7 +122,7 @@ fn compute_deps<'a, 'b, 'cfg>( true }) }).filter_map(|(id, _)| match bcx.get_package(id) { - Ok(pkg) => pkg.targets().iter().find(|t| t.is_lib()).map(|t| { + Ok(pkg) => pkg.lib_target().map(|t| { let mode = check_or_build_mode(&unit.mode, t); let unit = new_unit(bcx, pkg, t, profile_for, unit.kind.for_target(t), mode); Ok((unit, profile_for)) @@ -222,7 +222,7 @@ fn compute_deps_doc<'a, 'cfg>( let mut ret = Vec::new(); for dep in deps { let dep = dep?; - let lib = match dep.targets().iter().find(|t| t.is_lib()) { + let lib = match dep.lib_target() { Some(lib) => lib, None => continue, }; diff --git a/src/cargo/core/package.rs b/src/cargo/core/package.rs index 37ad259f1..475130506 100644 --- a/src/cargo/core/package.rs +++ b/src/cargo/core/package.rs @@ -129,6 +129,10 @@ impl Package { pub fn targets(&self) -> &[Target] { self.manifest.targets() } + /// Get the library target for the package + pub fn lib_target(&self) -> Option<&Target> { + self.targets().iter().find(|t| t.is_lib()) + } /// Get the current package version pub fn version(&self) -> &Version { self.package_id().version() diff --git a/src/cargo/ops/cargo_compile.rs b/src/cargo/ops/cargo_compile.rs index 36eac5b3b..1d9388595 100644 --- a/src/cargo/ops/cargo_compile.rs +++ b/src/cargo/ops/cargo_compile.rs @@ -546,8 +546,11 @@ fn generate_targets<'a>( proposals.extend(default_units); if build_config.mode == CompileMode::Test { // Include the lib as it will be required for doctests. - if let Some(t) = pkg.targets().iter().find(|t| t.is_lib() && t.doctested()) { - proposals.push((new_unit(pkg, t, CompileMode::Build), false)); + match pkg.lib_target() { + Some(t) if t.doctested() => { + proposals.push((new_unit(pkg, t, CompileMode::Build), false)); + } + _ => {} } } } @@ -560,7 +563,7 @@ fn generate_targets<'a>( ref benches, } => { if lib { - if let Some(target) = pkg.targets().iter().find(|t| t.is_lib()) { + if let Some(target) = pkg.lib_target() { proposals.push((new_unit(pkg, target, build_config.mode), false)); } else if !all_targets { bail!("no library targets found")