Merge changes I9b557dff,I5ab5b0fd,I6702ff08 into main
* changes: Detect proc macros from metadata. Convert force-rlib. Sort features.
This commit is contained in:
@@ -326,6 +326,7 @@ impl Crate {
|
||||
}
|
||||
out.cfgs.sort();
|
||||
out.cfgs.dedup();
|
||||
out.features.sort();
|
||||
|
||||
if out.name.is_empty() {
|
||||
bail!("missing --crate-name");
|
||||
|
||||
@@ -118,7 +118,7 @@ fn parse_cargo_metadata(
|
||||
Some(Extern {
|
||||
name: dependency_name.to_owned(),
|
||||
lib_name: dependency_name.to_owned(),
|
||||
extern_type: ExternType::Rust,
|
||||
extern_type: extern_type(&metadata.packages, &dependency.name),
|
||||
})
|
||||
} else {
|
||||
None
|
||||
@@ -162,7 +162,7 @@ fn parse_cargo_metadata(
|
||||
Some(Extern {
|
||||
name: dependency_name.to_owned(),
|
||||
lib_name: dependency_name.to_owned(),
|
||||
extern_type: ExternType::Rust,
|
||||
extern_type: extern_type(&metadata.packages, &dependency.name),
|
||||
})
|
||||
} else {
|
||||
None
|
||||
@@ -188,6 +188,18 @@ fn parse_cargo_metadata(
|
||||
Ok(crates)
|
||||
}
|
||||
|
||||
/// Checks whether the given package is a proc macro.
|
||||
fn extern_type(packages: &[PackageMetadata], package_name: &str) -> ExternType {
|
||||
let Some(package) = packages.iter().find(|package| package.name == package_name) else {
|
||||
return ExternType::Rust;
|
||||
};
|
||||
if package.targets.iter().any(|target| target.kind.contains(&TargetKind::ProcMacro)) {
|
||||
ExternType::ProcMacro
|
||||
} else {
|
||||
ExternType::Rust
|
||||
}
|
||||
}
|
||||
|
||||
/// Given a package ID like
|
||||
/// `"either 1.8.1 (path+file:///usr/local/google/home/qwandor/aosp/external/rust/crates/either)"`,
|
||||
/// returns the path to the package, e.g.
|
||||
|
||||
@@ -39,6 +39,8 @@ pub struct Config {
|
||||
#[serde(default)]
|
||||
features: String,
|
||||
#[serde(default)]
|
||||
force_rlib: bool,
|
||||
#[serde(default)]
|
||||
host_first_multilib: bool,
|
||||
min_sdk_version: Option<String>,
|
||||
#[serde(default)]
|
||||
@@ -89,6 +91,7 @@ impl Config {
|
||||
.collect();
|
||||
let package_config = PackageConfig {
|
||||
device_supported: self.device,
|
||||
force_rlib: self.force_rlib,
|
||||
host_supported: !self.no_host,
|
||||
host_first_multilib: self.host_first_multilib,
|
||||
dep_blocklist,
|
||||
|
||||
Reference in New Issue
Block a user