Merge "Use library name rather than package name for dependencies." into main

This commit is contained in:
Treehugger Robot
2023-12-05 12:24:26 +00:00
committed by Gerrit Code Review

View File

@@ -173,7 +173,7 @@ fn parse_cargo_metadata(
&features, &features,
*target_kind, *target_kind,
false, false,
), )?,
..Default::default() ..Default::default()
}); });
} }
@@ -195,7 +195,7 @@ fn parse_cargo_metadata(
&features, &features,
*target_kind, *target_kind,
true, true,
), )?,
..Default::default() ..Default::default()
}); });
} }
@@ -210,8 +210,8 @@ fn get_externs(
features: &[String], features: &[String],
target_kind: TargetKind, target_kind: TargetKind,
test: bool, test: bool,
) -> Vec<Extern> { ) -> Result<Vec<Extern>> {
let mut externs: Vec<Extern> = package let mut externs = package
.dependencies .dependencies
.iter() .iter()
.filter_map(|dependency| { .filter_map(|dependency| {
@@ -220,17 +220,12 @@ fn get_externs(
&& dependency.kind.as_deref() != Some("build") && dependency.kind.as_deref() != Some("build")
&& (dependency.kind.is_none() || test) && (dependency.kind.is_none() || test)
{ {
let dependency_name = dependency.name.replace('-', "_"); Some(make_extern(packages, &dependency.name))
Some(Extern {
name: dependency_name.to_owned(),
lib_name: dependency_name.to_owned(),
extern_type: extern_type(packages, &dependency.name),
})
} else { } else {
None None
} }
}) })
.collect(); .collect::<Result<Vec<Extern>>>()?;
// If there is a library target and this is a binary or integration test, add the library as an // If there is a library target and this is a binary or integration test, add the library as an
// extern. // extern.
@@ -249,19 +244,29 @@ fn get_externs(
externs.sort(); externs.sort();
externs.dedup(); externs.dedup();
externs Ok(externs)
} }
/// Checks whether the given package is a proc macro. fn make_extern(packages: &[PackageMetadata], package_name: &str) -> Result<Extern> {
fn extern_type(packages: &[PackageMetadata], package_name: &str) -> ExternType {
let Some(package) = packages.iter().find(|package| package.name == package_name) else { let Some(package) = packages.iter().find(|package| package.name == package_name) else {
return ExternType::Rust; bail!("package {} not found in metadata", package_name);
}; };
if package.targets.iter().any(|target| target.kind.contains(&TargetKind::ProcMacro)) { let Some(target) = package.targets.iter().find(|target| {
ExternType::ProcMacro target.kind.contains(&TargetKind::Lib) || target.kind.contains(&TargetKind::ProcMacro)
} else { }) else {
ExternType::Rust bail!("Package {} didn't have any library or proc-macro targets", package_name);
} };
let lib_name = target.name.replace('-', "_");
// Check whether the package is a proc macro.
let extern_type =
if package.targets.iter().any(|target| target.kind.contains(&TargetKind::ProcMacro)) {
ExternType::ProcMacro
} else {
ExternType::Rust
};
Ok(Extern { name: lib_name.clone(), lib_name, extern_type })
} }
/// Given a package ID like /// Given a package ID like