Repository navigation
Conversation
Split out of the passagemath/passagemath monorepo (a SageMath fork) at pkgs/sagemath-mcqd, tagged passagemath-10.8.13, same shape as build-passagemath-objects.yml. Vendors mcqd (GPL-3.0-or-later), a tiny max-clique C++ library with no release tarball; build/pkgs/mcqd's own checksums.ini pin (mcqd-1.0.p0.tar.bz2) 404s on every mirror tried, so the build instead clones gitlab.com/janezkonc/mcqd and pins its one real commit (9ab9717), verified against the pin before every build and in a dedicated gpl_sources job that archives the source for the release. The sdist is built by replaying build/pkgs/sagemath_mcqd/spkg-src (./bootstrap renders pyproject.toml.m4, then python -m build --sdist --no-isolation --skip-dependency-check against the real upstream checkout). CIBW_BEFORE_ALL_LINUX replays build/pkgs/mcqd/spkg-install.in: strip mcqd.h's verbose debug print, compile libmcqd.so, install it and the header where the compiler already looks. Neither passagemath-mcqd nor passagemath-objects ships a LICENSE file for its own GPL-2.0-or-later code (0001, same gap/fix as objects); mcqd itself is GPL-3.0-or-later and is fetched at build time rather than vendored in the sdist, so nothing carries its licence text either (0002, drops its COPYING as LICENSE.mcqd). sagemath-repl/-graphs/-cliquer (the real test extras) are unported, so CIBW_TEST_COMMAND calls mcqd() on a minimal duck-typed graph instead.
luhenry
added a commit
that referenced
this pull request
Nov 9, 2026
- sage_setup's recursive Cython-module discovery requires an
all__sagemath_mcqd.py marker in EVERY package directory it walks
(sage_setup.find.find_python_sources / is_package_or_sage_namespace_package_dir),
not just at the sage/ root; without one in sage/graphs/ it silently
found zero Cython modules and built a pure-Python wheel. Added it to
the sparse-checkout (confirmed present at that exact path in the real
published sdist on PyPI).
- ./bootstrap's own per-package pyproject.toml.m4 render runs through
sage-package's xargs-parallelised, ~650-package sweep, which aborts a
whole batch of 8 if any member fails; sage_conf's own bootstrap always
fails on this sparse checkout (needs the top-level configure.ac), and
landed in the same batch as sagemath_mcqd, so pyproject.toml was never
written and the sdist built as an unnamed 'unknown-0.0.0'. Render this
one package's pyproject.toml.m4 directly instead of trusting that sweep.
- musllinux (Alpine) has no /usr/lib64; g++ -shared failed outright
('cannot open output file'). Pick whichever of /usr/lib64 or /usr/lib
actually exists, and don't hard-fail if ldconfig isn't present.
The build log's final link line for mcqd.abi3.so carries no "-lmcqd"
at all: mcqd.h's max-clique algorithm is template/header-only, so the
Cython extension compiles it straight in and never links the
libmcqd.so that CIBW_BEFORE_ALL_LINUX builds (that step only replays
spkg-install.in; nothing in the wheel actually depends on its
output). auditwheel therefore has nothing to vendor on manylinux, and
the post-build check's
`libs = [...]; assert any("mcqd" in n for n in libs)` fails because
passagemath_mcqd.libs/ never exists there.
The same check happened to pass on musllinux, but not because mcqd
was vendored: musllinux's auditwheel policy (unlike manylinux's)
doesn't allowlist libstdc++/libgcc_s, so it vendors the C++ runtime
into that same-named directory regardless (gotcha 409) - and
"passagemath_mcqd.libs/libstdc++-*.so.6" matches `"mcqd" in n` purely
because the directory name contains the package name. The check was
never actually exercising mcqd's own vendoring at all.
Drop it; the extension-exists and licence-text assertions already
cover what the licence actually requires for a dependency that is
compiled straight into the extension rather than linked.
This branch has not been deployed
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.
passagemath-mcqd10.8.13Cython wrapper computing the maximum clique of a graph via mcqd. Upstream publishes no riscv64 wheel.
Mirrors
build-passagemath-objects.yml's sdist-then-bdist shape, itself replaying upstream's ownbuild/pkgs/sagemath_mcqd/spkg-src.Differs from upstream
build/pkgs/mcqd's release tarball - that tarball 404s on every mirror.Testing
mcqd()on a minimal duck-typed graph - sagemath-repl/-graphs/-cliquer (the real test extras) are unportedLicense: Wheel bundles libmcqd (GPL-3.0-or-later); upstream ships no licence text for it or for the package's own GPL-2.0-or-later code, so the build adds both.
Patches
0001-add-the-package-s-own-licence-file.patch- To upstream [not yet submitted]. passagemath-mcqd ships no LICENSE for its own declared licence; reproduces off riscv64.0002-add-the-vendored-mcqd-library-s-licence-text.patch- Inappropriate [dependency fetched at build time, not in upstream's sdist]. Nothing else carries mcqd's own licence text; reproduces off riscv64.