chatgui: verify FFmpeg DLL deployment + fix dependency resolution order

This commit is contained in:
evgeny committed 2026-09-21 11:52:21 +03:00
1 parent 9d4538935d
commit 01987a75d0
5 files changed
+52 -14

No files matched your search

+40 -7
View File
@@ -53,31 +53,41 @@ else
fi
# Резолвим НЕ-Qt зависимости (FFmpeg, mingw-runtime) всегда: windeployqt копирует только Qt.
# FFmpeg ищем ПЕРВЫМ в $FFMPEG_BIN: exe линкован именно под кастомный билд,
# а pacman-ffmpeg той же мажорной версии в /ucrt64/bin дал бы неверный набор кодеков.
FFMPEG_BIN="$SRC_DIR/ffmpeg/ffmpeg_build/install/bin"
OBJDUMP="objdump"; [ -n "${MSYSTEM_PREFIX:-}" ] && OBJDUMP="$MSYSTEM_PREFIX/bin/objdump"
shopt -s nocasematch
log " Resolving non-Qt dependencies recursively..."
todo="$BUILD_DIR/vibechat.exe"
while [ -n "$todo" ]; do
next_todo=""
for src in $todo; do
for dep in $(objdump -p "$src" 2>/dev/null | grep "DLL Name:" | awk '{print $3}'); do
for dep in $($OBJDUMP -p "$src" 2>/dev/null | grep "DLL Name:" | awk '{print $3}'); do
case "$dep" in
KERNEL32.dll|msvcrt.dll|USER32.dll|GDI32.dll|SHELL32.dll|ADVAPI32.dll|\
WS2_32.dll|ole32.dll|OLEAUT32.dll|IPHLPAPI.DLL|BCRYPT.dll|dbghelp.dll|\
api-ms-win-*)
kernel32.dll|msvcrt.dll|msvcp140.dll|vcruntime140.dll|ucrtbase.dll|\
user32.dll|gdi32.dll|gdi32full.dll|shell32.dll|shlwapi.dll|advapi32.dll|\
ole32.dll|oleaut32.dll|comdlg32.dll|comctl32.dll|ws2_32.dll|wsock32.dll|\
iphlpapi.dll|netapi32.dll|dnsapi.dll|winmm.dll|imm32.dll|version.dll|\
setupapi.dll|crypt32.dll|bcrypt.dll|ncrypt.dll|dbghelp.dll|kernelbase.dll|\
rpcrt4.dll|psapi.dll|powrprof.dll|cfgmgr32.dll|userenv.dll|secur32.dll|\
uxtheme.dll|dwmapi.dll|d3d11.dll|dxgi.dll|opengl32.dll|glu32.dll|\
wtsapi32.dll|mpr.dll|api-ms-win-*)
continue ;;
esac
[ -f "$BUILD_DIR/$dep" ] && continue
if cp "/ucrt64/bin/$dep" "$BUILD_DIR/" 2>/dev/null; then
if [ -d "$FFMPEG_BIN" ] && cp "$FFMPEG_BIN/$dep" "$BUILD_DIR/" 2>/dev/null; then
log " OK: $dep (ffmpeg)"; next_todo="$next_todo $BUILD_DIR/$dep"
elif cp "/ucrt64/bin/$dep" "$BUILD_DIR/" 2>/dev/null; then
log " OK: $dep"; next_todo="$next_todo $BUILD_DIR/$dep"
elif cp "/mingw64/bin/$dep" "$BUILD_DIR/" 2>/dev/null; then
log " OK: $dep (mingw64)"; next_todo="$next_todo $BUILD_DIR/$dep"
elif [ -d "$FFMPEG_BIN" ] && cp "$FFMPEG_BIN/$dep" "$BUILD_DIR/" 2>/dev/null; then
log " OK: $dep (ffmpeg)"; next_todo="$next_todo $BUILD_DIR/$dep"
fi
done
done
todo="$next_todo"
done
shopt -u nocasematch
# Qt platform plugin (loaded dynamically, not in import table)
mkdir -p "$BUILD_DIR/platforms"
for d in /ucrt64/share/qt5/plugins /ucrt64/lib/qt5/plugins; do
@@ -86,6 +96,29 @@ done
cp "$SRC_DIR/rlottie_build/librlottie.dll" "$BUILD_DIR/" 2>/dev/null && log " OK: librlottie.dll" || log " WARN: librlottie.dll not found"
cp "$SRC_DIR/setup_firewall.bat" "$BUILD_DIR/" 2>/dev/null && log " OK: setup_firewall.bat" || log " WARN: setup_firewall.bat not found"
# Проверяем, что все ожидаемые не-Qt DLL на месте (FFmpeg + mingw-runtime + rlottie + zlib + OpenSSL)
log " Verifying required non-Qt DLLs..."
MISSING=0
if [ -d "$FFMPEG_BIN" ]; then
for d in avcodec-*.dll avformat-*.dll avutil-*.dll swscale-*.dll swresample-*.dll; do
if ls "$BUILD_DIR/$d" >/dev/null 2>&1; then
log " OK: $d"
else
log " WARN: $d MISSING in build dir"; MISSING=1
fi
done
else
log " SKIP: FFmpeg not built — no FFmpeg DLLs expected"
fi
for d in libstdc++-6.dll libgcc_s_*.dll libwinpthread-1.dll librlottie.dll zlib1.dll libcrypto-*.dll; do
if ls "$BUILD_DIR/$d" >/dev/null 2>&1; then
log " OK: $d"
else
log " WARN: $d MISSING in build dir"; MISSING=1
fi
done
[ "$MISSING" -eq 1 ] && log " WARN: some required non-Qt DLLs missing — app may not start"
log ""
log "[4/4] Verifying..."
EXE="$BUILD_DIR/vibechat.exe"