You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
emit build-database builds host tools in full, so planning can cost a whole build of a tool package #707
mcpp emit build-database builds the host tools the planned packages request, as mcpp build does. The tool is resolved into a sub-build, and a ninja build of its link unit runs under plan_only (src/build/prepare.cppm, the host-tool branch). Only a failed tool build is softened, to MCPP_BUILD_DATABASE_HOST_TOOL_UNBUILT (#699 E2). A tool that builds is built in full, including every prepare action its own package declares.
Measured on 2026.9.26.2 with Sunrisepeak/GalTranslPP#2. The GUI member requests its sibling application as a tool ("gpp.updater" = { path = "../Updater", tools = ["Updater"] }) so that its release layout carries the executable. On a fresh Windows checkout, emit build-database spent over 38 minutes inside that tool's sub-build before the run was cancelled: vcpkg manifest installation (22 ports, binary cache restored), Qt code generation and compilation. An earlier state of the same project, whose tool build failed quickly, planned the workspace in about 3 minutes.
Why it matters
emit build-database is what an editor runs to answer "where are the includes" on a machine that never built. SPEC-007 §5 states the obligation for build programs (plan without constructing); this is the engine performing construction during planning on the program's behalf. A tool can be arbitrarily expensive, since it is an ordinary package.
Proposed behaviour
Under plan_only, do not build a host tool that is not already in the tool store. Hand the build program the path the tool will be published at (binOut, already computed before the build), as the unbuilt case does today, and record a note that the tool is not yet built. A build program that runs a tool while planning is the exception, and it already has to handle the unbuilt path, because a failed tool build produces the same state.
Fixed in mcpp 2026.9.27.1 (#719, merged as b439fd9), released on GitHub and mirrored to GitCode (xlings-res/mcpp), and published in the xim index (openxlings/xim-pkgindex#894).
Verified after the release with the published binary inside an xlings subos sandbox (xlings subos use eco-0927 --sandbox --cmd ...), mcpp configured for the CN mirror in a fresh MCPP_HOME:
e2e 788_emit_defers_an_unbuilt_host_tool: emit build-database builds no host tool; a missing one is reported as MCPP_BUILD_DATABASE_HOST_TOOL_DEFERRED. PASS.
Activity
2026.9.27.1: #704-#716 fixed, feature tools, artifacts edges, payload…
speak-agent commentedon Sep 27, 2026
Fixed in mcpp 2026.9.27.1 (#719, merged as b439fd9), released on GitHub and mirrored to GitCode (xlings-res/mcpp), and published in the xim index (openxlings/xim-pkgindex#894).
Verified after the release with the published binary inside an xlings subos sandbox (
xlings subos use eco-0927 --sandbox --cmd ...), mcpp configured for the CN mirror in a freshMCPP_HOME:788_emit_defers_an_unbuilt_host_tool:emit build-databasebuilds no host tool; a missing one is reported asMCPP_BUILD_DATABASE_HOST_TOOL_DEFERRED. PASS.