Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion mcpp.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "mcpp"
version = "2026.8.15.2"
version = "2026.8.15.3"
description = "Modern C++ build & package management tool"
license = "Apache-2.0"
authors = ["mcpp-community"]
Expand Down
3 changes: 2 additions & 1 deletion src/platform/runtime_binding.cppm
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,8 @@ resolve_runtime_binding(
" Where the C runtime comes from a payload, there is now no "
"declared runtime to bind to — mcpp declines to guess a version, so "
"the link falls back to the host and the hermeticity check will say "
"so. `xlings self update` writes the block.",
"so. Only a SubOS created by a current xlings carries the block "
"(openxlings/xlings#547).",
selection.subosName,
info.note.empty() ? "no `subos_info` block" : info.note));
} else if (info.schema > mcpp::xlings::subos::kSupportedSchema) {
Expand Down
6 changes: 4 additions & 2 deletions src/platform/xlings/subos_info.cppm
Original file line number Diff line number Diff line change
Expand Up @@ -146,8 +146,10 @@ Info read(const std::filesystem::path& subosDir) {
info.note = std::format(
"subos '{}' does not describe itself (no `{}` block), so programs "
"run from here get no environment it declares — a GL application "
"will not find its drivers. A newer xlings writes this block; "
"`xlings self update` adds it",
"will not find its drivers. A SubOS created by a current xlings "
"carries it; an existing one is NOT backfilled by `self update` or "
"`self doctor --fix` (openxlings/xlings#547), so recreating the "
"SubOS is what supplies it today",
subosDir.string(), kBlock);
return info;
}
Expand Down
6 changes: 4 additions & 2 deletions src/toolchain/lifecycle.cppm
Original file line number Diff line number Diff line change
Expand Up @@ -615,8 +615,10 @@ export int toolchain_install(const mcpp::config::GlobalConfig& cfg,
// the install itself succeeded.
mcpp::ui::warning(std::format(
"installed, but not bound to a C runtime: {}.\n"
" Run `xlings self update` to write the SubOS "
"description, then re-run this command to complete the wiring.",
" The install itself succeeded. To complete the wiring, "
"use a SubOS created by a current xlings — an existing one is "
"not backfilled (openxlings/xlings#547) — then re-run this "
"command.",
fixed->skippedReason));
}

Expand Down
2 changes: 1 addition & 1 deletion src/version.cppm
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,6 @@ import std;

export namespace mcpp {

inline constexpr std::string_view MCPP_VERSION = "2026.8.15.2";
inline constexpr std::string_view MCPP_VERSION = "2026.8.15.3";

} // namespace mcpp
4 changes: 2 additions & 2 deletions tests/unit/test_post_install.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -160,8 +160,8 @@ TEST(PostInstallFixup, ADeclaredRuntimeThatCannotBeHonouredStillFails) {
// No marker may be written for a fixup that did not happen. The marker is a
// content fingerprint whose whole job is to answer "were these inputs ever
// applied"; one written for "we did nothing" reads back as "already applied",
// and the fixup would then never run again — including on the day the user runs
// `xlings self update` and the identity finally becomes knowable.
// and the fixup would then never run again — including on the day the user
// moves to a SubOS that does describe itself and the identity becomes knowable.
TEST(PostInstallFixup, ASkippedFixupLeavesNoMarkerBehind) {
if constexpr (!mcpp::platform::is_linux) {
GTEST_SKIP() << "the runtime binding gate is Linux-only";
Expand Down
Loading