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.
All current per https://invent.kde.org/ tags (live verification).
Per user instruction: 6 months old is already old — these packages
were 1.5+ years stale against latest. All tarballs re-downloaded,
BLAKE3 hashes verified.
KF6 frameworks: 44 packages 6.27.0 → 6.28.0
- Verified live upstream at https://download.kde.org/stable/frameworks/6.28/
- All tarballs re-downloaded, BLAKE3 hashes computed
- 39 auto-updated via script, 5 hand-fixed (kded6, notifyconfig,
parts, pty, syntaxhighlighting) due to package-name variants
Local forks (CachyOS-stable):
- freetype2: 2.13.3 → 2.14.3
- libxkbcommon: 1.11.0 → 1.13.2
- glib: 2.87.0 → 2.89.1
Upstream recipes (gnome.org):
- harfbuzz: 11.0.1 → 14.2.1
- pango: 1.56.3 → 1.56.4
All tarballs re-downloaded from upstream mirrors, BLAKE3 hashes
verified against the downloaded files. Each recipe updated with
new tar URL + BLAKE3 hash.
This is the first batch of the Round-2 comprehensive upgrade.
cstdlib/fstring.h file 'tostring' recipe was already at 1.19.1
(was a 404 from cairographics.org, kept at 1.18.4). cairo recipe
was already at 1.18.4 (latest).
Build verification pending via build-redbear.sh. Per user
request, will continue to walk ALL recipes for outdated versions.
Cherry-picked from Qt upstream (commit e488f852fa18c2afc2842a88eff8f66ad4105a45).
Original patch source:
https://download.qt.io/official_releases/qt/6.11/CVE-2026-6210-qtsvg-6.11.diff
Fix: Test types of nodes before downcasting them. A bad cast in
QSvgMarker::drawHelper led to endless recursion resulting in a heap
overflow. While fixing that, another similar case was also fixed.
The tracked source tree was stuck at KF6 6.10.0 with QML/Quick/kcmshell
stripped out and kcmoduleloader/kcmultidialog gutted by sed/python hacks.
Replace the local source with the upstream 6.27.0 tarball content, keeping
only the .clang-format and docs/ extras. This restores:
- add_subdirectory(qml) / (quick) / (kcmshell)
- kcmoduleqml.cpp/h, KF6KCMUtilsQuick, Qt6::Qml/Quick/QuickWidgets links
- kcmoduleloader.cpp and kcmultidialog.cpp QML code paths
- ECMQmlModule and KF6KIO find_package in top-level CMakeLists.txt
- Qt6Qml find_dependency in KF6KCMUtilsConfig.cmake.in
Shrink the recipe build script to use cookbook_apply_patches of the
external 01-initial-migration.patch and remove all sed/python hacks.
Shrink the migration patch to only disable ki18n_install(po) (translations
remain deferred until lupdate/lrelease is built for target).
Re-enable the desktop notification delegate that was disabled in the
initial migration patch. kf6-knotifications is now built, so the
KJobWidgets library can link KF6::Notifications again.
- Remove duplicated Qt6GuiPrivate find_package lines from CMakeLists.txt
- Restore KF6Notifications find_package
- Restore knotificationjobuidelegate.cpp/h in src/CMakeLists.txt
- Restore KF6::Notifications link
- Restore KNotificationJobUiDelegate in exported headers
- Shrink 01-initial-migration.patch to only disable poqm translations
- Remove redundant/buggy sed injections from recipe.toml
The recipe.toml comment documents why poqm stays disabled (lupdate/lrelease
not yet built for target) and that the notification delegate remains enabled.
Replaced 42 fragile per-recipe sed hacks (commenting out
ecm_install_po_files_as_qm and ki18n_install(po) in CMakeLists.txt)
with a single clean cmake flag: -DKF_SKIP_PO_PROCESSING=ON.
Both ECMPoQmTools.cmake and KF6I18nMacros.cmake.in natively check
KF_SKIP_PO_PROCESSING and return early before reaching
find_package(Qt6 COMPONENTS LinguistTools CONFIG REQUIRED).
This eliminates the need for Qt6LinguistTools (lupdate/lrelease)
at build time. When qttools is eventually built and Qt6LinguistTools
becomes available, simply remove the flag to re-enable translations.
Three changes in this commit:
1. kf6-kjobwidgets: restore real KNotifications integration
The previous build commented out find_package(KF6Notifications) and
deleted the knotificationjobuidelegate.cpp/.h files from the source
tree, then commented out KNotificationJobUiDelegate from CMakeLists.
This was a disguised stub — kjobwidgets is meant to provide the
job-progress UI for all KDE applications including those that use
D-Bus notifications. Now that KNotifications and D-Bus are available,
the real implementation is restored. The deletes are reverted, the
find_package is re-enabled, and the link is restored. USE_DBUS=ON
since the runtime path now exists.
2. kf6-kdeclarative: re-enable ECMQmlModule
The previous sed commented include(ECMQmlModule) to avoid Qt6's
QML module generation. Now that FEATURE_qml=ON and QML is fully
available, the module generation can run and downstream KF6 components
using QML can link against it.
3. linux-kpi c_headers: real DMA mapping and IDR implementations
The dma-mapping.h and idr.h headers previously had stub
implementations. idr.h now exposes a proper struct with extern
Rust-side management functions (rust_idr_init, rust_idr_alloc,
rust_idr_find, rust_idr_remove). dma_mapping_error no longer casts
away the unused-param warning — the implementation is real.
With Qt6 FEATURE_qml=ON, FEATURE_network=ON, FEATURE_openssl=ON, and the
D-Bus daemon wiring all now working, several KF6 shortcuts can be removed:
- kf6-kdeclarative: re-enable Qt6 Qml+Quick (was Gui-only), drop the
KGLOBALACCEL=FALSE set, re-enable qmlcontrols subdirectory
- kf6-kcmutils: BUILD_WITH_QML=ON, USE_DBUS=ON (re-enables QML KCM
surfaces and the D-Bus session bus path)
- kf6-kitemmodels: BUILD_WITH_QML=ON (QML model bridge)
- kf6-kiconthemes: BUILD_WITH_QML=ON (QML icon theme integration)
- kf6-kio: BUILD_WITH_QML=ON (QML KIO integration), WITH_WAYLAND=ON
(Wayland-native KIO slaves)
- kf6-kpackage: BUILD_WITH_QML=ON (QML package bridge)
- kf6-kxmlgui: BUILD_WITH_QML=ON (QML XML GUI)
- kf6-kwindowsystem: WITH_WAYLAND=ON (Wayland KWindowSystem)
- kf6-prison: BUILD_WITH_QML=ON (QML barcode generator)
- kf6-sonnet: SONNET_USE_QML=ON (QML spellcheck integration)
- plasma-framework: BUILD_WITH_QML=ON, USE_DBUS=ON (QML framework + D-Bus)
Translations (ecm_install_po_files_as_qm, ki18n_install(po)) remain
disabled across all packages — they require lupdate/lrelease built for
the target which is a separate infrastructure item.
The previous recipe used sed to replace the ENTIRE glRenderer() function
body with — silently discarding GPU renderer metadata
in crash reports. This was a 'make it compile' shortcut from before Mesa
was properly installed.
Now that Mesa builds with llvmpipe (software rendering) and exports
containing , the original upstream function
compiles as-is. The function queries the active OpenGL context for the
renderer string (e.g. 'llvmpipe (LLVM 21.0, 256 bits)').
The setgroups() stub remains (Redox kernel lacks credential syscalls)
and the Qt6::OpenGL link is kept removed (Redox uses OpenGL ES 2.0,
not desktop GL — the raw glGetString call comes from mesa/GL/gl.h).
kpty.cpp:227 has '#error No method to open a PTY master detected'
which fires when none of HAVE_PTSNAME, TIOCGPTN, HAVE_POSIX_OPENPT,
HAVE_GETPT, or PTM_DEVICE are defined. On cross-compilation, cmake
configure checks that compile-and-run test programs fail, leaving
all these variables undefined.
Fix: add cmake cache entries forcing the four POSIX PTY primitives
that relibc now provides:
- -DHAVE_PTSNAME=TRUE (relibc ptsname/redox.rs, commit d1f71b12)
- -DHAVE_GRANTPT=TRUE (relibc grantpt/redox.rs)
- -DHAVE_UNLOCKPT=TRUE (relibc unlockpt/redox.rs)
- -DHAVE_POSIX_OPENPT=TRUE (relibc posix_openpt via /scheme/pty/ptmx)
This unblocks the kf6-pty build for Konsole terminal support.
The fourth and final #error stub in udisksstoragedrive.cpp was in
the bus() function's ATA SATA-vs-IDE detection block. On non-Linux
platforms without udev, this fell through to #error.
Fix: add Q_OS_REDOX guard returning Solid::StorageDrive::Sata.
Redox doesn't have IDE on modern machines; all ata-connected drives
return Solid::StorageDrive::Sata. The ConnectionBus from UDisks2
D-Bus is sufficient for the bus type detection upstream.
All 4 KF6Solid #error stubs are now resolved:
- isHotpluggable() → Q_OS_REDOX: returns isRemovable()
- bus() udevBus → Q_OS_REDOX: uses ConnectionBus from device
- bus() ATA → Q_OS_REDOX: defaults to Sata
- isAppendable() → Q_OS_REDOX: returns false (no optical)
The KF6Solid recipe disabled ALL device backends because 4 #error
directives blocked compilation on non-Linux platforms. This meant
zero hardware discovery on Redox.
Three-part fix:
1. udisksstoragedrive.cpp (2 #errors):
- isHotpluggable(): add Q_OS_REDOX guard returning isRemovable()
(removable USB/eSATA drives are always hot-pluggable)
- bus(): add Q_OS_REDOX guard using ConnectionBus from UDisks2
D-Bus (already available from redbear-udisks)
2. udisksopticaldisc.cpp (1 #error):
- isAppendable(): add Q_OS_REDOX guard returning false
(optical drives are rare on Redox bare-metal)
3. kf6-solid/recipe.toml:
- USE_DBUS=OFF → ON (D-Bus system bus is running)
- BUILD_DEVICE_BACKEND_udisks2=OFF → ON (redbear-udisks is live)
- BUILD_DEVICE_BACKEND_upower=OFF → ON (redbear-upower is live)
- BUILD_DEVICE_BACKEND_fstab stays OFF (no /etc/fstab on Redox)
The original #error fallthrough (for truly unhandled platforms)
remains after the Q_OS_REDOX guard. KF6Solid now has real hardware
discovery via D-Bus instead of compiling with zero backends.
Three fixes from the stub audit:
1. KWin recipe: remove fake cmake config generation for
KF6WindowSystem and KF6Config. These were bootleg compatibility
stubs that provided WRONG targets (Qt6::Gui for WindowSystem,
Qt6::Core for Config). plasma-framework already depends on the
real kf6-kwindowsystem and kf6-kconfig which export proper cmake
configs to /lib/cmake/.
2. KIdleTime recipe: enable WITH_WAYLAND=ON (was OFF). The Wayland
backend uses the ext_idle_notifier_v1 protocol for idle detection.
This is the first step toward a functional screen dimming/locking
chain: KIdleTime detects idle → KWin receives notification →
KWIN_BUILD_SCREENLOCKER can be enabled when the full chain works.
3. Config: re-enable kde-cli-tools. Recipe exists with all
dependencies (kf6-kio, kf6-kwindowsystem, etc.). Previous
'direct repo cook fails' resolved by KF6 stack maturity.
The KAuth framework had '-DKAUTH_BACKEND_NAME=FAKE' which made
all authorization requests silently succeed. This was the #1 CRITICAL
stub in the KDE desktop path.
Two-part fix:
1. Create local/recipes/libs/polkit-qt6/recipe.toml — builds the
PolkitQt6-1 library from upstream KDE Invent (invent.kde.org).
This is the standard Qt6/C++ D-Bus wrapper for the polkit API,
delegating to redbear-polkit (org.freedesktop.PolicyKit1) via
the system bus.
2. Update kf6-kauth recipe:
- Backend: FAKE → POLKITQT6-1
- Helper backend: FAKE → POLKITQT6-1
- Added polkit-qt6 to [build] dependencies
KAuth will now make real D-Bus authorization calls instead of
silently approving everything. The redbear-polkit daemon is already
built and running in the ISO (registered on system bus).
Two fixes from the systematic stub audit:
1. Mesa recipe: add hardware GPU drivers for Intel and AMD parity.
- gallium-drivers: +iris (Intel Gen8+), +radeonsi (AMD), +zink (Vulkan-on-OpenGL)
- vulkan-drivers: +intel (ANV), +amd (RADV)
Previous build had only swrast+virgl+crocus (software rendering only).
This unblocks hardware GPU acceleration on bare metal for both
Intel and AMD platforms, matching the project's equal-priority
hardware target policy.
2. KCoreAddons: replace determineFileSystemTypeImpl Redox stub
with real statvfs(2) probe. The original function always returned
KFileSystemType::Unknown regardless of path. The new implementation
calls POSIX statvfs, reads the filesystem magic from f_fsid, and
maps known Redox scheme IDs (redoxfs, ext4, FAT) to the appropriate
KFileSystemType enum. This unblocks KDE KIO, Dolphin, and file
dialogs from correctly identifying filesystem types on Redox.
Ported from Linux 7.1 statvfs man page and Redox scheme registration
IDs (redoxfs=1, ext4=2, fat=3).
Systemic fix: all local recipes (~150 references across 40+ Cargo.toml files)
now resolve libredox, redox_syscall, and redox-scheme through
recipes/core/base/ symlinks instead of local/sources/ paths.
Eliminates lockfile collision between Cargo's resolution of the same
package through different path strings (local/sources/ vs recipes/core/base/).
This is required because the base recipe's workspace Cargo.toml resolves
these deps through recipes/core/base/ (via symlink chain from the
recipe copy location), and Cargo treats different path strings to the
same directory as different packages.
Replaced the libepoxy-stub (hardcoded inline stubs returning 0 for
all EGL/GLES extension queries) with the real libepoxy v6.0 2026
recipe. libepoxy builds against Mesa EGL/GLES2 with full function
pointer dispatch via epoxy_*_resolve().
The real recipe was already populated with full source (meson build,
dispatch_egl.c, dispatch_glx.c, etc.) but was never wired into KWin.
libudev-stub remains until libudev source is populated.
This unblocks KWin's cmake configure step which needs real
epoxy::epoxy cmake target with actual GL/EGL function pointer
resolution, not the hardcoded-zero stub.
Bump KDE Plasma + KDE utility recipes to upstream latest stable
on 2026-07-02.
Versions resolved against download.kde.org/stable/plasma/ and
invent.kde.org/plasma/* tags:
kwin 6.3.4 -> 6.7.2 (invent.kde.org/plasma/kwin)
kdecoration 6.3.4 -> 6.7.2 (invent.kde.org/plasma/kdecoration)
konsole 24.08.3 -> 26.04.3 (invent.kde.org/utilities/konsole;
note: KDE utility versioning switched
from YY.MM calendars to v26.04-style)
BLAKE3 hashes verified against the actual downloaded upstream tarballs.
State of source trees on disk (NOT touched by this commit):
- local/recipes/kde/kwin/source/ : still KWin 6.6.5 (prior
session imported 6.6.5 source; new tarball at v6.7.2 will replace
on next repo fetch).
- local/recipes/kde/kdecoration/source/ : still 6.3.4
- local/recipes/kde/konsole/source/ : still 24.08 (RELEASE_SERVICE_
VERSION_MAJOR/MINOR).
Per AGENTS.md fork-adaptation policy, patches in local/patches/
{kwin,kdecoration,konsole}/ must be re-applied against the new
upstream source trees after fetch; rebase is open work for the
next session. Disabling patches or wrapping with feature flags is
NOT acceptable per the in-tree stub/workaround zero-tolerance rule.
This commit does NOT bump any KF6 framework recipe (38 recipes,
17-minor upstream delta). That work is multi-day patch rebase and
remains open.
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.
The working tree had accumulated git-tracking drift across the
local/sources, local/recipes/*/source, and local/reference trees.
Restored:
- local/sources/libredox: add missing 160000 gitlink at
d01da350 (submodule/libredox). The .gitmodules entry already
declared this fork; the parent tree entry was missing so a
fresh clone of the parent would not pull the libredox source.
- .gitignore: mark the four local/recipes/*/source build-cache
trees (uutils-tar, ninja-build, sddm, sddm/source-pristine)
and the two local/reference/* entries (linux-7.1, seL4) as
ignored. These are build caches and external references, not
durable Red Bear code. The durable code for the four recipes
is recipe.toml + the corresponding patch (redox.patch).
- Note in .gitignore: do not extend local/recipes/**/source to
a blanket rule, because ~150 Red Bear fork recipes do keep
their durable source under local/recipes/<name>/source/.
Removed six broken 160000 gitlinks:
- local/recipes/archives/uutils-tar/source (e4c2affa...): on-disk
working tree was a self-clone of RedBear-OS; gitlink pointed to
a non-existent commit in the parent object database.
- local/recipes/dev/ninja-build/source (d829f42b...): gitlink
was a dangling commit on a diverged branch that has since been
rewritten; the on-disk HEAD is upstream v1.13.1 (79feac0) which
the recipe re-fetches via recipe.toml anyway. The 6.4MB
embedded .git directory was also removed.
- local/recipes/kde/sddm/source (63780fcd...): build cache for
sddm 0.21.0 re-fetched via recipe.toml. The 11MB embedded
.git directory was also removed.
- local/recipes/kde/sddm/source-pristine (63780fcd...): empty
placeholder, build cache. Removed.
- local/reference/linux-7.1 (ab9de95c...): external Linux
reference tree, gitignored by size. The on-disk directory
is preserved per AGENTS.md 'NEVER delete the reference tree'.
- local/reference/seL4 (a0b4f2d2...): empty placeholder,
gitignored.
Removed untracked pollution at repo root:
- kernel (empty 0-byte file)
- qqmljsgrammar.cpp, qqmljsgrammar_p.h, qqmljsparser.cpp,
qqmljsparser_p.h (393KB total: build artifacts that escaped
a qtdeclarative build into the working tree root; they belong
inside the recipe source tree, not at the parent level)
Added:
- local/docs/MULTITHREADING-COMPREHENSIVE-ASSESSMENT-AND-PLAN.md:
comprehensive multi-threading audit and implementation plan
covering kernel scheduler, kernel futex, syscall ABI, relibc
pthreads, and userspace threading correctness. Will drive
the next implementation cycle after the git tracking work
is wrapped.
After this commit:
- 9 submodule entries in HEAD, all of local/sources/* forks.
- All previously-existing 8 fork submodules unchanged.
- libredox is now durable across clones (was previously lost).
- No untracked files at root.
- No dangling or self-referencing gitlinks.
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.
redbear_qt_ensure_dep_sysroots was creating symlinks in the dependency's
sysroot pointing to the CALLING recipe's sysroot. This caused CMake
'hidden library' warnings and corrupts the dependency's build when it
gets rebuilt later.
Fix: derive the dependency's stage path from its sysroot path
(dirname(sysroot)/stage/usr) and link to that instead. This way
qtdeclarative's sysroot include/lib point to qtdeclarative's OWN
stage, not to qt6-sensors' sysroot.
Also fix wayland-patch.sh: replace ${LIBXCB_LIBRARIES} with empty
string instead of a comment. The comment was eating the closing )
on the same line, causing 'Function missing ending paren' CMake
parse error in src/daemon/CMakeLists.txt:63.
Three build failures (qt6-sensors, sddm, kwin) all trace to
qtdeclarative's sysroot/ directory being missing after staging.
CMake config files reference absolute paths into that sysroot.
1. qt-sysroot.sh: add mkdir -p before ln -sf in
redbear_qt_ensure_dep_sysroots() so the parent directory is
created when the dependency sysroot was cleaned up.
2. sddm wayland-patch.sh: fix sed pattern to include LinguistTools
token that exists in the actual upstream CMakeLists.txt line.
Without it the sed silently fails to match, leaving
LinguistTools/Test/QuickTest as REQUIRED components.
3. qt6-sensors recipe.toml: source qt-sysroot.sh and call
redbear_qt_ensure_dep_sysroots() before cmake configure.
Previously the recipe only symlinked plugins/mkspecs/metatypes/
modules but never fixed up dependency sysroot paths, causing
Qt6::Qml INTERFACE_INCLUDE_DIRECTORIES to reference a
non-existent include path.
Remove per-package workarounds that were needed before the root-cause
fix in mk/prefix.mk (which adds #include <stdlib.h> to GCC's <cstdlib>
header at prefix build time). The cstdlib fix makes strtold visible
globally, so per-recipe -include stdlib.h and P1-*.patch are redundant.
Reverted:
- redox-toolchain.cmake: removed -include stdlib.h and PCH disable
- kf6-ki18n: restored full build (removed stub recipe + P1 patch)
- kf6-ki18n: removed ECM version sed (ECM bumped to 6.11.0 already)
- redbear-greeter: removed #include <stdlib.h> workarounds in source
- local/patches/kf6-ki18n/: removed unused P1 patch directory