Skip to content

Accept sysroot manylinux tags under conda-build, fix confstr patch - #52

Draft
isuruf wants to merge 1 commit into
conda-forge:mainfrom
isuruf:manylinux-tags
Draft

isuruf wants to merge 1 commit into
conda-forge:mainfrom
isuruf:manylinux-tags

Conversation

@isuruf

@isuruf isuruf commented Oct 28, 2026 •

Copy link
Copy Markdown
Member

crossenv 1.6.0 applies its packaging.tags patch to pip's vendored copy too (robotpy/crossenv@3d00f75), so without --platform-tag pip in a cross environment only accepts linux_<arch> wheels. Recipes that build a wheel, repair it with auditwheel and install it now fail, e.g. symengine-wheels:

ERROR: symengine-0.15.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl is not a supported wheel on this platform.

With 1.5.0 these wheels were accepted by accident: pip's vendored packaging was not patched, and crossenv's _manylinux.py is removed when cross-python deletes venv/cross. The glibc version pip saw was the build machine's, not the target's.

Patches:

  • 0006: fix the confstr patch. It checked CS_GLIBC_LIB_VERSION, which is not a valid name (callers use CS_GNU_LIBC_VERSION), and returned glibc_2_17 instead of glibc 2.17. So it never applied and the build machine's glibc leaked into the cross environment. This bug is also on crossenv main.
  • 0007: when CONDA_BUILD=1 and no platform tags are given, read the glibc version from <sysroot>/usr/include/features.h and use linux_<arch>, manylinux_2_<N>_<arch> up to that version and the legacy aliases as platform tags. With 0006 this also makes confstr report the sysroot's glibc. Explicit --platform-tag/--manylinux still take precedence, and nothing changes outside conda-build or for non-linux targets.

Also adds wheel to run requirements: crossenv 1.6.x requires it and pip check fails on main without it.

Tested locally against an aarch64 python with pip 26.2.2, leaving _manylinux.py in place:

scenario tags accepted os.confstr("CS_GNU_LIBC_VERSION")
CONDA_BUILD=1, 2.17 sysroot linux_aarch64, manylinux_2_17_aarch64, manylinux2014_aarch64 glibc 2.17
CONDA_BUILD=1, 2.28 sysroot above + manylinux_2_18..manylinux_2_28 glibc 2.28
no CONDA_BUILD linux_aarch64 unknown 0.0
CONDA_BUILD=1 + explicit --platform-tag only the given tags from the given tags

Unpatched 1.6.1 reports the build machine's glibc (glibc 2.39 locally). rattler-build build and tests pass.

This makes conda-forge/cross-python-feedstock#110 unnecessary; the two are compatible if both land.

🤖 Generated with Claude Code

@isuruf
isuruf requested a review from chrisburr as a code owner October 28, 2026 20:21
@conda-forge-admin

Copy link
Copy Markdown
Contributor

Hi! This is the friendly automated conda-forge-linting service.

I just wanted to let you know that I linted all conda-recipes in your PR (recipe/recipe.yaml) and found it was in an excellent condition.

I do have some suggestions for making it better though...

For recipe/recipe.yaml:

  • ℹ️ noarch: python packages install on every Python version at or above python_min, but at least one python test only runs against a single python_version. Consider testing against both the minimum and a latest supported Python:
tests:
  - python:
      python_version:
        - ${{ python_min }}.*
        - "*"
  • ℹ️ 'Store Build Artifacts' is deprecated.
    Deprecated. Store the conda build_artifacts directory as an Azure pipeline artifact. Use workflow_settings.store_build_artifacts instead.

This message was generated by GitHub Actions workflow run https://github.com/conda-forge/conda-forge-webservices/actions/runs/40762615598. Examine the logs at this URL for more detail.

@isuruf
isuruf marked this pull request as draft October 28, 2026 20:24
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