Take libakerror 2.0.2, libakstdlib and libakgl 0.9.0 #59
Reference in New Issue
Block a user
Delete Branch "deps-update"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Bumps
deps/libakerror,deps/libakstdlibanddeps/libakglto their currentmain, applies what their upgrade notes require, retires the two workarounds they make obsolete, and unbreaks three example programs that were already broken onmain.Two commits, split by cause: what the bump changed, and what the bump revealed.
1. The bump
libakerror 2.0.1 → 2.0.2 (63 commits)
Two of its fixes were this repository's own filed issues, and both workarounds are deleted:
libakerrornamespacedmutationwhen embedded but notcoverage, so a coverage build collided on the bare name — worked around by shadowingadd_custom_target()CMAKE_SOURCE_DIRtest to both (its #15, closed). The shadow could only ever fire on a name the dependency has stopped using, so it is gone rather than left as dead codeakerrorConfigVersion.cmake, so no consumer could request a version floor.MAINTENANCE.mdsaid to add a1.0floor to ourfind_dependencycalls when it landedSameMajorVersion(its #16, closed). The floor is now2.0, and this repository has nofind_dependencycalls — it reaches every dependency byadd_subdirectory. That paragraph now says so instead of carrying an instruction nobody can followA measured cost.
IGNORE's context changed shape:__akerr_last_ignoredwas anexternpointer and is now a per-TUstatic akerr_last_ignoredholding a copy, so the pool slot can be released — a real leak fix. Nothing here referenced the symbol, but because it isstaticin a public header, every translation unit gets one:build/basic38 copies × 37,296 accounts for the segment exactly. Plus 84
-Wunused-variablewarnings, one per TU that includes the header without usingIGNORE. Filed upstream as libakerror #37 and recorded inMAINTENANCE.md, not patched here — patching a submodule forks it.libakstdlib
Directory and file-metadata wrappers, with no version bump.
aksl_snprintfkeeps itsint *count— an intermediate commit removed it and the merge put it back — but now reports the required length on truncation rather than 0. Every call site here reads it only after a successful return, so nothing moved.The directory wrappers close the gap
DIRECTORYwas refused for (libakstdlib #10, closed). The verb is still unwritten so it still refuses, but it no longer blames a wrapper that exists — andtests/disk_verbs.cnow asserts both halves, that it says "not implemented" and that it does not namelibakstdlib. What writing it would need is #55.libakgl → current
mainat 0.9.0Registers
libccdandtgas submodules. A tree that rangit submodule update --init --recursivebefore this bump needs it again, or the configure dies on a missinglibccd/src/ccd/config.h.cmake.in.2. What the bump revealed
None of this was caused by the bump. It was found by running the tutorial games, which nothing else does.
ae2c702("Add native RND and ASC functions") madeRNDa function name, and a suffixed identifier that collides with one is refused. Three example programs held their PRNG output inRND#, or a host field inRND%, and none had run since:examples/galaga/—RND%on bothENEMYandGAME, nowROLL%. The C member staysrnd. This one was caught —example_galagaandexample_galaga_interophave been failing.examples/breakout/characters/breakout.basandexamples/megademo/megademo.bas—RND#→ROLL#. Neither is in any test, so neither failure was visible.examples/breakout/sprites/breakout.baswas broken a second, independent way: sevenREMlines the reader refuses. Worth knowing the ceiling is not the one the message names —src/sink_stdio.cfails when the read filled the buffer without seeing a terminator, so withAKBASIC_MAX_LINE_LENGTHat 80 the message says "79 character limit" and the real maximum is 78, because a 79-character line leaves no room for the\n. The sweeps that fixed the corpus and the megademo for this never reached this file.The prose went stale with the code. Chapter 21 said "there is no RND verb in this dialect; issue #16 tracks adding one"; chapter 17's historical aside offered an LCG that no longer parses; four
REMblocks said the same. All corrected — and they now say why these programs keep their own generator anyway: the sequence has to be reproducible for a headless run to be the same game on every machine, which is what letsinterop_test.cassert exact counts. Chapter 21 also gains the rule that bit them, since a reader writing a host type will hit it.Verification
docs_examplesfailing-DAKBASIC_WITH_AKGL=ONexample_galaga,example_galaga_interop,docs_examplesfailingdocs_examplesgreen in both. All three tutorial games run clean under the dummy drivers. Verified from a scratch build tree, not an incremental one.akgl_typingskips — noxdotoolon this machine.The
DIRECTORYchange was mutation-checked perMAINTENANCE.md: reverting the message by file copy makesdisk_verbsfail, restoring it makes it pass.Filed rather than fixed
UPGRADING.mddocuments a 2.0.3 thatproject()never stamped, which is why the version tables here read 2.0.2DIRECTORYis unblocked and can be writtenmain: nine errors, four distinct defects, none of them new and none in files this branch touches#56 is worth a look before merging this. It is pre-existing and out of scope here, but
MAINTENANCE.mdcalls the documentation a gate and it is currently red.Co-Authored-By: Andrew Kesterson andrew@aklabs.net
Co-Authored-By: Claude Code (Claude Opus 5, claude-opus-5[1m]) noreply@anthropic.com
Bumps all three ak* submodules to their current main, applies what their upgrade notes require, and retires the two workarounds they make obsolete. libakerror 2.0.1 -> 2.0.2 (63 commits). Two of its fixes were this repository's own filed issues, and both workarounds are gone: - It namespaces its embedded `coverage` target now, the same CMAKE_SOURCE_DIR test it already applied to `mutation` (its issue #15). The add_custom_target() shadow that renamed it on the way past could only ever fire on a name the dependency has stopped using, so it is deleted rather than left as dead code. - It installs akerrorConfigVersion.cmake at SameMajorVersion (its issue #16). MAINTENANCE.md said to add a `1.0` floor to our find_dependency calls when this landed; the floor is now `2.0`, and we have no find_dependency calls to add it to, so the paragraph says that instead of an instruction nobody can follow. Its IGNORE context also changed shape: `__akerr_last_ignored` was an extern pointer, and is now a per-translation-unit `static akerr_last_ignored` holding a copy, so the pool slot can be released. Nothing here referenced the symbol, but it costs us 1.35 MiB of thread-local storage -- 38 TUs x 37,296 bytes, measured as the entire TLS segment of build/basic, where 2.0.1 produced no TLS segment at all -- plus 84 -Wunused-variable warnings. Filed upstream as libakerror issue #37 and recorded in MAINTENANCE.md rather than patched here, because patching a submodule forks it. libakstdlib gains directory and file-metadata wrappers with no version bump. aksl_snprintf keeps its `int *count` -- an intermediate commit removed it and the merge put it back -- but now reports the required length on truncation rather than 0. Every call site here reads it only after a successful return, so nothing moved. The directory wrappers close the gap DIRECTORY was refused for (libakstdlib issue #10). The verb is still unwritten, so it still refuses, but it no longer blames a wrapper that exists: the message is "DIRECTORY is not implemented yet" and tests/disk_verbs.c asserts both that it says so and that it does not name libakstdlib. What writing it would need is akbasic issue #55. libakgl moves to the current main at 0.9.0. It registers libccd and tg as submodules, so a tree that only ran `git submodule update --init --recursive` before the bump needs it again or the configure fails on a missing libccd/src/ccd/config.h.cmake.in. Verified: 114/114 default, 116/116 under -DAKBASIC_WITH_AKGL=ON, docs_examples green in both. libakerror's UPGRADING.md documents a 2.0.3 that project() never stamped, so the version tables read 2.0.2 -- libakerror issue #38. Co-Authored-By: Andrew Kesterson <andrew@aklabs.net> Co-Authored-By: Claude Code (Claude Opus 5, claude-opus-5[1m]) <noreply@anthropic.com>@tachikoma pull the latest libakerror again it fixed the static TLS size issue, that var is thread local now. Several of the other open items have been closed as well. Doxygen remains open.
Pulled libakerror's current main (9249f8c). Confirms both fixes:
akerr_last_ignoredis nowexternin the header with a single definition insrc/error.c— one copy per thread instead of one per translation unit.build/basicnow has no TLS segment at all (was 1.35 MiB) and zero-Wunused-variablewarnings for it.project()now stamps 2.0.3, matching the release notes, so the version-disagreement note is gone too.Updated
MAINTENANCE.mdto drop the "What 2.0.2's IGNORE change costs" subsection and the version-disagreement paragraph, both resolved upstream, and bumped the version table to 2.0.3.Rebuilt from scratch: 114/114 tests pass. Pushed to
deps-update.Doxygen (#56) is left open per your note — out of scope here.