From 07a9238e062607984ae7a6f0518582bcd64d4bc8 Mon Sep 17 00:00:00 2001 From: Vasilito Date: Fri, 17 Apr 2026 00:06:03 +0100 Subject: [PATCH] Add remaining Qt recipe stubs Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- recipes/wip/qt/qtquicktimeline/recipe.toml | 121 +++++++++++++++++++++ recipes/wip/qt/qtscxml/recipe.toml | 40 +++++++ recipes/wip/qt/qtwebchannel/recipe.toml | 110 +++++++++++++++++++ 3 files changed, 271 insertions(+) create mode 100644 recipes/wip/qt/qtquicktimeline/recipe.toml create mode 100644 recipes/wip/qt/qtwebchannel/recipe.toml diff --git a/recipes/wip/qt/qtquicktimeline/recipe.toml b/recipes/wip/qt/qtquicktimeline/recipe.toml new file mode 100644 index 00000000..355b9b8f --- /dev/null +++ b/recipes/wip/qt/qtquicktimeline/recipe.toml @@ -0,0 +1,121 @@ +#TODO: Qt6 Quick Timeline — cross-compiled for Redox on top of the verified QtQuick/QML substrate. Runtime validation of the staged Timeline QML import is still pending. +# Provides: Qt Quick Timeline QML module and libQt6QuickTimeline for Qt Quick animation timelines. + +[source] +tar = "https://download.qt.io/official_releases/qt/6.11/6.11.0/submodules/qtquicktimeline-everywhere-src-6.11.0.tar.xz" + +[build] +template = "custom" +dependencies = [ + "qtdeclarative", +] +script = """ +DYNAMIC_INIT + +HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build" + +# Sysroot path fix: the cookbook only symlinks sysroot/{bin,include,lib,share} -> usr/ +# but Qt6 cmake targets reference ${_IMPORT_PREFIX}/{plugins,mkspecs,metatypes,modules}. +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 + +if [ ! -d "${COOKBOOK_SYSROOT}/lib/cmake/Qt6Quick" ] \ + && [ ! -d "${COOKBOOK_SYSROOT}/usr/lib/cmake/Qt6Quick" ]; then + printf '%s\n' \ + 'qtquicktimeline requires a Qt Quick-enabled qtdeclarative sysroot (missing Qt6Quick).' >&2 + printf '%s\n' \ + 'Rebuild the verified QtQuick/QML substrate before cooking qtquicktimeline.' >&2 + exit 1 +fi + +rm -f CMakeCache.txt +rm -rf CMakeFiles + +cmake "${COOKBOOK_SOURCE}" \ + -DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \ + -DQT_HOST_PATH="${HOST_BUILD}" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_PREFIX_PATH="${COOKBOOK_SYSROOT}" \ + -DQT_BUILD_EXAMPLES=OFF \ + -DQT_BUILD_TESTS=OFF \ + -DQT_GENERATE_SBOM=OFF \ + -Wno-dev + +cmake --build . -j"${COOKBOOK_MAKE_JOBS}" + +cmake --install . --prefix "${COOKBOOK_STAGE}/usr" + +mkdir -p "${COOKBOOK_STAGE}/usr/lib" +for lib in lib/libQt6*.so*; do + [ -f "${lib}" ] && cp -an "${lib}" "${COOKBOOK_STAGE}/usr/lib/" +done +for lib in lib/libQt6*.a; do + [ -f "${lib}" ] && cp -an "${lib}" "${COOKBOOK_STAGE}/usr/lib/" +done + +if [ -d "lib/cmake" ]; then + mkdir -p "${COOKBOOK_STAGE}/usr/lib/cmake" + cp -a lib/cmake/Qt6* "${COOKBOOK_STAGE}/usr/lib/cmake/" 2>/dev/null || true +fi +if [ -d "lib/pkgconfig" ]; then + mkdir -p "${COOKBOOK_STAGE}/usr/lib/pkgconfig" + cp -a lib/pkgconfig/*.pc "${COOKBOOK_STAGE}/usr/lib/pkgconfig/" 2>/dev/null || true +fi +if [ -d "include" ]; then + mkdir -p "${COOKBOOK_STAGE}/usr/include" + cp -a include/* "${COOKBOOK_STAGE}/usr/include/" 2>/dev/null || true +fi +if [ -d "plugins" ]; then + mkdir -p "${COOKBOOK_STAGE}/usr/plugins" + cp -a plugins/* "${COOKBOOK_STAGE}/usr/plugins/" 2>/dev/null || true +fi +if [ -d "qml" ]; then + mkdir -p "${COOKBOOK_STAGE}/usr/qml" + cp -a qml/* "${COOKBOOK_STAGE}/usr/qml/" 2>/dev/null || true +fi + +for lib in "${COOKBOOK_STAGE}/usr/lib/libQt6"*.so.*; do + [ -f "${lib}" ] || continue + patchelf --remove-rpath "${lib}" 2>/dev/null || true +done +if [ -d "${COOKBOOK_STAGE}/usr/plugins" ]; then + find "${COOKBOOK_STAGE}/usr/plugins" -name '*.so' -exec patchelf --remove-rpath {} + 2>/dev/null || true +fi +if [ -d "${COOKBOOK_STAGE}/usr/qml" ]; then + find "${COOKBOOK_STAGE}/usr/qml" -name '*.so' -exec patchelf --remove-rpath {} + 2>/dev/null || true +fi + +BUILD_DIR="${COOKBOOK_BUILD}" +if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake" ]; then + find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \ + "s|${BUILD_DIR}|/usr|g" {} + 2>/dev/null || true +fi + +SYSROOT="${COOKBOOK_SYSROOT}" +if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake" ]; then + find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \ + "s|/usr/include|${SYSROOT}/include|g" {} + 2>/dev/null || true +fi +if [ -d "${COOKBOOK_STAGE}/usr/include" ]; then + mkdir -p "${SYSROOT}/include" + cp -a "${COOKBOOK_STAGE}/usr/include/"* "${SYSROOT}/include/" 2>/dev/null || true +fi +if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake" ]; then + mkdir -p "${SYSROOT}/lib/cmake" + cp -a "${COOKBOOK_STAGE}/usr/lib/cmake/Qt6"* "${SYSROOT}/lib/cmake/" 2>/dev/null || true +fi +mkdir -p "${SYSROOT}/lib" +cp -a "${COOKBOOK_STAGE}/usr/lib/libQt6"* "${SYSROOT}/lib/" 2>/dev/null || true +if [ -d "${COOKBOOK_STAGE}/usr/plugins" ]; then + mkdir -p "${SYSROOT}/plugins" + cp -a "${COOKBOOK_STAGE}/usr/plugins/"* "${SYSROOT}/plugins/" 2>/dev/null || true +fi +if [ -d "${COOKBOOK_STAGE}/usr/qml" ]; then + mkdir -p "${SYSROOT}/qml" + cp -a "${COOKBOOK_STAGE}/usr/qml/"* "${SYSROOT}/qml/" 2>/dev/null || true +fi +""" diff --git a/recipes/wip/qt/qtscxml/recipe.toml b/recipes/wip/qt/qtscxml/recipe.toml index 1c0d8a88..bb97d05e 100644 --- a/recipes/wip/qt/qtscxml/recipe.toml +++ b/recipes/wip/qt/qtscxml/recipe.toml @@ -12,6 +12,7 @@ script = """ DYNAMIC_INIT HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build" +SCXML_HOST="${COOKBOOK_ROOT}/build/qt-scxml-host" # Sysroot path fix: the cookbook only symlinks sysroot/{bin,include,lib,share} → usr/ # but Qt6 cmake targets reference ${_IMPORT_PREFIX}/{plugins,mkspecs,metatypes,modules}. @@ -21,6 +22,45 @@ for qtdir in plugins mkspecs metatypes modules; do fi done +if [ ! -d "${HOST_BUILD}/lib/cmake/Qt6ScxmlTools" ]; then + rm -rf "${SCXML_HOST}" + mkdir -p "${SCXML_HOST}" + env \ + -u CPPFLAGS \ + -u LDFLAGS \ + -u PKG_CONFIG_ALLOW_CROSS \ + -u PKG_CONFIG_PATH \ + -u PKG_CONFIG_LIBDIR \ + -u PKG_CONFIG_SYSROOT_DIR \ + -u CFLAGS \ + -u CXXFLAGS \ + -u CFLAGS_x86_64_unknown_redox \ + -u CXXFLAGS_x86_64_unknown_redox \ + -u LDFLAGS_x86_64_unknown_redox \ + cmake -S "${COOKBOOK_SOURCE}" -B "${SCXML_HOST}" \ + -DCMAKE_C_COMPILER=/usr/bin/cc \ + -DCMAKE_CXX_COMPILER=/usr/bin/c++ \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX="${HOST_BUILD}" \ + -DCMAKE_PREFIX_PATH="${HOST_BUILD}" \ + -DQT_BUILD_EXAMPLES=OFF \ + -DQT_BUILD_TESTS=OFF \ + -DQT_GENERATE_SBOM=OFF \ + -Wno-dev + cmake --build "${SCXML_HOST}" --target qscxmlc -j"${COOKBOOK_MAKE_JOBS}" + + mkdir -p "${HOST_BUILD}/bin" "${HOST_BUILD}/libexec" "${HOST_BUILD}/lib/cmake" + if [ -f "${SCXML_HOST}/bin/qscxmlc" ]; then + cp -a "${SCXML_HOST}/bin/qscxmlc" "${HOST_BUILD}/bin/" + elif [ -f "${SCXML_HOST}/libexec/qscxmlc" ]; then + cp -a "${SCXML_HOST}/libexec/qscxmlc" "${HOST_BUILD}/libexec/" + cp -a "${SCXML_HOST}/libexec/qscxmlc" "${HOST_BUILD}/bin/qscxmlc" + fi + cp -a "${SCXML_HOST}/lib/cmake/Qt6Scxml" "${HOST_BUILD}/lib/cmake/" 2>/dev/null || true + cp -a "${SCXML_HOST}/lib/cmake/Qt6ScxmlPrivate" "${HOST_BUILD}/lib/cmake/" 2>/dev/null || true + cp -a "${SCXML_HOST}/lib/cmake/Qt6ScxmlTools" "${HOST_BUILD}/lib/cmake/" 2>/dev/null || true +fi + rm -f CMakeCache.txt rm -rf CMakeFiles diff --git a/recipes/wip/qt/qtwebchannel/recipe.toml b/recipes/wip/qt/qtwebchannel/recipe.toml new file mode 100644 index 00000000..6a1cda72 --- /dev/null +++ b/recipes/wip/qt/qtwebchannel/recipe.toml @@ -0,0 +1,110 @@ +#TODO: Qt6 WebChannel — cross-compiled for Redox against the current Qt 6.11 base stack. +# The core C++ WebChannel library should be buildable now; QML/QtQuick-facing integration stays +# intentionally out of scope here until qtdeclarative-backed runtime validation is in place. + +[source] +tar = "https://download.qt.io/official_releases/qt/6.11/6.11.0/submodules/qtwebchannel-everywhere-src-6.11.0.tar.xz" + +[build] +template = "custom" +dependencies = [ + "qtbase", +] +script = """ +DYNAMIC_INIT + +HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build" + +# Sysroot path fix: the cookbook only symlinks sysroot/{bin,include,lib,share} -> usr/ +# but Qt6 cmake targets reference ${_IMPORT_PREFIX}/{plugins,mkspecs,metatypes,modules}. +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 + +rm -f CMakeCache.txt +rm -rf CMakeFiles + +cmake "${COOKBOOK_SOURCE}" \ + -DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \ + -DQT_HOST_PATH="${HOST_BUILD}" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_PREFIX_PATH="${COOKBOOK_SYSROOT}" \ + -DQT_BUILD_EXAMPLES=OFF \ + -DQT_BUILD_TESTS=OFF \ + -DQT_GENERATE_SBOM=OFF \ + -Wno-dev + +cmake --build . -j"${COOKBOOK_MAKE_JOBS}" + +cmake --install . --prefix "${COOKBOOK_STAGE}/usr" + +mkdir -p "${COOKBOOK_STAGE}/usr/lib" +for lib in lib/libQt6*.so*; do + [ -f "${lib}" ] && cp -an "${lib}" "${COOKBOOK_STAGE}/usr/lib/" +done +for lib in lib/libQt6*.a; do + [ -f "${lib}" ] && cp -an "${lib}" "${COOKBOOK_STAGE}/usr/lib/" +done + +if [ -d "lib/cmake" ]; then + mkdir -p "${COOKBOOK_STAGE}/usr/lib/cmake" + cp -a lib/cmake/Qt6* "${COOKBOOK_STAGE}/usr/lib/cmake/" 2>/dev/null || true +fi +if [ -d "lib/pkgconfig" ]; then + mkdir -p "${COOKBOOK_STAGE}/usr/lib/pkgconfig" + cp -a lib/pkgconfig/*.pc "${COOKBOOK_STAGE}/usr/lib/pkgconfig/" 2>/dev/null || true +fi +if [ -d "include" ]; then + mkdir -p "${COOKBOOK_STAGE}/usr/include" + cp -a include/* "${COOKBOOK_STAGE}/usr/include/" 2>/dev/null || true +fi +if [ -d "plugins" ]; then + mkdir -p "${COOKBOOK_STAGE}/usr/plugins" + cp -a plugins/* "${COOKBOOK_STAGE}/usr/plugins/" 2>/dev/null || true +fi +if [ -d "qml" ]; then + mkdir -p "${COOKBOOK_STAGE}/usr/qml" + cp -a qml/* "${COOKBOOK_STAGE}/usr/qml/" 2>/dev/null || true +fi + +for lib in "${COOKBOOK_STAGE}/usr/lib/libQt6"*.so.*; do + [ -f "${lib}" ] || continue + patchelf --remove-rpath "${lib}" 2>/dev/null || true +done +if [ -d "${COOKBOOK_STAGE}/usr/plugins" ]; then + find "${COOKBOOK_STAGE}/usr/plugins" -name '*.so' -exec patchelf --remove-rpath {} + 2>/dev/null || true +fi + +BUILD_DIR="${COOKBOOK_BUILD}" +if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake" ]; then + find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \ + "s|${BUILD_DIR}|/usr|g" {} + 2>/dev/null || true +fi + +SYSROOT="${COOKBOOK_SYSROOT}" +if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake" ]; then + find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \ + "s|/usr/include|${SYSROOT}/include|g" {} + 2>/dev/null || true +fi +if [ -d "${COOKBOOK_STAGE}/usr/include" ]; then + mkdir -p "${SYSROOT}/include" + cp -a "${COOKBOOK_STAGE}/usr/include/"* "${SYSROOT}/include/" 2>/dev/null || true +fi +if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake" ]; then + mkdir -p "${SYSROOT}/lib/cmake" + cp -a "${COOKBOOK_STAGE}/usr/lib/cmake/Qt6"* "${SYSROOT}/lib/cmake/" 2>/dev/null || true +fi +mkdir -p "${SYSROOT}/lib" +cp -a "${COOKBOOK_STAGE}/usr/lib/libQt6"* "${SYSROOT}/lib/" 2>/dev/null || true +if [ -d "${COOKBOOK_STAGE}/usr/plugins" ]; then + mkdir -p "${SYSROOT}/plugins" + cp -a "${COOKBOOK_STAGE}/usr/plugins/"* "${SYSROOT}/plugins/" 2>/dev/null || true +fi +if [ -d "${COOKBOOK_STAGE}/usr/qml" ]; then + mkdir -p "${SYSROOT}/qml" + cp -a "${COOKBOOK_STAGE}/usr/qml/"* "${SYSROOT}/qml/" 2>/dev/null || true +fi +"""