Improve BSD tag construction (#15829)
Some checks are pending
CI / Determine changes (push) Waiting to run
CI / lint (push) Waiting to run
CI / cargo clippy | ubuntu (push) Blocked by required conditions
CI / cargo clippy | windows (push) Blocked by required conditions
CI / cargo dev generate-all (push) Blocked by required conditions
CI / cargo shear (push) Waiting to run
CI / cargo test | ubuntu (push) Blocked by required conditions
CI / cargo test | macos (push) Blocked by required conditions
CI / cargo test | windows (push) Blocked by required conditions
CI / check windows trampoline | aarch64 (push) Blocked by required conditions
CI / check windows trampoline | i686 (push) Blocked by required conditions
CI / check windows trampoline | x86_64 (push) Blocked by required conditions
CI / smoke test | macos (push) Blocked by required conditions
CI / test windows trampoline | aarch64 (push) Blocked by required conditions
CI / test windows trampoline | i686 (push) Blocked by required conditions
CI / test windows trampoline | x86_64 (push) Blocked by required conditions
CI / typos (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / build binary | linux libc (push) Blocked by required conditions
CI / build binary | linux aarch64 (push) Blocked by required conditions
CI / build binary | linux musl (push) Blocked by required conditions
CI / build binary | macos aarch64 (push) Blocked by required conditions
CI / build binary | macos x86_64 (push) Blocked by required conditions
CI / build binary | windows x86_64 (push) Blocked by required conditions
CI / build binary | windows aarch64 (push) Blocked by required conditions
CI / build binary | msrv (push) Blocked by required conditions
CI / build binary | freebsd (push) Blocked by required conditions
CI / ecosystem test | pydantic/pydantic-core (push) Blocked by required conditions
CI / ecosystem test | prefecthq/prefect (push) Blocked by required conditions
CI / ecosystem test | pallets/flask (push) Blocked by required conditions
CI / smoke test | linux (push) Blocked by required conditions
CI / smoke test | linux aarch64 (push) Blocked by required conditions
CI / check system | alpine (push) Blocked by required conditions
CI / smoke test | windows x86_64 (push) Blocked by required conditions
CI / smoke test | windows aarch64 (push) Blocked by required conditions
CI / integration test | activate nushell venv (push) Blocked by required conditions
CI / integration test | conda on ubuntu (push) Blocked by required conditions
CI / integration test | deadsnakes python3.9 on ubuntu (push) Blocked by required conditions
CI / integration test | free-threaded on windows (push) Blocked by required conditions
CI / integration test | aarch64 windows implicit (push) Blocked by required conditions
CI / integration test | aarch64 windows explicit (push) Blocked by required conditions
CI / integration test | pypy on ubuntu (push) Blocked by required conditions
CI / integration test | graalpy on ubuntu (push) Blocked by required conditions
CI / integration test | graalpy on windows (push) Blocked by required conditions
CI / integration test | pyodide on ubuntu (push) Blocked by required conditions
CI / integration test | free-threaded python on github actions (push) Blocked by required conditions
CI / integration test | pypy on windows (push) Blocked by required conditions
CI / integration test | github actions (push) Blocked by required conditions
CI / integration test | pyenv on wsl x86-64 (push) Blocked by required conditions
CI / integration test | determine publish changes (push) Blocked by required conditions
CI / integration test | registries (push) Blocked by required conditions
CI / integration test | uv publish (push) Blocked by required conditions
CI / integration test | uv_build (push) Blocked by required conditions
CI / check cache | ubuntu (push) Blocked by required conditions
CI / check cache | macos aarch64 (push) Blocked by required conditions
CI / check system | python on debian (push) Blocked by required conditions
CI / check system | python on fedora (push) Blocked by required conditions
CI / check system | python on ubuntu (push) Blocked by required conditions
CI / check system | python on rocky linux 8 (push) Blocked by required conditions
CI / check system | python on rocky linux 9 (push) Blocked by required conditions
CI / check system | graalpy on ubuntu (push) Blocked by required conditions
CI / check system | pypy on ubuntu (push) Blocked by required conditions
CI / check system | pyston (push) Blocked by required conditions
CI / check system | python on macos aarch64 (push) Blocked by required conditions
CI / check system | homebrew python on macos aarch64 (push) Blocked by required conditions
CI / check system | x86-64 python on macos aarch64 (push) Blocked by required conditions
CI / check system | python on macos x86-64 (push) Blocked by required conditions
CI / check system | python3.10 on windows x86-64 (push) Blocked by required conditions
CI / check system | python3.10 on windows x86 (push) Blocked by required conditions
CI / check system | python3.13 on windows x86-64 (push) Blocked by required conditions
CI / check system | x86-64 python3.13 on windows aarch64 (push) Blocked by required conditions
CI / check system | aarch64 python3.13 on windows aarch64 (push) Blocked by required conditions
CI / check system | windows registry (push) Blocked by required conditions
CI / check system | python3.12 via chocolatey (push) Blocked by required conditions
CI / check system | python3.9 via pyenv (push) Blocked by required conditions
CI / check system | python3.13 (push) Blocked by required conditions
CI / check system | conda3.11 on macos aarch64 (push) Blocked by required conditions
CI / check system | conda3.8 on macos aarch64 (push) Blocked by required conditions
CI / check system | conda3.11 on linux x86-64 (push) Blocked by required conditions
CI / check system | conda3.8 on linux x86-64 (push) Blocked by required conditions
CI / check system | conda3.11 on windows x86-64 (push) Blocked by required conditions
CI / check system | conda3.8 on windows x86-64 (push) Blocked by required conditions
CI / check system | amazonlinux (push) Blocked by required conditions
CI / check system | embedded python3.10 on windows x86-64 (push) Blocked by required conditions
CI / benchmarks | walltime aarch64 linux (push) Blocked by required conditions
CI / benchmarks | instrumented (push) Blocked by required conditions
zizmor / Run zizmor (push) Waiting to run

## Summary

I had to use ChatGPT to help with my research on the "correct"
architecture names for these platforms; there could still be some rough
edges, but this seems like an improvement.

Closes https://github.com/astral-sh/uv/issues/15799.
This commit is contained in:
Charlie Marsh 2025-09-14 10:48:37 -04:00 committed by GitHub
parent 5633d3abe4
commit 64bcd4e8a6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 28 additions and 40 deletions

View file

@ -151,21 +151,7 @@ pub enum Arch {
impl fmt::Display for Arch {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
Self::Aarch64 => write!(f, "aarch64"),
Self::Armv5TEL => write!(f, "armv5tel"),
Self::Armv6L => write!(f, "armv6l"),
Self::Armv7L => write!(f, "armv7l"),
Self::Powerpc64Le => write!(f, "ppc64le"),
Self::Powerpc64 => write!(f, "ppc64"),
Self::Powerpc => write!(f, "ppc"),
Self::X86 => write!(f, "i686"),
Self::X86_64 => write!(f, "x86_64"),
Self::S390X => write!(f, "s390x"),
Self::LoongArch64 => write!(f, "loongarch64"),
Self::Riscv64 => write!(f, "riscv64"),
Self::Wasm32 => write!(f, "wasm32"),
}
write!(f, "{}", self.name())
}
}
@ -211,7 +197,7 @@ impl Arch {
}
}
/// Returns the canonical name of the architecture.
/// Returns the standard name of the architecture.
pub fn name(&self) -> &'static str {
match self {
Self::Aarch64 => "aarch64",
@ -230,23 +216,22 @@ impl Arch {
}
}
/// Returns an iterator over all supported architectures.
pub fn iter() -> impl Iterator<Item = Self> {
[
Self::Aarch64,
Self::Armv5TEL,
Self::Armv6L,
Self::Armv7L,
Self::Powerpc64Le,
Self::Powerpc64,
Self::Powerpc,
Self::X86,
Self::X86_64,
Self::S390X,
Self::LoongArch64,
Self::Riscv64,
]
.iter()
.copied()
/// Represents the hardware platform.
///
/// This is the same as the native platform's `uname -m` output.
///
/// Based on: <https://github.com/PyO3/maturin/blob/8ab42219247277fee513eac753a3e90e76cd46b9/src/target/mod.rs#L131>
pub fn machine(&self) -> &'static str {
match self {
Self::Aarch64 => "arm64",
Self::Armv5TEL | Self::Armv6L | Self::Armv7L => "arm",
Self::Powerpc | Self::Powerpc64Le | Self::Powerpc64 => "powerpc",
Self::X86 => "i386",
Self::X86_64 => "amd64",
Self::Riscv64 => "riscv",
Self::Wasm32 => "wasm32",
Self::S390X => "s390x",
Self::LoongArch64 => "loongarch64",
}
}
}

