Diagnose Windows DLL scanning and recognize system imports
This commit is contained in:
1 parent
d02c55dbcd
commit
ba2bafe56e
1 file changed
+29
-6
+29
-6
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user