Implement dynamical ffmpeg linking on macOS

* fix dependencies and install names (absolute => relative)
* fix compilation build of dylib on xcode 15.
* add matching build instructions to yaml.
* old macos versions don't have 'realpath', workaround is used.

Task-number: QTBUG-120989
Pick-to: 6.7 6.6 6.5
Change-Id: I22e413d8f6d05c8c7d6d09a5926691216e781fd3
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io>
This commit is contained in:
Artem Dyomin
2024-01-23 13:29:27 +01:00
parent a84104df1c
commit a53b63019f
3 changed files with 58 additions and 18 deletions

View File

@@ -46,7 +46,6 @@ install_ff_nvcodec_headers() {
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig"
}
build_ffmpeg() {
local arch="$1"
local prefix="$2"
@@ -79,20 +78,36 @@ if [ "$os" == "linux" ]; then
sudo mv "$ffmpeg_source_dir/build/installed/usr/local/$ffmpeg_name" "/usr/local"
SetEnvVar "FFMPEG_DIR" "/usr/local/$ffmpeg_name"
elif [ "$os" == "macos" ]; then
elif [ "$os" == "macos" ] || [ "$os" == "macos-universal" ]; then
ffmpeg_config_options+=" --enable-shared --disable-static"
brew install yasm
export MACOSX_DEPLOYMENT_TARGET=12
build_ffmpeg
sudo mv "$ffmpeg_source_dir/build/installed/usr/local/$ffmpeg_name" "/usr/local"
fix_relative_dependencies="${BASH_SOURCE%/*}/../macos/fix_relative_dependencies.sh"
xcode_major_version=$(xcodebuild -version | awk 'NR==1 {split($2, a, "."); print a[1]}')
if [ $xcode_major_version -ge 15 ]; then
# fix the error: duplicate symbol '_av_ac3_parse_header'
ffmpeg_config_options+=" --extra-ldflags=-Wl,-ld_classic"
fi
if [ "$os" == "macos" ]; then
build_ffmpeg
install_dir="$ffmpeg_source_dir/build/installed"
"$fix_relative_dependencies" "$install_dir/usr/local/$ffmpeg_name/lib"
sudo mv "$install_dir/usr/local/$ffmpeg_name" "/usr/local"
else
build_ffmpeg "arm64"
build_ffmpeg "x86_64"
arm64_install_dir="$ffmpeg_source_dir/build/arm64/installed"
x86_64_install_dir="$ffmpeg_source_dir/build/x86_64/installed"
"$fix_relative_dependencies" "$arm64_install_dir/usr/local/$ffmpeg_name/lib"
"$fix_relative_dependencies" "$x86_64_install_dir/usr/local/$ffmpeg_name/lib"
sudo "${BASH_SOURCE%/*}/../macos/makeuniversal.sh" "$arm64_install_dir" "$x86_64_install_dir"
fi
SetEnvVar "FFMPEG_DIR" "/usr/local/$ffmpeg_name"
elif [ "$os" == "macos-universal" ]; then
brew install yasm
export MACOSX_DEPLOYMENT_TARGET=12
build_ffmpeg "arm64"
build_ffmpeg "x86_64"
sudo "${BASH_SOURCE%/*}/../macos/makeuniversal.sh" "$ffmpeg_source_dir/build/arm64/installed" "$ffmpeg_source_dir/build/x86_64/installed"
SetEnvVar "FFMPEG_DIR" "/usr/local/$ffmpeg_name"
fi