feat(pkgs): add standalone asio 1.38.1#73
Conversation
Upstream's tag archives (tar.gz AND zip) both contain the POSIX symlinks asio/include -> ../include and asio/src -> ../src, so switching encodings could not fix the Windows extraction failure (tar.exe cannot materialize them; job exits 127 right after download). Upstream publishes no symlink-free asset for 1.38.x (no GitHub release assets; SourceForge stops at 1.36.0). Windows now uses a repackaged variant of the upstream tag tarball with only those two symlink entries removed (tar --delete + gzip -n -9; all 1544 regular files byte-identical, provenance in xlings-res/asio README), hosted at github.com/xlings-res/asio (GLOBAL) and gitcode.com/mcpp-res/asio (CN). Linux/macOS keep the canonical upstream tarball as GLOBAL and gain a byte-identical CN mirror on mcpp-res. All hosted assets sha256-verified after upload. Verified locally with pinned mcpp 0.0.94: descriptor lints + xpkg parse pass, and the asio member test passes cold (6/6).
CI failure analysis:
|
With the symlink-free archive in place, the Windows job progressed to runtime failures: core and network crashed with 0xC0000409 and coroutine exited 1 while the thread-free tests (experimental/platform/surface) passed. Reproduced under mingw+wine: asio's thread detection keys off CRT macros (_MT/_REENTRANT/_POSIX_THREADS) the toolchain does not define, so it silently selects null_thread and the steady_timer wait thread throws operation_not_supported (10045, 'thread: asio.system error'). Pin ASIO_HAS_THREADS in the default standalone feature. asio only tests defined(ASIO_HAS_THREADS) and POSIX pthread selection still runs beneath it, so this is a no-op where detection already works. All six consumer tests pass under mingw+wine with the pin (platform's pipe path is a wine limitation, passes on real Windows), and the Linux member suite passes 6/6 cold with the define present in every consumer TU's compile command.
Follow-up: second Windows root cause found and fixed — CI is now fully green ✅The symlink-free archive ( Root cause (reproduced exactly under mingw-w64 + wine): asio's thread detection keys off CRT macros ( Fix ( Verification:
Design doc §3 updated with the rationale. |
Summary
[email protected]as a standalone header-only package-pthreadlink contractThis PR intentionally excludes the separate native
import asio;adapter and optional OpenSSL/wolfSSL, Boost.Context/Regex/Date_Time, and liburing integrations.README is unchanged.
Upstream verification
asio-1-38-1, latest numeric Asio tag checked on 2026-07-17BSL-1.0)2827b229972be80cdb14e5497962fa393d1adf036b5869e2b9c99f644daadacc*/include/asio.hppNo CN mirror is declared because no authorized byte-identical mirror asset is available; the descriptor uses the canonical upstream URL.
Local verification
Client:
mcpp 0.0.94; local descriptor lint: Lua 5.5.0.mcpp xpkg parse pkgs/c/compat.asio.luapassedmcpp add compat:[email protected]wrote[dependencies.compat] asio = "1.38.1"compat.asioASIO_STANDALONE,ASIO_HEADER_ONLY, andASIO_DISABLE_BOOST_CONTEXT_FIBERgit diff --check origin/main...HEADpassedorigin/mainThe active GitHub workflow will run its pinned Lua 5.4 lint and the Linux/macOS/Windows workspace matrix.