Skip to content

compat.yaml-cpp 0.8.0/0.9.0 on openkal; openkal-ecosystem/openkal-compat labels; openkal measurement selects by change on x86_64-windows-musl; maintainer-hosted CN mirrors; a shorter README - #464

Merged
Sunrisepeak merged 4 commits into
mainfrom
feat/compat-yaml-cpp
Sep 23, 2026

Conversation

@Sunrisepeak

@Sunrisepeak Sunrisepeak commented Sep 23, 2026

Copy link
Copy Markdown
Member

compat.yaml-cpp 0.8.0 / 0.9.0

  • Shape: C++ source compat. Built as upstream's CMake target (src/*.cpp + src/contrib/*.cpp). One source list covers both versions; 0.9.0 adds src/fptostring.cpp.
  • Mirror: GLOBAL = GitHub tag archives; CN = gitcode mcpp-res/yaml-cpp releases 0.8.0 / 0.9.0, byte-identical (same sha256).
  • YAML_CPP_STATIC_DEFINE: delivered to consumers through a yaml-cpp/dll.h shim plus #include_next (descriptor defines are package-private). The test asserts it at compile time.
  • Upstream defect: GraphBuilderInterface's pure virtual destructor is defined nowhere. The test defines it, as any consumer of the contrib API has to.
  • Members: yaml-cpp (0.9.0) and yaml-cpp-v080 (0.8.0, which asserts 0.9.0's fptostring.h is absent). Both are listed in tests/openkal/members.toml.
  • Verified: with the CI pin, mcpp test passes cold for both members, and the object count equals the source count. In CI, yaml-cpp / yaml-cpp-v080 are ok on linux gcc, linux llvm, macOS and Windows. openkal, locally with the pins: runs (posix) on x86_64-linux-gnu and x86_64-windows-musl (Wine) for both.

Site: openkal facet

openkal itself / runs on openkal / fails on openkal becomes openkal-ecosystem / openkal-compat. Packages that only build or fail are filed under neither; their pages keep the per-target table.

openkal measurement

  • Selection by change: every member is measured only for a graph or harness change (openkal family, pins.toml, compat.py). A members.toml edit measures only the added or changed entries, compared with the merge base via --base. tests/examples/<m>/ measures m; a descriptor measures the members that depend on it. selftest pins each rule. The workflow also triggers on tests/examples/**.
  • Windows target is x86_64-windows-musl (the C environment the graph presents; not MinGW). Locally it gives the same results: cli11/zlib/cmp-module run, and curl fails at the same curl_setup.h:591. The rename moves the harness, so this PR measures every member once; that result is committed as the new baseline.

CN mirror lint

CN may be any gitcode release asset (https://gitcode.com/<owner>/<repo>/releases/download/...), so a library maintainer can host their own mirror; mcpp-res stays the default. This makes ZheFeng7110.boost (#463) pass unchanged; lint on main had been red since that PR.

README

The reference table is down to one line per shape, and the engine-floor note is shorter. The long recastnavigation and huxerui explanations move into docs/descriptor-examples.md (en/zh).

…kal facet names openkal-ecosystem and openkal-compat; a shorter README

compat.yaml-cpp builds upstream's CMake target as it is (src/*.cpp plus the
contrib GraphBuilder), from the GitHub tag archives mirrored byte for byte to
gitcode mcpp-res/yaml-cpp. YAML_CPP_STATIC_DEFINE, a PUBLIC definition of a
static build upstream, reaches consumers through a yaml-cpp/dll.h shim, since
descriptor `defines` stay package-private; the test asserts it at compile time.
Each version has a member (yaml-cpp, yaml-cpp-v080), and both are measured on
openkal.

The test found an upstream defect: GraphBuilderInterface's pure virtual
destructor is defined nowhere, so a derived class links only when its user
defines it. The test does, as any consumer must; the descriptor does not.

The site's openkal facet had three sentences for values (openkal itself /
runs on openkal / fails on openkal). It now has two names: openkal-ecosystem
for the packages that make up openkal, openkal-compat for packages measured
to run in an openkal graph. A package that only builds or fails is filed
under neither; its page still shows the per-target measurement.

The README keeps one line per shape in its reference table; the long
explanations for recastnavigation and huxerui move into the descriptor
catalog, which gains a yaml-cpp row.
…6_64-windows-musl; a CN mirror may be the maintainer's own

compat.py select: a change measured every member whenever anything under
tests/openkal/ moved, so adding one member cost the whole list. It now
measures every member only when the graph or the harness changes (an openkal
family descriptor, pins.toml, compat.py); a members.toml edit measures the
entries added or changed against the merge base (--base), a member's own
test project measures that member, and a descriptor measures the members
that depend on it, as before. The workflow passes the merge base and now
also triggers on tests/examples/**. selftest pins each rule.

The Windows target is x86_64-windows-musl. The graph presents musl's C
environment there, and x86_64-windows-gnu read as a mingw-w64 build, which
it never was. Measured locally with the pins (mcpp 2026.9.21.3, runtime
0.15.1): cli11, zlib and cmp-module run; curl stops at the same
curl_setup.h:591; yaml-cpp and yaml-cpp-v080 run. Renaming the target moves
the harness, so this pull request measures every member once, and that
measurement becomes the published baseline.

check_mirror_urls.lua required every CN url to live under gitcode
mcpp-res. A library's maintainer may host the mirror instead; the rule is
now a gitcode release asset under any owner. ZheFeng7110.boost's mirror
(#463), which has kept lint red on main since, passes unchanged.
@Sunrisepeak Sunrisepeak changed the title compat.yaml-cpp 0.8.0 and 0.9.0 on openkal; openkal-ecosystem / openkal-compat site labels; a shorter README compat.yaml-cpp 0.8.0/0.9.0 on openkal; openkal-ecosystem/openkal-compat labels; openkal measurement selects by change on x86_64-windows-musl; maintainer-hosted CN mirrors; a shorter README Sep 23, 2026
…not by way of <format>

src/emitterutils.cpp (0.8.0) names uint16_t/uint32_t and includes neither
<cstdint> nor <stdint.h>; 0.9.0 added the include. Measured with gcc 15.1.0
over glibc 2.44: -std=c++17 fails with "'uint16_t' was not declared in this
scope"; c++20 and c++23 compile because libstdc++'s <ostream> then reaches
<format> -> bits/unicode.h -> <cstdint>. The package builds as c++23, so it
held, on a transitive include. -include cstdint for the package's own TUs
(32/32 and 31/31 in the compile database; the consumer's TU is untouched);
both members pass on gcc 16.1.0/glibc, gcc 15.1.0/musl and llvm 22.1.8.
Measured by openkal-compat run 35882195774 on this branch, with mcpp
2026.9.21.3, openkal-llvm-runtime 0.15.1 and llvm@22.1.8, the host's mingw
headers installed, 32 members on x86_64-linux-gnu and x86_64-windows-musl.

x86_64-linux-gnu: 30 run, 2 fail (curl and cmp-module, both declared
not-portable). x86_64-windows-musl, through Wine: 30 run, 1 builds
(mimalloc: its alloc test exits 1 under Wine), 1 fails (curl, declared).

Against the published file of 2026-09-20 (runtime 0.12.0, mcpp 2026.9.18.3)
no label is lower. archive, c-ares, doctest, spdlog and sqlite3 now run on
Windows and expat on Linux, as docs/openkal-compat.md's 2026-09-21 section
already described; yaml-cpp and yaml-cpp-v080 run on both targets. The
Windows cells were recorded as x86_64-windows-gnu until this measurement.
@Sunrisepeak
Sunrisepeak merged commit 0d18e85 into main Sep 23, 2026
16 checks passed
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