Skip to content

0.14.0: deps-archive, a prefix's files deployed, Qt's own translations, and rules-qt-xim-base - #31

Merged
speak-agent merged 7 commits into
mainfrom
feat/deps-archive-deploy
Sep 26, 2026
Merged

speak-agent merged 7 commits into
mainfrom
feat/deps-archive-deploy

Conversation

@speak-agent

Copy link
Copy Markdown
Member

0.14.0 removes the manual steps a project still needed after building with 0.13 (Sunrisepeak/GalTranslPP#2: unzip an embedded Python, run Release.py) and cuts the Qt download to a third. Engine floor unchanged: mcpp 2026.9.26.2. No engine change is needed.

Files a program reads at run time, placed by the build. A deployed file must be one the build graph knows how to produce. So each file is first produced by an action that names it as an output (SPEC-007 R3.2), and the output is deployed: mcpp run finds it beside the program and mcpp pack carries it. The following was measured:

  • a library package's deployed outputs reach the bin/ and the packed tree of every program that links it;

  • a dependency's artifact actions run with the consumer's build.

  • deps-archive (mcpp.deps.archive, new): unpack({archive, to}) reads a zip's central directory while the build program runs, so every member is named before anything is extracted.

    • One artifact action, mcpp-deps unpack (cmake -E tar xf --touch), extracts it and names each file as an output; each file is then deployed under to.
    • ZIP64 archives and members whose path would leave the extraction directory are refused by name.
    • A missing cmake is a warning (R1.2).
    • result::files lists the copies for a project's own layout.
  • deps-vcpkg / deps-cmake options::deploy: files of the installed prefix ({"share/opencc/t2s.json", "BaseConfig/opencc"}), copied by a ${mcpp.self} stage action whose input is the installation's stamp, then deployed. prefix::deployed lists the copies.

  • rules-qt translations::qt_languages: lconvert combines the catalogs of the linked modules into qt_<language>.qm under deploy_to. This is the file windeployqt writes, and it has no dependency left to resolve.

rules-qt-xim-base declares xim:qt-base (openxlings/xim-pkgindex#881, merged): qtbase, qttools, qttranslations and the QtQml library lupdate loads. The download is 56–73 MB against 187–245 MB for xim:qt. roots() uses xim:qt when a project declares both.

Criteria (.github/scripts/check-deps-and-qt.sh):

fixture criteria
tests/archive-consumer (new) emit extracts nothing; the program reads two members from beside itself; a C++ member that #errors is deployed as data, not compiled; a second build does not extract again; a changed archive does; the packed tree carries the files and the packed program reads them
tests/vcpkg-consumer share/fmt/copyright deployed beside the program, and in the packed tree on Windows
tests/qt-consumer now on rules-qt-xim-base; loads the combined qt_de.qm and prints Qt's own QProgressDialog "Cancel" as "Abbrechen"

All three were run locally against the released 2026.9.26.2, with xim:qt-base installed from the index.

Also:

  • The deps modules use index loops over strings (GCC 16 fails to inline a string iterator in a module interface).
  • deps-cmake lists the cmake executable among its action's inputs (R3.1).
  • The README documents the Linux ABI constraint between a libc++ toolchain and vcpkg ports built against libstdc++.

@speak-agent
speak-agent merged commit a0aad3b 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