From a19de6f5c9252e3f2e185873c3a3f7e75ca186a9 Mon Sep 17 00:00:00 2001 From: vasilito Date: Mon, 3 Aug 2026 09:21:15 +0300 Subject: [PATCH] fix: declare kwin's missing REQUIRED deps; gate the Canberra-only plugin kwin's CMakeLists issues find_package/pkg_check_modules REQUIRED for several packages that are in the config and built but were never declared as deps, so they were never staged into kwin's sysroot: libxcvt, libdisplay-info, kglobalacceld, libinput, lcms2. Audited the CMakeLists for REQUIRED names and cross-checked against recipes that exist, rather than adding them one failed configure at a time. KF6_HOST_TOOLING must point at the HOST's system KF6 (/usr/lib/cmake), as konsole already does. src/wayland/tools needs a native Qt/KF6 prefix; pointing it at build/qt-host-build instead fails differently, because that tree carries Qt host tooling but no KF6, and KF6AuthConfig / KF6KCMUtilsConfig then fail their include(). systembell: TEMPORARY DEBT, narrowly scoped and documented at the call site. It is the only consumer of Canberra in KWin, yet find_package(Canberra REQUIRED) is ungated, so one optional audible-bell plugin blocks the whole compositor. The in-tree WIP libcanberra recipe depends on gtk3 and is itself marked 'no audio backend supported'; a local recipe using --disable-gtk3 plus the null backend is the intended fix. Visual bell and every other effect are unaffected. --- local/recipes/kde/kwin/recipe.toml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/local/recipes/kde/kwin/recipe.toml b/local/recipes/kde/kwin/recipe.toml index 9daea9b3e1..a1a7217df1 100644 --- a/local/recipes/kde/kwin/recipe.toml +++ b/local/recipes/kde/kwin/recipe.toml @@ -49,6 +49,13 @@ dependencies = [ "vulkan-loader", "plasma-wayland-protocols", "libepoxy", + # pkg_check_modules(... REQUIRED) in kwin's CMakeLists: present in the + # config and built, but never staged into kwin's sysroot without a dep. + "libxcvt", + "libinput", + "lcms2", + "libdisplay-info", + "kglobalacceld", "libudev", "wayland-protocols", "redbear-compositor", @@ -75,6 +82,26 @@ sed -i '/include(ECMQmlModule)/s/^/#/' "${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/de # Remove Qt components not available in cross-build sed -i '/^ UiTools$/d' "${COOKBOOK_SOURCE}/CMakeLists.txt" +# TEMPORARY DEBT -- systembell (audible bell) is the ONLY consumer of Canberra +# in KWin (src/plugins/systembell/*). kwin's find_package(Canberra REQUIRED) is +# ungated, so the whole compositor fails to configure over one optional plugin. +# +# The proper fix is to port libcanberra, and it is NOT done here because the +# in-tree WIP recipe (recipes/wip/libs/audio/libcanberra) depends on gtk3 -- +# an enormous port for an audio bell -- and is itself marked "no audio backend +# supported". A local recipe using upstream's --disable-gtk3 plus the null +# backend is the intended route; until then this drops one non-essential +# plugin, not compositor functionality. +# +# Scope: audible system bell only. Visual bell and all other KWin effects are +# unaffected. Remove BOTH seds once libcanberra is ported. +# Idempotent: once commented, ^add_subdirectory no longer matches; the +# find_package line is rewritten to a form that no longer matches REQUIRED. +sed -i 's/^add_subdirectory(systembell)/#add_subdirectory(systembell)/' \ + "${COOKBOOK_SOURCE}/src/plugins/CMakeLists.txt" 2>/dev/null || true +sed -i 's/^find_package(Canberra REQUIRED)/find_package(Canberra)/' \ + "${COOKBOOK_SOURCE}/CMakeLists.txt" 2>/dev/null || true + rm -f CMakeCache.txt rm -rf CMakeFiles @@ -96,6 +123,7 @@ cmake "${COOKBOOK_SOURCE}" \ -DKF_SKIP_PO_PROCESSING=ON \ -DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \ -DQT_HOST_PATH="${HOST_BUILD}" \ + -DKF6_HOST_TOOLING=/usr/lib/cmake \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH="${COOKBOOK_SYSROOT}" \