Our iOS FFmpeg provisioning includes build info.plist manifest files
for the FFMpeg framework files. This manifest includes the version of
FFmpeg that we are deploying. This version string is currently
hardcoded and does not match the version we are actually building.
This patch changes the 'install-ffmpeg-ios.sh' script to
programmatically grab the FFmpeg version from our related scripts, and
inserts it in the info.plist manifest.
Task-number: QTBUG-136480
Change-Id: Iafeaade2ff6f2a933a0ba48749af459eef37ab51
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
(cherry picked from commit c3b80178ee)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This patch adds needed linker flags for FFmpeg Android
compilation to get FFmpeg binary to be compliant for
16KB page size. 16KB page size is compliant with 4KB
page size.
This patch updates Android OpenSSL to be version 3.0.7,
which is build with two NDK's: NDK27c and NDK29-beta2.
Both with 16KB page size support. They are build with
https://github.com/KDAB/android_openssl/pull/69 just
changing OpenSSL version from 3.1.1 to 3.0.7 and NDK
version from 25.2.9519653 to 27.2.12479018 (27c) and
another build with 29.0.13599879 (beta2). The both build
artefacts are added to CI-files to be usable.
As the 16KB page size is applicable only to 64-bit ABI's
this patch adds the variable to 90-install-ffmpeg.sh files
for android-x86_64 and android-arm64.
Change is picked to all branches using Android 15 or newer
as Android 15 introduced the 16KB page size support.
Fixes: QTBUG-139762
Pick-to: 6.9 6.8 6.5
Change-Id: I50bab81b97dad3e9d8c1e834c1928949d1e19687
Reviewed-by: Tero Heikkinen <tero.heikkinen@qt.io>
(cherry picked from commit 875297edfc)
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
This patch introduces support for building FFmpeg for Android ARMv7
on Unix hosts.
Pick-to: 6.9 6.8
Change-Id: I21affa1137cb4b3aa3a5b9cfd5c71e755684db9c
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
(cherry picked from commit 4170b81aea)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
At the time of writing, homebrew ships patchelf version 0.18.0. This
version of patchelf has a bug specific to Androd binaries. The macOS
14 arm64 host currently uses this version of patchelf. This causes an
issue during runtime linking in Qt Multimedia applications on Android.
This patch modifies the macOS 14 arm64 host to use patchelf v0.17.2
that we compile from source. It also adds warnings to the provisioning
log should someone try to use v0.18.0 in the future.
Fixes: QTBUG-136930
Pick-to: 6.9 6.8
Change-Id: Id66b560e6a1d4300a54017e9c3366720dc291944
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
(cherry picked from commit 61046109cf)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Files were prebuild by cloning emsdk repo in their respective VM
produced by Coin provisioning, and running './emsdk install 4.0.7' and
'./emsdk activate 4.0.7' in macOS 15 and OpenSUSE 15.6. And just
'./emsdk install 4.0.7' in Windows 10.
This amends 5510396f4d9f175e7f61a953ea0722ce57d059d4
Task-number: COIN-1232
Change-Id: Ifa768173093c4b6b90599d0fff8b34a1db8b1bbc
Reviewed-by: Lorn Potter <lorn.potter@qt.io>
(cherry picked from commit 82b1992011)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Emscripten 4.0.7 requires Python +3.8, OpenSUSE does have Python 3.11
but its path is only set to PYTHON3_EXECUTABLE envvar defined in
08-pythondev.sh.
OpenSUSE 15.6 comes with Python 3.6.15 which the previous emscripten
3.1.70 used.
Change-Id: Ied63ace32b7fb252d124ad447bc56dba353ff403
Reviewed-by: Lorn Potter <lorn.potter@qt.io>
(cherry picked from commit 7471b6b6d2)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This patch adds an optional parameter to the provisioning script
'install-ffmpeg-ios.sh', allowing us to override the output directory
for which the finalized library is installed.
This is particularly useful for local builds, where we often need
multiple different versions of FFmpeg installed, for different Qt
versions.
This patch has no impact for existing coin workflows.
Pick-to: 6.9 6.8
Change-Id: Ib0764eb29b84ae8badcfb48424f86316f3b2b650
Reviewed-by: Simo Fält <simo.falt@qt.io>
(cherry picked from commit 0e5937c8a4)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
In the provisioning script 'install-ffmpeg-ios.sh', we have a variable
'prefix' controlling where to install the finalized library. The value
of this prefix is sometimes hardcoded into some of the temporary build
directories, making the script break if we actually modify the 'prefix'
variable. This means we currently cannot easily change the output
directory.
This patch modifies 'install-ffmpeg-ios.sh' so that the 'prefix' is
applied consistently throughout the script, allowing us to change
the output directory in the future.
Pick-to: 6.9 6.8
Change-Id: I3458984aa22f8c82ed4d0bfac8ac8e71356e8789
Reviewed-by: Simo Fält <simo.falt@qt.io>
(cherry picked from commit d72ace1a0d)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Previous patch 75fea893b1 introduced
a small bug where multiple nightly builds of FFmpeg were being
outputted into the same directory, effectively causing them to
overwrite each other.
This patch gives the nightly builds their own subfolder for outputted
library files.
Task-number: QTQAINFRA-7069
Change-Id: I5f7e111708aecedd2817888948b77b8163f0452d
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
(cherry picked from commit 303b4c13dc)
Reviewed-by: Jukka Jokiniva <jukka.jokiniva@qt.io>
Multiple Android NDKs are installed in provisoning. FFmpeg build uses
NDK in its build process for Android, so this change makes provisioning
build multiple Android FFmpeg builds, so each Android nightly can use a
FFmpeg build where its corresponding NDK version was used.
Task-number: QTQAINFRA-7069
Change-Id: Ie4457c87b7b75e0c711a76bd8170e718cbda445d
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
(cherry picked from commit 75fea893b1)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This change makes provisioning also install older NDKs for Android,
which will be used in nightly targets.
Task-number: QTQAINFRA-7069
Change-Id: Ia8695383e94df282822da9019c33f1004a879bf6
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
(cherry picked from commit 687b73cde0)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This script requires that we have setup specific environment variables
ahead of time. If they are missing, we are prone to receiving
non-descriptive error messages.
This patch adds checks for the required environment variables, and
gives useful error messages if they are not set correctly.
Pick-to: 6.9 6.8
Change-Id: I0cfb99187f303b22dbdd46a7a848b85dbf571aad
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
(cherry picked from commit 0583292728)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
The <Package>_ROOT should point to the package prefix, where
CMake should look for the respective cmake/, lib/cmake, and other
CMake package directories. Setting directly it to package path is
incorrect.
Pick-to: 6.8 6.9
Change-Id: Id8859c29da08144c60ed3d6301d2c65c8d602d1f
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
On iOS we no longer deploy FFmpeg .dylibs directly. As such, there is
no need to install the .dylibs during provisoning.
This patch removes this installation step during provisioning.
Pick-to: 6.9 6.8
Change-Id: I6f901113caca4b8d602490ba05db0c9dacb8f80d
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* Update the version variable used to identify the correct package for
download and cache sites.
* Update SHA1 for provisioning packages on all platforms.
Fixes: QTBUG-134304
Pick-to: 6.9 6.8
Change-Id: I2577600296e75080d503dc1a537ddbc00d0f207f
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
Currently this script relies on hard-coded values specify minimum
iOS version to link against.
This patch unifies the hard-coded values into a single variable.
No functional changes.
Pick-to: 6.9 6.8
Change-Id: I12bddeb53f0fe3388ea55c841a9864722a1d5f82
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Currently this script overwrites a local variables and reuses it for
a (slightly) different purpose. This makes the code a bit hard to
follow.
This patch introduces a separate local variable to improve readability.
No functional changes.
Pick-to: 6.9 6.8
Change-Id: Ifa1904482f498d9b380d1ed19ab6b0104afda19b
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
Currently this provisioning script builds for arm64 architecture
when on iOS simulator. Qt ships x86_64 binaries for iOS simulator, and
we should build FFmpeg similarly.
This patch introduces support for x86_64-simulator in the iOS FFmpeg
provisioning script and uses it in place of arm64-simulator.
Pick-to: 6.9 6.8
Task-number: QTQAINFRA-7034
Change-Id: Ie93cffba51924cd1d78651d20dec211817cb0cef
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
While writing a documentation for FFmpeg build on iOS it was found that
many options are redundant. Remove them to simplify the provisioning
script and to reduce the amount of cargo cult code.
Pick-to: 6.8 6.9
Fixes: QTBUG-133502
Change-Id: I26aab49365eaca83bcdbfeb86de0638ac701bb80
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
Reviewed-by: Jukka Jokiniva <jukka.jokiniva@qt.io>
* add FFmpeg stubs to the 'Required.private' section.
This will make the logic more robust after integration this
in qt multimedia.
* add some script comments.
* fix shellcheck.
* add validity checks.
Pick-to: 6.8 6.9
Change-Id: I28639d21c7210109e52ff98ce682da51f8744287
Reviewed-by: Jøger Hansegård <jogerh@gmail.com>
Reviewed-by: Pavel Dubsky <pavel.dubsky@qt.io>
The provisioning script install-ffmpeg-android.sh can be useful to run
locally to make sure we build FFmpeg with the same configuration as we
do in CI.
This patch introduce an optional parameter to this provisioning script
that allows us to specify where to install the compiled binaries.
Pick-to: 6.9
Change-Id: I7ea30bffa4753ac1fab707ed2876ddcbbca06175
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
* Update the version variable used to identify the correct package for
download and cache sites.
* Update the file names for all platforms, as these libraries are built
directly from upstream without other patches applied on top.
* Add provisioning package locations for Windows VS2022 x64.
* Set 'vs2022' as default toolchain on Windows.
* Update call sites for `libclang.ps1` to pass `vs2022` as argument to
the script.
* Drop Windows configurations with VS2019.
* Update cached and official URLs with the major version for Windows
platforms.
* Update SHA1 for provisioning packages on all platforms.
* Move from RHEL 8.8 to 8.10.
* Move from RHEL 9.2 to 9.4.
Fixes: QTBUG-129506
Fixes: QTQAINFRA-6605
Task-number: QTBUG-129373
Pick-to: 6.8 6.9
Change-Id: I5146e6551a1b3c83133803f61ca6f8428cb6a14f
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
to the same libraries we build e.g. on macOS. Also, clean up the
script a bit removing a duplicate configure option.
Pick-to: 6.9 6.8
Task-number: QTBUG-133502
Change-Id: If06aad102783bc3025155d3427aa68d87ad4d179
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
find_package looks for PackageName_ROOT and the package is now
named 'protobuf'.
Fixes: QTBUG-132901
Pick-to: 6.9
Change-Id: Ifb956e4ab52c3df059d2624eb989c97473a662a2
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
as xcframeworks, so that we can provide both arm64 and arm64-simulator
versions (the former can be used in App Store, the latter when
working with a simulator).
Pick-to: 6.8 6.9
Task-number: QTBUG-132313
Change-Id: Ic683f58dffcef8a06adb4a915c4e3abc4ab219e5
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
The test broker will later be used by the mqtt tests
There are 4 variants using two ports each
2883, 3883 -> Tcp
9883, 10883 -> Ssl
9080, 10080 -> WebSocket
9081, 10081 -> WebSocketSecure
For each of the 4 variants we test 3 protocols:
3.1, 3.1.1, 5.0
Task-number: QTBUG-129171
Change-Id: If000dd333221e7296499fc756ef97a074cf97273
Reviewed-by: Elias Toivola <elias.toivola@qt.io>
Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io>
Reviewed-by: Jukka Jokiniva <jukka.jokiniva@qt.io>
The FFmpeg building flow has become too different on linux and macos.
Decoupling the logic makes it more simple to follow.
The CR also fixes nits and shellcheck warnings in install-ffmpeg.
Pick-to: 6.8 6.9
Change-Id: I28639d28c7210809e52ff18ce612da52f8754285
Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io>
There're code duplications in install-ffmpeg scripts.
Let's have a file with FFmpeg installation utils and reuse
the functionality on unix platforms.
The utility functions make the code more robust and get
around code duplications.
Pick-to: 6.9 6.8 6.5
Change-Id: I28639d18c7110109e52ff09ce602da52f8857281
Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io>
While dylibs embedded in app bundle work locally on a device,
Apple Connect rejects such an app complaining about missing
Swift Runtime Support. Instead we must create frameworks.
Pick-to: 6.9 6.8
Task-number: QTBUG-130813
Change-Id: Ifd6eed227478bc29702b3b59968fcbfe2839ca82
Reviewed-by: Jukka Jokiniva <jukka.jokiniva@qt.io>
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
If there is an error in emsdk scripts when running ".\emsdk install",
the provisioning would still continue. This change will make the script
exit and stop provisioning when the install command fails.
Also remove the attempt to use Python 2 and make sure the installation
finds Python 3 instead.
Pick-to: 6.8 6.5
Task-number: QTQAINFRA-5453
Change-Id: If052adcd446537b0eeb6261e4a297e9aeb292c6e
Reviewed-by: Tony Sarajärvi <tony.sarajarvi@qt.io>
Add -j4 to limit how many cores is used to build ffmpeg-ios binaries.
Error in logs: "posix_spawn failed: Resource temporarily unavailable"
Task-number: QTQAINFRA-6803
Pick-to: 6.8
Change-Id: I3fb56cdbe4cbda8f779852b0a16121916aa5a1d4
Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io>
Reviewed-by: Jukka Jokiniva <jukka.jokiniva@qt.io>
On RHEL8, openssl1.x.x is default, and openssl3 pc files
are with the suffix "3", so FFmpeg cannot find them.
The patch fixes pc files so that ffmpeg can find them.
Task-number: QTBUG-130257
Change-Id: I5a95daae0a78aadede109535b2823483bfcbc09d
Pick-to: 6.8
Reviewed-by: Tim Blechmann <tim.blechmann@qt.io>
Reviewed-by: Pavel Dubsky <pavel.dubsky@qt.io>
Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io>
popd was placed incorrectly and caused the script to be unable to find
the fix_ffmpeg_dependencies.sh file.
Pick-to: 6.8
Change-Id: I7922a698e90d1b3899ecc7b2240a260ea706707f
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Script would previously unconditionally run ln even if target file
sometimes exists in precompiled OpenSSL library.
Pick-to: 6.8
Change-Id: I90c4ad7c6cbf9207c2c82114936b478a9ba4ae54
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Recent versions of Xcode (15.3 at least) no longer have this issue.
Change-Id: Iafba08094c3a52c9fd005f0d236fcb945ac43ed4
Reviewed-by: Ville-Pekka Karhu <ville-pekka.karhu@qt.io>