View file

@ -553,22 +553,25 @@ fn compatible_tags(platform: &Platform) -> Result<Vec<PlatformTag>, PlatformErro
}
(Os::Windows, Arch::Aarch64) => vec![PlatformTag::WinArm64],
(Os::FreeBsd { release }, arch) => {
let release = release.replace(['.', '-'], "_");
let release_arch = format!("{release}_{arch}");
let release_tag = release.replace(['.', '-'], "_").to_lowercase();
let arch_tag = arch.machine();
let release_arch = format!("{release_tag}_{arch_tag}");
vec![PlatformTag::FreeBsd {
release_arch: SmallString::from(release_arch),
}]
}
(Os::NetBsd { release }, arch) => {
let release = release.replace(['.', '-'], "_");
let release_arch = format!("{release}_{arch}");
let release_tag = release.replace(['.', '-'], "_");
let arch_tag = arch.machine();
let release_arch = format!("{release_tag}_{arch_tag}");
vec![PlatformTag::NetBsd {
release_arch: SmallString::from(release_arch),
}]
}
(Os::OpenBsd { release }, arch) => {
let release = release.replace(['.', '-'], "_");
let release_arch = format!("{release}_{arch}");
let release_tag = release.replace(['.', '-'], "_");
let arch_tag = arch.machine();
let release_arch = format!("{release_tag}_{arch_tag}");
vec![PlatformTag::OpenBsd {
release_arch: SmallString::from(release_arch),
}]