Crafter.Build/implementations
catbot 0ff9050eb3
All checks were successful
CI / build-test-release (pull_request) Successful in 6m13s
fix: line-buffer stdout when redirected so progress/readiness lines flush
When crafter-build's stdout is not a TTY (redirected to a file or pipe) the
C runtime defaults to full (block) buffering. The progress path is TTY-aware
and the in-place redraw flushes explicitly, but the non-TTY append path
(`[N/M]` lines), Finalize()'s `Built N steps` line and the `-r` server's
`listening on port :N` line all go through block-buffered stdout with no
flush. They accumulate in the buffer and only spill at ~4KB boundaries.

On a normal build this is hidden because the C runtime flushes stdout at
exit. Under `-r` the process never exits — it blocks in its serve loop — so
the trailing buffer is never flushed: a redirected log freezes mid-build (or
sits at 0 bytes) even though the build finished and the server is already
answering. Any tooling that polls the log for `Built …` / `listening …` /
`[N/N]` hangs forever. This is the real cause of the frozen log misdiagnosed
as a build deadlock in #16.

Fix: switch stdout to line buffering at the very top of main(), before any
output, only when stdout is not a terminal. Every `\n` then flushes, so the
markers reach a redirected log immediately. No behaviour change on a TTY.

Kept self-contained in main.cpp using system headers (isatty + setvbuf)
rather than a new Crafter::Progress export: the self-hosting exe build
compiles main.cpp against the installed/cached Crafter.Build module BMIs,
which shadow the freshly built local ones, so a new interface symbol would
not be visible without reinstalling crafter-build first.

Resolves #18

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 14:42:33 +00:00
..
Crafter.Build-Asset.cpp asset changes 2026-05-19 00:50:06 +02:00
Crafter.Build-Clang.cpp fix: scope per-build module-state reset to the config being built 2026-06-01 11:32:46 +00:00
Crafter.Build-External.cpp fixed mingw warning 2026-05-27 05:43:56 +02:00
Crafter.Build-Implementation.cpp v2 nearly done 2026-04-27 07:04:42 +02:00
Crafter.Build-Interface.cpp v2 nearly done 2026-04-27 07:04:42 +02:00
Crafter.Build-Platform.cpp fixed build error and file stdpcm lock 2026-05-30 19:28:06 +02:00
Crafter.Build-Progress.cpp loading bar 2026-04-29 03:27:11 +02:00
Crafter.Build-Shader.cpp fixes 2026-05-02 21:08:51 +02:00
Crafter.Build-Test.cpp new tests 2026-05-27 19:45:05 +02:00
main.cpp fix: line-buffer stdout when redirected so progress/readiness lines flush 2026-06-01 14:42:33 +00:00