Comprehensive fix — not a fallback. Each recipe now has explicit
[package] section with name and version. Version inference:
- Git-source recipes without rev/branch: '0.1.0' (Red Bear convention)
- Tar/git recipes with version in URL or dir name: extracted version
- Sysroot-copy recipes: matched to toolchain version
Affected: 250+ recipes across all categories (core, libs, dev, system,
kde, qt, drivers, gpu, drm, kernel, userspace, etc.) Every recipe
in the redbear-mini build chain that was missing [package] now has
explicit version metadata. Cookbook can now always determine a version
at packaging time, eliminating 'cannot guess version' failures.
No cookbook fallback hack — the source of truth is recipe metadata.
CMake ninja generator may not create *.dir output directories
before the first compilation pass, causing 'fatal error: opening
dependency file ... No such file or directory' during the Qt host
tools build (moc, uic, qtwaylandscanner). Add a find+mkdir loop
between cmake configure and cmake --build to pre-create them.
The host tool build profile was hardcoded with '6.11.0', causing the
stale 6.11.0 host tools to be reused for the 6.11.1 cross-compile.
Updated profile string to invalidate old host build.
Upstream Qt 6.11.1 already absorbed the #if QT_CONFIG(opengl) guards in
qwaylandclientbufferintegration_p.h that our redox.patch was adding.
Removed the now-obsolete hunks per patch governance (rebase, drop if
upstream absorbed it).
All remaining hunks apply cleanly against 6.11.1 with minor line offsets.
Bump the entire Qt 6 recipe surface to 6.11.1 as resolved from
download.qt.io on 2026-07-02. Per AGENTS.md fork-adaptation policy,
patches in local/patches/qtbase/* and local/patches/qtdeclarative/*
must be re-applied against the 6.11.1 source tree after this commit;
rebase is open work for the next session.
Verified BLAKE3 hashes for the 6.11.1 tarballs:
qtbase c3b83023dc54f1173831bbc80abca1901418ef517875bf8071a4895d3c4a3162
qtdeclarative 10f2d0662047ceb0ef221b725b59e7fec5c9092a4c10d5acc7daefea5f11b962
qtwayland 154b80972e472b10330c82d3b171a915959a5d06139289d5b898c16c58de4de8
qtsvg 49b947e1a96bf0a29a1ee84c231a518a1413d9f3ec360617e405400e510508b2
qtshadertools 24dcd88b9e752a380067182687032b2139d2f6220d64e4193428434970102ae2
qtsensors 52ad8a724bc34f724feef197cf29f1cb535831ddd0fbad6e9dfedaa01eef1379
Also:
- qtbase: bumped from 6.8.2 -> 6.11.1. The 6.11.0 source tree had been
imported under local/recipes/qt/qtbase/source/ by a prior session
without updating the recipe.toml. This commit aligns the recipe
with both the imported source and the resolved upstream latest.
- qtshadertools: NEW recipe created. The recipes/qt/qtshadertools
symlink was dangling (target directory did not exist), making
qtdeclarative's qtshadertools dependency unresolvable. Now wired
up following the qt6-sensors recipe pattern. Source tar URL is
the resolved 6.11.1 upstream; per-repo fetch will populate
source/ on next build.
What's NOT done (deliberately):
- Patch rebase in local/patches/qtbase/P*.patch and
local/patches/qtdeclarative/P1-skip-tools-crosscompile.patch.
These must be re-applied against the 6.11.1 source tree before
the next build. AGENTS.md policy: rebase, do not remove.
- KF6 6.10 -> 6.27.0 bump (38 framework recipes, 17-minor delta).
Deferred — multi-day patch-rebase work, out of scope for one session.
See local/docs/0.2.5-GRAPHICS-FREEZE-PLAN.md §2.2.
- KWin 6.6.5 -> 6.7.2 + wayland-protocols/libdrm/libwayland/...
bumps (remaining graphics recipes). Deferred.
- No build was attempted. recipe.toml pin is now consistent with
resolved upstream latest-stable; no source tree replacement has
happened.
The build-redbear.sh script auto-stashes working tree changes
in nested relibc and base source trees before running the
build. These changes were captured by the failed kernel
build attempt that hit the json-target-spec / kernel rust
toolchain mismatch (fixed in 0.2.5 by creating the local
0.2.5 branch).
Captured changes:
- local/recipes/kde/* : KDE Frameworks 6 source CMakeLists
whitespace changes from the autostash (preserved)
- local/recipes/qt/qtbase/* : qtypes.h whitespace from the
autostash (preserved)
- local/sources/kernel/Cargo.lock : dependency lock from
the kernel relibc rebuild attempt
- local/sources/kernel/src/lib.rs : touched (mtime) by the
build script's touch + make prefix command
This is a bookkeeping commit — the actual code changes
for the threading plan are on the 4 submodule branches
(kernel, relibc, base, libredox) and will be pushed
separately.
0.2.5 branch was created from 0.2.4 (HEAD cd3950072e) to
continue Phase 0 of the multi-threading plan work in a
clean branch.
Three related fixes for the qtbase and KDE source trees:
1. ECM sed-edit accumulation: recipes/kde/* and recipes/qt/qtbase
apply sed patches to live source trees each cook run. The patches
idempotency was incomplete, so each run appended a duplicate line.
'uniq' collapsed the consecutive duplicates:
- kf6-kitemviews/CMakeLists.txt: 165 -> 93 lines
- kf6-kwayland/CMakeLists.txt: 184 -> 133 lines
- qtbase corelib/CMakeLists.txt: removed duplicate Redox block
- qtbase qtypes.h: 359 -> 304 lines
- qtbase qnativesocketengine_unix.cpp: 1624 -> 1513 lines
- qtbase qnet_unix_p.h: 218 -> 163 lines
- qtbase qwaylandclientbufferintegration_p.h: 299 -> 79 lines
Net: 565 duplicate lines removed. Root cause: the ECM sed
operations did not check for prior presence. Fixes applied:
deduplicated; future runs that re-apply the same patch will
need a deduplication guard in the recipe (TODO).
2. Force hosted C++ runtime (-D_GLIBCXX_HOSTED=1) in redox-toolchain.cmake.
Redox is freestanding, so libstdc++ <cstdlib> takes the freestanding
branch which does NOT declare strtold/atoll/strtoll/etc. This
caused ktranscript (in kf6-ki18n) and any other code that uses
<bits/basic_string.h> std::stold to fail at compile time with
'strtold has not been declared in ::'. Forcing hosted mode
selects the libstdc++ hosted branch that #include_next <stdlib.h>
and resolves to relibc's strtold via the cbindgen trailer.
The existing libredbear-qt-strtold-compat.so shim remains
useful for the link step.
3. Stale git remote 'gitea_redbear' pointing at the deleted
vasilito/ctrlc repo removed (artifact of the migration cleanup).
The 6 pre-existing uncommitted changes (Cargo.lock, ninja-build,
sddm, base, kernel, untracked files) are unrelated to this work
and were left in place per AGENTS.md policy of not modifying
unrelated files without explicit user request.
Source comes from tar — local edits are overwritten on fetch.
Patch adds #include <stdlib.h> before Qt headers in common_helpers_p.h
so GCC <cstdlib> sees ::strtold declared.
GCC <cstdlib> needs ::strtold declared. Qt's include chain pulls in
<cstdlib> before stdlib.h. Adding #include <stdlib.h> at the top of
common_helpers_p.h fixes the 'strtold has not been declared in ::'
error. Reverted -U_GLIBCXX_USE_C99_STDLIB toolchain breakage.
GCC <cstdlib> needs ::strtold declared. relibc stdlib.h provides it,
but Qt include chains can pull in <cstdlib> before stdlib.h.
Adding -include stdlib.h at the toolchain level fixes all Qt/KF6 recipes.
OpenSSL 3.5.3 tarball is missing include/openssl/core.h and
include/internal/core.h headers. These are standard OpenSSL 3.x
headers that are referenced by multiple source files.
- Add P0-add-missing-core-headers.patch with both missing headers
- Update recipe.toml to apply the patch
- Headers sourced from official OpenSSL 3.5.3 branch on GitHub
Fixes build failure:
fatal error: openssl/core.h: No such file or directory
- Add --address=unix:path=/run/dbus/system_bus_socket to dbus-daemon args
- Add before = ["13_redbear-sessiond.service"] for strict ordering
- Fixes redbear-sessiond "failed to read from socket" errors
- Add fallback to copy from sysroot/usr/include/KHR/ if available
- Generate minimal khrplatform.h stub if neither exists
- Fixes build failure where Qt's qopengl.h cannot find KHR/khrplatform.h
Root cause: PciDevice::open_io_ports never called acquire_iopl(),
so the first outl to 0xCF8 triggered #GP(0) when redox-drm tried
to scan virtio-gpu PCI capabilities.
- Add ensure_iopl_acquired() helper (thread-local Once)
- Call it in PciDevice::open_io_ports before any I/O
- Add P1-pci-open-io-ports-iopl.patch to recipe
- Mirror patch to local/patches/ for durability
- Add x11proto to redbear-full.toml package list
- libxau recipe updated with x11proto dependency and custom build script
- Fixes libxau build failure: 'Package xproto was not found'
- Removed broken netinet/in6_pktinfo_compat.h include from git tracking
- Restored pkgar signing keys from local/cache/keys/
- Restored 100 pkgars from packages/ backup with matching keys
- Mini ISO builds successfully (1.5 GB)
- Full ISO needs COOKBOOK_OFFLINE=false for missing tarballs
The committed git state had a broken #include from a concurrent session.
The atomic build extracts the clean tarball, but the dirty git-tracked
file was never committed clean. Reverted to tarball version.
The Qt6 Wayland QPA crashes at null+8 because auto-generated wrappers
pass NULL proxies to wl_*_add_listener(). Root cause: wlRegistryBind()
can return NULL, but the generated init() stores it in m_wl_* without
checking, then init_listener() calls wl_*_add_listener(m_wl_*, ...)
which page-faults writing to proxy->object.implementation.
Fix: post-build Python script patches generated qwayland-wayland.cpp
with null guards on every wl_*_add_listener(m_wl_*, ...) call:
if (m_wl_*) wl_*_add_listener(m_wl_*, ...)
Patch-and-rebuild.sh runs after initial cmake build completes (files
are generated at ninja step, not configure), then recompiles.
This is the SYSTEMIC fix — no env vars, no plugin renaming, no
workarounds. Every Qt6 Wayland proxy is null-checked before use.