Repository navigation
emit build-database for IDEs: one failing member loses the whole database, and build programs cannot tell a plan pass #699
Copy link
Copy link
Closed
Description
Activity
- added 8 commits that reference this issue
on Sep 26, 2026 Released in mcpp 2026.9.26.2 (#702, squash
c109fdd6).mcpp emit build-databasenow plans every selected member on its own:- A member whose planning fails contributes no sets and one
errordiagnostic whosepathnames itsmcpp.toml.datais present when any member planned, and itswatchalso lists each failed member'smcpp.tomlandbuild.mcpp. The exit status is 1 whenever an error is present. - Under
emit, a host tool that does not build is the warningMCPP_BUILD_DATABASE_HOST_TOOL_UNBUILT. Planning continues, and the requesting build program receives the path the tool would be published at.mcpp buildstill fails as before. - A package whose build program fails is described without that program's directives, with the error
MCPP_BUILD_DATABASE_PROGRAM_FAILEDwhosepathnames itsbuild.mcpp. - The plan-only signal is not added: verification belongs in
checkactions, whichemitdoes not run (design record §4.7, SPEC-007 R1.2, R1.4).
S2 0.3.0 states the partial answer (S2-3.4-12, S2-3.4-13). It landed in Sunrisepeak/mcpp-language-server#26 together with the consumer side, and mcppls 0.0.5 reports each part the producer could not describe as
producer-partial.The same release also changes the compile database, based on the report that accompanied this issue:
- one database per configuration;
directoryis the output directory;- a module interface's entry carries its language flag;
- the standard-library units are listed.
Readings:
- e2e 787, 788 and 789 fail on 2026.9.26.1 and pass on 2026.9.26.2.
- In an xlings sandbox, with CN mirrors and mcpp installed from the published index, the release's own e2e scripts pass against the published binary: 20 ok, 0 failed. The same script against 2026.9.26.1 fails exactly the 16 checks this release changes.
- CI of 2026.9.26.2: one compile database per configuration, emit plans every member, prepare actions and runtime search directories, DLLs beside a Windows program, link flags as words #702 is green on every platform except the two xcode-27 legs of ci-macos xcode-27: ld64.lld cannot parse arm64e.x1 in either available SDK (upstream, tracked) #669, which fail the same way on
main.
- A member whose planning fails contributes no sets and one
- added a commit that references this issue
on Sep 26, 2026 - added a commit that references this issue
on Oct 3, 2026
Metadata
Metadata
Assignees
Labels
No labels
mcpp-language-server gets a project's model from
mcpp emit build-database --format json. Reproducing Sunrisepeak/mcpp-language-server#23 on a real 5-member Windows workspace (GalTranslPP: vcpkg + Qt 6, mcpp 2026.9.25.1, windows-2025) showed two properties ofemitthat cost the editor its model. Both are behaviour the spec states today, so this is a request, not a bug report. Tracked on our side as UP-M2 / UP-M3 in Sunrisepeak/mcpp-language-server#24.1. One member's failure loses every set (SPEC-005 R5.2)
GPPGUI's build program callsmcpp::dep_bin("gpp.updater", "Updater"). Building that host tool ran its ownlupdatecheck action, which failed on that machine (lupdate.execould not loadQt6Qml.dll).MCPP_BUILD_DATABASE_PLAN_FAILED: GPPGUI: building host tool 'updater:Updater' failed, and nodata— the four members that planned fine got no database either.Ask: when some members plan and others fail, return
datawith the sets that planned, plus anerrordiagnostic per failed member, under a code a consumer can tell apart from a total failure (e.g.MCPP_BUILD_DATABASE_PARTIAL).2. A build program cannot tell it is running for a plan (SPEC-005 R2.5)
emitrunsbuild.mcppexactly asbuilddoes and builds dependencies' host tools, with no signal in theMCPP_*contract..libper library) — or a host tool whose build runs project checks, as above — failsemiton every machine that cannot build yet. That is exactly when an editor most needs the model.mcpp::actionedges already do not run underemit(R2.2); the problem is work done in the program itself and in host-tool builds.Ask (any of):
MCPP_PLAN_ONLY=1/mcpp::plan_only(), so a program can skip checks and heavy work while planning;emit, a build-program failure becomes a diagnostic for that member instead of failing the command (pairs with 1);emit, do not run thecheckactions a host-tool build declares.Evidence