diff --git a/utils/scripts/docker/package_appimages.bash b/utils/scripts/docker/package_appimages.bash index b807068a5aef668ff19d53c4cfc1866309500e4a..a5f48d1614715dac9cdf7e3e65a811529b22bc07 100755 --- a/utils/scripts/docker/package_appimages.bash +++ b/utils/scripts/docker/package_appimages.bash @@ -21,68 +21,124 @@ function join_by() { fi } -function get_additional_libs() { - case $* in - *qt*) - for LIB in /usr/lib/x86_64-linux-gnu/libQt6WaylandEglCompositorHwIntegration.so \ - /usr/lib/x86_64-linux-gnu/libQt6WaylandEglClientHwIntegration.so \ - /usr/lib/x86_64-linux-gnu/libQt6WaylandCompositor.so \ - /usr/lib/x86_64-linux-gnu/libQt6OpenGLWidgets.so \ - /usr/lib/x86_64-linux-gnu/libQt6OpenGL.so \ - /usr/lib/x86_64-linux-gnu/libQt6MultimediaWidgets.so \ - /usr/lib/x86_64-linux-gnu/libQt6Multimedia.so \ - /usr/lib/x86_64-linux-gnu/libQt6Concurrent.so \ - /usr/lib/x86_64-linux-gnu/libQt6WaylandClient.so \ - /usr/lib/x86_64-linux-gnu/libQt6XcbQpa.so \ - /usr/lib/x86_64-linux-gnu/libQt6EglFSDeviceIntegration.so \ - /usr/lib/x86_64-linux-gnu/libQt6EglFsKmsGbmSupport.so \ - /usr/lib/x86_64-linux-gnu/libQt6EglFsKmsSupport.so ; - do - for FILE in ${LIB}*; do - echo -n " -l${FILE} " - done - done;; - *);; - esac -} - function deploy() { local EXEC=${1,,} + local WITHQTPLUGIN="$2" - local EXTRA_QT_PLUGINS="concurrent;core;dbus;eglfsdeviceintegration;eglfskmssupport;gui;multimedia;multimediawidgets;" - local EXTRA_QT_PLUGINS+="opengl;openglwidgets;waylandclient;waylandcompositor;widgets;xcbqpa;" - export EXTRA_QT_PLUGINS + local EXTRA_CUSTOM_QT_PLUGINS=( + "wayland-shell-integration/libxdg-shell.so" + "wayland-graphics-integration-client/libdmabuf-server.so" + "wayland-graphics-integration-client/libdrm-egl-server.so" + "wayland-graphics-integration-client/libqt-plugin-wayland-egl.so" + "wayland-graphics-integration-client/libshm-emulation-server.so" + "wayland-graphics-integration-client/libvulkan-server.so" + "wayland-graphics-integration-server/libqt-wayland-compositor-drm-egl-server-buffer.so" + "wayland-graphics-integration-server/libqt-wayland-compositor-wayland-egl.so" + "wayland-graphics-integration-server/libqt-wayland-compositor-wayland-eglstream-controller.so" + "egldeviceintegrations/libqeglfs-emu-integration.so" + "egldeviceintegrations/libqeglfs-kms-egldevice-integration.so" + "egldeviceintegrations/libqeglfs-kms-integration.so" + "egldeviceintegrations/libqeglfs-x11-integration.so" + ) + local EXTRA_GRAPHIC_LIBS=( + "/usr/lib/x86_64-linux-gnu/libEGL_mesa.so.0" + "/usr/lib/x86_64-linux-gnu/libEGL_mesa.so.0.0.0" + "/usr/lib/x86_64-linux-gnu/libEGL.so.1" + "/usr/lib/x86_64-linux-gnu/libEGL.so.1.1.0" + "/usr/lib/x86_64-linux-gnu/libOpenGL.so" + "/usr/lib/x86_64-linux-gnu/libOpenGL.so.0" + "/usr/lib/x86_64-linux-gnu/libOpenGL.so.0.0.0" + "/usr/lib/x86_64-linux-gnu/libgbm.so.1.0.0" + "/usr/lib/x86_64-linux-gnu/libgbm.so.1" + "/usr/lib/x86_64-linux-gnu/libglapi.so.0.0.0" + "/usr/lib/x86_64-linux-gnu/libglapi.so.0" + "/usr/lib/x86_64-linux-gnu/libGLdispatch.so.0.0.0" + "/usr/lib/x86_64-linux-gnu/libGLdispatch.so.0" + "/usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0" + "/usr/lib/x86_64-linux-gnu/libGLX_indirect.so.0" + "/usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0" + "/usr/lib/x86_64-linux-gnu/libGLX.so.0.0.0" + "/usr/lib/x86_64-linux-gnu/libGLX.so.0" + "/usr/lib/x86_64-linux-gnu/libGL.so.1.7.0" + "/usr/lib/x86_64-linux-gnu/libGL.so.1" + "/usr/lib/x86_64-linux-gnu/libGLX.so" + "/usr/lib/x86_64-linux-gnu/libGL.so" + ) + local EXTRA_DRI_LIBS=( + "i915_dri.so" + "i965_dri.so" + "iris_dri.so" + "kms_swrast_dri.so" + "nouveau_dri.so" + "nouveau_vieux_dri.so" + "r200_dri.so" + "r300_dri.so" + "r600_dri.so" + "radeon_dri.so" + "radeonsi_dri.so" + "swrast_dri.so" + "virtio_gpu_dri.so" + "vmwgfx_dri.so" + "zink_dri.so" + "i965_drv_video.so" + "iHD_drv_video.so" + "nouveau_drv_video.so" + "r600_drv_video.so" + "radeonsi_drv_video.so" + ) + local EXTRA_DRM_LIBS=( + "libdrm.so.2.4.0" + "libdrm.so.2" + "libdrm_amdgpu.so.1.0.0" + "libdrm_amdgpu.so.1" + "libdrm_intel.so.1.0.0" + "libdrm_intel.so.1" + "libdrm_nouveau.so.2.0.0" + "libdrm_nouveau.so.2" + "libdrm_radeon.so.1.0.1" + "libdrm_radeon.so.1" + ) - local EXTRA_PLATFORM_PLUGINS="libqxcb.so;libqeglfs.so;libqwayland-egl.so;libqwayland-generic.so;" + local EXTRA_PLATFORM_PLUGINS="libqxcb.so;libqwayland-egl.so;libqwayland-generic.so;" export EXTRA_PLATFORM_PLUGINS local EXCLUDE_LIBS="libgdk_pixbuf libpango libcairo libgio libglib libgmodule libgobject libgthread" local EXCLUDE_LIBS="-name *$(join_by "* -or -name *" $EXCLUDE_LIBS)*" - local QT_SRC=/usr/lib/x86_64-linux-gnu/qt6/plugins - local QT_DST=${EXEC^}/usr/plugins + local qtPlugin=() + if [[ "x$WITHQTPLUGIN" == "x1" ]]; then + qtPlugin+=(--plugin qt) - # Will do most of the work - linuxdeploy -v1 --appdir ${EXEC^} -e target/release/${EXEC} \ - -i ${EXEC}/${EXEC}.png -d ${EXEC}/${EXEC}.desktop \ - ${*:2} $(get_additional_libs $*) - - # Handle aftermath things here, we force copy the qt plugins for wayland and remove unwanted - # libs... NOTE: For now we force the xcb platform because of troubles with wayland... - mkdir -p ${EXEC^}/apprun-hooks/ - case ${*:2} in - *qt*) - for PLUGIN in ${QT_SRC}/*; do - local PLUGIN=$(basename ${PLUGIN}) - mkdir -p ${QT_DST}/${PLUGIN} - cp -rf ${QT_SRC}/${PLUGIN}/* ${QT_DST}/${PLUGIN}/ + for lib in "${EXTRA_DRI_LIBS[@]}"; do + local dest="$(dirname "${EXEC^}/usr/lib/dri/$lib")" + mkdir -p "$dest" + cp "/usr/lib/x86_64-linux-gnu/dri/$lib" "$dest" + qtPlugin+=(--deploy-deps-only="${EXEC^}/usr/lib/dri/$lib" --library="/usr/lib/x86_64-linux-gnu/dri/$lib") + done + + for lib in "${EXTRA_DRM_LIBS[@]}"; do + local dest="$(dirname "${EXEC^}/usr/lib/dri/$lib")" + mkdir -p "$dest" + cp "/usr/lib/x86_64-linux-gnu/$lib" "$dest" + qtPlugin+=(--deploy-deps-only="${EXEC^}/usr/lib/dri/$lib" --library="/usr/lib/x86_64-linux-gnu/$lib") + done + + for lib in "${EXTRA_GRAPHIC_LIBS[@]}"; do + qtPlugin+=(--library="$lib") done - for PRL_FILE in /usr/lib/x86_64-linux-gnu/libQt6Wayland*.prl; do - cp ${PRL_FILE} ${EXEC^}/usr/lib/$(basename ${PRL_FILE}) + + for plug in "${EXTRA_CUSTOM_QT_PLUGINS[@]}"; do + local dest="$(dirname "${EXEC^}/usr/plugins/$plug")" + mkdir -p "$dest" + cp "/usr/lib/x86_64-linux-gnu/qt6/plugins/$plug" "$dest" + qtPlugin+=(--deploy-deps-only="${EXEC^}/usr/plugins/$plug" --library="/usr/lib/x86_64-linux-gnu/qt6/plugins/$plug") done - ;; - *);; - esac + fi + + # Will do most of the work + linuxdeploy -v1 --appdir ${EXEC^} -e target/release/${EXEC} \ + -i ${EXEC}/${EXEC}.png -d ${EXEC}/${EXEC}.desktop "${qtPlugin[@]}" + find ${EXEC^}/usr/lib/ -type f -and \( ${EXCLUDE_LIBS} \) -delete cp LICENSE CHANGELOG.md CONTRIBUTING.md ${EXEC^}/ install -Dm644 ${EXEC}/${EXEC}.appdata.xml ${EXEC^}/usr/share/metainfo/${EXEC}.appdata.xml @@ -102,6 +158,7 @@ this_dir="\$(readlink -f "\$(dirname "\$0")")" source "\$HOOK" done } +export LD_PRELOAD="/usr/lib/libdrm.so.2" exec "\$this_dir/usr/bin/${EXEC}" \$@ EOF @@ -112,5 +169,5 @@ EOF deploy lkt deploy amadeus -deploy lektord --plugin qt +deploy lektord 1 diff --git a/utils/scripts/docker/setup_base.bash b/utils/scripts/docker/setup_base.bash index ca84c2952742d0652bb4b40d06c1b2dcac864240..ec86ad04abd708222d9f7f222aad1fa2fbf62c97 100755 --- a/utils/scripts/docker/setup_base.bash +++ b/utils/scripts/docker/setup_base.bash @@ -11,6 +11,7 @@ PKG_BACKPORT+=" qt6-image-formats-plugins qt6-gtk-platformtheme qt6-base-abi lib PKG_BACKPORT+=" libqt6multimedia6 libqt6concurrent6 libqt6multimediawidgets6 " PKG_BACKPORT+=" libqt6opengl6 libqt6openglwidgets6 libqt6widgets6" PKG_BACKPORT+=" qt6-translations-l10n qt6-l10n-tools" +PKG_BACKPORT+=" libdrm2 libdrm-nouveau2 libdrm-radeon1 libdrm-amdgpu1 libdrm-common libdrm-intel1" PKG_BACKPORT+=" qt6-wayland-dev qt6-wayland qt6-wayland-dev-tools" PKG_BACKPORT+=" libqt6waylandclient6 libqt6waylandcompositor6 libqt6waylandeglclienthwintegration6"