Qt split: inject logos-qt-sdk + logos-protocol, stamp logos_protocol_version into module metadata#113
Conversation
- New inputs logos-protocol and logos-qt-sdk, injected into both build pipelines (mkLogosModule + buildCppPlugin): modules now link logos-qt-sdk (which chains logos-protocol) while the Qt-free logos-cpp-sdk provides the std headers + code generator. - cmake/LogosModule.cmake synced with logos-plugin-qt's (it had drifted): three-root resolution (LOGOS_CPP_SDK_ROOT / LOGOS_QT_SDK_ROOT / LOGOS_PROTOCOL_ROOT), links logos-qt-sdk::logos_qt_sdk + logos-cpp-sdk::logos_headers. - Protocol-version stamp: the logos-protocol semver (parsed from logos_protocol.h) is injected into each module's metadata.json before moc embeds it (modulePreConfigure.stampProtocolVersion, jq). liblogos reads it pre-load to decide compatibility; modules from older builders lack the field and load as legacy. Builder-based modules need only a flake.lock bump — no metadata.json or source changes.
📊 External-library doc-test reportThe four ways to wrap a C library — each scaffolded into a real module, built against this commit, loaded in logoscore, and called — rendered alongside the commands actually run and their output (updated each run, commit Pages can take a minute to update after the run finishes. |
The previous commit synced this file from logos-plugin-qt's lineage, which silently dropped master-only blocks the universal-module path depends on: the generated_code/ glob (compiles the generated glue + provider dispatch into the plugin), the metadata.json configure_file for AUTOMOC, the LOGOS_API_STYLE selection, static-archive external libs, and the Go/cgo whole-archive block. Universal modules built without any Qt-plugin glue (no QTMETADATA) and capability_module dlopen-failed on a missing impl vtable, killing the token flow and with it all cross-module IPC. This restores master's file and re-applies only the qt-split changes: logos_module_context.h detection for the Qt-free base SDK, qt-sdk/protocol root resolution, qt-sdk source-layout sources, the split include dirs, and exported-target linking (logos-qt-sdk::logos_qt_sdk / logos-protocol / logos-cpp-sdk::logos_headers). Verified: logos-test-modules--tests check passes end-to-end with this builder (universal modules load, capability token flow works, IPC green). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Follow-up commit 59983c0: the original The file is now master's copy + only the surgical qt-split changes (three-root resolution, qt-sdk source list, split include dirs, exported-target linking). Verified: the |
Temporary — drop when the chain PRs merge (re-lock against masters). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
logos-test-framework's LogosTest.cmake now resolves three SDK roots (qt split); the test builder passes -DLOGOS_QT_SDK_ROOT / -DLOGOS_PROTOCOL_ROOT and the packages on buildInputs. flake.lock pins logos-test-framework to its qt-split branch (logos-co/logos-test-framework#4) — temporary, drop when the chain merges. Verified: the test-framework-integration check passes locally with these changes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…sts import mkLogosModuleTests.nix gained required logos-protocol/logos-qt-sdk args in b24c2b0, but only lib/default.nix's import was updated — the second import inside mkLogosModule.nix (the per-module auto-tests path) still passed the old arg set, failing evaluation for any module flake whose checks go through mkLogosModule with this builder. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Same class as the mkLogosModuleTests fix: mkLogosQmlModule's own
buildCppPlugin import (and default.nix's pass-through to it) dropped the
new args, so every ui_qml module evaluated with logos-protocol = null
('expected a set but found null' at buildCppPlugin.nix:124) — breaking
basecamp's plugins and the basecamp/tutorial doctests under the chain.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The PR was CONFLICTING on GitHub, which suppresses all pull_request CI runs. flake.lock: ours (the extraction-chain pins) + nix flake lock.
…165, cpp-sdk f0fe8cb, qt-sdk 722e590)
Part of the logos-protocol extraction (phases 2–4). Stacked set — depends on:
What
The builder absorbs the SDK split so modules don't: builder-based modules keep full source-level compatibility and need only a flake.lock bump — no
metadata.json, source, orflake.nixedits.flake.nix: new inputslogos-protocolandlogos-qt-sdk;lib/{default,mkLogosModule,buildCppPlugin}.nixinjectlogosQtSdk/logosProtocolPkgand export the three SDK roots to the module build (LOGOS_CPP_SDK_ROOT/LOGOS_QT_SDK_ROOT/LOGOS_PROTOCOL_ROOT).LOGOS_PROTOCOL_VERSION_STRINGinlogos_protocol.h(nixbuiltins.split— single source of truth, never minted) andlib/modulePreConfigure.nixjq-injects it aslogos_protocol_versionintometadata.jsonbefore moc embeds it. Every freshly built module carries the stamp in itsQ_PLUGIN_METADATA, readable without loading (lm,lgx verify,lgpm info).cmake/LogosModule.cmakesynced from logos-plugin-qt's retargeted copy — this is the canonical copy modules actually include via$LOGOS_MODULE_BUILDER_ROOT.Verification
capability_modulebuilt through the builder carrieslogos_protocol_version=0.1.0in its embedded metadata (verified by inspecting the built binary).🤖 Generated with Claude Code