Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 26 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
30 changes: 21 additions & 9 deletions src/build_options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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),
Expand Down Expand Up @@ -1011,7 +1012,10 @@ fn has_abi3(deps: &HashMap<&str, &Node>) -> Result<Option<Abi3Version>> {
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
Expand Down Expand Up @@ -1053,10 +1057,10 @@ fn is_generating_import_lib(cargo_metadata: &Metadata) -> Result<bool> {
.collect::<Vec<_>>();
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,
Expand Down Expand Up @@ -1157,7 +1161,12 @@ pub fn find_bridge(cargo_metadata: &Metadata, bridge: Option<&str>) -> Result<Br
.iter()
.filter_map(|pkg| {
let name = &pkg.name;
if name == "pyo3" || name == "pyo3-ffi" || name == "cpython" || name == "uniffi" {
if name == &PackageName::new("pyo3".to_string()).expect("known good packagename")
|| name
== &PackageName::new("pyo3-ffi".to_string()).expect("known good packagename")
|| name == &PackageName::new("cpython".to_string()).expect("known good packagename")
|| name == &PackageName::new("uniffi".to_string()).expect("known good packagename")
{
Some((name.as_ref(), pkg))
} else {
None
Expand Down Expand Up @@ -1222,7 +1231,10 @@ pub fn find_bridge(cargo_metadata: &Metadata, bridge: Option<&str>) -> Result<Br
if !bridge.is_bin() && bridge.is_pyo3_crate(lib) {
let lib_name = lib.as_str();
let pyo3_node = deps[lib_name];
if !pyo3_node.features.contains(&"extension-module".to_string()) {
if !pyo3_node
.features
.contains(&FeatureName::new("extension-module".to_string()))
{
let version = &cargo_metadata[&pyo3_node.id].version;
if (version.major, version.minor) < (0, 26) {
// pyo3 0.26+ will use the `PYO3_BUILD_EXTENSION_MODULE` env var instead
Expand Down
6 changes: 5 additions & 1 deletion src/compile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use cargo_metadata::CrateType;
use fat_macho::FatWriter;
use fs_err::{self as fs, File};
use normpath::PathExt;
use pep508_rs::PackageName;
use std::collections::HashMap;
use std::env;
use std::io::{BufReader, Read};
Expand Down Expand Up @@ -682,7 +683,10 @@ fn pyo3_version(cargo_metadata: &cargo_metadata::Metadata) -> 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
Expand Down
2 changes: 1 addition & 1 deletion src/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down
2 changes: 1 addition & 1 deletion src/source_distribution.rs
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@ pub fn find_path_deps(cargo_metadata: &Metadata) -> Result<HashMap<String, PathD
.find(|package| &package.id == dep_id)
.unwrap()
.name;
&package.name == dep_name
*dep_name == package.name
})
.unwrap();
if let Some(path) = &dependency.path {
Expand Down
Loading