Skip to content

Fix manylinux2014 compliance check#2922

Merged
messense merged 2 commits intoPyO3:mainfrom
tuxu:fix-manylinux
Jan 6, 2026
Merged

Fix manylinux2014 compliance check#2922
messense merged 2 commits intoPyO3:mainfrom
tuxu:fix-manylinux

Conversation

@tuxu
Copy link
Copy Markdown
Contributor

@tuxu tuxu commented Jan 6, 2026

PR #2901 updated the manylinux policies, which now include __cxa_thread_atexit_impl. This symbol is linked weakly by the Rust stdlib.

Rather than requiring a bump of the minimum manylinux platform tag for users, ignore weak symbols in the check. This is in line with changes to PyPA's auditwheel (pypa/auditwheel#665).

Comment thread src/build_options.rs
Comment on lines -752 to +754
// With zig we can compile to any glibc version that we want, but
// there are some black-listed libc symbols in auditwheel for manylinux <= 2.17/2024.
// Thus we let auditwheel decide the compatibility tag.
None
// With zig we can compile to any glibc version that we want, so we pick the lowest
// one supported by the rust compiler
Some(target.get_minimum_manylinux_tag())
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The comment is outdated now, but doesn't it still make sense to use auditwheel to compute the real tag?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

IMHO for future proof we should still let auditwheel compute the tag.

Copy link
Copy Markdown
Contributor Author

@tuxu tuxu Jan 6, 2026

Choose a reason for hiding this comment

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

From my understanding, the original comment and implementation was correct. At this point in the code, we need to decide on a specific manylinux tag, as this will be used in the package build to pass the right glibc version and target triple to zig. By returning None, we would target a later glibc version.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Oh you're right - The default gets us 2.31, with the explicit minimum version we get 2.17.

@konstin konstin added the bug Something isn't working label Jan 6, 2026
Copy link
Copy Markdown
Member

@konstin konstin left a comment

Choose a reason for hiding this comment

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

Thank you!

@messense messense merged commit 67a59de into PyO3:main Jan 6, 2026
82 of 84 checks passed
wjones127 added a commit to lance-format/lance that referenced this pull request Jan 7, 2026
Workaround for #5646, by pinning maturin.

We can upgrade maturin again once this bugfix is released:
PyO3/maturin#2922
konstin added a commit that referenced this pull request Jan 8, 2026
Remove "sudo pip" style commands, they are a bad practice and we
shouldn't have them in our CI.

This change relies on uv covering the same platforms as maturin in CI.

Also pin maturin==1.10.1 for cross builds for now, see
https://github.com/PyO3/maturin/actions/runs/20812085659/job/59778558155
and #2922
jackye1995 pushed a commit to jackye1995/lance that referenced this pull request Jan 21, 2026
Workaround for lance-format#5646, by pinning maturin.

We can upgrade maturin again once this bugfix is released:
PyO3/maturin#2922
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants