Skip to content

feat(ftxui): add 7.0.3 - #292

Open
FarnaHerry wants to merge 3 commits into
mcpplibs:mainfrom
FarnaHerry:feat/ftxui-7.0.3
Open

feat(ftxui): add 7.0.3#292
FarnaHerry wants to merge 3 commits into
mcpplibs:mainfrom
FarnaHerry:feat/ftxui-7.0.3

Conversation

@FarnaHerry

@FarnaHerry FarnaHerry commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

What

Adds FTXUI 7.0.3 (latest upstream release, 2026-08-06) alongside the existing 6.1.9, and bumps the core smoke member to it.

Descriptor impact

  • Layout unchanged: include/ftxui + src/ftxui/{screen,dom,component,util}, so the 6.1.9 globs apply verbatim. Test/fuzzer exclusions still cover 7.0.3's 47 *_test.cpp / 6 *_fuzzer.cpp.
  • Public API source-compatible for what the smoke test uses (hbox/text/separator, Dimension::Fit, Screen::Create(Dimensions, Dimensions), Render) — runtime.cpp needs no change.
  • Modules deliberately NOT enabled: 7.0.3 ships upstream .cppm units, and an earlier revision of this PR compiled them (import ftxui; worked on the llvm/macos/windows legs). The linux GCC leg failed: upstream's units put libstdc++ headers textually in the global module fragment, and GCC 16 cannot consume overlapping GMFs from the four sub-module BMIs (redefinitions of std::__terminate, std::allocator, …). Upstream's own CI builds modules llvm-only (# TODO add gcc / msvc in build.yaml), so the module units stay out until upstream supports more than clang.

The one skew: loop.cpp

FTXUI 7 moved Loop's method definitions from loop.cpp into app.cpp and dropped loop.cpp from the CMake build — but the stale file still ships in the 7.0.3 tarball. Our glob compiles it, duplicating Loop::{~Loop,RunOnce,...} at the consumer's link (a dependency's objects all enter the link; no lazy archive selection). 6.1.9 has no app.cpp and genuinely needs loop.cpp, and there are no per-version build blocks yet (mcpp-community/mcpp#290).

Fix: a small install() hook (same normalisation pattern as compat.eui-neo) deletes loop.cpp only when app.cpp exists — exactly the 7.x layout — keeping 6.1.9 intact.

CN mirror

Not published to mcpp-res; plain-string GLOBAL fallback (same precedent as eui-neo 0.5.7). sha256 double-checked against the GitHub tag archive: e7c62ffe19009759821b4f0f8df7f2a6fb83784c3a9f1477d81f56d3ee723c88.

Local verification (mcpp 2026.8.29.1)

  • mcpp test -p coreok on 7.0.3 (ftxui builds, smoke assertions pass)
  • mcpp test -p core re-pointed at 6.1.9ok through the new hook (loop.cpp kept)
  • Lints: check_mirror_urls, check_package_name, check_platform_version_parity, check_duplicate_versions, check_cross_package_refs, mcpp xpkg parse — all green

Source layout is unchanged (include/ftxui + src/ftxui/{screen,dom,
component,util}), so the 6.1.9 globs apply verbatim, and the public header
API the core smoke test uses (hbox/text/separator, Dimension::Fit,
Screen::Create(Dimensions, Dimensions), Render) is source-compatible with
6.1.9. Upstream added C++20 module units (src/ftxui/*.cppm,
FTXUI_BUILD_MODULES off by default); the `*.cpp` globs never match them.
7.0.3 ships 47 *_test.cpp / 6 *_fuzzer.cpp, still covered by the existing
exclusions.

One skew the globs cannot express (no per-version build blocks,
mcpp-community/mcpp#290): FTXUI 7 moved Loop's method definitions from
loop.cpp into app.cpp and dropped loop.cpp from the CMake build, but the
stale file still ships in the 7.0.3 tarball. Compiling both duplicates
Loop::{~Loop,RunOnce,...} at the consumer's link (a dependency's objects
all enter the link — no lazy archive selection). 6.1.9 has no app.cpp and
genuinely needs loop.cpp, so a small install() hook (same normalisation
pattern as compat.eui-neo) deletes loop.cpp only when app.cpp exists —
exactly the 7.x layout.

No CN mirror yet (never published to mcpp-res); plain-string GLOBAL
fallback, same as eui-neo 0.5.7. sha256 double-checked against the GitHub
tag archive.

Verified locally (mcpp 2026.8.29.1): `mcpp test -p core` passes on both
7.0.3 and 6.1.9 (the latter through the new hook, confirming loop.cpp is
kept there); check_mirror_urls, check_package_name,
check_platform_version_parity, check_duplicate_versions,
check_cross_package_refs and `mcpp xpkg parse` all green.
Upstream's new C++20 module units (src/ftxui/*.cppm) join the sources, so
7.0.3 consumers can `import ftxui;` — they are global-fragment includes +
`using` re-exports, every declaration stays attached to the global module,
and `#include`/`import` mix freely against the same compiled objects. On
6.1.9 the .cppm globs are zero-hit warnings (redis-plus-plus union
precedent). A new CompatModule smoke test imports ftxui and renders.

Verified locally (mcpp 2026.8.29.1): `mcpp test -p core` passes on 7.0.3
(both #include and `import ftxui;` smoke tests) and on 6.1.9 (loop.cpp
kept, zero-hit .cppm globs are warnings); `mcpp xpkg parse` green.
注册 for free to join this conversation on GitHub. Already have an account? 登录 to comment

标签

None yet

项目

None yet

Development

Successfully merging this pull request may close these issues.

1 participant