diff --git a/Cargo.lock b/Cargo.lock index 60cb9f94d..94edf48d1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -239,6 +239,15 @@ dependencies = [ "serde", ] +[[package]] +name = "cargo-platform" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "122ec45a44b270afd1402f351b782c676b173e3c3fb28d86ff7ebfb4d86a4ee4" +dependencies = [ + "serde", +] + [[package]] name = "cargo-xwin" version = "0.18.6" @@ -277,7 +286,7 @@ dependencies = [ "anyhow", "cargo-config2", "cargo-options", - "cargo_metadata", + "cargo_metadata 0.19.2", "clap", "crc", "dirs", @@ -300,7 +309,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" dependencies = [ "camino", - "cargo-platform", + "cargo-platform 0.1.9", + "semver", + "serde", + "serde_json", + "thiserror 2.0.17", +] + +[[package]] +name = "cargo_metadata" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "981a6f317983eec002839b90fae7411a85621410ae591a9cab2ecf5cb5744873" +dependencies = [ + "camino", + "cargo-platform 0.3.1", "semver", "serde", "serde_json", @@ -1427,7 +1450,7 @@ dependencies = [ "cargo-options", "cargo-xwin", "cargo-zigbuild", - "cargo_metadata", + "cargo_metadata 0.23.0", "cbindgen", "cc", "clap", diff --git a/Cargo.toml b/Cargo.toml index 28d1eba1e..202a260db 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,7 +43,7 @@ anyhow = "1.0.80" base64 = "0.22.0" glob = "0.3.0" cargo-config2 = "0.1.24" -cargo_metadata = "0.19.0" +cargo_metadata = "0.23.0" cargo-options = "0.7.2" cbindgen = { version = "0.29.0", default-features = false } flate2 = "1.0.18" diff --git a/src/build_options.rs b/src/build_options.rs index 4c03915c2..7af3114ab 100644 --- a/src/build_options.rs +++ b/src/build_options.rs @@ -9,10 +9,11 @@ use crate::python_interpreter::{InterpreterConfig, InterpreterKind}; use crate::target::{detect_arch_from_python, is_arch_supported_by_pypi}; use crate::{BridgeModel, BuildContext, PyO3, PythonInterpreter, Target}; use anyhow::{bail, format_err, Context, Result}; -use cargo_metadata::{CrateType, PackageId, TargetKind}; +use cargo_metadata::{CrateType, FeatureName, PackageId, TargetKind}; use cargo_metadata::{Metadata, Node}; use cargo_options::heading; use pep440_rs::VersionSpecifiers; +use pep508_rs::PackageName; use serde::{Deserialize, Serialize}; use std::collections::{HashMap, HashSet}; use std::env; @@ -946,7 +947,7 @@ fn filter_cargo_targets( && target .required_features .iter() - .all(|f| resolved_features.contains(f)) + .all(|f| resolved_features.contains(&FeatureName::new(f.to_owned()))) } } _ => target.crate_types.contains(&CrateType::CDyLib), @@ -1011,7 +1012,10 @@ fn has_abi3(deps: &HashMap<&str, &Node>) -> Result> { if let Some(pyo3_crate) = deps.get(lib) { // Find the minimal abi3 python version. If there is none, abi3 hasn't been selected // This parser abi3-py{major}{minor} and returns the minimal (major, minor) tuple - let abi3_selected = pyo3_crate.features.iter().any(|x| x == "abi3"); + let abi3_selected = pyo3_crate + .features + .iter() + .any(|x| x == &FeatureName::new("abi3")); let min_abi3_version = pyo3_crate .features @@ -1053,10 +1057,10 @@ fn is_generating_import_lib(cargo_metadata: &Metadata) -> Result { .collect::>(); match pyo3_packages.as_slice() { [pyo3_crate] => { - let generate_import_lib = pyo3_crate - .features - .iter() - .any(|x| x == "generate-import-lib" || x == "generate-abi3-import-lib"); + let generate_import_lib = pyo3_crate.features.iter().any(|x| { + x == &FeatureName::new("generate-import-lib") + || x == &FeatureName::new("generate-abi3-import-lib") + }); return Ok(generate_import_lib); } _ => continue, @@ -1157,7 +1161,12 @@ pub fn find_bridge(cargo_metadata: &Metadata, bridge: Option<&str>) -> Result
) -> Result
Option<(u64, u64, .iter() .filter_map(|pkg| { let name = &pkg.name; - if name == "pyo3" || name == "pyo3-ffi" { + if name == &PackageName::new("pyo3".to_string()).expect("known good packagename") + || name + == &PackageName::new("pyo3-ffi".to_string()).expect("known good packagename") + { Some((name.as_ref(), pkg)) } else { None diff --git a/src/metadata.rs b/src/metadata.rs index 0bf3867d6..f1ae12a7f 100644 --- a/src/metadata.rs +++ b/src/metadata.rs @@ -534,7 +534,7 @@ impl Metadata24 { license: package.license.clone(), license_files, project_url, - ..Metadata24::new(name, version) + ..Metadata24::new(name.to_string(), version) }; Ok(metadata) } diff --git a/src/source_distribution.rs b/src/source_distribution.rs index 0dc7a2a50..e5cced14d 100644 --- a/src/source_distribution.rs +++ b/src/source_distribution.rs @@ -350,7 +350,7 @@ pub fn find_path_deps(cargo_metadata: &Metadata) -> Result