|
435 | 435 |
|
436 | 436 | **Configurations.** The selected members are grouped by their effective |
437 | 437 | root-position values: the toolchain request, `[package] standard`, |
438 | | -`dialect_cxxflags`, `cxx_runtime`, `dependency_linkage`, the target and the |
439 | | -profile, each after workspace inheritance and the command line. Each group is |
| 438 | +`dialect_cxxflags`, `cxx_runtime`, `linkage`, `dependency_linkage`, the target, |
| 439 | +the profile and the indices, each after workspace inheritance and the command |
| 440 | +line. A relative path a member writes (an `[indices].path`) is anchored at the |
| 441 | +member before the values are compared. Each group is |
440 | 442 | one plan with one virtual root, whose root-position values are the group's. |
441 | 443 | Two groups that resolve to one directory (two spellings of one toolchain) are |
442 | 444 | built one after the other in it. |
@@ -538,3 +540,30 @@ Readings with the implementation (Linux, llvm 22.1.8): |
538 | 540 | mcpp's own repository, a rooted workspace, builds itself with the new engine |
539 | 541 | (full build, gcc 16.1.0, 115 s), and its module tests run through member plans |
540 | 542 | (`mcpp test -p graph`, `-p versioning`). |
| 543 | + |
| 544 | +### 17.1 What a member states about itself (2026.9.29.2) |
| 545 | + |
| 546 | +The inventory of §15 classified the sites that treat `packages[0]` as the |
| 547 | +root. It did not cover the sites that read the root's manifest (`state.m`, |
| 548 | +`plan.manifest`) for a value the package owns; under a virtual root those read |
| 549 | +an empty value. The mcpp-index sweep of 2026.9.29.1 found two of them, and an |
| 550 | +inventory of every such read (about 170 sites) found the rest. Each is now |
| 551 | +read from the member, or made a value of the plan: |
| 552 | + |
| 553 | +| Statement | 2026.9.29.1 | Now | Criterion | |
| 554 | +|---|---|---|---| |
| 555 | +| a member's relative `[indices].path` | resolved against the workspace root | anchored at the member when the member is loaded; two spellings of one tree are one configuration | e2e 120, unit `IndexPathsAreAnchoredWhereTheyWereWritten` | |
| 556 | +| `import std` in a member's test entries | not seen (the root's targets only) | the entries of the root and of every selected member | e2e 836 M1 | |
| 557 | +| a member's `[resources]`, `windows_code_page` | the virtual root's (empty) | per member: its directory and include directories, `res/<member>/`, its images only | e2e 837 | |
| 558 | +| `[build] linkage` | not copied to the virtual root | a root-position value | unit `RootPositionValuesSeparateMembers` | |
| 559 | +| unknown `mcpp:` capability, cfg() and schema warnings | not reported for a member | refused and reported for each selected member | e2e 836 M2, M3 | |
| 560 | + |
| 561 | +Each criterion fails on 2026.9.29.1 and passes on 2026.9.29.2. The resource |
| 562 | +case also showed a defect of every build: a quoted `#include` in a script was |
| 563 | +tracked beside the script although the resource compiler finds it through the |
| 564 | +include directories, so a script that relied on them could not be built. The |
| 565 | +scan now resolves as the compiler does (unit |
| 566 | +`InputsAreResolvedThroughTheIncludeDirectories`). |
| 567 | + |
| 568 | +The rule the inventory missed is general: a virtual root answers for the plan, |
| 569 | +and a read of the root's manifest is correct only for a value of the plan. |
0 commit comments