Skip to content

fix: only shim bin wheels during auditwheel repair#3197

Merged
messense merged 1 commit into
PyO3:mainfrom
messense:codex/bin-shim-repair-only
May 23, 2026
Merged

fix: only shim bin wheels during auditwheel repair#3197
messense merged 1 commit into
PyO3:mainfrom
messense:codex/bin-shim-repair-only

Conversation

@messense

Copy link
Copy Markdown
Member

Summary

  • only enable the bin-wheel shim layout when auditwheel=repair will bundle external libraries
  • keep auditwheel=warn, check, skip, no-library, and WASI builds on the normal .data/scripts/ layout
  • add a focused unit test for the shim decision matrix

Rationale

Maturin 1.13.2 started moving bin artifacts into {dist}.scripts/ whenever external libraries were detected. On macOS and Windows, the default auditwheel mode is warn, which reports external libraries but does not graft them into the wheel. That produced shim-only wheel layouts without bundled .dylibs/.libs, which changed wheel contents unexpectedly for consumers such as astral-sh/uv#19468.

The shim is only needed when repair mode copies libraries into platlib and the binary needs a predictable relative path to those bundled libraries.

Checks

  • cargo fmt --all
  • cargo test --lib build_orchestrator::tests::test_should_use_bin_shim_only_for_repair_with_external_libs -- --nocapture
  • cargo test --lib
  • cargo clippy --tests --all-features -- -D warnings
  • git diff --check
  • pre-commit commit hooks (cargo fmt, cargo deny, general hooks)

`auditwheel=warn` detects external libraries but does not graft them into the wheel. Keep bin artifacts in `.data/scripts/` unless `auditwheel=repair` will copy libraries, avoiding shim-only wheel layout changes on macOS and Windows warn builds.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request refines when maturin uses the “bin wheel shim” layout for binary wheels so that wheel contents only change when auditwheel=repair will actually bundle external libraries, avoiding unexpected layout changes in warn/check/skip modes (notably on macOS/Windows where default is warn).

Changes:

  • Gate bin-wheel shim layout behind a new should_use_bin_shim(...) helper that requires AuditWheelMode::Repair, non-WASI target, and detected external libraries.
  • Keep non-repair auditwheel modes (and WASI) on the standard .data/scripts/ layout even if external libraries are detected.
  • Add a focused unit test covering the shim decision matrix.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@messense messense marked this pull request as ready for review May 23, 2026 07:25
@messense messense merged commit f29b4a3 into PyO3:main May 23, 2026
45 checks passed
@messense messense deleted the codex/bin-shim-repair-only branch May 23, 2026 07:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants