Files
qt5/coin/provisioning/common/linux/fix_ffmpeg_dependencies.sh
Bartlomiej Moskal 4f3b057d01 Coin: Extend script for fixing FFmpeg dependencies to stubs
Add an additional parameter to disable the rpath setting.
The rpath update somehow interferes with the ffmpeg libraries fails
with: "java.lang.UnsatisfiedLinkError: dlopen failed: empty/none
DT_HASH/DT_GNU_HASH"

Pick-to: 6.8
Task-number: QTBUG-122010
Change-Id: Idfe4addacee68edfb0f7ccaac1a19860c539c0e0
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
2024-06-17 13:43:42 +02:00

45 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Copyright (C) 2024 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
set -x
lib_dir="$1/lib"
additional_suffix="${2:-}"
set_rpath="${3:-yes}"
ffmpeg_libs=("avcodec" "avdevice" "avfilter" "avformat" "avutil" "swresample" "swscale")
for lib_name in "${ffmpeg_libs[@]}"; do
lib_path="$lib_dir/lib$lib_name.so"
pkg_config_file_path="$lib_dir/pkgconfig/lib$lib_name.pc"
if [ ! -f "$lib_path" ]; then
echo "FFmpeg lib $lib_path hasn't been found"
exit 1
fi
if [ ! -f "$pkg_config_file_path" ]; then
echo "FFmpeg pc file $pkg_config_file_path hasn't been found"
exit 1
fi
while read -r line; do
if [[ $line =~ .*\[(lib((ssl|crypto|va|va-x11|va-drm)(_3)?\.so(\.[0-9]+)*))\].* ]]; then
stub_name="libQt6FFmpegStub-${BASH_REMATCH[2]}"
if [[ ${BASH_REMATCH[4]} == "_3" ]]; then
stub_name="${stub_name/_3/}" # Remove "_3" from stub_name
fi
if [[ -n "$additional_suffix" ]]; then
stub_name="${stub_name%%.*}${additional_suffix}.${stub_name#*.}" # Add additional_suffix
fi
patchelf --replace-needed "${BASH_REMATCH[1]}" "${stub_name}" $lib_path
fi
done <<< "$(readelf -d $lib_path | grep '(NEEDED)' )"
sed -i -E "/^Libs.private:/s/ -l(va|va-x11|va-drm|ssl|crypto)/ -lQt6FFmpegStub-\\1/g;" $pkg_config_file_path
if [[ "$set_rpath" == "yes" ]]; then
patchelf --set-rpath '$ORIGIN' $lib_path
fi
done