Repository navigation
0.19.0: one tool-source resolver for every member, on-request payloads, and a toolchain description library #41
Description
Activity
Released as 0.19.0
One resolver answers, for every member, where the tool it runs comes from:
mcpp.plugins.tool, in one order — the build program's choice, the member's legacy variable, the engine's override, then the declared payload, asked for there when it is declaredprovision = "on-request".A choice never asks for the payload, which is what makes "the build program names its own tool" mean "the payload is not downloaded". Every answer is recorded with
mcpp::decision, so a build reports the source andmcpp why tool <name>answers from the same record;describe_missingis the one refusal text, listing every way to name the tool.Thirteen members use it: deps-vcpkg, deps-cmake, deps-archive, rules-cuda, rules-hip, rules-sycl, rules-ascendc, rules-slang, rules-spirv, rules-qt, dist-apk, dist-appimage, dist-wix. Five entries are now installed on request:
xim:vcpkg,xim:cmake(twice),xim:appimagetool,xim:bundletool.mcpp.plugins.toolchain(featureplugins-toolchain) builds the statement a root build program makes in a toolchain phase:layout,prefixed,managed,from_env_script,newest_under,env, thewith_*refinements,configure(fn)/use(d).What this release measured in its own CI, beyond the 28
plugin-logiccases and the consumer fixtures:xim:vcpkgno longer appears in the macOS or Windowsrulesjob logs, where main provisionsxim:vcpkg@>=2026.7.27. That saving is also what exposed a defect in the test kit: it left the real build'sMCPP_XPKG_*in the environment, includingpendingfor an on-request payload nothing had asked for, so eight vcpkg cases planned nothing wherever the payload was absent — 19 of 27 on macOS and Windows, 27 of 27 where it was installed. Measured both ways on one binary: 19 → 27.rules-sycl's migration conflated the payload root with the program, so-Lpointed at the compiler's path and the SYCL consumer failed withunable to find library -lsycl. Fixed, and every migrated member audited for the same swap.- A stated program path now follows the host's own executable-suffix rule: on Windows
command -v cmakeanswers a path with no.exe, which the resolver had refused.
Engine floor: mcpp 2026.10.1.3 (protocol 15, mcpp-community/mcpp#755).
Released
- Merged as
7f5f0edafter the PR run came back green on all four jobs against the released mcpp 2026.10.1.3 (Linux consumers, macOS rules, Windows rules, Windows deps). - Tagged
v0.19.0, released on GitHub, and mirrored to GitCode (mcpp-res/mcpp-plugins@0.19.0) with the localgtc; the mirrored asset was downloaded back andcmp-verified byte-identical to the GitHub archive, sha2562dd13d81cffd77babdb1070d24659348d2f699c634981f66e3e97206389c5c7e. - Registered in mcpp.plugins 0.19.0 mcpplibs/mcpp-index#505 (
56990ac), whose workspace matrix rebuilds every member against this version; the index artifact is published, so clients resolve it. - fix(qt): track files referenced by QRC resources #42 was reviewed and merged first, so its
qrc_filesfix is in this release rather than displaced by it. Measured before merging: 22 of 23 cases without the fix, with both resource assertions failing, and 23 of 23 with it.
Verified against the released artefacts in
xlings subos eco-1001, through the CN mirror, in a privateMCPP_HOME:PASS s755_plugins -- a named cmake is used and the payload is not asked for, alongside the two engine scenarios (3 passed, 0 failed).docs/tool-sources.mdis the reference for both audiences; its chapter 3 gives each way of naming a tool as a completebuild.mcpp, every one of them compiled against this release before being written down.
Motivation
Fifteen members declare xlings payloads, and each decides on its own where its tool comes from: some take an option, some an environment variable,
rules-spirvandrules-slangfall back toPATHsilently (contrary to SPEC build-plugins R6.2),dist-wixanddist-appimagerefusePATH, andrules-cuda,rules-hip,rules-ascendcanddist-apkoffer no way to name a tool at all. A tool named inbuild.mcppdoes not prevent the declared payload from being downloaded (mcpp-community/mcpp#755).Design
Recorded in
.agents/docs/2026-10-01-ecosystem-build-plugin-framework-design.md(v3). For 0.19.0, on the engine of mcpp#755:mcpp.plugins.tool(inplugins-core): one resolver for every member -- atool::choiceoption type (constructible from a string, soo.cmake = "/usr/bin/cmake"keeps working), one priority order (the build program's choice, a member's legacy variable, the engine's override, the payload requested on demand), one refusal text, and a decision recorded with thebuild.mcppline that made it.mcpp.plugins.toolchain(featuretoolchain): builders of a toolchain description for the root build program's toolchain phase (layout,prefixed,compose,from_env_script,with_launcher,managed).tool::resolve; members whose tools are needed only for some builds declare their payloadsprovision = "on-request"; the silentPATHfallbacks become warnings.