evgeny 1 day ago
parent
commit
fb37ca747a
  1. 63
      tools/chatgui/build.sh

63
tools/chatgui/build.sh

@ -57,13 +57,30 @@ fi
# а pacman-ffmpeg той же мажорной версии в /ucrt64/bin дал бы неверный набор кодеков. # а pacman-ffmpeg той же мажорной версии в /ucrt64/bin дал бы неверный набор кодеков.
FFMPEG_BIN="$SRC_DIR/ffmpeg/ffmpeg_build/install/bin" FFMPEG_BIN="$SRC_DIR/ffmpeg/ffmpeg_build/install/bin"
OBJDUMP="objdump"; [ -n "${MSYSTEM_PREFIX:-}" ] && OBJDUMP="$MSYSTEM_PREFIX/bin/objdump" OBJDUMP="objdump"; [ -n "${MSYSTEM_PREFIX:-}" ] && OBJDUMP="$MSYSTEM_PREFIX/bin/objdump"
shopt -s nocasematch command -v "$OBJDUMP" >/dev/null 2>&1 || { log " ERROR: $OBJDUMP not found"; exit 1; }
shopt -s nocasematch nullglob
# Обновляем весь комплект FFmpeg, включая DLL, не импортируемые напрямую приложением.
for src in "$FFMPEG_BIN/"*.dll; do
cp "$src" "$BUILD_DIR/" || { log " ERROR: failed to copy $src"; exit 1; }
log " OK: $(basename "$src") (ffmpeg)"
done
log " Resolving non-Qt dependencies recursively..." log " Resolving non-Qt dependencies recursively..."
todo="$BUILD_DIR/vibechat.exe" # Проверяем также уже скопированные DLL: наличие файла не гарантирует наличие его зависимостей.
while [ -n "$todo" ]; do todo=("$BUILD_DIR/vibechat.exe" "$BUILD_DIR/"*.dll)
next_todo="" declare -A scanned=()
for src in $todo; do MISSING=0
for dep in $($OBJDUMP -p "$src" 2>/dev/null | grep "DLL Name:" | awk '{print $3}'); do for ((i = 0; i < ${#todo[@]}; i++)); do
src="${todo[i]}"
key="${src,,}"
[ -n "${scanned[$key]:-}" ] && continue
scanned[$key]=1
if ! imports=$("$OBJDUMP" -p "$src" 2>&1); then
log " ERROR: cannot inspect $src: $imports"
MISSING=1
continue
fi
log " Checking: $src"
while read -r dep; do
case "$dep" in case "$dep" in
kernel32.dll|msvcrt.dll|msvcp140.dll|vcruntime140.dll|ucrtbase.dll|\ kernel32.dll|msvcrt.dll|msvcp140.dll|vcruntime140.dll|ucrtbase.dll|\
user32.dll|gdi32.dll|gdi32full.dll|shell32.dll|shlwapi.dll|advapi32.dll|\ user32.dll|gdi32.dll|gdi32full.dll|shell32.dll|shlwapi.dll|advapi32.dll|\
@ -75,19 +92,27 @@ while [ -n "$todo" ]; do
wtsapi32.dll|mpr.dll|api-ms-win-*) wtsapi32.dll|mpr.dll|api-ms-win-*)
continue ;; continue ;;
esac esac
[ -f "$BUILD_DIR/$dep" ] && continue if [ ! -f "$BUILD_DIR/$dep" ]; then
if [ -d "$FFMPEG_BIN" ] && cp "$FFMPEG_BIN/$dep" "$BUILD_DIR/" 2>/dev/null; then dep_src=""
log " OK: $dep (ffmpeg)"; next_todo="$next_todo $BUILD_DIR/$dep" for dir in "$FFMPEG_BIN" /ucrt64/bin "$SRC_DIR/rlottie_build"; do
elif cp "/ucrt64/bin/$dep" "$BUILD_DIR/" 2>/dev/null; then if [ -f "$dir/$dep" ]; then
log " OK: $dep"; next_todo="$next_todo $BUILD_DIR/$dep" dep_src="$dir/$dep"
elif cp "/mingw64/bin/$dep" "$BUILD_DIR/" 2>/dev/null; then break
log " OK: $dep (mingw64)"; next_todo="$next_todo $BUILD_DIR/$dep" fi
done
if [ -z "$dep_src" ]; then
log " ERROR: $src requires $dep; not found in FFmpeg, UCRT64 or rlottie directories"
MISSING=1
continue
fi
cp "$dep_src" "$BUILD_DIR/" || { log " ERROR: failed to copy $dep_src"; exit 1; }
log " OK: $dep (from $dep_src; required by $src)"
fi fi
done todo+=("$BUILD_DIR/$dep")
done done < <(awk '/DLL Name:/ {print $3}' <<< "$imports")
todo="$next_todo"
done done
shopt -u nocasematch shopt -u nocasematch nullglob
[ "$MISSING" -eq 0 ] || { log " ERROR: runtime DLL deployment incomplete"; exit 1; }
# Qt platform plugin (loaded dynamically, not in import table) # Qt platform plugin (loaded dynamically, not in import table)
mkdir -p "$BUILD_DIR/platforms" mkdir -p "$BUILD_DIR/platforms"
for d in /ucrt64/share/qt5/plugins /ucrt64/lib/qt5/plugins; do for d in /ucrt64/share/qt5/plugins /ucrt64/lib/qt5/plugins; do
@ -101,7 +126,7 @@ log " Verifying required non-Qt DLLs..."
MISSING=0 MISSING=0
if [ -d "$FFMPEG_BIN" ]; then if [ -d "$FFMPEG_BIN" ]; then
for d in avcodec-*.dll avformat-*.dll avutil-*.dll swscale-*.dll swresample-*.dll; do for d in avcodec-*.dll avformat-*.dll avutil-*.dll swscale-*.dll swresample-*.dll; do
if ls "$BUILD_DIR/$d" >/dev/null 2>&1; then if compgen -G "$BUILD_DIR/$d" >/dev/null; then
log " OK: $d" log " OK: $d"
else else
log " WARN: $d MISSING in build dir"; MISSING=1 log " WARN: $d MISSING in build dir"; MISSING=1
@ -111,7 +136,7 @@ else
log " SKIP: FFmpeg not built — no FFmpeg DLLs expected" log " SKIP: FFmpeg not built — no FFmpeg DLLs expected"
fi fi
for d in libstdc++-6.dll libgcc_s_*.dll libwinpthread-1.dll librlottie.dll zlib1.dll libcrypto-*.dll; do 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 if compgen -G "$BUILD_DIR/$d" >/dev/null; then
log " OK: $d" log " OK: $d"
else else
log " WARN: $d MISSING in build dir"; MISSING=1 log " WARN: $d MISSING in build dir"; MISSING=1

Loading…
Cancel
Save