Skip to content

0.13.0: deps-vcpkg, deps-cmake and rules-qt, written against mcpp's SPEC-007 (engine floor 2026.9.26.2) - #29

Merged
speak-agent merged 13 commits into
mainfrom
feat/deps-vcpkg-rules-qt
Sep 26, 2026
Merged

speak-agent merged 13 commits into
mainfrom
feat/deps-vcpkg-rules-qt

Conversation

@speak-agent

@speak-agent speak-agent commented Sep 25, 2026 •

Copy link
Copy Markdown
Member

Engine floor: mcpp 2026.9.26.2, the release that lands mcpp-community/mcpp#702 (MCPP_VERSION: 2026.9.26.2 in CI). The members are written against mcpp's SPEC-007 (docs/specs/build-plugins.md): mcpp::runtime_search_dir, mcpp::roles::prepare with output_dir, the engine-maintained stamp, and the Windows DLL placement after the link.

Design record and plan: .agents/docs/2026-09-26-deps-vcpkg-rules-qt-design.md (§0.1 states the implementation's decisions), .agents/docs/2026-09-26-deps-vcpkg-rules-qt-plan.md. The xim packages this needs are published: openxlings/xim-pkgindex#878 (vcpkg 2026.7.27, qt and qt-addons 6.11.1).

A fourth family: deps-*, where a library comes from

A deps-* member installs a prefix through a program mcpp does not drive and maps it into the build by name. The installation is a prepare action whose output directory is the prefix and whose command is mcpp-deps, a program built from this package (tools = ["mcpp-deps"]): an action has no environment, vcpkg is configured through its environment, and two workspace members installing one prefix take a lock on it. The build program states the include directory, the libraries by full path and the runtime search directory, and never reads what the installation produces (SPEC-007 R1.3), so mcpp emit build-database on a machine that never built plans what the build will do.

  • deps-vcpkg (mcpp.deps.vcpkg): a vcpkg.json manifest found at or above the package root; the triplet derived from the target or named; overlay ports and triplets as the action's inputs; the triplet file decides the link form. xim:vcpkg is vcpkg-tool 2026-07-27 with the standalone bundle published beside it, so builtin-baseline resolves through vcpkg's git registry into its per-user cache and no clone is made per project. Build trees and downloads go to vcpkg's per-user directory, beside its default binary cache.
  • deps-cmake (mcpp.deps.cmake): a CMake subproject configured, built and installed by one action whose inputs are the subproject's files; layout names nested install directories, prefix_path becomes CMAKE_PREFIX_PATH.

rules-qt

moc (headers declaring a meta-object, found by content, and sources including their own .moc), uic, rcc and lrelease as source actions with declared inputs; lupdate as a prepare action when update_sources asks for it. The modules are linked by full path; the SDK's bin/ or lib/ is a runtime search directory (on Windows the engine places the Qt DLLs the program imports beside it); the plugin directories deploy_plugins names are deployed. A missing SDK, module or tool is a warning (R1.2). rules-qt-xim declares xim:qt 6.11.1 and, on Linux, the glib, zstd and zlib QtCore loads; rules-qt-xim-addons adds xim:qt-addons as a second prefix. On Linux the rule serves programs that do not load QtGui (QtGui needs libdbus-1.so.3, which the ecosystem does not publish); on macOS the modules are frameworks.

CI

all-rules-compile requires every member that carries sources and checks that every name it lists is declared; payload-only features (rules-qt-xim, dist-apk-kotlin) are no longer required there, so no SDK is downloaded on every host. .github/scripts/check-deps-and-qt.sh holds the criteria and runs on Linux, macOS and Windows: planning installs nothing and still names the include directory; a second build with nothing changed runs no installation; an edited subproject source rebuilds the subproject once and the build after it does not; two workspace members that share no dependency both install and link one prefix; moc, rcc and lrelease reach the program; on Windows the program started from the build directory finds its DLLs, and the packed tree carries fmt.dll, the Qt modules and platforms/qoffscreen.dll.

Consumer

Sunrisepeak/GalTranslPP temporary PR 2 builds through these members on windows-2025 once this is released.

…cpp-deps, and its prefix mapped into the build
… action, and its prefix mapped into the build
…path, and the plugins beside the program; rules-qt-xim and rules-qt-xim-addons declare the SDK
…rrying member compiles on every host; CI measures the new members on three platforms
… program on Windows and linked by name on Linux; measured on mcpp 2026.9.26.1
…h an output directory, prefixes are runtime search directories, and the build program never reads what an installation produces
…lation; uic, rcc and lrelease refuse two inputs with one output name; the Widgets fixture runs on macOS

Found by a review of the branch against mcpp's SPEC-007. The added-file criterion fails with the watch removed and passes with it.
@speak-agent
speak-agent marked this pull request as ready for review September 26, 2026 02:53
@speak-agent speak-agent changed the title 0.13.0: deps-vcpkg, deps-cmake and rules-qt, written against mcpp's SPEC-007 (waits for mcpp#702's release) 0.13.0: deps-vcpkg, deps-cmake and rules-qt, written against mcpp's SPEC-007 (engine floor 2026.9.26.2) Sep 26, 2026
…riple>] table only when a target is named, so a host build embedded a second libstdc++ and QtCore's RUNPATH found none
… logs there: the fixtures live inside the package they depend on by path, whose host tool mcpp keys by a stamp of its tree (mcpp#705); the second build is planned on every host
…untime contract on each host (clang on the MSVC ABI links the static CRT); the installation stamp comes from a prepare action
@speak-agent
speak-agent merged commit 3a6f1c2 into main Sep 26, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants