From 42f7462b4b228590967dfca720183de0b23df2bc Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 2 May 2018 20:26:52 +0300 Subject: [PATCH] Extract Package::lib_target method --- src/cargo/core/compiler/context/unit_dependencies.rs | 4 ++-- src/cargo/core/package.rs | 4 ++++ src/cargo/ops/cargo_compile.rs | 9 ++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) 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") -- 2.30.2