Skip to content

Commit f4c24cb

Browse files
author
Vladimir Vilimaitis
committed
Handle static Qt AppImage packaging
1 parent 83a7665 commit f4c24cb

2 files changed

Lines changed: 60 additions & 15 deletions

File tree

src_cpp/CMakeLists.txt

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,36 @@ else()
133133
target_compile_options(rembg_native_lib PRIVATE -Wall -Wextra -Wpedantic)
134134
endif()
135135

136-
function(rembg_import_qt_tls_plugins target)
136+
function(rembg_import_qt_static_plugins target)
137137
if(NOT COMMAND qt_import_plugins)
138138
return()
139139
endif()
140140

141+
set(platform_plugins)
142+
foreach(plugin IN ITEMS
143+
Qt6::QXcbIntegrationPlugin
144+
Qt6::QMinimalIntegrationPlugin
145+
Qt6::QOffscreenIntegrationPlugin
146+
Qt6::QLinuxFbIntegrationPlugin
147+
Qt6::QEglFSIntegrationPlugin
148+
Qt6::QVncIntegrationPlugin
149+
)
150+
if(TARGET ${plugin})
151+
list(APPEND platform_plugins ${plugin})
152+
endif()
153+
endforeach()
154+
155+
set(image_plugins)
156+
foreach(plugin IN ITEMS
157+
Qt6::QGifPlugin
158+
Qt6::QICOPlugin
159+
Qt6::QJpegPlugin
160+
)
161+
if(TARGET ${plugin})
162+
list(APPEND image_plugins ${plugin})
163+
endif()
164+
endforeach()
165+
141166
set(tls_plugins)
142167
foreach(plugin IN ITEMS
143168
Qt6::QTlsBackendOpenSSLPlugin
@@ -150,14 +175,25 @@ function(rembg_import_qt_tls_plugins target)
150175
endif()
151176
endforeach()
152177

178+
set(plugin_imports)
179+
if(platform_plugins)
180+
list(APPEND plugin_imports platforms ${platform_plugins})
181+
endif()
182+
if(image_plugins)
183+
list(APPEND plugin_imports imageformats ${image_plugins})
184+
endif()
153185
if(tls_plugins)
154-
qt_import_plugins(${target} INCLUDE_BY_TYPE tls ${tls_plugins})
186+
list(APPEND plugin_imports tls ${tls_plugins})
187+
endif()
188+
189+
if(plugin_imports)
190+
qt_import_plugins(${target} INCLUDE_BY_TYPE ${plugin_imports})
155191
endif()
156192
endfunction()
157193

158194
add_executable(rembg-gui-native src/main.cpp)
159195
target_link_libraries(rembg-gui-native PRIVATE rembg_native_lib)
160-
rembg_import_qt_tls_plugins(rembg-gui-native)
196+
rembg_import_qt_static_plugins(rembg-gui-native)
161197
set_target_properties(rembg-gui-native PROPERTIES OUTPUT_NAME rembg-gui)
162198

163199
add_custom_command(TARGET rembg-gui-native POST_BUILD
@@ -297,7 +333,7 @@ if(BUILD_TESTING)
297333
set(REMBG_TEST_ENVIRONMENT
298334
"QT_PLUGIN_PATH=${REMBG_QT_PLUGIN_DIR}"
299335
)
300-
rembg_import_qt_tls_plugins(rembg-native-tests)
336+
rembg_import_qt_static_plugins(rembg-native-tests)
301337
set_tests_properties(rembg-native-tests
302338
PROPERTIES
303339
TIMEOUT 600
@@ -312,7 +348,7 @@ if(BUILD_TESTING)
312348
)
313349
target_compile_features(rembg-gui-smoke-tests PRIVATE cxx_std_23)
314350
target_link_libraries(rembg-gui-smoke-tests PRIVATE rembg_native_lib Qt6::Test)
315-
rembg_import_qt_tls_plugins(rembg-gui-smoke-tests)
351+
rembg_import_qt_static_plugins(rembg-gui-smoke-tests)
316352
add_custom_command(TARGET rembg-gui-smoke-tests POST_BUILD
317353
COMMAND "${CMAKE_COMMAND}" -E copy_if_different
318354
${REMBG_ONNXRUNTIME_RUNTIME_FILES}

src_cpp/scripts/ci-linux.sh

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,23 +38,32 @@ linuxdeploy_qt="${repo_root}/linuxdeploy-plugin-qt-x86_64.AppImage"
3838

3939
curl -L -o "${linuxdeploy}" \
4040
https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
41-
curl -L -o "${linuxdeploy_qt}" \
42-
https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage
43-
chmod +x "${linuxdeploy}" "${linuxdeploy_qt}"
41+
chmod +x "${linuxdeploy}"
4442

4543
export APPIMAGE_EXTRACT_AND_RUN="${APPIMAGE_EXTRACT_AND_RUN:-1}"
4644
export QMAKE="${QMAKE:-${VCPKG_INSTALLED_DIR}/${VCPKG_DEFAULT_TRIPLET}/tools/Qt6/bin/qmake}"
4745
export LD_LIBRARY_PATH="${repo_root}/AppDir/usr/lib:${VCPKG_INSTALLED_DIR}/${VCPKG_DEFAULT_TRIPLET}/lib:${LD_LIBRARY_PATH:-}"
4846

4947
(
5048
cd "${repo_root}"
51-
"${linuxdeploy}" \
52-
--appdir AppDir \
53-
--executable AppDir/usr/bin/rembg-gui \
54-
--desktop-file src_cpp/packaging/rembg-gui.desktop \
55-
--icon-file src_cpp/packaging/rembg-gui.svg \
56-
--plugin qt \
57-
--output appimage
49+
50+
linuxdeploy_args=(
51+
--appdir AppDir
52+
--executable AppDir/usr/bin/rembg-gui
53+
--desktop-file src_cpp/packaging/rembg-gui.desktop
54+
--icon-file src_cpp/packaging/rembg-gui.svg
55+
)
56+
57+
if ldd AppDir/usr/bin/rembg-gui | grep -Eq 'libQt6(Core|Gui|Widgets|Network)\.so'; then
58+
curl -L -o "${linuxdeploy_qt}" \
59+
https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage
60+
chmod +x "${linuxdeploy_qt}"
61+
linuxdeploy_args+=(--plugin qt)
62+
else
63+
echo "-- Qt is statically linked; skipping linuxdeploy-plugin-qt"
64+
fi
65+
66+
"${linuxdeploy}" "${linuxdeploy_args[@]}" --output appimage
5867

5968
generated_appimage="$(find . -maxdepth 1 -name '*.AppImage' ! -name 'linuxdeploy*.AppImage' -print -quit)"
6069
test -n "${generated_appimage}"

0 commit comments

Comments
 (0)