Repository navigation
2026.10.11.1: build dependencies on one pipeline — the build programs' graph, instances per configuration, build plugins, one library interface, CalVer deprecations (#797) - #798
Merged
Conversation
…ce; compat registry; workspace overrides at the root position (#797)
…e package, plugin roots; remove the single-unit host module path (#797)
…pendency cache, quiet sub-build; tests follow the build programs' graph (#797)
…abase describes build programs, host instances and the engine interface (#797)
… the resolution record (#797)
…recations dated by CalVer; 2026.10.11.1 (#797) - e2e 902-913: libraries of a build program, two instances of one package, features per instance, whole libraries, program identity, the library interface, the request of a build dependency, the deprecation registry, build plugins (P1-P5), workspace tables (R4, R5, W1, W2), shared build programs' graph across configuration groups, the build database. - Existing tests read the build programs' graph under target/.build-mcpp/host instead of the removed host module store and its log lines. - The host graph carries the build root's [xlings.overrides] and the project whose .mcpp holds the custom indices' packages; its directory states both. - A root without [package] gives its members [workspace.xlings.overrides], and its schema warnings are reported when its members are built. - A path package is editable wherever it lies; the source digest re-reads a racily clean file; a CalVer month has a four-digit year and a month 1-12. - graph.cpp's lookups move to graph_closures.cpp (file length limit). - Examples 08, 09, 10 and 12 use [build-dependencies] without host-module. - docs (en, zh), SPEC-004/005/007/008, CHANGELOG; version 2026.10.11.1.
…ts find the target's build directory (#797) - `BuildOverrides::host_target`: the build programs' graph and a host tool's sub-build target the machine doing the build; `[build] target` and the configured default target name the target of the build that asked (e2e 97 on a Windows host whose default target is x86_64-windows-gnu). - The engine package and a workspace member are recognised through any spelling of their directory (macOS /var and /private/var, Windows 8.3 and long names): a member reached through another spelling was named with the default namespace and its program was not found (e2e 857, 858, 913). - The verbose log states why a build program's cached run is not used. - The error for a missing program names the programs the plan has. - Tests that look up a build directory under target/ exclude the build programs' graph under target/.build-mcpp/host; 92 and 857 read the new object names and either path separator.
…un record names the contract keys that moved (#797) - `build_program_dir`: one definition of where a package's build program keeps its record, graph document and synthesised program (the root's and a workspace member's below their own target/, a dependency's below the build's). A synthesised rule program is written there again, as target/.build-mcpp/build.mcpp, the file a project copies to take it over (mcpp-plugins spirv-zero-config; e2e 798 back to its original assertion). - The run record keeps each contract key with the digest of its value (`build.mcpp.ctx`); a run that is not replayed because the contract moved names the keys in the verbose log. - e2e 97 finds the program in the build programs' graph; 913 compares arguments up to the directory above the graph, with one separator.
…n mcpp has launched (#797) On Windows a child's environment is applied to mcpp itself (`_putenv_s`), and `build_env_for_cl` composed the toolset's PATH from the process's current PATH. The value reached `MCPP_TOOL_ENV`, part of a build program's run key: a build that had compiled its programs through the build programs' graph ran ninja first, so its PATH carried the toolset's directory once more than the next build's, and every program ran again (e2e 89, 839, 842; mcpp-plugins cmake-consumer). The toolset's PATH and a program's PATH now start from the PATH the process was started with (`env::inherited_path`), captured before anything is launched.
…ain (#797) The build programs' graph compiles and runs a program in its own directory. A copy is placed where the program was before the graph, target/.build-mcpp/build.mcpp.bin (build.mcpp.exe on Windows), beside the package's run record: the file a person or a test runs by hand with an environment of its choosing (mcpp-plugins' plan checks for dist-apple, dist-apk, dist-wix and ios-app). e2e 168 and 97 keep their original assertions; docs/30 states the location.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #797.
Design:
.agents/docs/2026-10-11-build-dependencies-one-pipeline-design.md(revision 3, §20 plan, §21 implementation notes); observations:…-repro.sh.One pipeline for build dependencies
A node of the graph is a package in a configuration. The table states the configuration:
[dependencies]is the target,[build-dependencies]is the build program. The entry states the products: the library unless it names onlytoolsorartifacts;host-module = falsedeclines it.target/.build-mcpp/host/<group>/. mcpp plans and builds it as any workspace. Each library is compiled as its package, with its include directories, defines, features, dependencies and implementation units.build.mcpp(a.mcppC++ source) is compiled by the same plan.cd <dir> && mcpp buildreproduces the compile.pathor member tree. A header edit compiles the program and runs it again. When every identity stands, the graph is not planned.mcpp/mcpp.corelive at$MCPP_HOME/engine/<version>/modules, a global dependency-cache entry (_engine/mcpp-build-module@<version>).mcpp self envreports it asengineModules.mcpp.coreis a plugin unit. Plugins depend on plugins and libraries through[dependencies]. A plugin is planned in the build-program configuration when it is the root (mcpp build/mcpp test). Each of the following is refused with a stated cause:[dependencies](the refusal names the chain);mcpp;--targetfor another machine;mcpp pack.[lib] path, Form Blib, or the convention), its public modules and the exported modules.[modules] exportsis an assertion, andrule_modulemust be declared by a unit of its feature.<pkg>:build,<pkg>:host,mcpp:coreandmcpp:std:host, with configurationbuild-program.compile_commands.jsonis unchanged.mcpp why build-programs,mcpp why compat, instances inresolution.jsonandwhy deps, and thehost-graph,build-program,edgesandcompatlog tags.Deprecations dated by CalVer
mcpp.pm.compat.registryholds each deprecated reading with the release that deprecated it and the month it is removed (2027.1).mcpp why compatlists the uses,--strictrefuses them, and docs/51 lists the rows.check_compat_registry.pyand a unit test hold the code and the docs to the table, and fail once a floor is reached.workspace-positionmoves from "1.0.0" to 2027.1.host-module-in-dependenciesandplugin-imports-from-build-dependencies.Issues fixed
build.mcpp[workspace.xlings.overrides]failed a rooted workspace's own buildbuild.mcppor the enginebuild.mcppbeside a root without[package]was ignored silentlyfeaturesin[workspace.dependencies]was dropped[workspace.xlings.overrides]did nothing on a root without[package]Tests
lib.MCPP_HOMEfail identically on both binaries in this sandbox, so CI decides them.Docs
docs 04, 05, 07, 09, 20, 30, 31, 50, 51 (en, zh); SPEC-004 v1.15, SPEC-005 v1.8, SPEC-007 v0.9, SPEC-008 v0.2; examples 08, 09, 10, 12; CHANGELOG; version 2026.10.11.1.
Ecosystem follow-ups (after release)
libfor module wrappers; toml++ back to Form B.[dependencies].:build/:host/mcpp:coresets (mcpp ≥ 2026.10.11.1).Found on the CI runners and fixed here
BuildOverrides::host_target). Neither[build] targetnor the configured default target applies to them: a Windows host whose default target isx86_64-windows-gnuplanned its build programs for it./var≡/private/var; Windows 8.3 and long names.MCPP_TOOL_ENVcomposed PATH from that mutated value, so every second build ran its programs again. The value now starts from the PATH the process inherited.build.mcpp.ctx).-vnames the keys that moved.target/.build-mcpp/build.mcppagain.target/.build-mcpp/build.mcpp.bin(.exeon Windows), where tools run it by hand.mcpp-plugins at this head, against this engine: all jobs pass (run 38102446399, via
mcpp_source_ref).