diff --git a/coin/platform_configs/address_sanitizer_platforms.yaml b/coin/platform_configs/address_sanitizer_platforms.yaml index 0db6392b..8878d439 100644 --- a/coin/platform_configs/address_sanitizer_platforms.yaml +++ b/coin/platform_configs/address_sanitizer_platforms.yaml @@ -8,5 +8,5 @@ Configurations: Configure arguments: '-nomake examples -developer-build' Environment variables: [ 'CMAKE_ARGS=-DOPENSSL_ROOT_DIR={{.Env.OPENSSL_HOME}}', - 'NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR}}' + 'NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR}} -DQT_DEPLOY_FFMPEG=TRUE' ] diff --git a/coin/platform_configs/cmake_platforms.yaml b/coin/platform_configs/cmake_platforms.yaml index aef05c0c..2c021e19 100644 --- a/coin/platform_configs/cmake_platforms.yaml +++ b/coin/platform_configs/cmake_platforms.yaml @@ -14,7 +14,7 @@ Configurations: Compiler: 'GCC' Features: ['Sccache', 'Documentation', 'UseConfigure', 'DoNotRunTests'] Configure arguments: '-make examples -developer-build -c++std c++20 -linker gold -qtlibinfix TestInfix -qtnamespace TestNamespace' - Environment variables: ['NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR}}'] + Environment variables: ['NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR}} -DQT_DEPLOY_FFMPEG=TRUE'] - Id: 'ubuntu-22.04' Template: 'qtci-linux-Ubuntu-22.04-x86_64-51' @@ -23,7 +23,7 @@ Configurations: Configure arguments: '-nomake examples -release -force-debug-info -separate-debug-info -headersclean -qt-libjpeg -qt-libpng -qt-pcre -qt-harfbuzz -qt-doubleconversion -no-libudev -bundled-xcb-xinput' Environment variables: [ 'CMAKE_ARGS=-DOpenGL_GL_PREFERENCE=LEGACY', - 'NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR}} -DINPUT_headersclean=ON' + 'NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR}} -DINPUT_headersclean=ON -DQT_DEPLOY_FFMPEG=TRUE' ] # Test on Ubuntu 22.04 X11 - @@ -68,7 +68,7 @@ Configurations: Compiler: 'GCC' Features: ['Sccache', 'Documentation', 'UseConfigure', 'DoNotRunTests'] Configure arguments: '-make examples -developer-build -c++std c++20 -linker gold -qtlibinfix TestInfix -qtnamespace TestNamespace' - Environment variables: ['NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR}}'] + Environment variables: ['NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR}} -DQT_DEPLOY_FFMPEG=TRUE'] - Id: 'ubuntu-24.04-x64' Template: 'qtci-linux-Ubuntu-24.04-x86_64-50' @@ -77,7 +77,7 @@ Configurations: Configure arguments: '-nomake examples -release -force-debug-info -separate-debug-info -headersclean -qt-libjpeg -qt-libpng -qt-pcre -qt-harfbuzz -qt-doubleconversion -no-libudev -bundled-xcb-xinput' Environment variables: [ 'CMAKE_ARGS=-DOpenGL_GL_PREFERENCE=LEGACY', - 'NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR}} -DINPUT_headersclean=ON' + 'NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR}} -DQT_DEPLOY_FFMPEG=TRUE -DINPUT_headersclean=ON' ] # Test on Ubuntu 24.04 x64 X11 - @@ -101,7 +101,7 @@ Configurations: Environment variables: [ 'PATH={{.Env.CMAKE_MIN_SUPPORTED_BIN_PATH}}:{{.Env.PATH}}', 'CMAKE_ARGS=-DOPENSSL_ROOT_DIR={{.Env.OPENSSL_HOME}}', - 'NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR}}' + 'NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR}} -DQT_DEPLOY_FFMPEG=TRUE' ] - Id: 'sles-15_sp5-static' diff --git a/coin/provisioning/common/linux/fix_ffmpeg_dependencies.sh b/coin/provisioning/common/linux/fix_ffmpeg_dependencies.sh new file mode 100755 index 00000000..627e6a77 --- /dev/null +++ b/coin/provisioning/common/linux/fix_ffmpeg_dependencies.sh @@ -0,0 +1,33 @@ +#!/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" + +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)\.so(\.[0-9]+)*))\].* ]]; then + patchelf --replace-needed "${BASH_REMATCH[1]}" "libQt6FFmpegStub-${BASH_REMATCH[2]}" $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 + patchelf --set-rpath '$ORIGIN' $lib_path +done diff --git a/coin/provisioning/common/unix/install-ffmpeg.sh b/coin/provisioning/common/unix/install-ffmpeg.sh index 94d032ed..e9bb7f01 100755 --- a/coin/provisioning/common/unix/install-ffmpeg.sh +++ b/coin/provisioning/common/unix/install-ffmpeg.sh @@ -71,11 +71,31 @@ build_ffmpeg() { } if [ "$os" == "linux" ]; then + # TODO: install patchelf on RHEL and remove the force "static" + if [ -f "/etc/redhat-release" ]; then + build_type="static" + else + build_type="$2" + fi + install_ff_nvcodec_headers ffmpeg_config_options+=" --enable-openssl" + + if [ "$build_type" != "static" ]; then + ffmpeg_config_options+=" --enable-shared --disable-static" + fi + build_ffmpeg - sudo mv "$ffmpeg_source_dir/build/installed/usr/local/$ffmpeg_name" "/usr/local" + + output_dir="$ffmpeg_source_dir/build/installed/usr/local/$ffmpeg_name" + + if [ "$build_type" != "static" ]; then + fix_dependencies="${BASH_SOURCE%/*}/../linux/fix_ffmpeg_dependencies.sh" + "$fix_dependencies" "$output_dir" + fi + + sudo mv "$output_dir" "/usr/local" SetEnvVar "FFMPEG_DIR" "/usr/local/$ffmpeg_name" elif [ "$os" == "macos" ] || [ "$os" == "macos-universal" ]; then @@ -111,3 +131,5 @@ elif [ "$os" == "macos" ] || [ "$os" == "macos-universal" ]; then SetEnvVar "FFMPEG_DIR" "/usr/local/$ffmpeg_name" fi + + diff --git a/coin/provisioning/qtci-linux-SLES-15_SP4-x86_64/90-install-ffmpeg.sh b/coin/provisioning/qtci-linux-SLES-15_SP4-x86_64/90-install-ffmpeg.sh index 61da9b7b..27ff04dc 100755 --- a/coin/provisioning/qtci-linux-SLES-15_SP4-x86_64/90-install-ffmpeg.sh +++ b/coin/provisioning/qtci-linux-SLES-15_SP4-x86_64/90-install-ffmpeg.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -source "${BASH_SOURCE%/*}/../common/unix/install-ffmpeg.sh" "linux" +source "${BASH_SOURCE%/*}/../common/unix/install-ffmpeg.sh" "linux" "static" diff --git a/coin/provisioning/qtci-linux-SLES-15_SP5-x86_64/90-install-ffmpeg.sh b/coin/provisioning/qtci-linux-SLES-15_SP5-x86_64/90-install-ffmpeg.sh index 2a0d7258..cd65475b 100644 --- a/coin/provisioning/qtci-linux-SLES-15_SP5-x86_64/90-install-ffmpeg.sh +++ b/coin/provisioning/qtci-linux-SLES-15_SP5-x86_64/90-install-ffmpeg.sh @@ -2,4 +2,4 @@ # Copyright (C) 2023 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 -source "${BASH_SOURCE%/*}/../common/unix/install-ffmpeg.sh" "linux" +source "${BASH_SOURCE%/*}/../common/unix/install-ffmpeg.sh" "linux" "static" diff --git a/coin/provisioning/qtci-linux-Ubuntu-18.04-x86_64/02-apt.sh b/coin/provisioning/qtci-linux-Ubuntu-18.04-x86_64/02-apt.sh index df016116..e0bec3e5 100755 --- a/coin/provisioning/qtci-linux-Ubuntu-18.04-x86_64/02-apt.sh +++ b/coin/provisioning/qtci-linux-Ubuntu-18.04-x86_64/02-apt.sh @@ -168,6 +168,8 @@ installPackages+=(ruby) installPackages+=(libxslt1-dev) installPackages+=(libxml2-dev) installPackages+=(libhyphen-dev) +# Fix dependencies in shared ffmpeg libs +installPackages+=(patchelf) echo "Running update for apt" waitLoop diff --git a/coin/provisioning/qtci-linux-Ubuntu-20.04-x86_64/02-apt.sh b/coin/provisioning/qtci-linux-Ubuntu-20.04-x86_64/02-apt.sh index aac229a2..fad3dd41 100755 --- a/coin/provisioning/qtci-linux-Ubuntu-20.04-x86_64/02-apt.sh +++ b/coin/provisioning/qtci-linux-Ubuntu-20.04-x86_64/02-apt.sh @@ -217,6 +217,8 @@ sudo dpkg --add-architecture i386 installPackages+=(nfs-kernel-server) installPackages+=(net-tools) installPackages+=(bridge-utils) +# Fix dependencies in shared ffmpeg libs +installPackages+=(patchelf) echo "Running update for apt" waitLoop diff --git a/coin/provisioning/qtci-linux-Ubuntu-22.04-x86_64/02-apt.sh b/coin/provisioning/qtci-linux-Ubuntu-22.04-x86_64/02-apt.sh index 3bd4750e..22bb3e50 100755 --- a/coin/provisioning/qtci-linux-Ubuntu-22.04-x86_64/02-apt.sh +++ b/coin/provisioning/qtci-linux-Ubuntu-22.04-x86_64/02-apt.sh @@ -233,6 +233,8 @@ installPackages+=(uml-utilities) # used for reading vcpkg packages version, from vcpkg.json installPackages+=(jq) +installPackages+=(patchelf) + echo "Running update for apt" waitLoop sudo apt-get update diff --git a/coin/provisioning/qtci-linux-Ubuntu-24.04-x86_64/02-apt.sh b/coin/provisioning/qtci-linux-Ubuntu-24.04-x86_64/02-apt.sh index 9640a917..a8c5894b 100644 --- a/coin/provisioning/qtci-linux-Ubuntu-24.04-x86_64/02-apt.sh +++ b/coin/provisioning/qtci-linux-Ubuntu-24.04-x86_64/02-apt.sh @@ -238,6 +238,8 @@ installPackages+=(uml-utilities) # used for reading vcpkg packages version, from vcpkg.json installPackages+=(jq) +installPackages+=(patchelf) + echo "Running update for apt" waitLoop sudo apt-get update