Merge "Use library name rather than package name for dependencies." into main
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user