Found by Codex on PR #334 (docs). _link_libpython_wrapper in test/test_pyo3_wrapper.jl (lines ~42–54) wraps link planning, the crate scan and build_pyo3_wrapper in one try … catch and turns any exception into @info "skipping the :link_libpython wrapper testset". The intent is to skip on machines without a linkable libpython3.x; the effect is that a wrapper code-generation, Cargo or compiler regression also reports as a skip — on Ubuntu CI too, where a linkable Python exists — so the suite can go green without having built a :link_libpython wrapper.
Proposed fix
Acceptance
Found by Codex on PR #334 (docs).
_link_libpython_wrapperintest/test_pyo3_wrapper.jl(lines ~42–54) wraps link planning, the crate scan andbuild_pyo3_wrapperin onetry … catchand turns any exception into@info "skipping the :link_libpython wrapper testset". The intent is to skip on machines without a linkablelibpython3.x; the effect is that a wrapper code-generation, Cargo or compiler regression also reports as a skip — on Ubuntu CI too, where a linkable Python exists — so the suite can go green without having built a:link_libpythonwrapper.Proposed fix
pyo3_link_plan(crate)and checkpython_link_source()/ the plan's library directory; skip only whenplan.mode !== :link_libpythonor the directory holds no linkablelibpython3.x(the same check the plan itself performs before refusing).build_pyo3_wrapperfailures fail the testset (no catch).test/test_module_symbols.jl(Exported symbols carry no module path: rustcall_<name> collides across modules (#279 scheme) #300 / PR Module-qualified exported symbols: #[julia] on modules, module_path in crate mode, schema 7 (#300) #333) so both gate the same way.@infofor the genuine skip, with the reason (no interpreter / no shared library / plan mode).Acceptance
test_pyo3_wrapper.jlinstead of skipping;docs/src/pyo3.md"What a:link_libpythonbuild needs from the machine" and CLAUDE.md are updated to say the skip is now the prerequisite check only.