Browse Source

Diagnose Windows DLL scanning and recognize system imports

master
evgeny 5 days ago
parent
commit
ba2bafe56e
  1. 35
      tools/chatgui/build.sh

35
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)

Loading…
Cancel
Save