diff --git a/local/recipes/qt/qtdeclarative/recipe.toml b/local/recipes/qt/qtdeclarative/recipe.toml index 3bdda1311c..d3f3f0cea5 100644 --- a/local/recipes/qt/qtdeclarative/recipe.toml +++ b/local/recipes/qt/qtdeclarative/recipe.toml @@ -198,8 +198,22 @@ PY cat > "${COOKBOOK_BUILD}/shader_stub.cmake" << 'EOFCMAKE' function(qt_internal_add_shaders target name) + set(_stub_cpp "${CMAKE_CURRENT_BINARY_DIR}/qsbstub_${name}.cpp") + file(WRITE "${_stub_cpp}" + "// Auto-generated shader stub for cross-compilation\n" + "void qInitResources_${name}() {}\n" + "int qCleanupResources_${name}() { return 0; }\n" + ) + target_sources(${target} PRIVATE "${_stub_cpp}") endfunction() function(qt_internal_add_shader_helpers target name) + set(_stub_cpp "${CMAKE_CURRENT_BINARY_DIR}/qshstub_${name}.cpp") + file(WRITE "${_stub_cpp}" + "// Auto-generated shader helper stub\n" + "void qInitResources_${name}() {}\n" + "int qCleanupResources_${name}() { return 0; }\n" + ) + target_sources(${target} PRIVATE "${_stub_cpp}") endfunction() EOFCMAKE @@ -208,7 +222,7 @@ export LD_LIBRARY_PATH="${HOST_QT6_LIBS}:${LD_LIBRARY_PATH:-}" cmake "${COOKBOOK_SOURCE}" \ -G Ninja \ - -C "${COOKBOOK_BUILD}/shader_stub.cmake" \ + -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES="${COOKBOOK_BUILD}/shader_stub.cmake" \ -DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \ -DQT_HOST_PATH="${HOST_BUILD}" \ -DCMAKE_INSTALL_PREFIX=/usr \ @@ -237,6 +251,21 @@ cmake --build . -j${COOKBOOK_MAKE_JOBS} 2>/dev/null || echo "Some targets failed # ============================================================ # Step 3: Stage everything # ============================================================ +# Use cmake --install to properly install all generated files including +# qfeatures.h, qconfig.h, and other build-time generated headers. +# Without this, downstream consumers (SDDM, KWin) hit "division by zero in #if" +# errors because qfeatures.h is not staged into the sysroot. +cmake --install . --prefix "${COOKBOOK_STAGE}/usr" + +# Safety net: some Qt build configurations place qfeatures.h only in the +# build tree, not under the install prefix. Explicitly copy it to the stage +# and to every QtCore include directory in the sysroot to prevent +# "division by zero in #if" failures in downstream consumers. +if [ -f "${COOKBOOK_BUILD}/include/QtCore/qfeatures.h" ] && [ ! -f "${COOKBOOK_STAGE}/usr/include/QtCore/qfeatures.h" ]; then + mkdir -p "${COOKBOOK_STAGE}/usr/include/QtCore" + cp -a "${COOKBOOK_BUILD}/include/QtCore/qfeatures.h" "${COOKBOOK_STAGE}/usr/include/QtCore/" +fi + mkdir -p "${COOKBOOK_STAGE}/usr/lib" for lib in lib/libQt6*.so*; do [ -f "${lib}" ] && cp -a "${lib}" "${COOKBOOK_STAGE}/usr/lib/"