@@ -226,6 +226,7 @@ jobs:
226226 --release \
227227 --no-translations \
228228 --compiler-runtime \
229+ --include-soft-plugins \
229230 --force \
230231 dist/${{ matrix.exe }}
231232 else
@@ -243,7 +244,7 @@ jobs:
243244 Qt6Charts.dll Qt6PrintSupport.dll \
244245 Qt6Network.dll Qt6Sql.dll Qt6Concurrent.dll \
245246 Qt6WebSockets.dll \
246- Qt6Multimedia.dll Qt6MultimediaWidgets.dll \
247+ Qt6Multimedia.dll \
247248 Qt6OpenGL.dll Qt6OpenGLWidgets.dll \
248249 Qt6Svg.dll Qt6Xml.dll; do
249250 if [ -f "${QT_BIN}/${qt_dll}" ] && [ ! -f "dist/${qt_dll}" ]; then
@@ -269,10 +270,12 @@ jobs:
269270 # ----------------------------------------------------------------
270271 # MSVC Runtime DLLs — --compiler-runtime covers most, but copy
271272 # from System32 as a fallback for anything missed.
273+ # msvcp170 / vcruntime140_2 are the VS2022 v17.x toolset DLLs.
272274 # ----------------------------------------------------------------
273275 for vcrt_dll in \
274- vcruntime140.dll vcruntime140_1.dll \
276+ vcruntime140.dll vcruntime140_1.dll vcruntime140_2.dll \
275277 msvcp140.dll msvcp140_1.dll msvcp140_2.dll \
278+ msvcp170.dll \
276279 concrt140.dll vccorlib140.dll; do
277280 SYS32="/c/Windows/System32/${vcrt_dll}"
278281 if [ -f "$SYS32" ] && [ ! -f "dist/${vcrt_dll}" ]; then
@@ -362,6 +365,57 @@ jobs:
362365 done
363366 fi
364367
368+ # ----------------------------------------------------------------
369+ # Qt MultimediaWidgets DLL — required when HAS_QT_MULTIMEDIA is set
370+ # (Qt6Multimedia.dll is in the core list above; this is the separate
371+ # widgets integration DLL that windeployqt may miss)
372+ # ----------------------------------------------------------------
373+ if [ -f "${QT_BIN}/Qt6MultimediaWidgets.dll" ] && [ ! -f "dist/Qt6MultimediaWidgets.dll" ]; then
374+ cp "${QT_BIN}/Qt6MultimediaWidgets.dll" dist/
375+ echo "Copied Qt6MultimediaWidgets.dll"
376+ fi
377+
378+ # ----------------------------------------------------------------
379+ # Qt TextToSpeech DLL + SAPI plugin (Windows TTS backend)
380+ # ----------------------------------------------------------------
381+ if [ -f "${QT_BIN}/Qt6TextToSpeech.dll" ] && [ ! -f "dist/Qt6TextToSpeech.dll" ]; then
382+ cp "${QT_BIN}/Qt6TextToSpeech.dll" dist/
383+ echo "Copied Qt6TextToSpeech.dll"
384+ fi
385+ if [ -d "${QT_PLUGINS}/texttospeech" ]; then
386+ mkdir -p dist/texttospeech
387+ cp -n "${QT_PLUGINS}/texttospeech/"*.dll dist/texttospeech/ 2>/dev/null || true
388+ echo "Copied texttospeech plugins"
389+ fi
390+
391+ # ----------------------------------------------------------------
392+ # Qt Network Information plugins (Qt 6.2+ — used by QNetworkInformation)
393+ # ----------------------------------------------------------------
394+ if [ -d "${QT_PLUGINS}/networkinformation" ]; then
395+ mkdir -p dist/networkinformation
396+ cp -n "${QT_PLUGINS}/networkinformation/"*.dll dist/networkinformation/ 2>/dev/null || true
397+ echo "Copied networkinformation plugins"
398+ fi
399+
400+ # ----------------------------------------------------------------
401+ # Qt Platform Input Contexts — IME support (CJK, on-screen keyboard)
402+ # ----------------------------------------------------------------
403+ if [ -d "${QT_PLUGINS}/platforminputcontexts" ]; then
404+ mkdir -p dist/platforminputcontexts
405+ cp -n "${QT_PLUGINS}/platforminputcontexts/"*.dll dist/platforminputcontexts/ 2>/dev/null || true
406+ echo "Copied platforminputcontexts plugins"
407+ fi
408+
409+ # ----------------------------------------------------------------
410+ # Qt Print Support Plugin — required by Qt6::PrintSupport
411+ # (the DLL is in the core list; this is the Windows printer backend plugin)
412+ # ----------------------------------------------------------------
413+ if [ -d "${QT_PLUGINS}/printsupport" ]; then
414+ mkdir -p dist/printsupport
415+ cp -n "${QT_PLUGINS}/printsupport/"*.dll dist/printsupport/ 2>/dev/null || true
416+ echo "Copied printsupport plugins"
417+ fi
418+
365419 # ----------------------------------------------------------------
366420 # Qt Generic Plugins (touch/tablet input)
367421 # ----------------------------------------------------------------
@@ -372,9 +426,12 @@ jobs:
372426
373427 # ----------------------------------------------------------------
374428 # Direct3D compiler + OpenGL SW fallback
375- # Needed on machines without a proper GPU driver (VMs, headless CI)
429+ # Needed on machines without a proper GPU driver (VMs, headless CI).
430+ # dxcompiler.dll + dxil.dll: Qt 6.6+ D3D12 backend (DXC shader compiler).
376431 # ----------------------------------------------------------------
377- for d3d_dll in d3dcompiler_47.dll opengl32sw.dll libEGL.dll libGLESv2.dll; do
432+ for d3d_dll in \
433+ d3dcompiler_47.dll opengl32sw.dll libEGL.dll libGLESv2.dll \
434+ dxcompiler.dll dxil.dll; do
378435 if [ -f "${QT_BIN}/${d3d_dll}" ] && [ ! -f "dist/${d3d_dll}" ]; then
379436 cp "${QT_BIN}/${d3d_dll}" dist/
380437 echo "Copied ${d3d_dll}"
@@ -392,6 +449,18 @@ jobs:
392449 fi
393450 done
394451
452+ # ----------------------------------------------------------------
453+ # qt.conf — pins plugin and data paths relative to the executable.
454+ # Without this, Qt falls back to hardcoded build-time paths which
455+ # don't exist on a clean machine and can cause plugin load failures.
456+ # ----------------------------------------------------------------
457+ cat > dist/qt.conf <<'QTCONF'
458+ [Paths]
459+ Prefix = .
460+ Plugins = .
461+ Libraries = .
462+ QTCONF
463+
395464 # ----------------------------------------------------------------
396465 # Copy app resources and Python analytics scripts
397466 # ----------------------------------------------------------------
0 commit comments