diff --git a/local/recipes/kde/kwin/recipe.toml b/local/recipes/kde/kwin/recipe.toml index 1ff28b44..7df4be07 100644 --- a/local/recipes/kde/kwin/recipe.toml +++ b/local/recipes/kde/kwin/recipe.toml @@ -1,9 +1,8 @@ -#TODO: KWin Wayland compositor — DRM backend → scheme:drm, libinput → via evdevd, session → seatd -# Real build requires Qt6Quick/QML runtime proof (qtdeclarative exports Qt6Quick metadata, -# but downstream QML-dependent build and runtime paths are insufficient). -# Stub provides cmake configs for downstream dependency resolution only. -# When Qt6Quick/QML downstream proof is sufficient, this recipe should be replaced -# with a real build using the inspect/ overlay approach. +# KWin Wayland compositor — real cmake build attempt with reduced feature set. +# DRM backend → scheme:drm, libinput → via evdevd, session → seatd. +# Full build requires Qt6Quick/QML (qtdeclarative exports metadata but downstream QML insufficient). +# Attempts real cmake configure + build; falls back to cmake config stubs + wrapper if configure fails. +# Wrapper scripts delegate to redbear-compositor when available. [source] tar = "https://invent.kde.org/plasma/kwin/-/archive/v6.3.4/kwin-v6.3.4.tar.gz" blake3 = "2aa1e234a75b0aa94f0da3a74d93e2a8e49b30a3afb12dc24b2ecd3abaa94e7f" @@ -21,63 +20,17 @@ dependencies = [ script = """ DYNAMIC_INIT +HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build" + +for qtdir in plugins mkspecs metatypes modules; do + if [ -d "${COOKBOOK_SYSROOT}/usr/${qtdir}" ] && [ ! -e "${COOKBOOK_SYSROOT}/${qtdir}" ]; then + ln -s "usr/${qtdir}" "${COOKBOOK_SYSROOT}/${qtdir}" + fi +done + STAGE="${COOKBOOK_STAGE}/usr" -mkdir -p "${STAGE}/lib/cmake/KWin" -mkdir -p "${STAGE}/lib/cmake/KWinEffects" -mkdir -p "${STAGE}/include/kwin" -mkdir -p "${STAGE}/lib" mkdir -p "${STAGE}/bin" -# KWin cmake config — INTERFACE target for dependency resolution -cat > "${STAGE}/lib/cmake/KWin/KWinConfig.cmake" << 'EOFCFG' -get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -if(_IMPORT_PREFIX STREQUAL "/") - set(_IMPORT_PREFIX "") -endif() - -add_library(KWin::kwin INTERFACE IMPORTED) -set_target_properties(KWin::kwin PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include/kwin" -) - -set(KWin_FOUND TRUE) -set(KWin_VERSION "6.3.4") -set(KWin_LIBRARIES KWin::kwin) -EOFCFG - -cat > "${STAGE}/lib/cmake/KWin/KWinConfigVersion.cmake" << 'EOFVER' -set(PACKAGE_VERSION "6.3.4") -if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) - set(PACKAGE_VERSION_COMPATIBLE FALSE) -else() - set(PACKAGE_VERSION_COMPATIBLE TRUE) - if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) - set(PACKAGE_VERSION_EXACT TRUE) - endif() -endif() -EOFVER - -cat > "${STAGE}/lib/cmake/KWin/KWinTargets.cmake" << 'EOFTGT' -add_library(KWin::kwin INTERFACE IMPORTED) -EOFTGT - -# KWinEffects cmake config -cat > "${STAGE}/lib/cmake/KWinEffects/KWinEffectsConfig.cmake" << 'EOFECFG' -add_library(KWin::Effects INTERFACE IMPORTED) -set(KWinEffects_FOUND TRUE) -set(KWinEffects_VERSION "6.3.4") -EOFECFG - -cat > "${STAGE}/lib/cmake/KWinEffects/KWinEffectsConfigVersion.cmake" << 'EOFEVER' -set(PACKAGE_VERSION "6.3.4") -set(PACKAGE_VERSION_COMPATIBLE TRUE) -EOFEVER - -# Dummy library for link resolution -echo "/* kwin stub */" > "${STAGE}/lib/libkwin.a" - # kwin_wayland — thin wrapper around redbear-compositor when available cat > "${STAGE}/bin/kwin_wayland" << 'EOFBIN' #!/bin/sh @@ -89,20 +42,18 @@ exit 0 EOFBIN chmod +x "${STAGE}/bin/kwin_wayland" -# kwin_wayland_wrapper — launches the real compositor when available, or falls back to stub +# kwin_wayland_wrapper — launches the real compositor when available cat > "${STAGE}/bin/kwin_wayland_wrapper" << 'EOFBIN' #!/bin/sh RUNTIME_DIR="${XDG_RUNTIME_DIR:-/tmp/run/redbear-greeter}" DISPLAY="${WAYLAND_DISPLAY:-wayland-0}" mkdir -p "$RUNTIME_DIR" - if command -v redbear-compositor >/dev/null 2>&1; then echo "kwin_wayland_wrapper: launching redbear-compositor" >&2 export WAYLAND_DISPLAY="${DISPLAY}" export XDG_RUNTIME_DIR="${RUNTIME_DIR}" exec redbear-compositor fi - echo "kwin_wayland_wrapper: redbear-compositor not found, using stub" >&2 if [ ! -e "$RUNTIME_DIR/$DISPLAY" ]; then touch "$RUNTIME_DIR/$DISPLAY" @@ -111,15 +62,89 @@ while true; do sleep 3600; done EOFBIN chmod +x "${STAGE}/bin/kwin_wayland_wrapper" -# Minimal kwin header stubs for downstream compilation -cat > "${STAGE}/include/kwin/kwinevents.h" << 'EOFHDR' +# Attempt real cmake build with reduced feature set +BUILD_DIR="${COOKBOOK_SOURCE}/redox_build" +mkdir -p "${BUILD_DIR}" + +cmake -B "${BUILD_DIR}" -S "${COOKBOOK_SOURCE}" \ + -DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_SYSROOT}/usr/share/cmake/redox.cmake" \ + -DCMAKE_INSTALL_PREFIX="${COOKBOOK_STAGE}/usr" \ + -DCMAKE_PREFIX_PATH="${COOKBOOK_STAGE}/usr;${COOKBOOK_SYSROOT}/usr;${HOST_BUILD}" \ + -DBUILD_SHARED_LIBS=OFF \ + -DBUILD_TESTING=OFF \ + -DKF6_HOST_TOOLING="${HOST_BUILD}/lib/cmake" \ + -DBUILD_WITH_QML=OFF \ + -DKWIN_BUILD_KCMS=OFF \ + -DKWIN_BUILD_EFFECTS=OFF \ + -DKWIN_BUILD_TABBOX=OFF \ + -DKWIN_BUILD_GLOBALSHORTCUTS=OFF \ + -DKWIN_BUILD_NOTIFICATIONS=OFF \ + -DKWIN_BUILD_SCREENLOCKING=OFF \ + -DKWIN_BUILD_SCREENLOCKER=OFF \ + -DKWIN_BUILD_RUNNING_IN_KDE=OFF \ + -DKWIN_BUILD_ELECTRONICALLY_SIGNING_DOCS=OFF \ + -DKWIN_BUILD_DECORATIONS=ON \ + -DKWIN_BUILD_RUNNERS=ON \ + -DUSE_DBUS=ON \ + -DQT_MAJOR_VERSION=6 \ + -DCMAKE_BUILD_TYPE=Release \ + || { + echo "=== KWin cmake configure failed — installing cmake config stubs ===" + mkdir -p "${STAGE}/lib/cmake/KWin" "${STAGE}/lib/cmake/KWinEffects" + mkdir -p "${STAGE}/include/kwin" "${STAGE}/lib" + cat > "${STAGE}/lib/cmake/KWin/KWinConfig.cmake" << 'EOFCFG' +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() +add_library(KWin::kwin INTERFACE IMPORTED) +set_target_properties(KWin::kwin PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include/kwin" +) +set(KWin_FOUND TRUE) +set(KWin_VERSION "6.3.4") +set(KWin_LIBRARIES KWin::kwin) +EOFCFG + cat > "${STAGE}/lib/cmake/KWin/KWinConfigVersion.cmake" << 'EOFVER' +set(PACKAGE_VERSION "6.3.4") +set(PACKAGE_VERSION_COMPATIBLE TRUE) +EOFVER + cat > "${STAGE}/lib/cmake/KWin/KWinTargets.cmake" << 'EOFTGT' +add_library(KWin::kwin INTERFACE IMPORTED) +EOFTGT + cat > "${STAGE}/lib/cmake/KWinEffects/KWinEffectsConfig.cmake" << 'EOFECFG' +add_library(KWin::Effects INTERFACE IMPORTED) +set(KWinEffects_FOUND TRUE) +EOFECFG + cat > "${STAGE}/lib/cmake/KWinEffects/KWinEffectsConfigVersion.cmake" << 'EOFEVER' +set(PACKAGE_VERSION "6.3.4") +set(PACKAGE_VERSION_COMPATIBLE TRUE) +EOFEVER + echo "/* kwin config stub */" > "${STAGE}/lib/libkwin.a" + cat > "${STAGE}/include/kwin/kwinevents.h" << 'EOFHDR' #pragma once /* KWin stub header for downstream dependency resolution */ EOFHDR + echo "=== KWin cmake config stubs installed (configure failed) ===" + exit 0 + } -echo "=== KWin stub installation complete ===" -echo "Note: Real KWin requires Qt6Quick/QML + Wayland compositor runtime." -echo "Dummy cmake configs and library installed for dependency resolution." +cmake --build "${BUILD_DIR}" -j "${COOKBOOK_MAKE_JOBS}" || { + echo "=== KWin build failed — installing cmake config stubs ===" + mkdir -p "${STAGE}/lib/cmake/KWin" "${STAGE}/lib" + cat > "${STAGE}/lib/cmake/KWin/KWinConfig.cmake" << 'EOFCFG' +add_library(KWin::kwin INTERFACE IMPORTED) +set(KWin_FOUND TRUE) +EOFCFG + echo "/* kwin build failed */" > "${STAGE}/lib/libkwin.a" + echo "=== KWin cmake config stubs installed (build failed) ===" + exit 0 +} + +cmake --install "${BUILD_DIR}" +echo "=== KWin real build (reduced features, no QML) ===" """ [package]