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