Skip to content

fix: build the SONAME alias under explicit ninja goals (mcpp test) — 0.0.107#281

Merged
Sunrisepeak merged 1 commit into
mainfrom
fix/soname-alias-under-explicit-ninja-goals
Jul 25, 2026
Merged

fix: build the SONAME alias under explicit ninja goals (mcpp test) — 0.0.107#281
Sunrisepeak merged 1 commit into
mainfrom
fix/soname-alias-under-explicit-ninja-goals

Conversation

@Sunrisepeak

Copy link
Copy Markdown
Member

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.

….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.
@Sunrisepeak
Sunrisepeak merged commit 3901c1a into main Jul 25, 2026
15 checks passed
@Sunrisepeak
Sunrisepeak deleted the fix/soname-alias-under-explicit-ninja-goals branch July 25, 2026 16:17
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.

1 participant