Conversation
The wheels statically compile deps/libev, deps/libuv and deps/c-ares into the extension modules, but setup.py names only 'LICENSE' in license_files, so the wheel ships gevent's own MIT licence alone. All three dependencies require their copyright notice to travel with binary redistributions. The vendored c-ares tree carries no licence file at all, so the patch also restores LICENSE.md from c-ares 1.34.5, the version in deps/c-ares.
Mirrors the `manylinux` job of gevent's ci.yml and the
scripts/releases/make-manylinux script it runs, narrowed to riscv64 and
driven through cibuildwheel instead of make-manylinux's own docker run and
per-interpreter loop.
The matrix is cp312/cp313/cp314; make-manylinux skips free-threaded builds
("The GIL is required") and PyPI carries no cp3XXt gevent wheel.
Testing is upstream's: the per-interpreter sanity checks for the libev-cext,
libuv and libev-cffi loops and for gevent.ares, then the full
`python -m gevent.tests --second-chance` suite with the same GEVENT_MANYLINUX,
GEVENT_LOOP, GEVENTTEST_USE_RESOURCES and PYTHONHASHSEED settings
make-manylinux exports.
cibuildwheel runs test-command in an empty directory, where gevent's test runner cannot climb to setup.py and therefore warns and skips the whole monkey-patched stdlib suite -- 17 of its 86 test commands. Staging setup.py, src/greentest and examples (but not src/gevent) brings them back while leaving the installed wheel as the only importable gevent.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds
.github/workflows/build-gevent.yml, building gevent 26.8.0 riscv64 wheels for cp312/cp313/cp314.Based on the
manylinuxjob of gevent'sci.ymland thescripts/releases/make-manylinuxscript it runs, narrowed to riscv64 and driven through cibuildwheel rather than make-manylinux's owndocker run+ per-interpreter loop (our matrix is one interpreter per job on a single arch).Notes:
Matrix is cp312/cp313/cp314, no cp314t.
make-manylinuxskips free-threaded interpreters outright ("Skipping no-gil build. The GIL is required.") and PyPI carries nocp3XXtgevent wheel.NO_CYTHON_COMPILE=true— Cython publishes no riscv64 wheel, so it builds from sdist in the container; upstream sets the same variable so that build does not also compile Cython's own accelerators.PIP_EXTRA_INDEX_URL— cffi (build requirement) and psutil (test extra) resolve from our registry; both are at the same version there as on PyPI.GEVENT_MANYLINUXis test-only. In the build phase it makessetup.pyassume c-ares was configured by a separate step (upstream runsdeps/c-ares/configurebefore entering the loop); we letsetup.pyconfigure it. In the test phase it is what selects upstream's manylinux-specific skips.CI=1/TRAVIS=trueare set for both phases asmake-manylinuxdoes; they are what makessetup.pytreatgevent.resolver.caresas required rather than optional.A post-build step asserts the compiled extensions (including
gevent/resolver/cares) are actually in the wheel —ARES.optionalmeans a failed c-ares build otherwise degrades to a silently smaller wheel.CIBW_TEST_SOURCES: setup.py src/greentest examples— cibuildwheel runstest-commandin an empty directory, where gevent's runner cannot climb tosetup.pyand so warns (No setup.py and src/greentest found) and skips the entire monkey-patched stdlib suite: 17 of its 86 test commands, silently. Staging those three paths (and deliberately notsrc/gevent) brings them back while leaving the installed wheel as the only importable gevent.Testing mirrors upstream: the sanity checks for the
libev-cext,libuvandlibev-cffiloops and forgevent.ares, then the fullpython -m gevent.tests --second-chancesuite withGEVENTTEST_USE_RESOURCES=-network,GEVENT_LOOP=libev-cextandPYTHONHASHSEED=8675309. Locally (macOS/arm64) that suite is 4324 tests over 75 files.Licensing
patches/gevent/26.8.0/0001-package-the-licences-of-the-embedded-libev-libuv-and.patch— the wheel statically compilesdeps/libev(BSD-2/GPL-2+),deps/libuv(MIT) anddeps/c-ares(MIT) into the extension modules, butsetup.pylists only'LICENSE'inlicense_files, so upstream's wheels ship gevent's own licence alone. The vendored c-ares tree has no licence file at all, so the patch also restoresLICENSE.mdfrom c-ares 1.34.5 (the vendored version).Upstream-Status: To upstream. The test command asserts the six licence files are present in the installeddist-info/licenses/, so the patch cannot silently stop applying.CI result
Run 32964011840 — all three matrix jobs green, publish dry-ran cleanly (3 wheels).
gevent-26.8.0-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl, 17 extension modules…-cp313-cp313-…whl, 17 extension modules…-cp314-cp314-…whl, 17 extension modulesAll three loops resolve as expected in every job (
gevent.libev.corecext,gevent.libuv.loop.loop,gevent.libev.corecffi.loop) andgevent.aresimports.