From ba2bafe56e1c96bf7fbb207a93081f3f7cab56dc Mon Sep 17 00:00:00 2001 From: evgeny Date: Sun, 4 Oct 2026 22:25:11 +0200 Subject: [PATCH] Diagnose Windows DLL scanning and recognize system imports --- tools/chatgui/build.sh | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/tools/chatgui/build.sh b/tools/chatgui/build.sh index f8000c3a..6bf227bc 100755 --- a/tools/chatgui/build.sh +++ b/tools/chatgui/build.sh @@ -69,18 +69,33 @@ log " Resolving non-Qt dependencies recursively..." todo=("$BUILD_DIR/vibechat.exe" "$BUILD_DIR/"*.dll) declare -A scanned=() MISSING=0 +CHECKED=0 +COPIED=0 +SCAN_STARTED=$SECONDS +log " Scanner: $OBJDUMP; initial files=${#todo[@]}" +log " Search directories: $FFMPEG_BIN; /ucrt64/bin; $SRC_DIR/rlottie_build" 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 + CHECKED=$((CHECKED + 1)) + CHECK_STARTED=$SECONDS + log " Checking [$((i + 1))/${#todo[@]}]: $src (objdump starting)" + if imports=$("$OBJDUMP" -p "$src" 2>&1); then + log " Imports read: $src (objdump=$((SECONDS - CHECK_STARTED))s, output=${#imports} chars; resolving dependencies)" + else + RC=$? + log " ERROR: cannot inspect $src (exit=$RC, elapsed=$((SECONDS - CHECK_STARTED))s): $imports" + MISSING=$((MISSING + 1)) continue fi - log " Checking: $src" + IMPORT_COUNT=0 + SYSTEM_COUNT=0 + FILE_COPIED=0 + FILE_MISSING=0 while read -r dep; do + IMPORT_COUNT=$((IMPORT_COUNT + 1)) case "$dep" in kernel32.dll|msvcrt.dll|msvcp140.dll|vcruntime140.dll|ucrtbase.dll|\ user32.dll|gdi32.dll|gdi32full.dll|shell32.dll|shlwapi.dll|advapi32.dll|\ @@ -89,7 +104,8 @@ for ((i = 0; i < ${#todo[@]}; i++)); do 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-*) + wtsapi32.dll|mpr.dll|ntdll.dll|avicap32.dll|msimg32.dll|wldap32.dll|gdiplus.dll|usp10.dll|api-ms-win-*) + SYSTEM_COUNT=$((SYSTEM_COUNT + 1)) continue ;; esac if [ ! -f "$BUILD_DIR/$dep" ]; then @@ -102,15 +118,22 @@ for ((i = 0; i < ${#todo[@]}; i++)); do done if [ -z "$dep_src" ]; then log " ERROR: $src requires $dep; not found in FFmpeg, UCRT64 or rlottie directories" - MISSING=1 + MISSING=$((MISSING + 1)) + FILE_MISSING=$((FILE_MISSING + 1)) continue fi + log " Copying: $dep_src (required by $src)" cp "$dep_src" "$BUILD_DIR/" || { log " ERROR: failed to copy $dep_src"; exit 1; } + COPIED=$((COPIED + 1)) + FILE_COPIED=$((FILE_COPIED + 1)) log " OK: $dep (from $dep_src; required by $src)" fi todo+=("$BUILD_DIR/$dep") done < <(awk '/DLL Name:/ {print $3}' <<< "$imports") + log " Checked: $src (elapsed=$((SECONDS - CHECK_STARTED))s, imports=$IMPORT_COUNT, system=$SYSTEM_COUNT)" + log " copied=$FILE_COPIED, missing=$FILE_MISSING, pending entries=$((${#todo[@]} - i - 1))" done +log " DLL scan finished: checked=$CHECKED, copied=$COPIED, errors=$MISSING, elapsed=$((SECONDS - SCAN_STARTED))s" shopt -u nocasematch nullglob [ "$MISSING" -eq 0 ] || { log " ERROR: runtime DLL deployment incomplete"; exit 1; } # Qt platform plugin (loaded dynamically, not in import table)