fix: build the SONAME alias under explicit ninja goals (mcpp test) — 0.0.107#281
Merged
Merged
Conversation
….0.107 A shared library that declares `soname` is written as bin/libX11.so but records SONAME libX11.so.6. Both the linker resolving a transitive NEEDED and the loader starting a binary look for the alias, never for the plain name — so the alias is a prerequisite of anything that links the library, not a by-product of building it. It was modelled as a standalone ninja edge that nothing depends on, reachable only through `default`. The 0.0.104 test batch (#274) made `mcpp test` pass explicit goal targets so it could isolate per-test compiles, and that silently stopped producing the alias. `mcpp build` and `mcpp run` drive `default` and were unaffected, which is why this survived three releases: only a project driven by `mcpp test` hits it. The symptom lands three levels from the cause — a consumer failing to link with `libX11.so: undefined reference to xcb_connect` (alongside `libxcb.so.1 ... not found`), or a test binary exiting 127. mcpp-index CI has been failing this way on gui-stack, imgui-module and imgui-window since 0.0.104; two probe PRs pinning only MCPP_VERSION over unmodified descriptors reproduced it at both 0.0.104 and 0.0.106, which is what ruled out the package-identity migration as the cause. Hang the alias off the consumer's implicit inputs, beside the .so it already lists. Correct under `default` and under explicit goals alike, and it pulls in nothing that was not already being built. e2e 64 covered only `build` + `run` — precisely the two paths that still worked. It now also runs `mcpp test` from a clean target dir and asserts the alias exists; without the fix that test binary fails with exit 127. Verified: unit 37/37; e2e 64 red before / green after; the three real mcpp-index members pass with `mcpp test` alone (gui-stack 5/5, imgui-module 1/1, imgui-window 1/1). Remaining local e2e failures (22, 98, 141) reproduce identically on the released 0.0.106 binary under the same MCPP_HOME — they are this machine's gcc 15.1.0, not this change.
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.
A shared library that declares
sonameis written as bin/libX11.so but recordsSONAME libX11.so.6. Both the linker resolving a transitive NEEDED and the loader
starting a binary look for the alias, never for the plain name — so the alias is
a prerequisite of anything that links the library, not a by-product of building
it.
It was modelled as a standalone ninja edge that nothing depends on, reachable
only through
default. The 0.0.104 test batch (#274) mademcpp testpassexplicit goal targets so it could isolate per-test compiles, and that silently
stopped producing the alias.
mcpp buildandmcpp rundrivedefaultandwere unaffected, which is why this survived three releases: only a project
driven by
mcpp testhits it.The symptom lands three levels from the cause — a consumer failing to link with
libX11.so: undefined reference to xcb_connect(alongsidelibxcb.so.1 ... not found), or a test binary exiting 127. mcpp-index CI has been failing this wayon gui-stack, imgui-module and imgui-window since 0.0.104; two probe PRs pinning
only MCPP_VERSION over unmodified descriptors reproduced it at both 0.0.104 and
0.0.106, which is what ruled out the package-identity migration as the cause.
Hang the alias off the consumer's implicit inputs, beside the .so it already
lists. Correct under
defaultand under explicit goals alike, and it pulls innothing that was not already being built.
e2e 64 covered only
build+run— precisely the two paths that still worked.It now also runs
mcpp testfrom a clean target dir and asserts the aliasexists; without the fix that test binary fails with exit 127.
Verified: unit 37/37; e2e 64 red before / green after; the three real mcpp-index
members pass with
mcpp testalone (gui-stack 5/5, imgui-module 1/1,imgui-window 1/1). Remaining local e2e failures (22, 98, 141) reproduce
identically on the released 0.0.106 binary under the same MCPP_HOME — they are
this machine's gcc 15.1.0, not this change.