|
|
|
|
@ -53,20 +53,7 @@ done
|
|
|
|
|
STAGE=$(mktemp -d "$BUILD_DIR/installer-stage.XXXXXX") |
|
|
|
|
PACKAGE_DIR="$STAGE/package" |
|
|
|
|
mkdir -p "$PACKAGE_DIR/licenses" "$STAGE/output" "$BUILD_DIR/installer" |
|
|
|
|
cp "$BUILD_DIR/vibechat.exe" "$PACKAGE_DIR/" |
|
|
|
|
shopt -s nullglob nocasematch |
|
|
|
|
for file in "$BUILD_DIR/"*.dll; do |
|
|
|
|
name=${file##*/} |
|
|
|
|
if [[ "$name" = Qt[56]*.dll && "$name" != "$QT_PACKAGE"*.dll ]]; then |
|
|
|
|
echo "INFO: excluding DLL from other Qt version: $name" |
|
|
|
|
continue |
|
|
|
|
fi |
|
|
|
|
cp "$file" "$PACKAGE_DIR/" |
|
|
|
|
done |
|
|
|
|
for file in platforms/qwindows.dll imageformats/qjpeg.dll imageformats/qwebp.dll; do |
|
|
|
|
mkdir -p "$PACKAGE_DIR/${file%/*}" |
|
|
|
|
cp "$BUILD_DIR/$file" "$PACKAGE_DIR/$file" |
|
|
|
|
done |
|
|
|
|
for file in LICENSE LICENSING THIRD_PARTY_NOTICES; do |
|
|
|
|
cp "$SRC_DIR/../../$file" "$PACKAGE_DIR/licenses/" |
|
|
|
|
done |
|
|
|
|
@ -76,16 +63,31 @@ cp -R "$SRC_DIR/rlottie_src/licenses" "$PACKAGE_DIR/licenses/rlottie/"
|
|
|
|
|
|
|
|
|
|
# Проверяем архитектуру/полноту уже собранного комплекта, включая динамические Qt-плагины. |
|
|
|
|
SYSTEM_DIR=$(cygpath -u "${WINDIR:-C:\\Windows}/System32") |
|
|
|
|
source "$SRC_DIR/compiler_runtime.sh" |
|
|
|
|
declare -A LICENSE_PACKAGES=() |
|
|
|
|
for file in "$PACKAGE_DIR/vibechat.exe" "$PACKAGE_DIR/"*.dll "$PACKAGE_DIR/platforms/"*.dll "$PACKAGE_DIR/imageformats/"*.dll; do |
|
|
|
|
declare -A INCLUDED=() |
|
|
|
|
FILES=(vibechat.exe platforms/qwindows.dll imageformats/qjpeg.dll imageformats/qwebp.dll) |
|
|
|
|
HAS_FFMPEG=0 |
|
|
|
|
for ((i = 0; i < ${#FILES[@]}; i++)); do |
|
|
|
|
relative=${FILES[i]} |
|
|
|
|
[[ -z "${INCLUDED[${relative,,}]:-}" ]] || continue |
|
|
|
|
INCLUDED[${relative,,}]=1 |
|
|
|
|
name=${relative##*/} |
|
|
|
|
if [[ "$name" = Qt[56]*.dll && "$name" != "$QT_PACKAGE"*.dll ]]; then |
|
|
|
|
echo "ERROR: mixed Qt runtime: $relative does not belong to $QT_PACKAGE" >&2 |
|
|
|
|
exit 1 |
|
|
|
|
fi |
|
|
|
|
file="$PACKAGE_DIR/$relative" |
|
|
|
|
mkdir -p "${file%/*}" |
|
|
|
|
cp "$BUILD_DIR/$relative" "$file" |
|
|
|
|
name=${file##*/} |
|
|
|
|
objdump -f "$file" > "$STAGE/headers.txt" |
|
|
|
|
rg_output=$(awk '/file format/ {print $NF}' "$STAGE/headers.txt") |
|
|
|
|
[[ "$rg_output" = pei-x86-64 ]] || { echo "ERROR: $name is not a Windows x64 binary: $rg_output" >&2; exit 1; } |
|
|
|
|
binary_format=$(awk '/file format/ {print $NF}' "$STAGE/headers.txt") |
|
|
|
|
[[ "$binary_format" = pei-x86-64 ]] || { echo "ERROR: $name is not a Windows x64 binary: $binary_format" >&2; exit 1; } |
|
|
|
|
objdump -p "$file" > "$STAGE/imports.txt" |
|
|
|
|
while read -r dep; do |
|
|
|
|
[[ -n "$dep" ]] || continue |
|
|
|
|
[[ -f "$PACKAGE_DIR/$dep" ]] && continue |
|
|
|
|
if [[ -f "$BUILD_DIR/$dep" ]]; then FILES+=("$dep"); continue; fi |
|
|
|
|
case "$dep" in api-ms-win-*.dll|ext-ms-win-*.dll) continue ;; esac |
|
|
|
|
if [[ -f "$SYSTEM_DIR/$dep" && "$dep" != msvcp*.dll && "$dep" != vcruntime*.dll ]]; then continue; fi |
|
|
|
|
echo "ERROR: incomplete installer runtime: $name requires $dep" >&2 |
|
|
|
|
@ -95,7 +97,10 @@ for file in "$PACKAGE_DIR/vibechat.exe" "$PACKAGE_DIR/"*.dll "$PACKAGE_DIR/platf
|
|
|
|
|
|
|
|
|
|
# Лицензии внешних библиотек берём из пакетов той же UCRT64-сборки. |
|
|
|
|
[[ "$name" != vibechat.exe && "$name" != librlottie.dll ]] || continue |
|
|
|
|
[[ ! -f "$SRC_DIR/ffmpeg/ffmpeg_build/install/bin/$name" ]] || continue |
|
|
|
|
if [[ -f "$SRC_DIR/ffmpeg/ffmpeg_build/install/bin/$name" ]] && ! chatgui_is_compiler_runtime_dll "$name"; then |
|
|
|
|
HAS_FFMPEG=1 |
|
|
|
|
continue |
|
|
|
|
fi |
|
|
|
|
runtime_file="$RUNTIME_PREFIX/bin/$name" |
|
|
|
|
if [[ "$file" = "$PACKAGE_DIR/platforms/"* || "$file" = "$PACKAGE_DIR/imageformats/"* ]]; then |
|
|
|
|
relative=${file#"$PACKAGE_DIR/"} |
|
|
|
|
@ -117,11 +122,15 @@ for pkg in "${!LICENSE_PACKAGES[@]}"; do
|
|
|
|
|
done < "$STAGE/package-files.txt" |
|
|
|
|
echo "INFO: included runtime license notices: $pkg" |
|
|
|
|
done |
|
|
|
|
if [[ -d "$SRC_DIR/ffmpeg/ffmpeg_build" ]]; then |
|
|
|
|
# Архив исходников FFmpeg остаётся распакованным после build_ffmpeg.sh. |
|
|
|
|
for file in "$SRC_DIR/ffmpeg/ffmpeg_build/ffmpeg-"*/COPYING* "$SRC_DIR/ffmpeg/ffmpeg_build/ffmpeg-"*/LICENSE.md; do |
|
|
|
|
mkdir -p "$PACKAGE_DIR/licenses/ffmpeg" |
|
|
|
|
cp "$file" "$PACKAGE_DIR/licenses/ffmpeg/" |
|
|
|
|
if [[ "$HAS_FFMPEG" = 1 ]]; then |
|
|
|
|
FFMPEG_SOURCE="$SRC_DIR/ffmpeg/ffmpeg_build/src" |
|
|
|
|
[[ -f "$FFMPEG_SOURCE/ffmpeg/COPYING.GPLv3" ]] || { echo "ERROR: FFmpeg source license notices missing: $FFMPEG_SOURCE" >&2; exit 1; } |
|
|
|
|
# Сохраняем уведомления FFmpeg и его встроенных статических кодеков. |
|
|
|
|
for file in "$FFMPEG_SOURCE/"*/COPYING* "$FFMPEG_SOURCE/"*/LICENSE* "$FFMPEG_SOURCE/"*/PATENTS; do |
|
|
|
|
[[ -f "$file" ]] || continue |
|
|
|
|
relative=${file#"$FFMPEG_SOURCE/"} |
|
|
|
|
mkdir -p "$PACKAGE_DIR/licenses/ffmpeg/${relative%/*}" |
|
|
|
|
cp "$file" "$PACKAGE_DIR/licenses/ffmpeg/$relative" |
|
|
|
|
done |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|