Compare commits

..

66 Commits

Author SHA1 Message Date
Qt Submodule Update Bot f5dd2db8c7 Update submodules on '6.12 in qt/qt5'
Change-Id: I1e433f7668a7ccbd1bece8a6a03245073f3582ac
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
2026-07-07 14:06:49 +00:00
Liang Qi b8661307db coin: also generate bat files on Linux host for HarmonyOS build
Task-number: QTBUG-147252
Change-Id: Iff66606f01a0fcd843d121cccf8d1cd1be94876b
Reviewed-by: Patrik Teivonen <patrik.teivonen@qt.io>
(cherry picked from commit cb7d1367be)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-30 17:27:00 +00:00
Simo Fält 827d8aac17 CI: Update CMake deb package for sbuild
Also cleaning up libicu debian packages that are not used anymore.

Task-number: QTBUG-146967
Change-Id: I9351ed0065da72457fadabbc69dffd687373b746
Reviewed-by: Toni Saario <toni.saario@qt.io>
(cherry picked from commit e37b588b62)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-30 17:26:57 +00:00
Simo Fält 37b00fbdb6 COIN: Fix HarmonyOS nightly build's config id
Change-Id: I86e3b8e563553feb233692542f9b37f034e32a61
Reviewed-by: Liang Qi <liang.qi@qt.io>
(cherry picked from commit d059dc0446)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-30 17:26:54 +00:00
Elias Toivola 00a5d6521e Windows 10: set private network
Changed firewall configurations in CI network caused W10 VMs to prompt
to select public/private network profile setting for the changed
network.

Set the network profile with a script to prevent this prompt reappearing
in build/test VMs.

Pick-to: 6.11 6.8
Change-Id: I6c71fd31cd3982742254edf508a0ccfc3d2ceeb6
Reviewed-by: Toni Saario <toni.saario@qt.io>
(cherry picked from commit 862c3df5bf)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-30 07:17:09 +00:00
Qt Submodule Update Bot fecda61b8b Update submodules on '6.12 in qt/qt5'
Change-Id: I50609b24646b2e0cafb51519e109480f4a9c7845
Reviewed-by: Tarja Sundqvist <tarja.sundqvist@qt.io>
2026-06-26 22:03:10 +00:00
Elias Toivola e652887125 Set an ARM64EC config to run tests on arm64 hosts
Set them as InsignificantTests.

Task-number: QTQAINFRA-7579
Change-Id: I58df5bcd55e9b4e11a733c0a0576d6ec2f743ebe
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
(cherry picked from commit b5af653382)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-26 08:12:38 +00:00
Elias Toivola 3b9753af82 ARM64EC: turn off QDoc
Task-number: QTBUG-147036
Change-Id: I5fea2c54d4a6d52710564d739c30f34375ad4b79
Reviewed-by: Topi Reinio <topi.reinio@qt.io>
(cherry picked from commit ed632de606)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-26 08:12:34 +00:00
Elias Toivola 8281d0d88d ARM64EC: disable qtwebview build
qtwebview build is effectively disabled by unsetting WEBVIEW2_SDK_ROOT.

Task-number: QTBUG-146988
Change-Id: I68b0e0e87694a0dab8760a40e3e5aee9d6460ef2
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
(cherry picked from commit 8f3e7cd7eb)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-26 08:12:30 +00:00
Elias Toivola 7fdcec5fd8 ARM64EC: skip qtwebengine and qtpdf builds
Task-number: QTBUG-146860
Change-Id: Ifc71bd6f77945093546e71dc22c22e77d6631bca
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
(cherry picked from commit e84b449ab5)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-26 08:12:28 +00:00
Elias Toivola de6c82a9af Windows: add ARM64EC target
This target builds Qt6 as arm64ec on a x86_64 host. The provisioning is
done through x86_64 so many of the 3rd party dependencies (e.g. ffmpeg)
are x86_64.

Task-number: QTQAINFRA-7579
Change-Id: I66b2a6b70667586cddf1df8b96c3e1149fac4567
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
(cherry picked from commit fc6d6d66cc)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-26 08:12:25 +00:00
Liang Qi 1a994d4985 coin: add platform configs for HarmonyOS into cmake_platforms.yaml
Change-Id: I51c1b3479a884ab97b1deb10102ebb0a9270955b
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Simo Fält <simo.falt@qt.io>
(cherry picked from commit f898c700d3)
2026-06-26 04:10:24 +00:00
Simo Fält def14d0d95 COIN: Update Debian rules branch
Change-Id: Ie9b4511fb2f7ea8b3baafb79c212cc28cc2a7bde
Reviewed-by: Toni Saario <toni.saario@qt.io>
(cherry picked from commit 9b7e7d5852)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-26 04:10:20 +00:00
Elias Toivola 0681ab2022 Windows 11 x86_64: update Visual Studio 2022 to 17.14.33
Tier-1 image changes in -73:
- MSVC 14.44.35211.0
- Windows SDK 10.0.26100.7705
- installed .NET SDK
- Visual Studio now has 'ci_msvs' user added with a license to use
  debugger tools.
[CI Platforms]

Pick-to: 6.11 6.8
Task-number: QTQAINFRA-7726
Task-number: QTQAINFRA-5417
Change-Id: I67d5605c544228daa6bac502ac487d1d5060fd81
Reviewed-by: Simo Fält <simo.falt@qt.io>
(cherry picked from commit 99c69904b8)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-26 04:10:17 +00:00
Jukka Jokiniva 1a3d100ae2 Install qemu-guest-agent on Ubuntu-24.04-aarch64
Pick-to: 6.11 6.8
Task-number: QTQAINFRA-7938
Change-Id: I963cc027207bb75123cbd20e6d3925e7ce6022e8
Reviewed-by: Simo Fält <simo.falt@qt.io>
Reviewed-by: Dimitrios Apostolou <jimis@qt.io>
(cherry picked from commit 75db654544)
2026-06-26 04:10:15 +00:00
Alexandru Croitor b964248bc7 coin: Add syft to provisioning
Syft is a tool that scans package manager manifest or lock files and
generates an SBOM (Software Bill of Materials) file based on the
found packages. It can generated both CycloneDX and SPDX SBOM formats.

The tool will be used by the Qt for Python project to generate SBOMs
based on the python packages used during the build.

The tool is provisioned on all the platforms that have the
GenerateSBOM feature.

Pick-to: 6.11 6.8
Task-number: PYSIDE-3366
Change-Id: I1369f7b1b041b1fc0d8a56a20446df322d26d33a
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
(cherry picked from commit 341fe4e602)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-26 04:10:12 +00:00
Liang Qi 38f513cef7 Update submodules on '6.12 in qt/qt5' manually
qtlocation has fix the build on HarmonyOS.

Change-Id: I7d9d2815de75e0f01ccf7670dbb7b2b507cea66c
Reviewed-by: Simo Fält <simo.falt@qt.io>
2026-06-26 04:10:10 +00:00
Joerg Bornemann 36abfb7c88 coin: Enable building examples for HarmonyOS developer build
Change-Id: I865db714dac9f0b0a9c75b2ddd6c1350f257fc70
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Jukka Jokiniva <jukka.jokiniva@qt.io>
(cherry picked from commit 4df5cb5b02)
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2026-06-23 19:23:19 +00:00
Tero Heikkinen 74c5a0baf9 Remove openSUSE 15.6 from CI
Except 'opensuse-15.6-host-asan' -target which will be handled in:
  - "Port the ASAN config from OpenSUSE 15 to 16" (QTQAINFRA-7660)

[CI Platforms]

Pick-to: 6.11
Task-number: QTQAINFRA-7455
Task-number: QTQAINFRA-7452
Change-Id: Ibd224779c77fa2af9460c240181cbe341ae454a9
Reviewed-by: Simo Fält <simo.falt@qt.io>
(cherry picked from commit 3f495a95ee)
2026-06-23 19:23:14 +00:00
Joerg Bornemann e8168e9ad9 Coin: Force bundled libtiff/libwebp in Linux desktop packaging
The TIFF and WEBP image format plugins opportunistically link the system
libtiff/libwebp whenever find_package() succeeds. When the Linux release
packaging host moved from RHEL 8.10 to RHEL 9.6, libtiff-devel became
present (pulled in transitively via gtk3-devel), so the shipped libqtiff
plugin gained a hard dependency on libtiff.so.5, breaking on hosts that
ship a different libtiff soname (e.g. libtiff.so.6).

Pin tiff and webp to the bundled copies in the Linux desktop packaging
configurations (rhel-9.6 and ubuntu-24.04-arm64) so the released
binaries stay self-contained regardless of what is installed on the
build host.

Fixes: QTBUG-147470
Pick-to: 6.11
Change-Id: If406fd6b9338af51176b50c3af5bb3193fd226fd
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Kai Köhne <kai.koehne@qt.io>
(cherry picked from commit 2882b5615b)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-23 14:41:36 +00:00
Liang Qi c7581743be coin: update id name for HarmonyOS builds
We follow the name scheme like Android ones. And we upgraded to API
23 in 548f241460 .

Change-Id: Ibe1a221ee561c50c432874987f8926da1b46f797
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Simo Fält <simo.falt@qt.io>
(cherry picked from commit adcff73e24)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-23 14:41:32 +00:00
Jukka Jokiniva 895dfd6049 Fix tier1 image version on macos-universal-on-arm64
Amends d43a68e9b4

Change-Id: Ib36ada89fd37a8846f8932782650ab43154f7385
Reviewed-by: Ville-Pekka Karhu <ville-pekka.karhu@qt.io>
(cherry picked from commit 640b9c2ea2)
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2026-06-23 14:41:30 +00:00
Tor Arne Vestbø 9bd7678a84 Build macOS developer build examples as external projects
qtbase for now, as some of the submodules fail to build
examples in this mode.

Task-number: QTBUG-90820
Task-number: QTBUG-96232
Change-Id: Icb2254bafcbeee7e4bba7500b2a8395f386244ef
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
(cherry picked from commit 5d41389310)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-23 14:41:27 +00:00
Liang Qi f11b0789cd coin: remove platform configs for HarmonyOS in qtbase.yaml
It was added into cmake_platforms.yaml now.

Change-Id: I2d20e582c3c1ec2b8f13ed09a0c7d42a0324697a
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Simo Fält <simo.falt@qt.io>
(cherry picked from commit 609c6903c7)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-23 14:41:25 +00:00
Tor Arne Vestbø 5265a079d6 Bump macOS and iOS minimal static tests platform to macOS 26
Change-Id: I0b90d2921563ace6dac338c9970144a0985a37b8
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit b3e3927f22)
Reviewed-by: Jukka Jokiniva <jukka.jokiniva@qt.io>
2026-06-23 14:41:22 +00:00
Elias Toivola 1864674381 Unix: clean up vcpkg packages more later in provisioning
$VCPKG_ROOT/packages/ fills up later in install-vcpkg-ports.sh, clean up
at the end of that script.

This amends 75cdce7b2c

Pick-to: 6.11 6.8
Change-Id: I87cf73c5b46733141d017efa6d4a2e9e6c482424
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
(cherry picked from commit 5e9c31fe74)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-23 14:41:20 +00:00
Simo Fält a32e052158 CI: Add HarmonyOS nightly test config
Change-Id: Ib224c9eaceae19a5c7dd1c1e85f8e0a65556d470
Reviewed-by: Toni Saario <toni.saario@qt.io>
(cherry picked from commit bb7ae5f3dc)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-23 14:41:17 +00:00
Elias Toivola 41b643267d Android: Extract NDK packages into their own versioned dirs
This prevents sneaky NDK overwrites if there is no versioning in the
.zip root directory.

Pick-to: 6.11 6.8
Task-number: QTQAINFRA-7069
Change-Id: Ib0bd30c27da316735001bc5027d1dac1f8ead703
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
(cherry picked from commit 7c5594ea08)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-23 14:41:15 +00:00
Elias Toivola ed39ecee32 Windows arm64 msvc2026: set tests as blocking
This amends 6d676db849

Task-number: QTQAINFRA-7559
Change-Id: Iaf869b781280e050b1e0140dd7de815806dd7ebf
Reviewed-by: Simo Fält <simo.falt@qt.io>
(cherry picked from commit 6ead7af28d)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-22 09:01:06 +00:00
Joerg Bornemann e167d1f4cd coin: Use OHOS_ARCH instead of OHOS_ABI in CI config
In preparation of consolidating the OHOS target-architecture variables
onto OHOS_ARCH and droppeding OHOS_ABI, we're updating the HarmonyOS
target platform configs to pass -DOHOS_ARCH=arm64-v8a.

This doesn't change behavior, because OHOS_ABI defaults to arm64-v8a.

Task-number: QTBUG-147291
Change-Id: I1d0d2071d0512f976eaa031d7c976aa97c3bc9cb
Reviewed-by: Simo Fält <simo.falt@qt.io>
(cherry picked from commit 3275891741)
2026-06-22 09:01:03 +00:00
Tor Arne Vestbø ad6abd6652 Make macOS 26 developer build and x86_64 tests officially significant
Change-Id: I583b2355ac0ea8918ddb9ef1195a91696cbbd24f
Reviewed-by: Aku Pietikäinen <aku.pietikainen@qt.io>
Reviewed-by: Ville-Pekka Karhu <ville-pekka.karhu@qt.io>
(cherry picked from commit b684ef99a6)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2026-06-22 09:01:00 +00:00
Tor Arne Vestbø 31495953bc Explicitly install iOS and visionOS platforms for Xcode 26
The app no longer ships with any platforms (SDKs) built in
except for the macOS platform.

Change-Id: I83200553f52b9edf80212a12bb9abd6a26f27407
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit 50086ff8f3)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-22 09:00:57 +00:00
Nils Petter Skålerud 5898343d28 FFmpeg: Don't build unused FFmpeg components
The FFmpeg components 'avdevice' and 'avfilter' are not used in Qt.
By not building them, we save some time during provisioning in CI.

Pick-to: 6.11
Change-Id: Id9219f6c00bd48d35d1d5c5b87eecb45f8c16c45
Reviewed-by: Mikko Hallamaa <mikko.hallamaa@qt.io>
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
Reviewed-by: Elias Toivola <elias.toivola@qt.io>
(cherry picked from commit 75a537b6d5)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-22 09:00:55 +00:00
Simo Fält 29048a0bd6 COIN: Add QT_HARMONYOS_HVIGOR variable for HarmonyOS to build hap
Change-Id: Ie59fe187381c46ced5b1b8370363b3bafb330230
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
(cherry picked from commit 596f204006)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-22 09:00:52 +00:00
Joerg Bornemann 9cc786b95f coin: Add arm64-ohos-qt vcpkg overlay triplet
The upstream vcpkg *-ohos triplets have been changed to build static
libraries in multi-config mode. Add (and use) an arm64-ohos-qt triplet
that builds shared libs in release mode.

The triplet differs from the upstream one only in the values
VCPKG_LIBRARY_LINKAGE and VCPKG_BUILD_TYPE.

This patch is a preparation for merging vcpkg upstream back to our
fork.

Change-Id: Iac6a4798b0322e9c57cf09ca35a408c66504ba46
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
(cherry picked from commit 41986ce213)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-22 09:00:49 +00:00
Tuomas Vaarala ae3c676594 Coin: QNX QEMU: add localhost to /etc/hosts
The Coin hosts file fully overrides the SDP default, which
had 127.0.0.1 and ::1 entries. Combined with nsswitch
"hosts: files mdnsd dns" and resolv.conf -> 172.31.1.1, any
test resolving http(s)://localhost fell through to NXDOMAIN.

Fixes tst_QHttpServer (229 HostNotFoundError asserts) and
tst_abstractoauth2 (silent crash) on QNX 8.0 QEMU. Applied
to 710/ too so the same latent issue can't surface there.

Pick-to: 6.11 6.8
Change-Id: I2aaa782980cb44afe3499ba8bd35fd7d3c093043
Reviewed-by: Simo Fält <simo.falt@qt.io>
Reviewed-by: Marianne Yrjänä <marianne.yrjana@qt.io>
(cherry picked from commit 00177db989)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-22 09:00:47 +00:00
Tuomas Vaarala c54752381c Coin: QNX QEMU: set HOME and FONTCONFIG_FILE for tests
When HOME was unset, ~/.cache collapsed to /.cache on the read-only
QNX QEMU rootfs, so Fontconfig printed "No writable cache
directories" from QtGui-linking sub-tests and broke the
expected-output validation in tst_selftests.

Set HOME=/data/home/root (distinct from TMPDIR so filesystem
watcher tests keep separate watchable dirs) and point
FONTCONFIG_FILE at the deployed fonts.conf. QNX SDP 8.0 ships
fonts.conf at etc/fonts/fonts.conf, not etc/fontconfig/fonts.conf
as 7.1 did, so correct the data_files.custom source path too.

Squashes the former HOME-only and FONTCONFIG_FILE changes, which
conflicted on the same QNX_TEST_ENV lines and could not integrate
together.

Pick-to: 6.11 6.8
Change-Id: I1943d07eff0a2e99bb96db28e73b4c77e4aa2df8
Reviewed-by: Marianne Yrjänä <marianne.yrjana@qt.io>
Reviewed-by: Simo Fält <simo.falt@qt.io>
(cherry picked from commit 6282a3fd8a)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-22 09:00:44 +00:00
Tero Heikkinen ef44cde7b4 Make openSUSE 16.0 tests as blocking in CI
And Packaging -flag moved from openSUSE 15.6
to a new openSUSE 16.0 [CI Platforms]

Pick-to: 6.11
Task-number: QTQAINFRA-7455
Task-number: QTQAINFRA-7452
Change-Id: I5726f5610fb3bde618e83468d1f9d3ed5083d51b
Reviewed-by: Simo Fält <simo.falt@qt.io>
(cherry picked from commit 393b7adc1f)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-22 09:00:42 +00:00
Tor Arne Vestbø 76c078526b Build macOS universal packaging config on macOS 26 / with Xcode 26
Change-Id: I53424902311028736a71afe097339a270538fa32
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
(cherry picked from commit d43a68e9b4)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-20 19:03:26 +00:00
Tor Arne Vestbø 68a06896e8 Move iOS minimal static tests to shared minimal-static-test file
Change-Id: Ia83e315e1d01f61380d1da530c556a3f4fe7a0a9
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit c22a682b4f)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-20 19:03:17 +00:00
Allan Sandfeld Jensen 91970290eb Install rust on macOS CI
We need to build it as no official pre-built binaries with
multiple targets exists of rust.

Pick-to: 6.11
Change-Id: Ibbe5dd77a92e845ce312f2ddf324a30b4c5ddc72
Reviewed-by: Simo Fält <simo.falt@qt.io>
(cherry picked from commit 01ed52ad4c)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-20 19:03:13 +00:00
Tor Arne Vestbø f59e2a9d49 configure: Only consider qt-prefixed directories as potential submodules
People might have other non-submodule directories in their Qt checkout,
e.g. ~/dev/qt/tasks, ~/qt/dev/research, ~/dev/qt/6.10, etc

We don't want to treat these as potential submodules.

Change-Id: I0765f1832e71fb541be3976810cd6b192fea17a2
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
(cherry picked from commit 4826d56e8d)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-20 19:03:10 +00:00
Joerg Bornemann a35ee9f428 Build WoA arm64 tests natively using the cross-built toolchain
Rename windows-11-x86_64-arm64-tests to
windows-11-x86_64-arm64-native-tests and switch it from the host-side
cross-compile-tests flow to the native-build-tests flow:

* Features BuildTestsInTest + UseToolchainFromTargetDir build tests in
  the test stage on the arm64 worker using the cross-built toolchain
  (qtbase change 238400b22f3b327c05a51a913b279d4bf37f4adf).
* OpenSSL and FFmpeg env vars unblock qtnetwork and qtmultimedia.

Change-Id: Idd0565ceee0714d3f4fbe34ebf8d6373f7315cc1
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
(cherry picked from commit 2b6e156008)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-20 19:03:06 +00:00
Joerg Bornemann fe37644291 coin: Download vcpkg-tool from upstream again
vcpkg-tool release tag 2026-05-27 contains the patch necessary for
HarmonyOS support. We can use the unpatched upstream vcpkg-tool again.
Change the provisioning scripts back to fetch the tool from upstream's
release artifacts page.

Fixes: QTQAINFRA-7902
Change-Id: I84ef4582ef8ff5ca6e8e135128fe515438ac2a22
Reviewed-by: Elias Toivola <elias.toivola@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
(cherry picked from commit 8d4971fd6e)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-20 19:03:02 +00:00
Dimitrios Apostolou a712dca822 Port ASAN build from OpenSUSE 15 to 16
Fixes: QTQAINFRA-7660
Change-Id: I08107822e4b93241741cde7d4d54e6903372a454
Reviewed-by: Jukka Jokiniva <jukka.jokiniva@qt.io>
(cherry picked from commit ce75c3c977)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-19 12:24:10 +00:00
Toni Saario eb33647a48 Add caching for qtopenapi maven dependencies
Contains the .m2 folder from home after openapi build. Extracts it
to VM at same path.

Pick-to: 6.11
Change-Id: I3eb5858160db1c996f3c72fae2b91be1478f000c
Reviewed-by: Simo Fält <simo.falt@qt.io>
Reviewed-by: Elias Toivola <elias.toivola@qt.io>
(cherry picked from commit adc52dde71)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-19 06:40:21 +00:00
Axel Spoerl 21de9acbb0 Add script to run all (provisioning) shell scripts in given directory
To build / test Qt on a fresh VM, all provisioning scripts have to be
run.

Provide a shell script to facilitate this on Windows.

Fixes: QTQAINFRA-7906
Pick-to: 6.11 6.8
Change-Id: Ib06f75d7402f72e0496bab35aeb2ac89d1064537
Reviewed-by: Simo Fält <simo.falt@qt.io>
(cherry picked from commit 4f97b4bea8)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-18 06:35:59 +00:00
Axel Spoerl 707c9b73d1 Add script to run all (provisioning) shell scripts in given directory
To build / test Qt on a fresh VM, all provisioning scripts have to be
run.

Provide a shell script to facilitate this on Linux and macOS.

Fixes: QTQAINFRA-7906
Pick-to: 6.11 6.8
Change-Id: Ie06c11c824897d23c74d90c008a595c2f82f6950
Reviewed-by: Simo Fält <simo.falt@qt.io>
(cherry picked from commit c0e391423d)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-18 06:35:56 +00:00
Axel Spoerl 789719fb7f Provisioning: Make all shell scripts executable
For scripted auto-execution all shell scripts in provisioning need to
be executbale. Most are, but some have been forgotten.

Make the remaining ones executable.

Fixes: QTQAINFRA-7905
Change-Id: I663aeb6c04f2b9d8049d21a75966369b15fe6d29
Reviewed-by: Simo Fält <simo.falt@qt.io>
(cherry picked from commit a377574e66)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-18 06:35:53 +00:00
hjk a92ce0b897 Disable Qt-StrictIterators
The rule in this form is not as helpful as intented.

Paraphrasing comments from the linked issue:

This rule was created based on clazy's “Warn when iterator objects are
implicitly cast to const_iterator" which was likely an attempt to limit
hidden detaches of implicitly-shared Qt containers.

But mixing const_iterator and iterator is not the problem. The problem
is calling a non-const begin()/end()/find()/etc when you only need
const_iterators. So if you ban the implicit conversion from iterator to
const_iterator, you will catch these, theoretically. Practically, no-one
writes QList<Foo>::const_iterator it = l.begin() these days anymore,
everyone is using auto, so the check can never actually trigger for True
Positives.

As-is, it produces False Positives which has a potential to make the
code actually worse.

An alternative to reach a similar goal is to use QT_STRICT_ITERATORS, so
there’s no need for an Axivion check for it.

Task-number: BAUHAUS-29596
Change-Id: I910e9ecc89c3db497c046f6d15ff07ab2ecc470a
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit cc750dc924)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-18 06:35:50 +00:00
Joerg Bornemann f1698cf646 configure: Sanitize -submodules arguments
Allow (and ignore) leading, trailing, and repeated commas in the
-submodules argument.

Fixes: QTBUG-147198
Pick-to: 6.11
Change-Id: I8901a65c6754c58ea3d51cb715932e7b328af445
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
(cherry picked from commit d6ac43b433)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-18 06:35:47 +00:00
Matti Paaso fda3ae0a1b Update Axivion bauhaus-suite to newer version
Update from version 7.11.3 into 7.12.1

Task-number: QTQAINFRA-7916
Pick-to: 6.11 6.8
Change-Id: I9bb342636f9e67fc3db6d4a2f735923d0df8b622
Reviewed-by: Simo Fält <simo.falt@qt.io>
(cherry picked from commit 526a09e46a)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-18 06:35:44 +00:00
Matti Paaso efed03b092 Change Axivion analysis platform configuration
Change Axivion analysis to TestOnly target with platform
dependency.

Task-number: QTQAINFRA-7846
Pick-to: 6.11 6.8
Change-Id: I6efb23299b9bfcad549d352c804ad4f6a8772e84
Reviewed-by: Toni Saario <toni.saario@qt.io>
(cherry picked from commit 6cecda38fa)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-18 06:35:41 +00:00
Elias Toivola db31a3fea6 Ubuntu: install xclip
This simplifies RTA tasks

Pick-to: 6.11 6.8
Fixes: QTQAINFRA-7368
Change-Id: I3fa030f8c2655c62427348d328a44f7751d2e578
Reviewed-by: Tero Heikkinen <tero.heikkinen@qt.io>
(cherry picked from commit a10af2c0e8)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-18 06:35:38 +00:00
Dimitrios Apostolou 9ce7dff139 Update sccache to v0.15.0
Also set SCCACHE_DIRECT in an effort to counter the error:

    cc1plus: error: .../CMakeFiles/....dir/cmake_pch.hxx.gch: \
        created by a different GCC executable [-Werror=invalid-pch]

Pick-to: 6.11 6.8
Change-Id: Ic7a3743642ff69495309794f6d17fc9b98d7f338
Reviewed-by: Toni Saario <toni.saario@qt.io>
(cherry picked from commit 23c201ac4e)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-18 06:35:35 +00:00
Matti Paaso c6a7d048fb Remove libusb installation from macos
Change-Id: I5f69afe376087958ef5a6a2985bd87170e3f8a8d
Reviewed-by: Ville-Pekka Karhu <ville-pekka.karhu@qt.io>
(cherry picked from commit 36efc0bfb0)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-17 12:59:22 +00:00
Simo Fält 2d7ecf2916 Provisioning: Remove cups-pdf package from Ubuntu
Updated libcups2-dev package (2.4.1op1-1ubuntu4.20) causes password prompt with lpadmin when installing cups-pdf and this blocks provisioning.

Task-number: QTQAINFRA-7930
Pick-to: 6.11 6.8 6.5
Change-Id: I308f7d037586ee4ac8320274f551315a7329925c
Reviewed-by: Jani Heikkinen <jani.heikkinen@qt.io>
(cherry picked from commit b002b0fde9)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-17 12:59:19 +00:00
Qt Submodule Update Bot 1dec32bb26 Update submodules on '6.12 in qt/qt5'
Change-Id: I0cb60e9c921e5dcc263598c4153f189713506844
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
2026-06-17 04:28:36 +00:00
Patrik Teivonen a35949147c Provisioning: Point pinned EPEL repo at archive mirror for RHEL 10.0
EPEL 10.0 has been moved under `archive.fedoraproject.org` now that
10.1 is the current release, so the pinned baseurl on `dl.` 404s and
breaks provisioning. Switch to the archive URL to preserve the
exact-release pin.

Pick-to: 6.11
Change-Id: I0bff932e4aaa11515ca28aa18af5cea73a9e2b05
Reviewed-by: Elias Toivola <elias.toivola@qt.io>
Reviewed-by: Simo Fält <simo.falt@qt.io>
Reviewed-by: Tony Sarajärvi <tony.sarajarvi@qt.io>
(cherry picked from commit f0ab3c330f)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2026-06-12 08:58:24 +00:00
Qt Submodule Update Bot ae842b07f6 Update submodules on '6.12 in qt/qt5'
Change-Id: Ie0c073bb47643675297b9021e76afcf5d99a99bb
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
2026-06-08 23:45:29 +00:00
Mårten Nordheim c3477b4141 Disable liburing for Linux packaging
liburing has version tags preventing accidental use of incompatible
versions.

Since we are building all of our linux binaries on RHEL 9/Ubuntu, for
x64 and arm64 respectively, we are hitting this issue now on other
distros that do not have the same liburing package.

To counter that we disable it for the Packaging build and leave it on
for testing. It's an optional feature and a private one at that so not
much is lost at the moment.

Pick-to: dev
Fixes: QTQAINFRA-7927
Change-Id: Ib371e24d9a6e1dc45146493f637209fb5cd2589a
Reviewed-by: Jani Heikkinen <jani.heikkinen@qt.io>
2026-06-08 23:45:28 +00:00
Qt Submodule Update Bot 1c57c021bb Update submodules on '6.12 in qt/qt5'
Change-Id: I1e12e8dbda20481066be0ae9d351c61de6d4202f
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
2026-06-04 11:11:40 +00:00
Jani Heikkinen 3816bf9e50 Qt 6.12: Change Qt canvas painter status from preview to addon
Qt Canvas Painter will be fully supported from Qt 6.12.0 ->

Task-number: QTBUG-146561
Pick-to: dev
Change-Id: Iaa95e3439f0a93123d0f68e232b3ecbfabeffff4
Reviewed-by: Kaj Grönholm <kaj.gronholm@qt.io>
2026-06-04 04:37:59 +00:00
Qt Submodule Update Bot 527787967e Update submodules on '6.12 in qt/qt5'
Change-Id: I04dd343bdf5c4ad312b8aee91972b0c9a3c4a5f1
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
2026-06-03 18:08:29 +00:00
Qt Submodule Update Bot 1904b28cb6 Update submodules on '6.12 in qt/qt5'
Change-Id: Iaeb991069ccaafd351c47527043006f925449785
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
2026-06-03 02:42:29 +00:00
Jani Heikkinen aab11114b3 Adjust submodule branches
Change-Id: Ie05822e03ed02f6cd44b37f93287fe32a8975a24
2026-06-02 10:07:06 +03:00
902 changed files with 2526 additions and 4343 deletions
+1
View File
@@ -3,5 +3,6 @@
.gitattributes export-ignore
.commit-template export-ignore eol=lf
init-repository export-ignore
README.git export-ignore
*.bat text eol=crlf
*.bat.in text eol=crlf
+56 -47
View File
@@ -1,54 +1,54 @@
[submodule "qtbase"]
path = qtbase
url = ../qtbase.git
branch = dev
branch = 6.12
status = essential
[submodule "qtsvg"]
depends = qtbase
path = qtsvg
url = ../qtsvg.git
branch = dev
branch = 6.12
status = addon
[submodule "qtdeclarative"]
depends = qtbase
recommends = qtimageformats qtshadertools qtsvg qtlanguageserver
path = qtdeclarative
url = ../qtdeclarative.git
branch = dev
branch = 6.12
status = essential
[submodule "qtactiveqt"]
depends = qtbase
path = qtactiveqt
url = ../qtactiveqt.git
branch = dev
branch = 6.12
status = addon
[submodule "qtmultimedia"]
depends = qtbase qtshadertools
recommends = qtdeclarative qtquick3d
path = qtmultimedia
url = ../qtmultimedia.git
branch = dev
branch = 6.12
status = addon
[submodule "qttools"]
depends = qtbase
recommends = qtdeclarative qtactiveqt
path = qttools
url = ../qttools.git
branch = dev
branch = 6.12
status = essential
[submodule "qttranslations"]
depends = qttools
path = qttranslations
url = ../qttranslations.git
branch = dev
branch = 6.12
status = essential
priority = 30
[submodule "qtdoc"]
depends = qtdeclarative qttools
recommends = qtmultimedia qtshadertools qttasktree
recommends = qtmultimedia qtshadertools qttasktree qtwebengine
path = qtdoc
url = ../qtdoc.git
branch = dev
branch = 6.12
status = essential
priority = 40
[submodule "qtrepotools"]
@@ -61,7 +61,7 @@
depends = qtbase
path = qtqa
url = ../qtqa.git
branch = dev
branch = 6.12
status = essential
priority = 50
[submodule "qtlocation"]
@@ -69,234 +69,243 @@
recommends = qtdeclarative
path = qtlocation
url = ../qtlocation.git
branch = dev
branch = 6.12
status = preview
[submodule "qtpositioning"]
depends = qtbase
recommends = qtdeclarative qtserialport
path = qtpositioning
url = ../qtpositioning.git
branch = dev
branch = 6.12
status = addon
[submodule "qtsensors"]
depends = qtbase
recommends = qtdeclarative
path = qtsensors
url = ../qtsensors.git
branch = dev
branch = 6.12
status = addon
[submodule "qtconnectivity"]
depends = qtbase
recommends = qtdeclarative
path = qtconnectivity
url = ../qtconnectivity.git
branch = dev
branch = 6.12
status = addon
[submodule "qtwayland"]
depends = qtbase
recommends = qtdeclarative
path = qtwayland
url = ../qtwayland.git
branch = dev
branch = 6.12
status = addon
[submodule "qt3d"]
depends = qtbase
recommends = qtdeclarative qtshadertools qtmultimedia
path = qt3d
url = ../qt3d.git
branch = dev
branch = 6.12
status = deprecated
[submodule "qtimageformats"]
depends = qtbase
path = qtimageformats
url = ../qtimageformats.git
branch = dev
branch = 6.12
status = addon
[submodule "qtserialbus"]
depends = qtbase
recommends = qtserialport
path = qtserialbus
url = ../qtserialbus.git
branch = dev
branch = 6.12
status = addon
[submodule "qtserialport"]
depends = qtbase
path = qtserialport
url = ../qtserialport.git
branch = dev
branch = 6.12
status = addon
[submodule "qtwebsockets"]
depends = qtbase
recommends = qtdeclarative
path = qtwebsockets
url = ../qtwebsockets.git
branch = dev
branch = 6.12
status = addon
[submodule "qtwebchannel"]
depends = qtbase
recommends = qtdeclarative qtwebsockets
path = qtwebchannel
url = ../qtwebchannel.git
branch = dev
branch = 6.12
status = addon
[submodule "qtwebengine"]
depends = qtdeclarative
recommends = qtwebchannel qttools qtpositioning
path = qtwebengine
url = ../qtwebengine.git
branch = 6.12
status = addon
priority = 10
[submodule "qtwebview"]
depends = qtdeclarative
recommends = qtwebengine
path = qtwebview
url = ../qtwebview.git
branch = dev
branch = 6.12
status = addon
[submodule "qtcharts"]
depends = qtbase
recommends = qtdeclarative qtmultimedia
path = qtcharts
url = ../qtcharts.git
branch = dev
branch = 6.12
status = deprecated
[submodule "qtdatavis3d"]
depends = qtbase
recommends = qtdeclarative qtmultimedia
path = qtdatavis3d
url = ../qtdatavis3d.git
branch = dev
branch = 6.12
status = deprecated
[submodule "qtvirtualkeyboard"]
depends = qtbase qtdeclarative qtsvg
recommends = qtmultimedia
path = qtvirtualkeyboard
url = ../qtvirtualkeyboard.git
branch = dev
branch = 6.12
status = addon
[submodule "qtscxml"]
depends = qtbase qtdeclarative
path = qtscxml
url = ../qtscxml.git
branch = dev
branch = 6.12
status = addon
[submodule "qtspeech"]
depends = qtbase qtmultimedia
recommends = qtdeclarative
path = qtspeech
url = ../qtspeech.git
branch = dev
branch = 6.12
status = addon
[submodule "qtnetworkauth"]
depends = qtbase
path = qtnetworkauth
url = ../qtnetworkauth.git
branch = dev
branch = 6.12
status = addon
[submodule "qtremoteobjects"]
depends = qtbase
recommends = qtdeclarative
path = qtremoteobjects
url = ../qtremoteobjects.git
branch = dev
branch = 6.12
status = addon
[submodule "qtlottie"]
depends = qtbase qtdeclarative qtquicktimeline
path = qtlottie
url = ../qtlottie.git
branch = dev
branch = 6.12
status = addon
[submodule "qtquicktimeline"]
depends = qtbase qtdeclarative
path = qtquicktimeline
url = ../qtquicktimeline
branch = dev
branch = 6.12
status = addon
[submodule "qtquick3d"]
depends = qtbase qtdeclarative qtshadertools
recommends = qtquicktimeline
path = qtquick3d
url = ../qtquick3d.git
branch = dev
branch = 6.12
status = addon
[submodule "qtshadertools"]
depends = qtbase
path = qtshadertools
url = ../qtshadertools.git
branch = dev
branch = 6.12
status = addon
[submodule "qt5compat"]
depends = qtbase qtdeclarative
path = qt5compat
url = ../qt5compat.git
branch = dev
branch = 6.12
status = deprecated
[submodule "qtcoap"]
depends = qtbase
path = qtcoap
url = ../qtcoap.git
branch = dev
branch = 6.12
status = addon
[submodule "qtmqtt"]
depends = qtbase qtdeclarative
recommends = qtwebsockets
path = qtmqtt
url = ../qtmqtt.git
branch = dev
branch = 6.12
status = addon
[submodule "qtopcua"]
depends = qtbase qtdeclarative
path = qtopcua
url = ../qtopcua.git
branch = dev
branch = 6.12
status = addon
[submodule "qtlanguageserver"]
depends = qtbase
path = qtlanguageserver
url = ../qtlanguageserver.git
branch = dev
branch = 6.12
status = preview
[submodule "qthttpserver"]
depends = qtbase
recommends = qtwebsockets
path = qthttpserver
url = ../qthttpserver.git
branch = dev
branch = 6.12
status = addon
[submodule "qtquick3dphysics"]
depends = qtbase qtdeclarative qtquick3d qtshadertools
path = qtquick3dphysics
url = ../qtquick3dphysics.git
branch = dev
branch = 6.12
status = addon
[submodule "qtgrpc"]
depends = qtbase
recommends = qtdeclarative
path = qtgrpc
url = ../qtgrpc.git
branch = dev
branch = 6.12
status = addon
[submodule "qtquickeffectmaker"]
depends = qtbase qtdeclarative qtshadertools
recommends = qtquick3d
path = qtquickeffectmaker
url = ../qtquickeffectmaker.git
branch = dev
branch = 6.12
status = addon
[submodule "qtgraphs"]
depends = qtbase qtdeclarative qtquick3d
path = qtgraphs
url = ../qtgraphs.git
branch = dev
branch = 6.12
status = addon
[submodule "qttasktree"]
depends = qtbase
path = qttasktree
url = ../qttasktree.git
branch = dev
branch = 6.12
status = preview
[submodule "qtopenapi"]
depends = qtbase
recommends = qtdeclarative
path = qtopenapi
url = ../qtopenapi.git
branch = dev
branch = 6.12
status = preview
[submodule "qtcanvaspainter"]
depends = qtbase qtdeclarative qtshadertools
path = qtcanvaspainter
url = ../qtcanvaspainter.git
branch = dev
status = preview
branch = 6.12
status = addon
-30
View File
@@ -1,30 +0,0 @@
# Changelog
This repository does not keep a changelog of its own. Qt is released as a set
of modules, and the change information for a release is published with that
release rather than tracked here.
## Where to look
**Cumulative release notes** are published in
[qt/qtreleasenotes](https://code.qt.io/cgit/qt/qtreleasenotes.git/tree/qt).
**What changed in a Qt version.** Each minor release has a "What's New" page in
the Qt documentation. It lists new modules, new and deprecated APIs, and the
notable changes per module.
See [What's New in Qt 6](https://doc.qt.io/qt-6/whatsnewqt6.html).
**Release phases and schedule.** Each release has a wiki page with the
release plan. See [Qt Releasing Wiki](https://wiki.qt.io/QtReleasing).
**Moving between major versions.** The
[Porting to Qt 6](https://doc.qt.io/qt-6/portingguide.html) guide covers the
changes that affect existing code.
## Qt 4 and Qt 5 changelogs
Most module repositories feature a `dist` directory holding `changes-*` files.
These are no longer maintained. They stop at `changes-6.0.0` and are kept only
as a historical record of Qt 4 and Qt 5 releases. Do not add to them, and do
not treat them as a current source of change information for Qt 6. Use the
sources above instead.
-23
View File
@@ -1,23 +0,0 @@
# Code of conduct
The Qt Community Code of Conduct applies to everyone who takes part in the Qt
Project. It covers any forum, mailing list, wiki, website, IRC channel, public
meeting, or private correspondence in the context of the project and its
services.
[QUIP 12](https://contribute.qt-project.org/quips/12) is the Code of Conduct
itself and is the authoritative text. It asks participants to be considerate,
respectful, collaborative, pragmatic, and supportive of one another, and it
explains what each of those means in practice.
## If something goes wrong
QUIP 12 describes how the community handles problems. In short: offer personal
support to anyone who is being attacked, and remind those involved of the Code
of Conduct. Moderators of a mailing list, channel, or forum can suspend access
for anyone who persistently breaks it, so raise the matter with them when it
needs to go further. Where a disagreement is technical, ask the community for
advice or request mediation rather than escalating it into a public dispute.
Read [QUIP 12](https://contribute.qt-project.org/quips/12) in full for the
complete guidance.
-29
View File
@@ -1,29 +0,0 @@
# Governance
The Qt Project is a meritocratic, consensus-based community. Anyone with an
interest in Qt can join it, take part in its decision-making, and contribute to
Qt's development.
[QUIP 2](https://contribute.qt-project.org/quips/2) is the Qt Governance Model
and is the authoritative text. It describes five levels of involvement and how
people move between them:
* **Users** — community members who use Qt. They report bugs, help other
users, and advocate for the project.
* **Contributors** — community members who provide input to the project, by
proposing changes in Gerrit, reviewing, writing documentation, or testing.
There is no selection process.
* **Approvers** — contributors who have shown a sustained commitment to the
project and who can approve changes for inclusion.
* **Maintainers** — approvers responsible for a specific area of Qt, who
decide what happens in the code they maintain.
* **Chief Maintainer** — leads the maintainer group, sets the overall
direction of the project, and has the final say when the project fails to
reach consensus.
The current maintainers are listed at
[wiki.qt.io/Maintainers](https://wiki.qt.io/Maintainers).
For the processes that sit alongside this model — the branch policy, the
security policy, the code of conduct, and the rest — see
[contribute.qt-project.org](https://contribute.qt-project.org/).
-69
View File
@@ -1,69 +0,0 @@
Qt licensing
============
Qt is not distributed under a single license, and this file is not a license
text. Qt is available under commercial terms and under several open source
licenses, and which terms apply depends on the module and the file.
The open source licenses in use across the Qt repositories include LGPL-3.0,
GPL-2.0, and GPL-3.0 for module implementations, GFDL-1.3 for documentation,
and BSD-3-Clause for build system files, examples, and tooling. Third-party
code bundled inside a module carries its own terms.
How licensing is declared
-------------------------
Licensing is declared per file, following the
[REUSE version 3.3 specification](https://reuse.software/spec-3.3/). Every file
carries an SPDX-License-Identifier header, or is covered by an adjacent
REUSE.toml file where an inline header is not possible. The full text of every
license referenced this way is in the LICENSES directory of the repository it
applies to.
Those SPDX headers and the LICENSES directory are the authoritative,
machine-readable record for the Qt sources. They are what the REUSE tool and
Qt's software bill of materials pipeline read when generating the SBOM for the
sources; they do not describe the licensing of Qt binaries.
Finding the terms for a module
------------------------------
Each Qt module carries its own licensing, and the terms are stated in the
"Licenses and Attributions" section of that module's documentation overview
page. For example, see:
https://doc.qt.io/qt-6/qtcore-index.html
That section also lists the third-party code the module includes and the
license of each such component.
License of built modules and tools
----------------------------------
When building Qt, you can build SBOM documents alongside (`-sbom` argument for
`configure`). You can use the generated SBOM artifacts to query copyrights and
licenses for built modules, and tools. For more details, see
[Software Bill of Materials](https://doc.qt.io/qt-6/sbom.html}.
Further information
-------------------
Qt licensing overview
https://doc.qt.io/qt-6/licensing.html
Licenses used in Qt
https://doc.qt.io/qt-6/licenses-used-in-qt.html
All Qt modules
https://doc.qt.io/qt-6/qtmodules.html
Commercial licensing
https://www.qt.io/licensing/
Open source licensing and its obligations
https://www.qt.io/download-open-source
Qt educational license
https://www.qt.io/qt-educational-license
+57
View File
@@ -0,0 +1,57 @@
OBTAINING QT 6 FROM GIT
=======================
Synopsis
========
For a more in-depth description on how to build Qt 6 from git,
please see: http://wiki.qt.io/Building_Qt_6_from_Git
Note that, although the git module is called qt5.git, the dev and 6.x branches
do contain Qt 6!
Get The Submodules
==================
Cloning qt5.git does not automatically clone all submodules.
To get the submodules, it is recommended to use the `init-repository' script.
./init-repository
See `./init-repository -help' for full documentation on the many supported
options.
Update The Submodules (optional)
================================
After a plain `git clone' and `init-repository', you will have each submodule
checked out to a particular SHA1. This combination of SHA1s is guaranteed to
have passed some basic acceptance testing.
If (and only if!) you need newer versions of some submodules, you can manually
fetch and/or pull and/or reset any modules you like, or use the qt5_tool to
pull all modules:
./qtrepotools/bin/qt5_tool -p
NOTE! As soon as you change the SHA1 of any submodule, you are using a
combination of modules which is potentially untested and broken! If you want
something which is more likely to compile, stick to the module SHA1s provided
in this repository.
Install The Git Grafts (optional)
=================================
If you want to be able to connect the Qt5 and Qt4 development history, you
may set up git grafts with the following command:
git submodule foreach '../qtrepotools/bin/git-qt-grafts <path_to_history>'
Developing and Contributing to Qt
=================================
For more information on how to develop and contribute to Qt, please see:
http://wiki.qt.io/Category:Developing_Qt
+104 -57
View File
@@ -1,80 +1,127 @@
# Qt 6
HOW TO BUILD Qt 6
=================
This repository, `qt5.git`, is the Qt super-repository. It records a git
submodule pointer to each Qt module repository, such as `qtbase` and
`qtdeclarative`, along with the build system, the `configure` scripts, and the
continuous integration configuration that build those modules as a single tree.
Each submodule points at a specific revision. The combination of revisions that
a branch records is a snapshot that has passed Qt's continuous integration.
Clone this repository first and let it select the module revisions for you. If
you move a submodule to a different revision, you are building a combination
that nobody has tested.
Synopsis
========
> Despite the name `qt5.git`, the `dev` and `6.x` branches contain Qt 6.
System requirements
-------------------
To use Qt rather than build it from sources, see
[Get and Install Qt](https://doc.qt.io/qt-6/get-and-install-qt.html).
* C++ compiler supporting the C++17 standard
* CMake
* Ninja
* Python 3
## Repository layout
For more details, see also https://doc.qt.io/qt-6/build-sources.html
Each Qt module lives in its own directory, such as `qtbase` or
`qtdeclarative`. Those directories are git submodules.
Linux, Mac:
-----------
The other top-level entries are:
```
cd <path>/<source_package>
./configure -prefix $PWD/qtbase
cmake --build .
```
| Entry | Purpose |
| ----- | ------- |
|`.gitmodules`| Lists modules for the current branch.|
| `CMakeLists.txt` | Entry point for the top-level build of all modules. |
| `configure`, `configure.bat` | Wrappers that configure that build. |
| `init-repository` | Checks out the submodules. Git clones only. |
| `cmake/` | CMake modules shared by the top-level build. |
| `coin/` | Continuous integration configuration and provisioning. |
| `LICENSES/`, `REUSE.toml` | License texts and per-file licensing metadata. |
Windows:
--------
## Get the sources
1. Open a command prompt.
2. Ensure that the following tools can be found in the path:
* Supported compiler (Visual Studio 2022 or later, or MinGW-builds gcc 13.1 or later)
* Python 3 ([https://www.python.org/downloads/windows/] or from Microsoft Store)
For instructions, see [Getting Qt Sources from the Git repository](https://doc.qt.io/qt-6/getting-sources-from-git.html).
```
cd <path>\<source_package>
configure -prefix %CD%\qtbase
cmake --build .
```
## Build Qt
More details follow.
For instructions, see [Build from sources](https://doc.qt.io/qt-6/build-sources.html).
## Documentation
Build!
======
The [Qt 6 documentation](https://doc.qt.io/qt-6/index.html) covers the
framework itself.
Qt is built with CMake, and a typical
`configure && cmake --build .` build process is used.
## Report an issue
If Ninja is installed, it is automatically chosen as CMake generator.
Report bugs at [bugreports.qt.io](https://bugreports.qt.io/), following
[these steps](https://doc.qt.io/qt-6/bughowto.html).
Some relevant configure options (see configure -help):
## Security
* `-release` Compile and link Qt with debugging turned off.
* `-debug` Compile and link Qt with debugging turned on.
To report a security vulnerability in Qt, and to read what the Qt Project
commits to in response, see [SECURITY.md](SECURITY.md).
Example for a release build:
## Contribute to Qt
```
./configure -prefix $PWD/qtbase
cmake --build .
```
The Qt Project does not accept pull requests on GitHub. Every contribution goes
through [Gerrit](https://codereview.qt-project.org), so read
[how to contribute](CONTRIBUTING.md) before you push a change. All
participation in the project is subject to our
[code of conduct](CODE_OF_CONDUCT.md). To learn who decides what, and how
someone becomes an approver or a maintainer, see
[how the project is governed](GOVERNANCE.md).
Development discussions happens in the open on the
[Qt Project mailing lists](https://lists.qt-project.org/).
Example for a developer build:
(enables more autotests, builds debug version of libraries, ...)
## License
```
./configure -developer-build
cmake --build .
```
Qt is available under both commercial and open source licenses, and the terms
depend on the module you use. [LICENSE](LICENSE) explains how licensing is
declared across the Qt repositories and where to find the terms that apply to
a given module.
See output of `./configure -help` for documentation on various options to
configure.
For the full picture, see the
[Qt licensing overview](https://doc.qt.io/qt-6/licensing.html) and
[qt.io/licensing](https://www.qt.io/licensing/).
The above examples will build whatever Qt modules have been enabled
by default in the build system.
It is possible to build selected repositories with their dependencies by doing
a `ninja <repo-name>/all`. For example, to build only qtdeclarative,
and the modules it depends on:
```
./configure
ninja qtdeclarative/all
```
This can save a lot of time if you are only interested in a subset of Qt.
Hints
=====
The submodule repository `qtrepotools` contains useful scripts for
developers and release engineers. Consider adding qtrepotools/bin
to your `PATH` environment variable to access them.
Building Qt from git
====================
See http://wiki.qt.io/Building_Qt_6_from_Git and [README.git](README.git)
for more information.
See http://wiki.qt.io/Qt_6 for the reference platforms.
Documentation
=============
After configuring and compiling Qt, building the documentation is possible by running
```
cmake --build . --target docs
```
After having built the documentation, you need to install it with the following
command:
```
cmake --build . --target install_docs
```
The documentation is installed in the path specified with the
configure argument `-docdir`.
Information about Qt's documentation is located in qtbase/doc/README
Note: Building the documentation is only tested on desktop platforms.
+3 -3
View File
@@ -34,6 +34,6 @@ We welcome contributions to Qt! If you'd like to contribute, read the
Qt is available under various licenses. For details, check out the
[license documentation](https://doc.qt.io/qt-6/licensing.html).
*Note that this README.md.template serves as a guideline for the README.md
files of Qt module repositories, and that further sections can be added to
individual README.md files if necessary.*
*Note that this README.md.template serves as a guideline for README.md files,
and that further sections can be added to individual README.md files if
necessary.*
+1 -3
View File
@@ -26,9 +26,7 @@ SPDX-FileCopyrightText = "Copyright (C) 2024 The Qt Company Ltd."
SPDX-License-Identifier = "BSD-3-Clause"
[[annotations]]
path = ["**README*", "CONTRIBUTING.md", "CODE_OF_CONDUCT.md", "GOVERNANCE.md",
"SECURITY.md", "CHANGELOG.md", "LICENSE",
".commit-template", ".github/pull_request_template.md"]
path = ["**README*", "CONTRIBUTING.md", ".commit-template", ".github/pull_request_template.md"]
comment = "documentation"
precedence = "closest"
SPDX-FileCopyrightText = "Copyright (C) 2024 The Qt Company Ltd."
-42
View File
@@ -1,42 +0,0 @@
# Security policy
## Reporting a vulnerability
Report suspected security vulnerabilities in Qt by email to
<security@qt-project.org>. Do not report them in the public bug tracker at
bugreports.qt.io.
If you hold a commercial license, you can instead report the issue to the Qt
Company support team through the support portal, using the "Security Issues"
category.
## The policy
[QUIP 15](https://contribute.qt-project.org/quips/15) is the Qt Project
Security Policy. It is the authoritative source for how the project handles
security issues, and it covers:
* How reports are received, acknowledged, and triaged, and in what time frame.
* Who is responsible for addressing an issue, and how it is escalated.
* How issues are disclosed, including CVE handling and notification of
packagers.
* Which versions of Qt fixes are guaranteed for.
Security announcements are published to the
[announce mailing list](https://lists.qt-project.org/listinfo/announce).
Qt customers with a commercial license now have the opportunity to subscribe to
the Qt Early Warning List in the [Customer Portal](https://account.qt.io/). The
EWL subscription requires an active
[Commercial Qt license](https://www.qt.io/development/qt-framework/commercial-qt).
## Related material
* [Security in Qt](https://doc.qt.io/qt-6/security.html) — what Qt does and
does not protect against, and how to use Qt securely.
* [QUIP 23](https://contribute.qt-project.org/quips/23) — the `Qt-Security`
header that marks how security-relevant a source file is.
* [QUIP 16](https://contribute.qt-project.org/quips/16) — the branch policy,
which governs which branches accept which changes.
* [Responsible Vulnerability Disclosure Agreement](https://www.qt.io/terms-conditions/responsible-vulnerability-disclosure-process) -
Terms and Conditions of Responsible Vulnerability Disclosure Process at Qt Group.
-2
View File
@@ -21,9 +21,7 @@ ColumnLimit: 100
# Disable reflow of some specific comments
# qdoc comments: indentation rules are different.
# Translation comments and SPDX license identifiers are also excluded.
# REUSE-IgnoreStart
CommentPragmas: "^!|^:|^ SPDX-License-Identifier:"
# REUSE-IgnoreEnd
# We want a space between the type and the star for pointer types.
PointerBindsToType: false
+1 -8
View File
@@ -181,7 +181,6 @@ function(qt_ir_clone_one_submodule submodule_name)
set(oneValueArgs
ALTERNATES
BASE_URL
DEPTH
WORKING_DIRECTORY
)
set(multiValueArgs "")
@@ -264,9 +263,6 @@ function(qt_ir_clone_one_submodule submodule_name)
else()
list(APPEND clone_args --no-checkout)
endif()
if(arg_DEPTH)
list(APPEND clone_args --depth "${arg_DEPTH}")
endif()
list(APPEND clone_args ${progress_args})
qt_ir_execute_process_and_log_and_handle_error(
COMMAND_ARGS git clone ${clone_args} "${mirror_or_original_url}" "${submodule_path}"
@@ -328,7 +324,7 @@ function(qt_ir_get_already_initialized_submodules prefix
)
qt_ir_parse_git_config_file_contents("${prefix}"
READ_GIT_CONFIG_LOCAL
READ_GIT_CONFIG
PARENT_REPO_BASE_GIT_PATH "${parent_repo_base_git_path}"
WORKING_DIRECTORY "${working_directory}"
)
@@ -1067,7 +1063,6 @@ function(qt_ir_handle_init_submodules prefix)
set(oneValueArgs
ALTERNATES
BASE_URL
DEPTH
PARENT_REPO_BASE_GIT_PATH
WORKING_DIRECTORY
)
@@ -1128,7 +1123,6 @@ function(qt_ir_handle_init_submodules prefix)
qt_ir_clone_one_submodule(${submodule_name}
ALTERNATES ${arg_ALTERNATES}
BASE_URL ${arg_BASE_URL}
DEPTH "${arg_DEPTH}"
WORKING_DIRECTORY "${working_directory}"
${branch_flag}
${fetch_flag}
@@ -1169,7 +1163,6 @@ function(qt_ir_handle_init_submodules prefix)
SUBMODULES "all"
BASE_URL "${base_url}"
DEPTH "${arg_DEPTH}"
PARENT_REPO_BASE_GIT_PATH "${submodule_base_git_path}"
WORKING_DIRECTORY "${working_directory}/${submodule_name}"
-10
View File
@@ -122,16 +122,6 @@ Options:
Note that this negates the disk usage benefits gained from the use
of `--alternates'.
--depth <n>
Creates a shallow clone with a history truncated to <n> commits for
each submodule that is cloned, by passing `--depth <n>' to `git
clone'. This also applies recursively to submodules of submodules
(e.g. qtwebengine's third-party dependencies).
This option only affects submodules that are freshly cloned; it has
no effect on already-cloned submodules that are merely updated or
fetched.
--mirror <url-base>
Uses <url-base> as the base URL for submodule git mirrors.
+34 -12
View File
@@ -128,6 +128,7 @@ function(qt_ir_get_args_from_optfile_configure_filtered optfile_path out_var)
set(filtered_args ${unknown_args})
set(extra_configure_args "")
set(extra_cmake_args "")
# Collect modules to skip. These may come from:
# 1. The -skip option (consumed by init-repository's option parser)
@@ -148,10 +149,14 @@ function(qt_ir_get_args_from_optfile_configure_filtered optfile_path out_var)
# have a CMakeLists.txt, so remove it.
list(REMOVE_ITEM include_submodules "qtrepotools")
# Note: the submodules are turned on explicitly with -DBUILD_<module>=ON by configure's
# own handling of -submodules. Adding those arguments here as well would record them in
# config.opt, which is supposed to reflect the command line as it was given.
# See QTBUG-134948.
# Make sure to explicitly pass -DBUILD_<module>=ON, in case they were
# skipped before, otherwise configure might fail.
if(include_submodules)
set(explicit_build_submodules "${include_submodules}")
list(TRANSFORM explicit_build_submodules PREPEND "-DBUILD_")
list(TRANSFORM explicit_build_submodules APPEND "=ON")
list(APPEND extra_cmake_args ${explicit_build_submodules})
endif()
list(JOIN include_submodules "," include_submodules)
@@ -174,15 +179,34 @@ function(qt_ir_get_args_from_optfile_configure_filtered optfile_path out_var)
list(APPEND extra_configure_args "-skip" "${skip_csv}")
endif()
# Insert the extra arguments, which are all configure arguments, so they have to go before
# a '--' if there is one.
if(extra_configure_args)
list(FIND filtered_args "--" cmake_args_index)
if(cmake_args_index EQUAL -1)
# Insert the extra arguments into the proper positions before and after '--'.
list(FIND filtered_args "--" cmake_args_index)
# -- is not found
if(cmake_args_index EQUAL -1)
# Append extra configure args if present
if(extra_configure_args)
list(APPEND filtered_args ${extra_configure_args})
else()
endif()
# Append extra cmake args if present, but make sure to add -- first at the end
if(extra_cmake_args)
list(APPEND filtered_args "--")
list(APPEND filtered_args ${extra_cmake_args})
endif()
else()
# -- is found, that means we probably have cmake args
# Insert extra configure args if present, before the -- index.
if(extra_configure_args)
list(INSERT filtered_args "${cmake_args_index}" ${extra_configure_args})
endif()
# Find the -- index again, because it might have moved
list(FIND filtered_args "--" cmake_args_index)
# Compute the index of the argument after the --.
math(EXPR cmake_args_index "${cmake_args_index} + 1")
# Insert extra cmake args if present, after the -- index.
if(extra_cmake_args)
list(INSERT filtered_args "${cmake_args_index}" ${extra_cmake_args})
endif()
endif()
# Pass --help if it was requested.
@@ -288,7 +312,6 @@ function(qt_ir_run_after_args_parsed top_level_src_path out_var_exit_reason)
# Get some additional options to pass down.
qt_ir_get_option_as_existing_absolute_path(alternates alternates)
qt_ir_get_option_as_cmake_flag_option(branch "CHECKOUT_BRANCH" checkout_branch_option)
qt_ir_get_option_value(depth depth)
# The prefix for the cmake-style 'dictionary' that will be used by various functions.
set(prefix "ir_top")
@@ -298,7 +321,6 @@ function(qt_ir_run_after_args_parsed top_level_src_path out_var_exit_reason)
ALTERNATES "${alternates}"
ALREADY_INITIALIZED_SUBMODULES "${already_initialized_submodules}"
BASE_URL "${base_url}"
DEPTH "${depth}"
PARENT_REPO_BASE_GIT_PATH "${qt5_repo_name}"
PROCESS_SUBMODULES_FROM_COMMAND_LINE
WORKING_DIRECTORY "${working_directory}"
-1
View File
@@ -16,7 +16,6 @@ macro(qt_ir_set_known_command_line_options)
qt_ir_commandline_option(codereview-username TYPE string)
qt_ir_commandline_option(codereview-https TYPE boolean)
qt_ir_commandline_option(copy-objects TYPE boolean)
qt_ir_commandline_option(depth TYPE string)
qt_ir_commandline_option(fetch TYPE boolean DEFAULT_VALUE yes)
qt_ir_commandline_option(force SHORT_NAME f TYPE boolean)
qt_ir_commandline_option(force-hooks TYPE boolean)
+1 -1
View File
@@ -1386,7 +1386,7 @@ function(qt_internal_foreach_repo_run)
set(color_supported FALSE)
set(output_goes_where "")
if(NOT tty_exit_code AND tty_name)
if(NOT tty_exit_CODE AND tty_name)
set(color_supported TRUE)
set(output_goes_where "OUTPUT_FILE" "${tty_name}")
endif()
-3
View File
@@ -30,6 +30,3 @@ enable_if:
- condition: property
property: target.os
equals_value: Linux
- condition: property
property: target.osVersion
not_equals_value: HarmonyOS_ANY
@@ -16,13 +16,6 @@ instructions:
variableName: CONFIGURE_ENV_PREFIX
variableValue: "{{.Env.ENV_PREFIX}}"
# Re-fetch the qlitehtml repository in the Coin git mirror, otherwise the
# RunCMake.InitRepository test might fail trying to checkout a newer sha1 than what is
# available in the Coin git mirror.
- type: UpdateRepo
gitRemote: code.qt.io
repos: [playground/qlitehtml.git]
- type: ExecuteCommand
command: "{{.Env.CONFIGURE_ENV_PREFIX}} cmake {{.SourceDir}}/tests/manual/RunCMake"
executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution
+7 -63
View File
@@ -105,20 +105,6 @@ Configurations:
'VCPKG_HOST_TRIPLET=x64-linux-qt',
'VCPKG_TARGET_TRIPLET=x64-linux-qt',
]
# Ubuntu 26.04 x64 Wayland
-
Id: 'ubuntu-26.04-x64-developer-build'
Template: 'qtci-linux-Ubuntu-26.04-x86_64-51'
Compiler: 'GCC'
Features: ['Sccache', 'UseConfigure', 'InsignificantTests', 'VerboseCTestOutput', 'StandaloneExamples']
Configure arguments: '-make examples -developer-build -c++std c++20 -linker gold -qtlibinfix TestInfix -qtnamespace TestNamespace'
Environment variables: [
'COMMON_TEST_CMAKE_ARGS=-DQT_SKIP_DOCKER_COMPOSE=ON',
'NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR}} -DQT_DEPLOY_FFMPEG=TRUE',
'VCPKG_HOST_TRIPLET=x64-linux-qt',
'VCPKG_TARGET_TRIPLET=x64-linux-qt',
]
# Ubuntu 24.04 x64 Wayland
-
Id: 'ubuntu-24.04-x64'
Template: 'qtci-linux-Ubuntu-24.04-x86_64-50'
@@ -132,20 +118,6 @@ Configurations:
'VCPKG_HOST_TRIPLET=x64-linux-qt',
'VCPKG_TARGET_TRIPLET=x64-linux-qt',
]
# Ubuntu 26.04 x64 Wayland
-
Id: 'ubuntu-26.04-x64'
Template: 'qtci-linux-Ubuntu-26.04-x86_64-51'
Compiler: 'GCC'
Features: ['Sccache', 'UseConfigure', 'InsignificantTests', 'VerboseCTestOutput', 'GenerateSBOM', 'VerifySBOM', 'DocsGenerationV2']
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',
'COMMON_TEST_CMAKE_ARGS=-DQT_SKIP_DOCKER_COMPOSE=ON',
'NON_QTBASE_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR}} -DQT_DEPLOY_FFMPEG=TRUE -DINPUT_headersclean=ON',
'VCPKG_HOST_TRIPLET=x64-linux-qt',
'VCPKG_TARGET_TRIPLET=x64-linux-qt',
]
# Test on Ubuntu 24.04 x64 X11
-
Id: 'ubuntu-24.04-x64-developer-build-x11-tests'
@@ -297,7 +269,7 @@ Configurations:
Compiler: 'MSVC2022'
Target arch: 'arm64'
Features: ['Sccache', 'Packaging', 'DoNotRunTests', 'TargetBuildOnly', 'UseConfigure', 'GenerateSBOM', 'VerifySBOM']
Platform dependency: 'windows-11_24h2-mingw15'
Platform dependency: 'windows-11_24h2-mingw13'
Environment variables: [
'Path={{.Env.MINGW_PATH}}\bin;{{.Env.Path}}',
'TARGET_CONFIGURE_ARGS=-debug-and-release -force-debug-info -platform win32-arm64-msvc -qt-zlib -no-sql-db2 -no-sql-ibase -no-sql-mysql -no-sql-oci -no-sql-psql -no-sql-mimer',
@@ -318,7 +290,7 @@ Configurations:
Compiler: 'MSVC2026'
Target arch: 'arm64'
Features: ['Sccache', 'DoNotRunTests', 'TargetBuildOnly', 'UseConfigure', 'GenerateSBOM', 'VerifySBOM']
Platform dependency: 'windows-11_24h2-mingw15'
Platform dependency: 'windows-11_24h2-mingw13'
Environment variables: [
'Path={{.Env.MINGW_PATH}}\bin;{{.Env.Path}}',
'TARGET_CONFIGURE_ARGS=-debug-and-release -force-debug-info -platform win32-arm64-msvc -qt-zlib -no-sql-db2 -no-sql-ibase -no-sql-mysql -no-sql-oci -no-sql-psql -no-sql-mimer',
@@ -386,7 +358,7 @@ Configurations:
Id: 'rhel-10.0'
Template: 'qtci-linux-RHEL-10.0-x86_64-51'
Compiler: 'GCC'
Features: ['Sccache', 'UseConfigure', 'InstallQt5Dependencies', 'GenerateSBOM', 'VerifySBOM', 'DoNotAbortTestingOnFirstFailure']
Features: ['Sccache', 'UseConfigure', 'InstallQt5Dependencies', 'GenerateSBOM', 'VerifySBOM', 'InsignificantTests', 'DoNotAbortTestingOnFirstFailure']
Configure arguments: '-nomake examples -release -force-debug-info -headersclean -separate-debug-info -qt-libjpeg -qt-libpng -qt-pcre -qt-harfbuzz -qt-doubleconversion -no-libudev -bundled-xcb-xinput'
Environment variables: [
'CMAKE_ARGS=-DOpenGL_GL_PREFERENCE=LEGACY',
@@ -395,7 +367,7 @@ Configurations:
'VCPKG_TARGET_TRIPLET=x64-linux-qt',
]
-
Id: 'ios-device'
Id: 'ios-universal'
Template: 'qtci-macos-26-arm-105'
Target os: 'IOS_ANY'
Target arch: 'arm64'
@@ -404,35 +376,7 @@ Configurations:
Platform dependency: 'macos-universal-on-arm64'
Features: ['Packaging', 'Sccache', 'DebugAndRelease', 'DisableTests', 'UseConfigure', 'WarningsAreErrors', 'GenerateSBOM', 'VerifySBOM']
Environment variables: [
'TARGET_CONFIGURE_ARGS=-debug-and-release -nomake examples -platform macx-ios-clang -sdk iphoneos',
'NON_QTBASE_TARGET_CMAKE_ARGS= -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include -DFFMPEG_DIR={{.Env.FFMPEG_DIR_IOS}} -DQT_DEPLOY_FFMPEG=TRUE',
]
-
Id: 'ios-arm64-simulator'
Template: 'qtci-macos-26-arm-105'
Target os: 'IOS_ANY'
Target arch: 'arm64'
Compiler: 'Clang'
Target compiler: 'Clang'
Platform dependency: 'macos-universal-on-arm64'
Features: ['Packaging', 'Sccache', 'DebugAndRelease', 'DisableTests', 'UseConfigure', 'WarningsAreErrors', 'GenerateSBOM', 'VerifySBOM']
Environment variables: [
'TARGET_CONFIGURE_ARGS=-debug-and-release -nomake examples -platform macx-ios-clang -sdk iphonesimulator',
'TARGET_CMAKE_ARGS=-DCMAKE_OSX_ARCHITECTURES="arm64"',
'NON_QTBASE_TARGET_CMAKE_ARGS= -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include -DFFMPEG_DIR={{.Env.FFMPEG_DIR_IOS}} -DQT_DEPLOY_FFMPEG=TRUE',
]
-
Id: 'ios-x86_64-simulator'
Template: 'qtci-macos-26-arm-105'
Target os: 'IOS_ANY'
Target arch: 'x86_64'
Compiler: 'Clang'
Target compiler: 'Clang'
Platform dependency: 'macos-universal-on-arm64'
Features: ['Packaging', 'Sccache', 'DebugAndRelease', 'DisableTests', 'UseConfigure', 'WarningsAreErrors', 'GenerateSBOM', 'VerifySBOM']
Environment variables: [
'TARGET_CONFIGURE_ARGS=-debug-and-release -nomake examples -platform macx-ios-clang -sdk iphonesimulator',
'TARGET_CMAKE_ARGS=-DCMAKE_OSX_ARCHITECTURES="x86_64"',
'TARGET_CONFIGURE_ARGS=-debug-and-release -nomake examples -platform macx-ios-clang',
'NON_QTBASE_TARGET_CMAKE_ARGS= -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include -DFFMPEG_DIR={{.Env.FFMPEG_DIR_IOS}} -DQT_DEPLOY_FFMPEG=TRUE',
]
-
@@ -448,7 +392,7 @@ Configurations:
'TARGET_CONFIGURE_ARGS=-developer-build -no-warnings-are-errors -nomake examples -nomake tests -platform macx-visionos-clang',
]
-
Id: 'windows-11_24h2-mingw15'
Id: 'windows-11_24h2-mingw13'
Template: 'qtci-windows-11_24H2-x86_64-73'
Compiler: 'Mingw'
Features: ['Packaging', 'Sccache', 'UseConfigure', 'GenerateSBOM', 'VerifySBOM']
@@ -474,7 +418,7 @@ Configurations:
'Protobuf_ROOT={{.Env.Protobuf_ROOT_llvm_mingw}}',
]
-
Id: 'windows-11_24H2-mingw15-developer-build'
Id: 'windows-11_24H2-mingw13-developer-build'
Template: 'qtci-windows-11_24H2-x86_64-73'
Compiler: 'Mingw'
Features: ['Sccache', 'WarningsAreErrors', 'UseConfigure', 'StandaloneExamples']
@@ -12,7 +12,7 @@ Configurations:
'TARGET_CONFIGURE_ARGS=-release -force-asserts -force-debug-info -developer-build -no-warnings-are-errors -make examples -qt-harfbuzz -device linux-imx7-g++ -device-option "CROSS_COMPILE={{.Env.QEMUARMV7_TOOLCHAIN_CROSS_COMPILE}}" -device-option "DISTRO_OPTS=hard-float boot2qt" -no-feature-forkfd_pidfd',
'TARGET_CMAKE_ARGS=-DCMAKE_TOOLCHAIN_FILE={{.Env.QEMUARMV7_TOOLCHAIN_FILE}} -DQT_FORCE_BUILD_TOOLS=ON',
'QT_YOCTO_ENVSETUP={{.Env.QEMUARMV7_TOOLCHAIN_ENVSETUP}}',
"QT_CMAKE_DIR=/opt/cmake-4.3.2/bin",
"QT_CMAKE_DIR=/opt/cmake-3.30.5/bin",
'QT_SYSROOT_FOR_RUNNING_TESTS={{.Env.QEMUARMV7_TOOLCHAIN_SYSROOT}}',
'GST_PLUGIN_SCANNER={{.Env.QEMUARMV7_TOOLCHAIN_SYSROOT}}/usr/libexec/gstreamer-1.0/gst-plugin-scanner',
'QT_QUICK_BACKEND=software',
@@ -31,7 +31,7 @@ Configurations:
'TARGET_CONFIGURE_ARGS=-release -force-asserts -force-debug-info -developer-build -no-warnings-are-errors -nomake examples -qt-harfbuzz -device linux-generic-g++ -device-option "CROSS_COMPILE={{.Env.QEMUARM64_TOOLCHAIN_CROSS_COMPILE}}" -device-option "DISTRO_OPTS=boot2qt" -no-feature-forkfd_pidfd',
'TARGET_CMAKE_ARGS=-DCMAKE_TOOLCHAIN_FILE={{.Env.QEMUARM64_TOOLCHAIN_FILE}} -DQT_FORCE_BUILD_TOOLS=ON',
'QT_YOCTO_ENVSETUP={{.Env.QEMUARM64_TOOLCHAIN_ENVSETUP}}',
"QT_CMAKE_DIR=/opt/cmake-4.3.2/bin",
"QT_CMAKE_DIR=/opt/cmake-3.30.5/bin",
'QT_SYSROOT_FOR_RUNNING_TESTS={{.Env.QEMUARM64_TOOLCHAIN_SYSROOT}}',
'GST_PLUGIN_SCANNER={{.Env.QEMUARM64_TOOLCHAIN_SYSROOT}}/usr/libexec/gstreamer-1.0/gst-plugin-scanner',
'QT_QUICK_BACKEND=software',
@@ -50,7 +50,7 @@ Configurations:
'TARGET_CONFIGURE_ARGS=-release -force-asserts -force-debug-info -developer-build -no-warnings-are-errors -nomake examples -qt-harfbuzz -device linux-generic-g++ -device-option "CROSS_COMPILE={{.Env.QEMUMIPS64_TOOLCHAIN_CROSS_COMPILE}}" -device-option "DISTRO_OPTS=boot2qt" -no-feature-forkfd_pidfd',
'TARGET_CMAKE_ARGS=-DCMAKE_TOOLCHAIN_FILE={{.Env.QEMUMIPS64_TOOLCHAIN_FILE}} -DQT_FORCE_BUILD_TOOLS=ON',
'QT_YOCTO_ENVSETUP={{.Env.QEMUMIPS64_TOOLCHAIN_ENVSETUP}}',
"QT_CMAKE_DIR=/opt/cmake-4.3.2/bin",
"QT_CMAKE_DIR=/opt/cmake-3.30.5/bin",
'QT_SYSROOT_FOR_RUNNING_TESTS={{.Env.QEMUMIPS64_TOOLCHAIN_SYSROOT}}',
'GST_PLUGIN_SCANNER={{.Env.QEMUMIPS64_TOOLCHAIN_SYSROOT}}/usr/libexec/gstreamer-1.0/gst-plugin-scanner',
'QT_QUICK_BACKEND=software',
@@ -12,7 +12,7 @@ Configurations:
Environment variables: [
'TARGET_CONFIGURE_ARGS=-release -force-debug-info -developer-build -no-dbus -nomake examples',
'TARGET_CMAKE_ARGS=-DCMAKE_TOOLCHAIN_FILE={{.Env.QNX_710}}/qnx-toolchain-x8664.cmake -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON',
'QT_CMAKE_DIR=/opt/cmake-4.3.2/bin',
'QT_CMAKE_DIR=/opt/cmake-3.30.5/bin',
'QNX_TEST_ENV=TMPDIR=/data/var/tmp HOME=/data/home/root FONTCONFIG_FILE=/data/var/etc/fontconfig/fonts.conf LD_LIBRARY_PATH={{.Env.QNX_QEMU_LD_LIBRARY_PATH}} QSG_RHI_BACKEND=software QT_QPA_PLATFORM=offscreen QTEST_ENVIRONMENT=ci',
'NON_QTBASE_TARGET_CMAKE_ARGS=-DCMAKE_SYSTEM_VERSION=710 -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include',
'QNX_QEMU={{.Env.QNX_710_QEMU}}',
@@ -63,7 +63,7 @@ Configurations:
Environment variables: [
'TARGET_CONFIGURE_ARGS=-release -force-debug-info -developer-build -no-dbus -nomake examples',
'TARGET_CMAKE_ARGS=-DCMAKE_TOOLCHAIN_FILE={{.Env.QNX_800}}/qnx-toolchain-x8664.cmake -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON',
'QT_CMAKE_DIR=/opt/cmake-4.3.2/bin',
'QT_CMAKE_DIR=/opt/cmake-3.30.5/bin',
'QNX_TEST_ENV=TMPDIR=/data/var/tmp HOME=/data/home/root FONTCONFIG_FILE=/data/var/etc/fontconfig/fonts.conf LD_LIBRARY_PATH={{.Env.QNX_QEMU_LD_LIBRARY_PATH}} QSG_RHI_BACKEND=software QT_QPA_PLATFORM=offscreen QTEST_ENVIRONMENT=ci',
'NON_QTBASE_TARGET_CMAKE_ARGS=-DCMAKE_SYSTEM_VERSION=802 -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include',
'QNX_QEMU={{.Env.QNX_800_QEMU}}',
@@ -10,7 +10,7 @@ Configurations:
Platform dependency: 'ubuntu-22.04'
Features: ['VMSize8', 'UseConfigure', 'DoNotRunTests', 'DoNotUploadTests']
Environment variables: [
'WIND_CC_SYSROOT=/opt/fsl_imx6_2_0_6_3_VSB',
'WIND_CC_SYSROOT=/opt/fsl_imx6_2_0_6_2_VSB',
'TARGET_CONFIGURE_ARGS=-release -force-debug-info -qpa offscreen -nomake examples',
'TARGET_CMAKE_ARGS=-DBUILD_SHARED_LIBS=OFF -DWARNINGS_ARE_ERRORS=OFF -DCMAKE_TOOLCHAIN_FILE="{{.Env.WIND_CC_SYSROOT}}/mk/rtp.toolchain.cmake" -DFEATURE_vulkan=OFF -DQT_QMAKE_TARGET_MKSPEC=vxworks-clang -DQT_HOST_PATH=/home/qt/work/install -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_STAGING_PREFIX:PATH=/home/qt/work/install/target',
'VCPKG_HOST_TRIPLET=x64-linux-qt',
@@ -26,8 +26,8 @@ Configurations:
Platform dependency: 'ubuntu-22.04'
Features: ['VMSize8', 'UseConfigure', 'DoNotRunTests', 'DoNotUploadTests']
Environment variables: [
'WIND_CC_SYSROOT=/opt/nxp_imx8_1_0_7_1_VSB',
'TARGET_CONFIGURE_ARGS=-release -qpa offscreen -nomake examples',
'WIND_CC_SYSROOT=/opt/nxp_imx8_1_0_7_0_VSB',
'TARGET_CONFIGURE_ARGS=-release -force-debug-info -qpa offscreen -nomake examples',
'TARGET_CMAKE_ARGS=-DBUILD_SHARED_LIBS=OFF -DWARNINGS_ARE_ERRORS=OFF -DCMAKE_TOOLCHAIN_FILE="{{.Env.WIND_CC_SYSROOT}}/mk/rtp.toolchain.cmake" -DFEATURE_vulkan=OFF -DQT_QMAKE_TARGET_MKSPEC=vxworks-clang -DQT_HOST_PATH=/home/qt/work/install -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_STAGING_PREFIX:PATH=/home/qt/work/install/target'
]
-
@@ -8,10 +8,10 @@ Configurations:
Compiler: 'Clang'
Target compiler: 'Clang'
Platform dependency: 'vxworks-imx6-buildtest'
Features: ['VMSize8', 'UseConfigure', 'BuildTestsInTest', 'TestOnly', 'InsignificantTests']
Features: ['VMSize8', 'UseConfigure', 'BuildTestsInTest', 'TestOnly']
Environment variables: [
'WIND_CC_SYSROOT=/opt/fsl_imx6_2_0_6_3_VSB',
'VXWORKS_TEST_LIBS_PATH=/opt/fsl_imx6_2_0_6_3_VSB/usr/lib/common;/opt/fsl_imx6_2_0_6_3_VSB/usr/root/llvm/bin;/opt/fsl_imx6_2_0_6_3_VSB/usr/3pp/develop/usr/lib;/home/qt/work/install/target/lib',
'WIND_CC_SYSROOT=/opt/fsl_imx6_2_0_6_2_VSB',
'VXWORKS_TEST_LIBS_PATH=/opt/fsl_imx6_2_0_6_2_VSB/usr/lib/common;/opt/fsl_imx6_2_0_6_2_VSB/usr/root/llvm/bin;/opt/fsl_imx6_2_0_6_2_VSB/usr/3pp/develop/usr/lib;/home/qt/work/install/target/lib',
'TARGET_CONFIGURE_ARGS=-release -force-debug-info -qpa offscreen -nomake examples',
'TARGET_CMAKE_ARGS=-DBUILD_SHARED_LIBS=OFF -DWARNINGS_ARE_ERRORS=OFF -DCMAKE_TOOLCHAIN_FILE="{{.Env.WIND_CC_SYSROOT}}/mk/rtp.toolchain.cmake" -DFEATURE_vulkan=OFF -DQT_QMAKE_TARGET_MKSPEC=vxworks-clang -DQT_HOST_PATH=/home/qt/work/install -DCMAKE_AUTOGEN_VERBOSE=ON -DCMAKE_STAGING_PREFIX:PATH=/home/qt/work/install/target',
'VCPKG_HOST_TRIPLET=x64-linux-qt',
@@ -25,7 +25,7 @@ Configurations:
Compiler: 'Clang'
Target compiler: 'Clang'
Platform dependency: 'vxworks-x86_64-buildtest'
Features: ['VMSize16', 'UseConfigure', 'BuildTestsInTest', 'TestOnly', 'InsignificantTests']
Features: ['VMSize8', 'UseConfigure', 'BuildTestsInTest', 'TestOnly']
Environment variables: [
'WIND_CC_SYSROOT=/opt/itl_generic_skylake_VSB',
'VXWORKS_TEST_LIBS_PATH=/opt/itl_generic_skylake_VSB/usr/lib/common;/opt/itl_generic_skylake_VSB/usr/root/llvm/bin;/opt/itl_generic_skylake_VSB/usr/3pp/develop/usr/lib;/home/qt/work/install/target/lib',
@@ -10,7 +10,7 @@ Configurations:
Platform dependency: 'macos-universal-on-arm64'
Features: ['Packaging', 'Sccache', 'WarningsAreErrors', 'DisableTests', 'UseConfigure', 'GenerateSBOM', 'VerifySBOM']
Environment variables: [
'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -qpa android;offscreen -android-ndk {{.Env.ANDROID_NDK_ROOT_LATEST}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis arm64-v8a',
'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -android-ndk {{.Env.ANDROID_NDK_ROOT_LATEST}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis arm64-v8a',
'TARGET_CMAKE_ARGS=-DCMAKE_C_COMPILER_FRONTEND_VARIANT=GNU -DCMAKE_CXX_COMPILER_FRONTEND_VARIANT=GNU -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_ANDROID_HOME_LATEST}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON',
'NON_QTBASE_TARGET_CMAKE_ARGS=-DQT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH=/usr/local -DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_ARM64_NDK_LATEST}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include',
'ANDROID_NDK_ROOT={{.Env.ANDROID_NDK_ROOT_LATEST}}'
@@ -22,11 +22,11 @@ Configurations:
Target arch: 'armv7'
Compiler: 'Mingw'
Target compiler: 'Clang'
Platform dependency: 'windows-11_24h2-mingw15'
Platform dependency: 'windows-11_24h2-mingw13'
Features: ['Packaging', 'Sccache', 'WarningsAreErrors', 'DisableTests', 'UseConfigure', 'GenerateSBOM', 'VerifySBOM']
Environment variables: [
'Path={{.Env.MINGW_PATH}}\bin;{{.Env.Path}}',
'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -qpa android;offscreen -android-ndk {{.Env.ANDROID_NDK_ROOT_LATEST}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis armeabi-v7a -no-feature-pkg-config',
'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -android-ndk {{.Env.ANDROID_NDK_ROOT_LATEST}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis armeabi-v7a -no-feature-pkg-config',
'TARGET_CMAKE_ARGS=-DCMAKE_C_COMPILER_FRONTEND_VARIANT=GNU -DCMAKE_CXX_COMPILER_FRONTEND_VARIANT=GNU -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_ANDROID_HOME_LATEST}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON',
'NON_QTBASE_TARGET_CMAKE_ARGS=-DQT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH={{.Env.Protobuf_ROOT_mingw}} -DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_ARMV7_NDK_LATEST}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR={{.Env.Protobuf_ROOT_msvc}}/include',
'ANDROID_NDK_ROOT={{.Env.ANDROID_NDK_ROOT_LATEST}}'
@@ -41,7 +41,7 @@ Configurations:
Platform dependency: 'rhel-9.6'
Features: ['Packaging', 'Sccache', 'WarningsAreErrors', 'AndroidTestRun', 'VMSize8', 'UseConfigure', 'GenerateSBOM', 'VerifySBOM', 'JavaDocs']
Environment variables: [
'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -qpa android;offscreen -android-ndk {{.Env.ANDROID_NDK_ROOT_LATEST}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis x86',
'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -android-ndk {{.Env.ANDROID_NDK_ROOT_LATEST}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis x86',
'TARGET_CMAKE_ARGS=-DCMAKE_C_COMPILER_FRONTEND_VARIANT=GNU -DCMAKE_CXX_COMPILER_FRONTEND_VARIANT=GNU -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_ANDROID_HOME_LATEST}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON',
'NON_QTBASE_TARGET_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_X86_NDK_LATEST}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include',
# We check QT_USE_TARGET_ANDROID_BUILD_DIR only in one configuration, to ensure builds
@@ -60,12 +60,12 @@ Configurations:
Platform dependency: 'rhel-9.6'
Features: ['Packaging', 'Sccache', 'WarningsAreErrors', 'AndroidTestRun', 'VMSize8', 'UseConfigure', 'GenerateSBOM', 'VerifySBOM', 'JavaDocs']
Environment variables: [
'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -qpa android;offscreen -android-ndk {{.Env.ANDROID_NDK_ROOT_LATEST}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis x86_64',
'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -android-ndk {{.Env.ANDROID_NDK_ROOT_LATEST}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis x86_64',
'TARGET_CMAKE_ARGS=-DCMAKE_C_COMPILER_FRONTEND_VARIANT=GNU -DCMAKE_CXX_COMPILER_FRONTEND_VARIANT=GNU -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_ANDROID_HOME_LATEST}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON',
'NON_QTBASE_TARGET_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_X86_64_NDK_LATEST}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include',
# We check QT_USE_TARGET_ANDROID_BUILD_DIR and QT_ANDROID_GRADLE_MULTI_MODULE only in one
# We check QT_USE_TARGET_ANDROID_BUILD_DIR and QT_USE_ANDROID_MODERN_BUNDLE only in one
# configuration, to ensure builds without this option work too.
'COMMON_TARGET_TEST_CMAKE_ARGS=-DQT_USE_TARGET_ANDROID_BUILD_DIR=ON -DQT_ANDROID_GRADLE_MULTI_MODULE=ON',
'COMMON_TARGET_TEST_CMAKE_ARGS=-DQT_USE_TARGET_ANDROID_BUILD_DIR=ON -DQT_USE_ANDROID_MODERN_BUNDLE=ON',
'ANDROID_NDK_ROOT={{.Env.ANDROID_NDK_ROOT_LATEST}}',
'ANDROID_EMULATOR=emulator_x86_64_api_36'
]
@@ -79,12 +79,12 @@ Configurations:
Platform dependency: 'rhel-9.6'
Features: ['Sccache', 'WarningsAreErrors', 'AndroidTestRun', 'VMSize8', 'UseConfigure', 'GenerateSBOM', 'VerifySBOM', 'JavaDocs', 'InsignificantTests', 'DoNotAbortTestingOnFirstFailure']
Environment variables: [
'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -qpa android;offscreen -android-ndk {{.Env.ANDROID_NDK_ROOT_LATEST}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis x86_64',
'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -android-ndk {{.Env.ANDROID_NDK_ROOT_LATEST}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis x86_64',
'TARGET_CMAKE_ARGS=-DCMAKE_C_COMPILER_FRONTEND_VARIANT=GNU -DCMAKE_CXX_COMPILER_FRONTEND_VARIANT=GNU -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_ANDROID_HOME_LATEST}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON',
'NON_QTBASE_TARGET_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_X86_64_NDK_LATEST}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include',
# We check QT_USE_TARGET_ANDROID_BUILD_DIR and QT_ANDROID_GRADLE_MULTI_MODULE only in one
# We check QT_USE_TARGET_ANDROID_BUILD_DIR and QT_USE_ANDROID_MODERN_BUNDLE only in one
# configuration, to ensure builds without this option work too.
'COMMON_TARGET_TEST_CMAKE_ARGS=-DQT_USE_TARGET_ANDROID_BUILD_DIR=ON -DQT_ANDROID_GRADLE_MULTI_MODULE=ON',
'COMMON_TARGET_TEST_CMAKE_ARGS=-DQT_USE_TARGET_ANDROID_BUILD_DIR=ON -DQT_USE_ANDROID_MODERN_BUNDLE=ON',
'ANDROID_NDK_ROOT={{.Env.ANDROID_NDK_ROOT_LATEST}}',
'ANDROID_EMULATOR=emulator_x86_64_api_37'
]
@@ -11,10 +11,10 @@ Configurations:
Features: ['Sccache', 'UseConfigure', 'DoNotRunTests', 'Packaging', 'GenerateSBOM', 'VerifySBOM']
Environment variables: [
'TARGET_CONFIGURE_ARGS=-release -nomake examples -no-dbus -no-use-gold-linker -no-pch -openssl-runtime',
'TARGET_CMAKE_ARGS=-DOHOS_SDK_ROOT={{.Env.HARMONYOS_SDK_ROOT_CURRENT}}/sdk/default/openharmony -DOHOS_ARCH=arm64-v8a -DWARNINGS_ARE_ERRORS=OFF -DQT_QMAKE_TARGET_MKSPEC=ohos-clang -DCMAKE_FIND_ROOT_PATH={{.Env.VCPKG_OHOS_INSTALLED}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON',
'TARGET_CMAKE_ARGS=-DOHOS_SDK_ROOT={{.Env.HARMONYOS_SDK_ROOT}} -DOHOS_ARCH=arm64-v8a -DWARNINGS_ARE_ERRORS=OFF -DQT_QMAKE_TARGET_MKSPEC=ohos-clang -DCMAKE_FIND_ROOT_PATH={{.Env.VCPKG_OHOS_INSTALLED}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON',
'NON_QTBASE_TARGET_CMAKE_ARGS=-DCMAKE_FIND_ROOT_PATH={{.Env.VCPKG_OHOS_INSTALLED}}',
'COMMON_TARGET_TEST_CMAKE_ARGS=-DCMAKE_FIND_ROOT_PATH={{.Env.VCPKG_OHOS_INSTALLED}}',
'QT_HARMONYOS_HVIGOR={{.Env.HARMONYOS_SDK_ROOT_CURRENT}}/bin/hvigorw'
'QT_HARMONYOS_HVIGOR=/opt/harmonyos/command-line-tools/bin/hvigorw'
]
-
Id: 'harmonyos-23-arm64-on-linux-developer-build'
@@ -27,56 +27,8 @@ Configurations:
Features: ['Sccache', 'UseConfigure', 'DoNotRunTests', 'StandaloneExamples']
Environment variables: [
'TARGET_CONFIGURE_ARGS=-developer-build -debug -make examples -no-dbus -no-use-gold-linker -no-pch -openssl-runtime',
'TARGET_CMAKE_ARGS=-DOHOS_SDK_ROOT={{.Env.HARMONYOS_SDK_ROOT_CURRENT}}/sdk/default/openharmony -DOHOS_ARCH=arm64-v8a -DWARNINGS_ARE_ERRORS=OFF -DQT_QMAKE_TARGET_MKSPEC=ohos-clang -DCMAKE_FIND_ROOT_PATH={{.Env.VCPKG_OHOS_INSTALLED}}',
'TARGET_CMAKE_ARGS=-DOHOS_SDK_ROOT={{.Env.HARMONYOS_SDK_ROOT}} -DOHOS_ARCH=arm64-v8a -DWARNINGS_ARE_ERRORS=OFF -DQT_QMAKE_TARGET_MKSPEC=ohos-clang -DCMAKE_FIND_ROOT_PATH={{.Env.VCPKG_OHOS_INSTALLED}}',
'NON_QTBASE_TARGET_CMAKE_ARGS=-DCMAKE_FIND_ROOT_PATH={{.Env.VCPKG_OHOS_INSTALLED}}',
'COMMON_TARGET_TEST_CMAKE_ARGS=-DCMAKE_FIND_ROOT_PATH={{.Env.VCPKG_OHOS_INSTALLED}}',
'QT_HARMONYOS_HVIGOR={{.Env.HARMONYOS_SDK_ROOT_CURRENT}}/bin/hvigorw'
]
-
Id: 'harmonyos-26-arm64-on-linux'
Template: 'qtci-linux-Ubuntu-24.04-x86_64-50'
Target os: 'HarmonyOS_ANY'
Target arch: 'arm64'
Compiler: 'Clang'
Target compiler: 'Clang'
Platform dependency: 'ubuntu-24.04-x64'
Features: ['Sccache', 'UseConfigure', 'DoNotRunTests', 'Packaging', 'GenerateSBOM', 'VerifySBOM']
Environment variables: [
'TARGET_CONFIGURE_ARGS=-release -nomake examples -no-dbus -no-use-gold-linker -no-pch -openssl-runtime',
'TARGET_CMAKE_ARGS=-DOHOS_SDK_ROOT={{.Env.HARMONYOS_SDK_ROOT_NEXT}}/sdk/default/openharmony -DOHOS_ARCH=arm64-v8a -DWARNINGS_ARE_ERRORS=OFF -DQT_QMAKE_TARGET_MKSPEC=ohos-clang -DCMAKE_FIND_ROOT_PATH={{.Env.VCPKG_OHOS_INSTALLED}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON',
'NON_QTBASE_TARGET_CMAKE_ARGS=-DCMAKE_FIND_ROOT_PATH={{.Env.VCPKG_OHOS_INSTALLED}}',
'COMMON_TARGET_TEST_CMAKE_ARGS=-DCMAKE_FIND_ROOT_PATH={{.Env.VCPKG_OHOS_INSTALLED}}',
'QT_HARMONYOS_HVIGOR={{.Env.HARMONYOS_SDK_ROOT_NEXT}}/bin/hvigorw'
]
-
Id: 'harmonyos-26-arm64-on-linux-developer-build'
Template: 'qtci-linux-Ubuntu-24.04-x86_64-50'
Target os: 'HarmonyOS_ANY'
Target arch: 'arm64'
Compiler: 'Clang'
Target compiler: 'Clang'
Platform dependency: 'ubuntu-24.04-x64-developer-build'
Features: ['Sccache', 'UseConfigure', 'DoNotRunTests', 'StandaloneExamples']
Environment variables: [
'TARGET_CONFIGURE_ARGS=-developer-build -debug -make examples -no-dbus -no-use-gold-linker -no-pch -openssl-runtime',
'TARGET_CMAKE_ARGS=-DOHOS_SDK_ROOT={{.Env.HARMONYOS_SDK_ROOT_NEXT}}/sdk/default/openharmony -DOHOS_ARCH=arm64-v8a -DWARNINGS_ARE_ERRORS=OFF -DQT_QMAKE_TARGET_MKSPEC=ohos-clang -DCMAKE_FIND_ROOT_PATH={{.Env.VCPKG_OHOS_INSTALLED}}',
'NON_QTBASE_TARGET_CMAKE_ARGS=-DCMAKE_FIND_ROOT_PATH={{.Env.VCPKG_OHOS_INSTALLED}}',
'COMMON_TARGET_TEST_CMAKE_ARGS=-DCMAKE_FIND_ROOT_PATH={{.Env.VCPKG_OHOS_INSTALLED}}',
'QT_HARMONYOS_HVIGOR={{.Env.HARMONYOS_SDK_ROOT_NEXT}}/bin/hvigorw'
]
-
Id: 'harmonyos-23-arm64-on-macos'
Template: 'qtci-macos-26-arm-105'
Target os: 'HarmonyOS_ANY'
Target arch: 'arm64'
Compiler: 'Clang'
Target compiler: 'Clang'
Platform dependency: 'macos-universal-on-arm64'
Features: ['Sccache', 'UseConfigure', 'DoNotRunTests', 'StandaloneExamples']
Environment variables: [
'TARGET_CONFIGURE_ARGS=-developer-build -debug -make examples -no-dbus -no-use-gold-linker -no-pch -openssl-runtime',
'TARGET_CMAKE_ARGS=-DOHOS_SDK_ROOT={{.Env.HARMONYOS_SDK_ROOT_CURRENT}}/sdk/default/openharmony -DOHOS_ARCH=arm64-v8a -DWARNINGS_ARE_ERRORS=OFF -DQT_QMAKE_TARGET_MKSPEC=ohos-clang -DCMAKE_FIND_ROOT_PATH={{.Env.VCPKG_OHOS_INSTALLED}}',
'NON_QTBASE_TARGET_CMAKE_ARGS=-DCMAKE_FIND_ROOT_PATH={{.Env.VCPKG_OHOS_INSTALLED}}',
'COMMON_TARGET_TEST_CMAKE_ARGS=-DCMAKE_FIND_ROOT_PATH={{.Env.VCPKG_OHOS_INSTALLED}}',
'QT_HARMONYOS_HVIGOR={{.Env.HARMONYOS_SDK_ROOT_CURRENT}}/bin/hvigorw'
'QT_HARMONYOS_HVIGOR=/opt/harmonyos/command-line-tools/bin/hvigorw'
]
@@ -19,7 +19,7 @@ Configurations:
Target os: 'WebAssembly'
Compiler: 'Mingw'
Target compiler: 'Clang'
Platform dependency: 'windows-11_24h2-mingw15'
Platform dependency: 'windows-11_24h2-mingw13'
Features: ['Packaging','DisableTests', 'UseConfigure', 'GenerateSBOM', 'VerifySBOM']
Environment variables: [
'Path={{.Env.EMSDK_PATH}};{{.Env.MINGW_PATH}}\bin;{{.Env.Path}}',
@@ -1,4 +0,0 @@
Version: 2
Module only: True
Include: [yocto.yaml]
Configurations: []
@@ -2,7 +2,7 @@ Version: 2
Include: [
cmake_platforms.yaml: [
'rhel-9.6',
'windows-11_24h2-mingw15'
'windows-11_24h2-mingw13'
],
cmake_platforms_target_android.yaml: [
'android-15-x86_64-on-linux',
@@ -2,7 +2,7 @@ Version: 2
Include: [
cmake_platforms.yaml: [
'rhel-9.6',
'windows-11_24h2-mingw15'
'windows-11_24h2-mingw13'
],
cmake_platforms_target_android.yaml: [
'android-15-x86_64-on-linux',
@@ -1,15 +0,0 @@
Version: 2
Module only: True
Include: [
cmake_platforms.yaml: [
"ubuntu-24.04-x64-developer-build"
],
cmake_platforms_target_harmonyos.yaml: [
"harmonyos-23-arm64-on-linux-developer-build"
]
]
Configurations: []
Overrides:
-
Id: 'harmonyos-23-arm64-on-linux-developer-build'
-Features: ['DoNotRunTests']
@@ -1,24 +0,0 @@
Version: 2
Module only: True
Include: [
cmake_platforms.yaml: [
"ios-arm64-simulator"
]
]
Configurations:
-
Id: 'ios-26-simulator-tests'
Template: 'qtci-macos-26-arm-105'
Compiler: 'Clang'
Target os: 'IOS_ANY'
Target arch: 'arm64'
Platform dependency: 'ios-arm64-simulator'
Features: ['TestOnly', 'Insignificant', 'DoNotAbortTestingOnFirstFailure']
Environment variables: [
'APPLE_SIMULATOR_DEVICE_TYPE=com.apple.CoreSimulator.SimDeviceType.iPad-Pro-13-inch-M4-8GB',
]
Overrides:
-
Id: 'ios-arm64-simulator'
-Features: ['DisableTests']
+Features: ['DoNotRunTests']
@@ -1,14 +0,0 @@
Version: 2
Module only: True
Include: [
cmake_platforms.yaml: [
'ubuntu-22.04'
]
]
Configurations:
-
Id: 'ubuntu-22.04-Axivion'
Template: 'qtci-linux-Ubuntu-22.04-x86_64-51'
Compiler: 'GCC'
Features: ['UseConfigure', 'VMSize16', 'RunAsPlatformDependency', 'PysideAxivion']
Platform dependency: 'ubuntu-22.04'
@@ -1,7 +1,7 @@
Version: 2
Include: [
cmake_platforms.yaml: [
'windows-11_24h2-mingw15'
'windows-11_24h2-mingw13'
]
]
Configurations:
@@ -12,7 +12,7 @@ Configurations:
Target arch: 'arm64'
Compiler: 'Mingw'
Target compiler: 'QCC'
Platform dependency: 'windows-11_24h2-mingw15'
Platform dependency: 'windows-11_24h2-mingw13'
Features: ['DisableTests', 'UseConfigure']
Environment variables: [
'Path={{.Env.MINGW_PATH}}\bin;{{.Env.Path}}',
@@ -1,14 +0,0 @@
Version: 2
Module only: True
Configurations:
-
Id: 'ubuntu-24.04-lcov'
Template: 'qtci-linux-Ubuntu-24.04-x86_64-51'
Compiler: 'GCC'
Features: ['Sccache', 'UseConfigure', 'lcov', 'VMSize8', 'DisableTests']
Configure arguments: '-developer-build -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'
]
+2 -2
View File
@@ -3,7 +3,7 @@ Configurations: []
Include: [
cmake_platforms.yaml: [
'windows-11_24H2-msvc2022-developer-build',
'windows-11_24H2-mingw15-developer-build',
'windows-11_24H2-mingw13-developer-build',
'windows-11_24H2-llvm'
]
]
@@ -13,7 +13,7 @@ Overrides:
Id: 'windows-11_24H2-msvc2022-developer-build'
Configure arguments: '-qtnamespace TestNamespace -debug-and-release -force-asserts -make examples -developer-build -force-debug-info -qt-zlib -c++std c++20'
-
Id: 'windows-11_24H2-mingw15-developer-build'
Id: 'windows-11_24H2-mingw13-developer-build'
Configure arguments: '-qtnamespace TestNamespace -developer-build -release -force-asserts -force-debug-info -separate-debug-info -make examples'
-
Id: 'windows-11_24H2-llvm'
+1 -1
View File
@@ -7,7 +7,7 @@ Include: [
"ubuntu-22.04-developer-build-x11-tests",
"ubuntu-24.04-x64",
"windows-11_24H2-msvc2022-developer-build",
"ios-device",
"ios-universal",
"documentation-warnings",
],
macos.yaml: [
-6
View File
@@ -1,6 +0,0 @@
Version: 2
Include: [
cmake_platforms.yaml,
address_sanitizer_platforms.yaml
]
Configurations: []
@@ -7,13 +7,12 @@ Include: [
"ubuntu-22.04",
"ubuntu-22.04-developer-build",
"ubuntu-24.04-arm64",
"ubuntu-24.04-x64",
"opensuse-16.0-developer-build",
"sles-15_sp6-static",
"windows-10_22h2-msvc2022",
"rhel-9.6",
"windows-11_24h2-mingw15",
"windows-11_24H2-mingw15-developer-build",
"windows-11_24h2-mingw13",
"windows-11_24H2-mingw13-developer-build",
"windows-11_24H2-llvm",
"windows-11_24H2-msvc2022",
"windows-11_23h2-arm64-msvc2022"
@@ -46,7 +45,7 @@ Configurations:
'TARGET_CONFIGURE_ARGS=-release -no-warnings-are-errors -nomake examples -qt-harfbuzz -device linux-generic-g++ -device-option "CROSS_COMPILE={{.Env.QEMUARM64_TOOLCHAIN_CROSS_COMPILE}}" -device-option "DISTRO_OPTS=boot2qt" -no-feature-forkfd_pidfd -qtlibinfix TestInfix',
'TARGET_CMAKE_ARGS=-DCMAKE_TOOLCHAIN_FILE={{.Env.QEMUARM64_TOOLCHAIN_FILE}} -DQT_FORCE_BUILD_TOOLS=ON',
'QT_YOCTO_ENVSETUP={{.Env.QEMUARM64_TOOLCHAIN_ENVSETUP}}',
"QT_CMAKE_DIR=/opt/cmake-4.3.2/bin",
"QT_CMAKE_DIR=/opt/cmake-3.30.5/bin",
'QT_SYSROOT_FOR_RUNNING_TESTS={{.Env.QEMUARM64_TOOLCHAIN_SYSROOT}}',
'GST_PLUGIN_SCANNER={{.Env.QEMUARM64_TOOLCHAIN_SYSROOT}}/usr/libexec/gstreamer-1.0/gst-plugin-scanner',
'QT_QUICK_BACKEND=software',
+2 -2
View File
@@ -13,8 +13,8 @@ Include: [
"sles-15_sp6-static",
"windows-10_22h2-msvc2022",
"rhel-9.6",
"windows-11_24h2-mingw15",
"windows-11_24H2-mingw15-developer-build",
"windows-11_24h2-mingw13",
"windows-11_24H2-mingw13-developer-build",
"windows-11_24H2-llvm",
"windows-11_24H2-msvc2022",
"windows-11_23h2-arm64-msvc2022"
+1 -2
View File
@@ -1,7 +1,6 @@
Version: 2
Include: [
cmake_platforms.yaml,
address_sanitizer_platforms.yaml,
offline_documentation.yaml
address_sanitizer_platforms.yaml
]
Configurations: []
@@ -1,9 +0,0 @@
Version: 2
Include: [
cmake_platforms.yaml: [
'rhel-9.6',
'ubuntu-24.04-arm64',
'ubuntu-24.04-x64-developer-build'
]
]
Configurations: []
@@ -3,7 +3,7 @@ Include: [
cmake_platforms.yaml: [
"documentation-warnings",
"rhel-9.6",
'windows-11_24h2-mingw15',
'windows-11_24h2-mingw13',
],
macos.yaml: [
'macos-universal-on-arm64'
@@ -1,25 +0,0 @@
Version: 2
Include: [
cmake_platforms.yaml: [
'ubuntu-22.04',
'ubuntu-22.04-x11-tests',
'ubuntu-24.04-x64',
'ubuntu-24.04-x64-x11-tests',
'rhel-9.6',
'rhel-10.0',
'windows-11_24H2-msvc2022',
'windows-11_24H2-msvc2026',
'windows-11_24h2-mingw15',
'windows-11_24H2-llvm'
],
macos.yaml: [
'macos-universal-on-arm64',
'macos-14-x86_64-tests',
'macos-15-x86_64-tests',
'macos-26-x86_64-tests',
'macos-14-arm64-tests',
'macos-15-arm64-tests',
'macos-26-arm64-tests'
]
]
Configurations: []
+3 -13
View File
@@ -5,21 +5,11 @@ Include: [
'ubuntu-22.04-x11-tests',
'ubuntu-24.04-x64',
'ubuntu-24.04-x64-x11-tests',
'rhel-9.6',
'rhel-10.0',
'windows-11_24H2-msvc2022',
'windows-11_24H2-msvc2026',
'windows-11_24h2-mingw15',
'windows-11_24H2-llvm'
'windows-11_24H2-msvc2022'
],
macos.yaml: [
'macos-universal-on-arm64',
'macos-14-x86_64-tests',
'macos-15-x86_64-tests',
'macos-26-x86_64-tests',
'macos-14-arm64-tests',
'macos-15-arm64-tests',
'macos-26-arm64-tests'
'macos-arm64-developer-build',
'macos-14-arm64-developer-build-tests'
]
]
Configurations: []
@@ -1,25 +0,0 @@
#!/usr/bin/env bash
# Copyright (C) 2026 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
# Distribution-specific build settings.
# For another distro/version, copy the bundle and change these values first.
DISTRO_NAME="ubuntu"
DISTRO_VERSION="26.04"
ISO_PATH="/tmp/ubuntu-26.04-desktop-amd64.iso"
# ISO_CHECKSUM_FILE="/tmp/SHA256SUMS"
# Usually reusable without changes.
IMAGE_PREFIX="qtci-linux"
ARCH="x86_64"
MINIMAL_INDEX="50"
CUSTOM_INDEX="51"
DISK_SIZE="500G"
CPUS="8"
MEMORY_MB="16184"
SSH_USERNAME="qt"
SSH_PASSWORD="$(cat /tmp/PASS)"
PROJECT_DIR="/tmp/packer-linux"
ARTIFACT_DIR="/tmp/output-linux-images"
@@ -1,111 +0,0 @@
#!/usr/bin/env bash
# Copyright (C) 2026 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 -euo pipefail
script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=build-config.sh
source "${script_dir}/build-config.sh"
image_base_name="${IMAGE_PREFIX}-${DISTRO_NAME}-${DISTRO_VERSION}-${ARCH}"
image_50_name="${image_base_name}-${MINIMAL_INDEX}"
image_51_name="${image_base_name}-${CUSTOM_INDEX}"
image_50="${ARTIFACT_DIR}/${image_50_name}"
image_51="${ARTIFACT_DIR}/${image_51_name}"
image_51_seed="/tmp/${image_51_name}-seed.qcow2"
stage_50_output="/tmp/packer-output-${MINIMAL_INDEX}"
stage_51_output="/tmp/packer-output-${CUSTOM_INDEX}"
template="linux-image.pkr.hcl"
# Pass one source of configuration into Packer without duplicating distro and
# version literals in HCL or a second variable file.
export PKR_VAR_distro_name="$DISTRO_NAME"
export PKR_VAR_distro_version="$DISTRO_VERSION"
export PKR_VAR_image_prefix="$IMAGE_PREFIX"
export PKR_VAR_arch="$ARCH"
export PKR_VAR_minimal_index="$MINIMAL_INDEX"
export PKR_VAR_custom_index="$CUSTOM_INDEX"
export PKR_VAR_iso_path="$ISO_PATH"
# export PKR_VAR_iso_checksum_file="$ISO_CHECKSUM_FILE"
export PKR_VAR_project_dir="$PROJECT_DIR"
export PKR_VAR_artifact_dir="$ARTIFACT_DIR"
export PKR_VAR_disk_size="$DISK_SIZE"
export PKR_VAR_cpus="$CPUS"
export PKR_VAR_memory_mb="$MEMORY_MB"
export PKR_VAR_ssh_username="$SSH_USERNAME"
export PKR_VAR_ssh_password="$SSH_PASSWORD"
if [[ "$script_dir" != "$PROJECT_DIR" ]]; then
echo "ERROR: Bundle is at '$script_dir', but PROJECT_DIR is '$PROJECT_DIR'." >&2
echo "Move/extract it there or update PROJECT_DIR in build-config.sh." >&2
exit 1
fi
for required_file in $ISO_PATH; do
if [[ ! -f "$required_file" ]]; then
echo "ERROR: Required file is missing: $required_file" >&2
exit 1
fi
done
# Stage 51 is always regenerated. Stage 50 is retained
rm -rf "$stage_50_output" "$stage_51_output"
rm -f "$image_51" "$image_51_seed"
rm -f "${image_51}.sha256"
packer init "$template"
packer validate "$template"
if [[ -f "$image_50" ]]; then
echo "Stage ${MINIMAL_INDEX}: existing image found:"
echo " $image_50"
echo "Validating existing image before skipping the build..."
if ! qemu-img check "$image_50"; then
echo "ERROR: Existing stage-${MINIMAL_INDEX} image failed validation:" >&2
echo " $image_50" >&2
echo "The image was not deleted or overwritten." >&2
echo "Remove it manually" >&2
exit 1
fi
echo "Stage ${MINIMAL_INDEX}: image is valid, skipping Packer build."
sha256sum "$image_50" > "${image_50}.sha256"
else
echo "Stage ${MINIMAL_INDEX}: no existing image found, starting Packer."
PACKER_LOG=1 \
PACKER_LOG_PATH="/tmp/packer-stage-${MINIMAL_INDEX}.log" \
packer build -only=stage-50.qemu.stage_50 "$template"
qemu-img check "$image_50"
sha256sum "$image_50" > "${image_50}.sha256"
fi
echo "Creating independent stage-${CUSTOM_INDEX} seed..."
qemu-img convert -p -f qcow2 -O qcow2 "$image_50" "$image_51_seed"
qemu-img check "$image_51_seed"
PACKER_LOG=1 \
PACKER_LOG_PATH="/tmp/packer-stage-${CUSTOM_INDEX}.log" \
packer build -only=stage-51.qemu.stage_51 "$template"
qemu-img check "$image_51"
sha256sum "$image_51" > "${image_51}.sha256"
(
cd "$ARTIFACT_DIR"
sha256sum --check "$(basename "${image_50}.sha256")"
)
rm -f "$image_51_seed"
echo
echo "Created independent images:"
echo " $image_50"
echo " $image_51"
echo "Checksums:"
echo " ${image_50}.sha256"
echo " ${image_51}.sha256"
@@ -1,2 +0,0 @@
instance-id: qtci-ubuntu26-packer
local-hostname: qtci-ubuntu26-x64
@@ -1,22 +0,0 @@
#cloud-config
# This file is installer/distribution-specific. The generic HCL and wrapper can
# be reused, but replace this file for a distro that does not use autoinstall.
autoinstall:
version: 1
source:
id: ubuntu-desktop-minimal
locale: en_US.UTF-8
keyboard:
layout: us
timezone: UTC
identity:
hostname: qtci-ubuntu26-x64
username: qt
password: "$6$qtciubuntu2604$FAeHIUtg1iOarKFnnDZim5fWEJ6ZaaYXSc360m68XFTqurIBWNBxsmUDKj.8mGJkVDKlWjFdKZLfrqHYhuBH8/"
ssh:
install-server: true
allow-pw: true
storage:
layout:
name: direct
shutdown: reboot
@@ -1,192 +0,0 @@
packer {
required_version = ">= 1.14.0"
required_plugins {
qemu = {
version = "~> 1"
source = "github.com/hashicorp/qemu"
}
}
}
variable "distro_name" {
type = string
}
variable "distro_version" {
type = string
}
variable "image_prefix" {
type = string
}
variable "arch" {
type = string
}
variable "minimal_index" {
type = string
}
variable "custom_index" {
type = string
}
variable "iso_path" {
type = string
}
variable "project_dir" {
type = string
}
variable "artifact_dir" {
type = string
}
variable "disk_size" {
type = string
}
variable "cpus" {
type = number
}
variable "memory_mb" {
type = number
}
variable "ssh_username" {
type = string
}
variable "ssh_password" {
type = string
sensitive = true
}
locals {
image_base_name = "${var.image_prefix}-${var.distro_name}-${var.distro_version}-${var.arch}"
image_50_name = "${local.image_base_name}-${var.minimal_index}"
image_51_name = "${local.image_base_name}-${var.custom_index}"
image_50_path = "${var.artifact_dir}/${local.image_50_name}"
image_51_path = "${var.artifact_dir}/${local.image_51_name}"
image_51_seed = "/tmp/${local.image_51_name}-seed.qcow2"
stage_50_output = "/tmp/packer-output-${var.minimal_index}"
stage_51_output = "/tmp/packer-output-${var.custom_index}"
}
source "qemu" "stage_50" {
vm_name = local.image_50_name
output_directory = local.stage_50_output
iso_url = var.iso_path
iso_checksum = "none"
accelerator = "kvm"
qemu_binary = "qemu-system-x86_64"
format = "qcow2"
disk_size = var.disk_size
disk_interface = "virtio"
net_device = "virtio-net"
cpus = var.cpus
memory = var.memory_mb
communicator = "ssh"
ssh_username = var.ssh_username
ssh_password = var.ssh_password
ssh_timeout = "60m"
ssh_handshake_attempts = 100
http_directory = "${var.project_dir}/http"
boot_wait = "10s"
# This boot sequence is installer-family-specific. Replace it when adapting
# the bundle to a distro that does not use Ubuntu/Subiquity autoinstall.
boot_command = [
"c<wait>",
"linux /casper/vmlinuz autoinstall ds=nocloud-net\\;s=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ ---<enter><wait>",
"initrd /casper/initrd<enter><wait>",
"boot<enter>"
]
headless = true
vnc_bind_address = "127.0.0.1"
shutdown_command = "echo '${var.ssh_password}' | sudo -S shutdown -P now"
}
source "qemu" "stage_51" {
vm_name = local.image_51_name
output_directory = local.stage_51_output
# build-images.sh creates this independent seed from immutable image -50.
iso_url = local.image_51_seed
iso_checksum = "none"
disk_image = true
accelerator = "kvm"
qemu_binary = "qemu-system-x86_64"
format = "qcow2"
disk_size = var.disk_size
disk_interface = "virtio"
net_device = "virtio-net"
cpus = var.cpus
memory = var.memory_mb
communicator = "ssh"
ssh_username = var.ssh_username
ssh_password = var.ssh_password
ssh_timeout = "30m"
ssh_handshake_attempts = 100
headless = true
vnc_bind_address = "127.0.0.1"
shutdown_command = "echo '${var.ssh_password}' | sudo -S shutdown -P now"
}
build {
name = "stage-50"
sources = ["source.qemu.stage_50"]
provisioner "shell" {
execute_command = "echo '${var.ssh_password}' | {{ .Vars }} sudo -S -E bash '{{ .Path }}'"
script = "${var.project_dir}/scripts/01-minimal-50.sh"
}
post-processor "shell-local" {
inline = [
"mkdir -p '${var.artifact_dir}'",
"rm -f '${local.image_50_path}'",
"mv '${local.stage_50_output}/${local.image_50_name}' '${local.image_50_path}'",
"qemu-img check '${local.image_50_path}'",
"qemu-img info '${local.image_50_path}'"
]
}
}
build {
name = "stage-51"
sources = ["source.qemu.stage_51"]
provisioner "shell" {
execute_command = "echo '${var.ssh_password}' | {{ .Vars }} sudo -S -E bash '{{ .Path }}'"
script = "${var.project_dir}/scripts/02-coin-configuration-51.sh"
}
provisioner "shell" {
execute_command = "echo '${var.ssh_password}' | {{ .Vars }} sudo -S -E bash '{{ .Path }}'"
script = "${var.project_dir}/scripts/03-gnome-configuration-51.sh"
}
provisioner "shell" {
execute_command = "echo '${var.ssh_password}' | {{ .Vars }} sudo -S -E bash '{{ .Path }}'"
script = "${var.project_dir}/scripts/04-no-overview-extension-51.sh"
}
provisioner "shell" {
execute_command = "echo '${var.ssh_password}' | {{ .Vars }} sudo -S -E bash '{{ .Path }}'"
script = "${var.project_dir}/scripts/05-check-configurations-51.sh"
}
post-processor "shell-local" {
inline = [
"mkdir -p '${var.artifact_dir}'",
"rm -f '${local.image_51_path}'",
"mv '${local.stage_51_output}/${local.image_51_name}' '${local.image_51_path}'",
"qemu-img check '${local.image_51_path}'",
"qemu-img info '${local.image_51_path}'"
]
}
}
@@ -1,27 +0,0 @@
#!/usr/bin/env bash
# Copyright (C) 2026 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 -euo pipefail
# This script is run on the minimal -50 image
# Other scripts will be run on the -50 -> -51 cloned image
readonly CI_USER="${CI_USER:-qt}"
export DEBIAN_FRONTEND=noninteractive
# Debian/Ubuntu implementation. Replace this script with the distro's package
# manager commands when reusing the generic wrapper and HCL elsewhere.
apt-get update
apt-get -y full-upgrade
apt-get install -y qemu-guest-agent
systemctl enable qemu-guest-agent
dpkg-query -W -f='${binary:Package}\t${Version}\n' \
> /var/tmp/qtci-minimal-image-packages.txt
apt-get -y autoremove
apt-get clean
rm -rf /var/lib/apt/lists/*
qemu-ga --version
@@ -1,169 +0,0 @@
#!/usr/bin/env bash
# Copyright (C) 2026 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 -euo pipefail
# Initial Coin configuration for the customized image (-51).
readonly CI_USER="${CI_USER:-qt}"
readonly GRUB_GFXMODE_VALUE="${GRUB_GFXMODE_VALUE:-1280x800}"
export DEBIAN_FRONTEND=noninteractive
log() {
printf '\n[51-coin-configuration] %s\n' "$*"
}
require_root() {
if [[ "${EUID}" -ne 0 ]]; then
echo "ERROR: This script must run as root." >&2
exit 1
fi
}
require_user() {
if ! id "$CI_USER" >/dev/null 2>&1; then
echo "ERROR: Required CI user does not exist: $CI_USER" >&2
exit 1
fi
}
require_root
require_user
log "Installing required base packages"
apt-get update
apt-get install -y \
openssh-server \
ufw
# Remove GNOME welcome window at boot
log "Removing gnome-initial-setup"
apt-get purge -y gnome-initial-setup
# No sudo PW
log "Configuring passwordless sudo for ${CI_USER}"
cat > "/etc/sudoers.d/${CI_USER}" <<EOF
${CI_USER} ALL=(ALL) NOPASSWD: ALL
EOF
chmod 0440 "/etc/sudoers.d/${CI_USER}"
visudo --check
# UTC
log "Setting the system timezone to UTC"
timedatectl set-timezone UTC
# Enable SSH
log "Enabling SSH"
# Current Ubuntu releases may use socket activation. Enabling both units is
# harmless and keeps the image compatible with service- and socket-based SSH.
systemctl enable ssh.service
systemctl enable ssh.socket 2>/dev/null || true
# Enable QEMU GA
log "Enabling QEMU guest agent"
systemctl enable qemu-guest-agent
# Disable firewall
log "Disabling UFW"
ufw --force disable
systemctl disable ufw.service 2>/dev/null || true
# Set resolution
log "Configuring GRUB graphics mode: ${GRUB_GFXMODE_VALUE}"
if grep -qE '^GRUB_GFXMODE=' /etc/default/grub; then
sed -i "s/^GRUB_GFXMODE=.*/GRUB_GFXMODE=${GRUB_GFXMODE_VALUE}/" /etc/default/grub
else
printf '\nGRUB_GFXMODE=%s\n' "$GRUB_GFXMODE_VALUE" >> /etc/default/grub
fi
update-grub
# Disable auto upgrade/update
log "Disabling periodic APT update checks"
cat > /etc/apt/apt.conf.d/99-qtci-no-periodic-updates << EOF
APT::Periodic "0";
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "0";
APT::Periodic::Unattended-Upgrade "0";
EOF
sudo systemctl disable --now \
apt-daily.timer \
apt-daily-upgrade.timer
sudo systemctl mask \
apt-daily.service \
apt-daily-upgrade.service \
apt-daily.timer \
apt-daily-upgrade.timer
log "Disabling release-upgrade notifications"
if [[ -f /etc/update-manager/release-upgrades ]]; then
if grep -qE '^Prompt=' /etc/update-manager/release-upgrades; then
sed -i 's/^Prompt=.*/Prompt=never/' \
/etc/update-manager/release-upgrades
else
printf '\nPrompt=never\n' >> /etc/update-manager/release-upgrades
fi
fi
# GDM Auto login
log "Configuring GDM for ${CI_USER}"
if [[ -d /etc/gdm3 ]]; then
gdm_config="/etc/gdm3/custom.conf"
touch "$gdm_config"
if ! grep -qE '^\[daemon\]' "$gdm_config"; then
printf '\n[daemon]\n' >> "$gdm_config"
fi
sed -i \
'/^AutomaticLoginEnable=/d; /^AutomaticLogin=/d; /^InitialSetupEnable=/d' \
"$gdm_config"
sed -i \
"/^\[daemon\]/a InitialSetupEnable=False\nAutomaticLogin=${CI_USER}\nAutomaticLoginEnable=True" \
"$gdm_config"
else
log "GDM is not installed; skipping GDM configuration"
fi
# Run Coin-setup
log "Downloading and running coin-setup"
coin_setup_url="https://ci-files01-hki.ci.qt.io/input/linux/coin-setup-linux-amd64.zip"
coin_setup_zip="/tmp/coin-setup-linux-amd64.zip"
coin_setup_dir="/tmp/coin-setup-linux-amd64"
coin_setup_binary="${coin_setup_dir}/coin-setup"
rm -rf "$coin_setup_dir"
rm -f "$coin_setup_zip"
mkdir -p "$coin_setup_dir"
wget --quiet --output-document="$coin_setup_zip" "$coin_setup_url"
unzip -q "$coin_setup_zip" -d "$coin_setup_dir"
if [[ ! -f "$coin_setup_binary" ]]; then
echo "ERROR: coin-setup binary was not found at ${coin_setup_binary}" >&2
echo "Archive contents:" >&2
unzip -l "$coin_setup_zip" >&2
exit 1
fi
chmod 0755 "$coin_setup_binary"
sudo -H -u "$CI_USER" "$coin_setup_binary"
rm -rf "$coin_setup_dir"
rm -f "$coin_setup_zip"
log "coin-setup completed successfully"
# Clean apt
log "Cleaning APT metadata"
apt-get clean
rm -rf /var/lib/apt/lists/*
log "Configuration completed successfully"
echo "A reboot is required for all GRUB and login-manager changes to take effect."
@@ -1,150 +0,0 @@
#!/usr/bin/env bash
# Copyright (C) 2026 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 -euo pipefail
readonly CI_USER="${CI_USER:-qt}"
log() {
printf '\n[gnome-configuration] %s\n' "$*"
}
if [[ "$EUID" -ne 0 ]]; then
echo "ERROR: This script must run as root." >&2
exit 1
fi
if ! id "$CI_USER" >/dev/null 2>&1; then
echo "ERROR: User does not exist: $CI_USER" >&2
exit 1
fi
ci_home="$(getent passwd "$CI_USER" | cut -d: -f6)"
if [[ -z "$ci_home" || ! -d "$ci_home" ]]; then
echo "ERROR: Cannot determine home directory for $CI_USER" >&2
exit 1
fi
log "Applying GNOME preferences for ${CI_USER}"
# GNOME preferences are stored per user in the dconf database. Packer runs this
# provisioner as root over SSH, without a graphical login or user D-Bus session.
# Run gsettings as the CI user inside a temporary D-Bus session so the values
# are written to the CI user's dconf database rather than root's configuration.
sudo -H -u "$CI_USER" HOME="$ci_home" dbus-run-session -- bash <<'GNOME_SETTINGS'
set -euo pipefail
schema_exists() {
local schema="$1"
gsettings list-schemas |
grep -Fx "$schema" >/dev/null
}
key_exists() {
local schema="$1"
local key="$2"
gsettings list-keys "$schema" |
grep -Fx "$key" >/dev/null
}
set_setting() {
local schema="$1"
local key="$2"
local value="$3"
if ! schema_exists "$schema"; then
echo "ERROR: Missing GSettings schema: $schema" >&2
exit 1
fi
if ! key_exists "$schema" "$key"; then
echo "ERROR: Missing GSettings key: $schema $key" >&2
exit 1
fi
echo "Setting: $schema $key = $value"
gsettings set "$schema" "$key" "$value"
actual="$(gsettings get "$schema" "$key")"
echo "Result: $schema $key = $actual"
}
set_setting \
org.gnome.desktop.notifications \
show-banners \
false
set_setting \
org.gnome.desktop.notifications \
show-in-lock-screen \
false
set_setting \
org.gnome.desktop.screensaver \
lock-enabled \
false
if key_exists \
org.gnome.desktop.screensaver \
ubuntu-lock-on-suspend; then
set_setting \
org.gnome.desktop.screensaver \
ubuntu-lock-on-suspend \
false
fi
set_setting \
org.gnome.desktop.privacy \
remember-recent-files \
false
rm -f "${XDG_DATA_HOME:-$HOME/.local/share}/recently-used.xbel"
set_setting \
org.gnome.desktop.session \
idle-delay \
'uint32 0'
set_setting \
org.gnome.settings-daemon.plugins.power \
sleep-inactive-ac-type \
"'nothing'"
set_setting \
org.gnome.settings-daemon.plugins.power \
sleep-inactive-battery-type \
"'nothing'"
set_setting \
org.gnome.settings-daemon.plugins.power \
sleep-inactive-ac-timeout \
0
set_setting \
org.gnome.settings-daemon.plugins.power \
sleep-inactive-battery-timeout \
0
set_setting \
org.gnome.shell.extensions.dash-to-dock \
dock-fixed \
true
set_setting \
org.gnome.shell.extensions.dash-to-dock \
autohide \
false
set_setting \
org.gnome.shell.extensions.dash-to-dock \
intellihide \
false
GNOME_SETTINGS
log "GNOME preferences applied successfully"
@@ -1,46 +0,0 @@
#!/usr/bin/env bash
# Copyright (C) 2026 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 -euo pipefail
# Install no-overview gnome extension to prevent desktop overview at boot (QTBUG-132070)
readonly CI_USER="${CI_USER:-qt}"
readonly EXTENSION_UUID="no-overview@fthx"
readonly EXTENSION_URL="https://ci-files01-hki.ci.qt.io/input/linux/no-overviewfthx.v23.shell-extension.zip" # GNOME <50
readonly EXTENSION_ZIP="/tmp/${EXTENSION_UUID}.zip"
readonly EXTENSION_DIR="/usr/share/gnome-shell/extensions/${EXTENSION_UUID}"
if [[ "$EUID" -ne 0 ]]; then
echo "ERROR: This script must run as root." >&2
exit 1
fi
if ! id "$CI_USER" >/dev/null 2>&1; then
echo "ERROR: User does not exist: $CI_USER" >&2
exit 1
fi
ci_home="$(getent passwd "$CI_USER" | cut -d: -f6)"
echo "Installing No Overview GNOME extension"
wget --quiet --output-document="$EXTENSION_ZIP" "$EXTENSION_URL"
install -d -o root -g root -m 0755 "$EXTENSION_DIR"
unzip -q "$EXTENSION_ZIP" -d "$EXTENSION_DIR"
chown -R root:root "$EXTENSION_DIR"
find "$EXTENSION_DIR" -type d -exec chmod 0755 {} +
find "$EXTENSION_DIR" -type f -exec chmod 0644 {} +
# gnome-extensions writes the enabled state to the CI user's dconf database.
# Packer runs over SSH without a user session, so provide a temporary D-Bus.
sudo -H -u "$CI_USER" HOME="$ci_home" dbus-run-session -- gnome-extensions enable "$EXTENSION_UUID"
rm -f "$EXTENSION_ZIP"
echo "Installed and enabled: $EXTENSION_UUID"
echo "After a reboot, check with: gnome-extensions list --enabled"
@@ -1,138 +0,0 @@
#!/usr/bin/env bash
# Copyright (C) 2026 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 -euo pipefail
failures=0
pass() {
printf 'PASS: %s\n' "$1"
}
fail() {
printf 'FAIL: %s\n' "$1"
failures=$((failures + 1))
}
echo "=== Image -51 verification ==="
# No PW prompt
if sudo -n true 2>/dev/null; then
pass "passwordless sudo"
else
fail "passwordless sudo"
fi
if sudo visudo --check >/dev/null 2>&1; then
pass "sudoers syntax"
else
fail "sudoers syntax"
fi
# Timezone
timezone="$(timedatectl show --property=Timezone --value)"
if [[ "$timezone" == "UTC" || "$timezone" == "Etc/UTC" ]]; then
pass "timezone is UTC"
else
fail "timezone is '$timezone', expected UTC"
fi
# SSH
if dpkg-query -W -f='${db:Status-Abbrev}' openssh-server 2>/dev/null | grep -q '^ii'; then
pass "openssh-server installed"
else
fail "openssh-server installed"
fi
if systemctl is-active --quiet ssh.socket || systemctl is-active --quiet ssh.service; then
pass "SSH listener active"
else
fail "SSH listener active"
fi
if sudo ss -ltn |
grep -qE 'LISTEN.+:22[[:space:]]'; then
pass "TCP port 22 listening"
else
fail "TCP port 22 listening"
fi
# QEMU GA
if dpkg-query -W -f='${db:Status-Abbrev}' qemu-guest-agent 2>/dev/null | grep -q '^ii'; then
pass "qemu-guest-agent installed"
else
fail "qemu-guest-agent installed"
fi
if systemctl is-enabled --quiet qemu-guest-agent; then
pass "qemu-guest-agent enabled"
else
fail "qemu-guest-agent enabled"
fi
# UFW
if sudo ufw status | grep -Fxq 'Status: inactive'; then
pass "UFW inactive"
else
fail "UFW inactive"
fi
# Resolution
if grep -Fxq 'GRUB_GFXMODE=1280x800' /etc/default/grub; then
pass "GRUB graphics mode"
else
fail "GRUB graphics mode"
fi
# Auto update/upgrade disabled
if apt-config dump | grep -i 'APT::Periodic \"0\";'; then
pass "APT periodic processing disabled"
else
apt-config dump | grep -i APT::Periodic
fail "APT periodic processing enabled"
fi
if apt-config dump | grep -i 'APT::Periodic::Unattended-Upgrade \"0\";'; then
pass "APT unattended upgrades disabled"
else
apt-config dump | grep -i APT::Periodic
fail "APT unattended upgrades enabled"
fi
if grep -Fxq 'Prompt=never' /etc/update-manager/release-upgrades; then
pass "release-upgrade notifications disabled"
else
fail "release-upgrade notifications enabled"
fi
# Auto login
if sudo grep -Fxq 'AutomaticLoginEnable=True' /etc/gdm3/custom.conf && sudo grep -Fxq 'AutomaticLogin=qt' /etc/gdm3/custom.conf; then
pass "GDM automatic login configured"
else
fail "GDM automatic login configured"
fi
# Broken packages
if [[ -z "$(sudo dpkg --audit)" ]]; then
pass "dpkg audit"
else
fail "dpkg audit"
fi
# GNOME initial setup executable removed
if [[ ! -x /usr/libexec/gnome-initial-setup ]]; then
pass "GNOME initial setup executable is absent"
else
fail "/usr/libexec/gnome-initial-setup exists. There might be a welcome window popup"
fi
# Summary
echo
if (( failures == 0 )); then
echo "All conf checks passed."
else
echo "${failures} check(s) failed."
# exit 1
fi
+11 -12
View File
@@ -25,8 +25,8 @@ basePath="http://ci-files01-hki.ci.qt.io/input/android"
toolsVersion="19.0"
toolsFile="commandlinetools-linux-13114758_latest.zip"
toolsBackupUrl="https://dl.google.com/android/repository/$toolsFile"
sdkBuildToolsVersion="37.0.0"
sdkApiLevel="android-37.0"
sdkBuildToolsVersion="36.0.0"
sdkApiLevel="android-36"
toolsSha1="5fdcc763663eefb86a5b8879697aa6088b041e70"
ndkVersionLatest="r27c"
@@ -161,13 +161,12 @@ cd "$sdkTargetFolder/cmdline-tools/tools/bin"
./sdkmanager --install "emulator" --sdk_root="$sdkTargetFolder" \
| eval "$sdkmanager_no_progress_bar_cmd"
echo "Download and unzip Android Emulator version 36.6.11"
# See https://developer.android.com/studio/emulator_archive
emulatorFileName="emulator-linux_x64-15507667.zip"
echo "Download and unzip Android Emulator version 35.2.10"
emulatorFileName="emulator-linux_x64-12414864.zip"
emulatorCiUrl="https://ci-files01-hki.ci.qt.io/input/android/$emulatorFileName"
emulatorUrl="http://dl.google.com/android/repository/$emulatorFileName"
emulatorTargetFile="$sdkTargetFolder/$emulatorFileName"
emulatorSha1="f8d8b83cf21a04966326eb1378bacda255f63b93"
emulatorSha1="41dd213d120f727d8c3840347d234b135793ba10"
DownloadURL "$emulatorCiUrl" "$emulatorUrl" "$emulatorSha1" "$emulatorTargetFile"
echo "Unzipping the Android Emulator to '$sdkTargetFolder'"
sudo unzip -o -q "$emulatorTargetFile" -d "$sdkTargetFolder"
@@ -203,21 +202,21 @@ echo "Unzipping the Android 16 to $maxVersionDestination"
sudo unzip -o -q "$maxVersionFilePath" -d "$maxVersionDestination"
rm "$maxVersionFilePath"
echo "Download and unzip Android 17 (16KB Page Size) System Image"
insignificantMaxVersionFileName="x86_64-ps16k-37.1_r07.zip"
echo "Download and unzip Android 17 Beta 3 16KB System Image"
insignificantMaxVersionFileName="x86_64-ps16k-37.0_r03.zip"
insignificantMaxVersionDestination="$sdkTargetFolder/system-images/android-37/google_apis_ps16k/"
insignificantMaxVersionFilePath="$insignificantMaxVersionDestination/$insignificantMaxVersionFileName"
insignificantMaxVersionCiUrl="$basePath/system_images/google_apis/$insignificantMaxVersionFileName"
insignificantMaxVersionUrl="https://dl.google.com/android/repository/sys-img/google_apis/$insignificantMaxVersionFileName"
insignificantMaxVersionSha1="88e208a83a5f0b18958275b7c1a047e931395f3f"
insignificantMaxVersionSha1="b89a6686f9a9e9942d596bed45d422cbccb70c98"
mkdir -p "$insignificantMaxVersionDestination"
DownloadURL "$insignificantMaxVersionCiUrl" "$insignificantMaxVersionUrl" "$insignificantMaxVersionSha1" "$insignificantMaxVersionFilePath"
echo "Unzipping the Android 17 (16KB Page Size) to $insignificantMaxVersionDestination"
echo "Unzipping the Android 17 Beta3 16KB to $insignificantMaxVersionDestination"
sudo unzip -o -q "$insignificantMaxVersionFilePath" -d "$insignificantMaxVersionDestination"
# Hack to avoid SDK version bug in source.properties file, the usage of ".0" messes things for avdmanager. TODO: undo when official comes
sudo sed -i 's/AndroidVersion.ApiLevel=37.1/AndroidVersion.ApiLevel=37/g' "$insignificantMaxVersionDestination/x86_64/source.properties"
sudo sed -i 's/AndroidVersion.ApiLevel=37.0/AndroidVersion.ApiLevel=37/g' "$insignificantMaxVersionDestination/x86_64/source.properties"
rm "$insignificantMaxVersionFilePath"
echo "Checking the contents of Android SDK again..."
@@ -230,7 +229,7 @@ echo "no" | ./avdmanager create avd -n emulator_x86_64_api_36 -c 2048M -f \
-k "system-images;android-36;google_apis;x86_64"
echo "no" | ./avdmanager create avd -n emulator_x86_64_api_37 -c 2048M -f \
-k "system-images;android-37;google_apis,page_size_16kb;x86_64"
-k "system-images;android-37;google_apis,page_size_16kb,ai_glasses_compatible;x86_64"
echo "Install maximum supported SDK level image for Android Automotive $sdkApiLevelAutomotiveMax"
DownloadURL "$androidAutomotiveMaxUrl" "$androidAutomotiveMaxUrl" "$androidAutomotiveMaxSha" \
+6 -19
View File
@@ -11,26 +11,13 @@ source "${BASH_SOURCE%/*}/../unix/InstallFromCompressedFileFromURL.sh"
# shellcheck source=../unix/SetEnvVar.sh
source "${BASH_SOURCE%/*}/../unix/SetEnvVar.sh"
majorminorversion="4.3"
version="4.3.2"
uname_m="$(uname -m)"
case "$uname_m" in
x86_64|amd64)
SHA1="736c0722ed8393b3eb74fd573f6c9c245770206a"
arch="x86_64"
;;
arm64|aarch64)
SHA1="a173eb910c808f561422feb45fe1fe57c3e346fa"
arch="aarch64"
;;
*) fatal "Unknown architecture in uname: $uname_m" 43 ;;
esac
PrimaryUrl="http://ci-files01-hki.ci.qt.io/input/cmake/cmake-$version-linux-$arch.tar.gz"
AltUrl="https://cmake.org/files/v$majorminorversion/cmake-$version-linux-$arch.tar.gz"
majorminorversion="3.30"
version="3.30.5"
PrimaryUrl="http://ci-files01-hki.ci.qt.io/input/cmake/cmake-$version-linux-x86_64.tar.gz"
AltUrl="https://cmake.org/files/v$majorminorversion/cmake-$version-linux-x86_64.tar.gz"
SHA1="61b339cac5f110d5ed2934f66a26c2e991945e01"
targetFolder="/opt/cmake-$version"
appPrefix="cmake-$version-linux-$arch"
appPrefix="cmake-$version-linux-x86_64"
InstallFromCompressedFileFromURL "$PrimaryUrl" "$AltUrl" "$SHA1" "$targetFolder" "$appPrefix"
@@ -1,66 +0,0 @@
#!/usr/bin/env bash
# Copyright (C) 2026 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 -e
OS_STATE_DIR="/var/lib/qtciid"
OS_STATE_FILE="$OS_STATE_DIR/os-version"
get_os_id() {
if [[ -r /etc/os-release ]]; then
# shellcheck disable=SC1091
. /etc/os-release
# os-release contains ID of the distro (e.g. 'ubuntu')
# VERSION e.g. '24.04.1 LTS (Noble Numbat)'
if [[ -n "${ID:-}" && -n "${VERSION:-}" ]]; then
echo "${ID}:${VERSION}"
return 0
fi
fi
echo "unknown:unknown"
return 1
}
record_os_version() {
local os_id
os_id="$(get_os_id)"
if [[ "$os_id" == "unknown:unknown" ]]; then
echo "ERROR: Unable to determine OS version"
exit 1
fi
sudo mkdir -p "$OS_STATE_DIR"
echo "$os_id" | sudo tee "$OS_STATE_FILE" > /dev/null
echo "OS version: $os_id"
}
verify_os_version_unchanged() {
if [[ ! -f "$OS_STATE_FILE" ]]; then
echo "ERROR: OS version state file missing: $OS_STATE_FILE"
exit 1
fi
local start_version current_version
start_version="$(cat "$OS_STATE_FILE")"
current_version="$(get_os_id)"
if [[ "$current_version" == "unknown:unknown" ]]; then
echo "ERROR: Unable to determine current OS version"
exit 1
fi
if [[ "$start_version" != "$current_version" ]]; then
echo "ERROR: OS version changed during provisioning!"
echo " Start version : $start_version"
echo " End version : $current_version"
exit 1
fi
echo "OS version unchanged ($current_version)"
}
@@ -11,12 +11,8 @@ PROVISIONING_DIR="$(dirname "$0")/../.."
# shellcheck source=../unix/common.sourced.sh
source "$PROVISIONING_DIR/common/unix/common.sourced.sh"
if [ -f /usr/lib/sysctl.d/55-ptrace.conf ]; then
f="/usr/lib/sysctl.d/55-ptrace.conf" # New location in Ubuntu 26.04
else
f="/etc/sysctl.d/10-ptrace.conf"
fi
f="/etc/sysctl.d/10-ptrace.conf"
if [ -f $f ]
then
echo "Modifying $f ..."
@@ -1,4 +1,3 @@
diffutils
make
nasm
yasm
@@ -1,5 +1,4 @@
diffutils
libva-devel
make
nasm
yasm
@@ -1,4 +1,3 @@
diffutils
make
nasm
yasm
@@ -1,5 +1,4 @@
diffutils
libva-dev
make
nasm
yasm
+13 -100
View File
@@ -9,105 +9,18 @@ source "${BASH_SOURCE%/*}/../unix/DownloadURL.sh"
# shellcheck source=../unix/SourceEnvVars.sh
source "${BASH_SOURCE%/*}/../unix/SourceEnvVars.sh"
echo "Caching Gradle distributions and dependencies"
echo "Caching Gradle distribution and dependencies"
gradleCacheFileName="gradle_9.3.1_linux_cache_v2.tar.gz"
gradleCacheUrl="http://ci-files01-hki.ci.qt.io/input/gradle/$gradleCacheFileName"
gradleCacheSha1="e88989d55f68e978442e567e4707a6093c829af6"
gradleCacheFile="/tmp/$gradleCacheFileName"
DownloadURL "$gradleCacheUrl" "$gradleCacheUrl" "$gradleCacheSha1" "$gradleCacheFile"
mkdir -p "$HOME/.gradle"
tar -xzf "$gradleCacheFile" -C "$HOME/.gradle" --strip-components=1
rm "$gradleCacheFile"
gradle_project_source="${BASH_SOURCE%/*}/../shared/gradle/project"
gradleDistributionMirror="http://ci-files01-hki.ci.qt.io/input/gradle"
gradleInitScript="init.d/nexus-mirror.gradle"
# Route every Gradle repository through the internal Nexus mirror.
mkdir -p "$HOME/.gradle/init.d"
cp "${BASH_SOURCE%/*}/../shared/gradle/$gradleInitScript" "$HOME/.gradle/$gradleInitScript"
# Returns the hash of the Gradle binary distribution for a given Gradle version.
# Gradle calculates the hash as base36(md5(distributionUrl)).
gradleDistributionHash () {
version="$1"
propertiesFile="$gradle_project_source/gradle/wrapper/gradle-wrapper.properties"
# 1. Read the project's distributionUrl.
distributionUrl=$(grep '^distributionUrl=' "$propertiesFile")
distributionUrl=${distributionUrl#distributionUrl=}
# 2. Unescape the Java-properties (e.g. '\:').
distributionUrl=${distributionUrl//\\:/:}
# 3. Swap in the requested version while maintaining the distribution URL.
distributionUrl=${distributionUrl/gradle-[0-9.]*-bin.zip/gradle-$version-bin.zip}
if command -v md5sum >/dev/null 2>&1; then
md5Hex=$(printf '%s' "$distributionUrl" | md5sum | awk '{print $1}')
else
md5Hex=$(printf '%s' "$distributionUrl" | md5)
fi
# Convert the md5 to base36: read it as a number, then repeatedly take the
# next digit (number % 36) and divide by 36, prepending each digit's character.
number=$(printf 'ibase=16; %s\n' "$(printf '%s' "$md5Hex" | tr 'a-f' 'A-F')" | bc)
hash=""
alphabet="0123456789abcdefghijklmnopqrstuvwxyz"
while [ "$number" != "0" ]; do
digit=$(printf '%s %% 36\n' "$number" | bc)
number=$(printf '%s / 36\n' "$number" | bc)
hash="${alphabet:$digit:1}$hash"
done
printf '%s' "$hash"
}
# Seed a Gradle distribution binary into ~/.gradle from the internal mirror.
seedGradleDistribution () {
version="$1"
sha="$2"
distributionDir="$HOME/.gradle/wrapper/dists/gradle-${version}-bin/$(gradleDistributionHash "$version")"
if [ -e "$distributionDir/gradle-${version}-bin.zip.ok" ]; then
return 0
fi
mkdir -p "$distributionDir"
zip="$distributionDir/gradle-${version}-bin.zip"
url="$gradleDistributionMirror/gradle-${version}-bin.zip"
DownloadURL "$url" "$url" "$sha" "$zip"
unzip -q -o "$zip" -d "$distributionDir"
rm -f "$zip"
touch "$distributionDir/gradle-${version}-bin.zip.ok"
}
# Populate ~/.gradle/caches by priming the shared project for each Gradle and AGP profile.
cacheGradleProfile () {
echo "Caching Gradle profile $*"
tmp="$(mktemp -d)"
project="$tmp/project"
cp -r "$gradle_project_source" "$project"
props="$project/gradle/wrapper/gradle-wrapper.properties"
for kv in "$@"; do
case "$kv" in
gradle=*)
sed "s#gradle-[0-9.]*-bin.zip#gradle-${kv#*=}-bin.zip#" "$props" > "$props.tmp"
mv "$props.tmp" "$props"
;;
esac
done
toml="$project/gradle/libs.versions.toml"
for kv in "$@"; do
case "$kv" in
gradle=*) ;;
*)
key="${kv%%=*}"
val="${kv#*=}"
sed "/^\[versions\]/,/^\[/ s/^$key = .*/$key = \"$val\"/" "$toml" > "$toml.tmp"
mv "$toml.tmp" "$toml"
;;
esac
done
sh "$project/gradlew" --project-dir "$project" build
rm -rf "$tmp"
}
# Cache both the current and the previous versions to avoid issues during bumps.
seedGradleDistribution 9.3.1 "b266d5ff6b90eada6dc3b20cb090e3731302e553a27c5d3e4df1f0d76beaff06"
cacheGradleProfile gradle=9.3.1 agp=9.0.0
seedGradleDistribution 9.5.1 "bafc141b619ad6350fd975fc903156dd5c151998cc8b058e8c1044ab5f7b031f"
cacheGradleProfile gradle=9.5.1 agp=9.2.1
echo "Cached Gradle distributions and dependencies under $HOME/.gradle."
cp -r "$gradle_project_source" /tmp/gradle_project
cd /tmp/gradle_project
chmod +x gradlew
sh gradlew build
@@ -16,42 +16,52 @@ source "${BASH_SOURCE%/*}/../unix/SetEnvVar.sh"
targetFolder="/opt/harmonyos"
sdkTargetFolder="$targetFolder/command-line-tools"
sudo mkdir -p "$sdkTargetFolder"
basePath="http://ci-files01-hki.ci.qt.io/input/harmonyos"
function InstallCommandLineTools() {
toolsVersion="6.1.0.850"
toolsFile="commandline-tools-linux-x64-6.1.0.850.zip"
toolsSha1="6fdf7dbe0faddeb6a36cc76752faaf03d2abd462"
cltVersion=$1
cltSha1=$2
toolsTargetFile="/tmp/$toolsFile"
toolsSourceFile="$basePath/$toolsFile"
cltFile="commandline-tools-linux-x64-$cltVersion.zip"
cltTargetFile="/tmp/$cltFile"
cltSourceFile="$basePath/$cltFile"
echo "Download and unzip HarmonyOS SDK"
DownloadURL "$toolsSourceFile" "$toolsSourceFile" "$toolsSha1" "$toolsTargetFile"
echo "Unzipping HarmonyOS Tools to '$targetFolder'"
sudo unzip -q "$toolsTargetFile" -d "$targetFolder"
rm "$toolsTargetFile"
cltTargetDir="$targetFolder/$cltVersion"
sudo mkdir -p "$cltTargetDir"
patchFile="harmonyos_sdk_patches.zip"
patchSha1="7f912104a5600bc176891bc6e9d97732f4266ad6"
DownloadURL "$cltSourceFile" "$cltSourceFile" "$cltSha1" "$cltTargetFile"
echo "Unzipping HarmonyOS Command Line Tools to '$cltTargetDir'"
# Get the package base directory name as string
zipBase=$(sudo zipinfo -1 "$cltTargetFile" 2>/dev/null | awk '!seen {sub("/.*",""); print; seen=1}')
sudo unzip -q "$cltTargetFile" -d "$cltTargetDir"
rm "$cltTargetFile"
harmonycltRoot="${cltTargetDir}/${zipBase}"
patchTargetFile="/tmp/$patchFile"
patchSourceFile="$basePath/$patchFile"
patchTargetFolder="$targetFolder/harmonyos_sdk_patches"
echo "Changing ownership of HarmonyOS files."
sudo chown -R qt:users "$harmonycltRoot"
}
echo "Download and unzip HarmonyOS SDK patches"
DownloadURL "$patchSourceFile" "$patchSourceFile" "$patchSha1" "$patchTargetFile"
echo "Unzipping HarmonyOS SDK patches to '$targetFolder'"
sudo unzip -q "$patchTargetFile" -d "$targetFolder"
rm "$patchTargetFile"
cltVersionCurrent="6.1.0.850"
cltSha1Current="6fdf7dbe0faddeb6a36cc76752faaf03d2abd462"
InstallCommandLineTools $cltVersionCurrent $cltSha1Current
SetEnvVar "HARMONYOS_SDK_ROOT_CURRENT" "$harmonycltRoot"
sudo ln -s "$harmonycltRoot" "$sdkTargetFolder"
SetEnvVar "HARMONYOS_SDK_ROOT" "$sdkTargetFolder"
echo "Changing ownership of HarmonyOS files."
if uname -a |grep -q "el7"; then
sudo chown -R qt:wheel "$sdkTargetFolder"
sudo chown -R qt:wheel "$patchTargetFolder"
else
sudo chown -R qt:users "$sdkTargetFolder"
sudo chown -R qt:users "$patchTargetFolder"
fi
cltVersionNext="26.0.0.821"
cltSha1Next="d89fc1a09ceb5b25a350695068fe9918912785d2"
InstallCommandLineTools $cltVersionNext $cltSha1Next
SetEnvVar "HARMONYOS_SDK_ROOT_NEXT" "$harmonycltRoot"
echo "Patching HarmonyOS SDK"
sdkRootFolder="$sdkTargetFolder/sdk/default/openharmony"
echo "Checking the contents of HarmonyOS SDK..."
ls -l "$sdkRootFolder"
SetEnvVar "HARMONYOS_SDK_ROOT" "$sdkRootFolder"
export HARMONYOS_SDK_ROOT="$sdkRootFolder"
echo "HarmonyOS SDK setup finished"
@@ -21,12 +21,13 @@ prefix="${2:-$default_prefix}"
pkgconfig_path="$PKG_CONFIG_PATH"
install_ff_nvcodec_headers() {
local nv_codec_version="12.0.16.1" # use 11.x.x.x to ensure compatibility with 520 nvidia drivers
local nv_codec_url_public="https://github.com/FFmpeg/nv-codec-headers/releases/download/n12.0.16.1/nv-codec-headers-$nv_codec_version.tar.gz"
local nv_codec_url_cached="http://ci-files01-hki.ci.qt.io/input/ffmpeg/nv-codec-headers/nv-codec-headers-$nv_codec_version.tar.gz"
local nv_codec_sha1="df7239777af15af5d7e563d2af0deff874c3b770"
local nv_codec_version="11.1.5.3" # use 11.x.x.x to ensure compatibility with 470 nvidia drivers; might be upated to 12.0
local nv_codec_url_public="https://github.com/FFmpeg/nv-codec-headers/archive/refs/tags/n$nv_codec_version.zip"
local nv_codec_url_cached="http://ci-files01-hki.ci.qt.io/input/ffmpeg/nv-codec-headers/nv-codec-headers-$nv_codec_version.zip"
local nv_codec_sha1="78715d521de102362e553dc92577bbe81905a321"
#nv_codec_sha1="4f30539f8dd31945da4c3da32e66022f9ca59c08" // 12.0
local target_dir="$HOME"
local nv_codec_dir="$target_dir/nv-codec-headers-$nv_codec_version"
local nv_codec_dir="$target_dir/nv-codec-headers-n$nv_codec_version"
if [ ! -d "$nv_codec_dir" ]; then
source "${BASH_SOURCE%/*}/../unix/InstallFromCompressedFileFromURL.sh"
@@ -17,8 +17,8 @@ APPNAME="CiNetworkTest"
EXECPATH="${ROOT}/${APPNAME}/bin"
EXEC="${EXECPATH}/${APPNAME}"
URL="https://ci-files01-hki.ci.qt.io/input/networktestapp"
TARBALL="CiNetworkTest-rhel-linux-x86_64-v1.2.tgz"
sha256="2be05baebf48ff29ebcd06a0761b2a3d92ae5a66f78d0cd953513d8271eb7f83"
TARBALL="CiNetworkTest-rhel-linux-x86_64-v1.1.tgz"
sha256="3a23593f163ca2452546d20d56cabc81fed03c930d6d96334a22827da5a6840a"
SOURCE="$URL/$TARBALL"
InstallFromCompressedFileFromURL "$SOURCE" "" "$sha256" "$ROOT" "$PREFIX"
@@ -14,7 +14,7 @@ cp -R x86_64-android-qt-tmp/* "$VCPKG_ROOT/installed/"
cmake "-DVCPKG_EXECUTABLE=$VCPKG_ROOT/vcpkg"\
"-DVCPKG_INSTALL_ROOT=$PWD/x86-android-qt-tmp"\
"-DOUTPUT=$HOME/versions.txt"\
"-DOUTPUT=~/versions.txt"\
-P\
"${BASH_SOURCE%/*}/../shared/vcpkg_parse_packages.cmake"
@@ -8,22 +8,13 @@ source "${BASH_SOURCE%/*}/../unix/SetEnvVar.sh"
echo "Installing vcpkg OHOS ports"
# The vcpkg OHOS toolchain expects OHOS_SDK_ROOT; CI sets HARMONYOS_SDK_ROOT.
ohosSdkRoot="${OHOS_SDK_ROOT:-$HARMONYOS_SDK_ROOT}"
export OHOS_SDK_ROOT="${OHOS_SDK_ROOT:-$HARMONYOS_SDK_ROOT}"
if [ -z "$ohosSdkRoot" ]; then
if [ -z "$OHOS_SDK_ROOT" ]; then
echo "ERROR: Neither OHOS_SDK_ROOT nor HARMONYOS_SDK_ROOT is set." >&2
exit 1
fi
# On Linux, HARMONYOS_SDK_ROOT points at the command-line-tools root; the vcpkg
# toolchain needs the openharmony native SDK inside it. On macOS it already
# points there, so only descend when the nested SDK exists.
if [ -d "$ohosSdkRoot/sdk/default/openharmony/native" ]; then
ohosSdkRoot="$ohosSdkRoot/sdk/default/openharmony"
fi
export OHOS_SDK_ROOT="$ohosSdkRoot"
# Coin sets TARGET=hdb in the environment. GNU Make imports env vars as make
# variables, which breaks ICU's Makefile (it defines its own TARGET variable
# for the library path). Unset it before invoking vcpkg.
+2 -10
View File
@@ -43,19 +43,11 @@ if [ ! -d "$targetFolder" ]; then
fi
# QNX SDP
sourceFile="http://ci-files01-hki.ci.qt.io/input/qnx/qnx710-windows-linux-20260828.tar.xz"
sourceFile="http://ci-files01-hki.ci.qt.io/input/qnx/qnx710-windows-linux-20240417.tar.xz"
targetFile="qnx710.tar.xz"
sha1="c37e6f3a49a259d450b601843a9af2818b6feb96"
sha1="cd2d35004fb2798089e29d9e1226691426632da0"
DownloadAndExtract "$sourceFile" "$sha1" "$targetFile" "$targetFolder"
# IANA timezone database overlay. Packaged separately from the SDP so it can be
# bumped without rebuilding the SDP tarball. Archive root is usr/ so the same
# archive suits both the 7.1 and 8.0 SDP layouts.
sourceFile="http://ci-files01-hki.ci.qt.io/input/qnx/zoneinfo-2026a-usr.tar.xz"
targetFile="zoneinfo.tar.xz"
sha1="02deef2df3513d191ee3bb3a13fd61a814d7161a"
DownloadAndExtract "$sourceFile" "$sha1" "$targetFile" "$targetPath/target/qnx7"
sudo cp "$aarch64le_toolchain" "$targetPath"
sudo cp "$armv7le_toolchain" "$targetPath"
sudo cp "$x8664_toolchain" "$targetPath"
+13 -16
View File
@@ -43,34 +43,31 @@ if [ ! -d "$targetFolder" ]; then
fi
# QNX SDP
sourceFile="http://ci-files01-hki.ci.qt.io/input/qnx/qnx800-windows-linux-20260828.tar.xz"
sourceFile="http://ci-files01-hki.ci.qt.io/input/qnx/qnx800-windows-linux-20260410.tar.xz"
targetFile="qnx800.tar.xz"
sha1="f44b66d91625ab33e367cfb62a2950a041607caa"
sha1="a3fdcd98e12bc5054d00f18e4088af26288fd020"
DownloadAndExtract "$sourceFile" "$sha1" "$targetFile" "$targetFolder"
# IANA timezone database overlay. Packaged separately from the SDP so it can be
# bumped without rebuilding the SDP tarball. Archive root is usr/ so the same
# archive suits both the 7.1 and 8.0 SDP layouts.
sourceFile="http://ci-files01-hki.ci.qt.io/input/qnx/zoneinfo-2026a-usr.tar.xz"
# bumped without rebuilding the SDP tarball. Archive root is qnx800/target/qnx/
# so it overlays onto $targetFolder (/opt/) directly.
sourceFile="http://ci-files01-hki.ci.qt.io/input/qnx/zoneinfo-2026a.tar.xz"
targetFile="zoneinfo.tar.xz"
sha1="02deef2df3513d191ee3bb3a13fd61a814d7161a"
DownloadAndExtract "$sourceFile" "$sha1" "$targetFile" "$targetPath/target/qnx"
sha1="8c1678ff673bb588f63fc9277497cd38e0ea2253"
DownloadAndExtract "$sourceFile" "$sha1" "$targetFile" "$targetFolder"
sudo cp "$aarch64le_toolchain" "$targetPath"
sudo cp "$armv7le_toolchain" "$targetPath"
sudo cp "$x8664_toolchain" "$targetPath"
cp -R "$QNX_qemu_bld_files_dir" "$qemuTargetPath"
# The SDP ships fc-cache but not fc-match, which tst_qfont needs. Build it from
# fontconfig's fc-match/fc-match.c at the release matching the SDP's fontconfig
# (FC_MINOR/FC_REVISION in fontconfig.h), once per arch:
# qcc -Vgcc_ntox86_64 -O2 -o fc-match fc-match.c \
# -DHAVE_GETOPT_LONG=1 -DHAVE_UNISTD_H=1 -lfontconfig
# Pack as <arch>/fc-match into a new dated archive, then update below. 7.1 keeps
# its own archive.
sourceFile="http://ci-files01-hki.ci.qt.io/input/qnx/qnx_qemu_utils_800_20260825.tar.xz"
# fc-match tool is missing from QNX SDP and tst_qfont requires it to work corretly
# Download code-only package from https://www.iana.org/time-zones and follow README
# to build tools for QNX x86_64. If need to build new tool create new qnx_qemu_utils
# package which contains it and update required info below
sourceFile="http://ci-files01-hki.ci.qt.io/input/qnx/qnx_qemu_utils_20211208.tar.xz"
targetFile="qnx_qemu_utils.tar.xz"
targetFolder="$qemuTargetPath/local/misc_files"
sha1="965b957c76d4bc59c010bb0908d1fea8975179c1"
sha1="7653f5d50f61f1591d7785c3ec261228ecc9dd22"
mkdir -p "$targetFolder"
@@ -13,7 +13,7 @@ PATH=__IFS_PATH__:/system/xbin:.
var/share/zoneinfo=usr/share/zoneinfo
[uid=0 gid=0 dperms=755 type=dir] var/share/fonts
var/etc/fontconfig/fonts.conf=etc/fonts/fonts.conf
var/etc/fontconfig/fonts.conf=etc/fontconfig/fonts.conf
var/share/fonts=usr/share/fonts
var/etc/hosts=local/misc_files/etc/hosts
@@ -1,3 +0,0 @@
# local/snippets/ifs_files.custom
# Placeholder for local list of files to add to ifs
/usr/libexec/sshd-session=usr/libexec/sshd-session
@@ -18,8 +18,6 @@ rm -rf /data/var/share/fonts/NotoSansCJK*
rm -rf /data/var/share/fonts/NotoSansMonoCJK*
echo "---> Create fontconfig cache"
fc-cache &
# For fc-match in QFont tests
ln -Ps /system/lib/libfontconfig.so.17 /system/lib/libfontconfig.so.1
# Add default route so QNX knows where to send
# requests for unknown network
@@ -21,7 +21,7 @@ lib/libGLESv2.so.1=usr/lib/libGLESv2.so.1
lib/libEGL.so.1=usr/lib/libEGL.so.1
lib/libz.so.2=usr/lib/libz.so.2
lib/libxml2.so.2=usr/lib/libxml2.so.2
lib/libfreetype.so.26=usr/lib/libfreetype.so.26
lib/libfreetype.so.24=usr/lib/libfreetype.so.24
lib/libbz2.so.1=usr/lib/libbz2.so.1
lib/liblzma.so.5=usr/lib/liblzma.so.5
lib/libbacktrace.so.1=usr/lib/libbacktrace.so.1
@@ -54,7 +54,7 @@ lib/libmmrndclient.so.1=usr/lib/libmmrndclient.so.1
lib/libscreen.so.1=usr/lib/libscreen.so.1
# for fontconfig
lib/libfontconfig.so.17=usr/lib/libfontconfig.so.17
lib/libfontconfig.so.1=usr/lib/libfontconfig.so.1
xbin/fc-cache=bin/fc-cache
xbin/fc-match=local/misc_files/fc-match
@@ -17,7 +17,7 @@ var/etc/fontconfig/fonts.conf=etc/fonts/fonts.conf
var/share/fonts=usr/share/fonts
var/etc/hosts=local/misc_files/etc/hosts
var/dhcpcd/resolv.conf=local/misc_files/etc/resolv.conf
var/etc/resolv.conf=local/misc_files/etc/resolv.conf
var/etc/nsswitch.conf=etc/nsswitch.conf
[uid=0 gid=0 dperms=755 type=dir] var/etc/ssl/certs
@@ -28,8 +28,6 @@ lib/liblzma.so.5=usr/lib/liblzma.so.5
lib/libdbus-1.so=usr/lib//libdbus-1.so
lib/libdbus-1.so.22=usr/lib//libdbus-1.so.22
lib/libbacktrace.so.1=lib/libbacktrace.so.1
lib/libunwind-nto.so.0=usr/lib/libunwind-nto.so.0
lib/libunwind-x86_64.so.8=usr/lib/libunwind-x86_64.so.8
lib/libm.so.3=lib/libm.so.3
#############################################
@@ -55,17 +53,13 @@ xbin/fsevmgr=sbin/fsevmgr
##############################################
lib/libscreen.so.1=usr/lib/libscreen.so.1
##############################################
### Audio support
##############################################
lib/libasound.so.5=lib/libasound.so.5
# for fontconfig
lib/libfontconfig.so.17=usr/lib/libfontconfig.so.17
xbin/fc-cache=bin/fc-cache
xbin/fc-match=local/misc_files/x86_64/fc-match
xbin/fc-match=local/misc_files/fc-match
# network
lib/libssl.so=usr/lib/libssl.so
xbin/nslookup=usr/bin/nslookup
xbin/unbound=sbin/unbound
xbin/curl=usr/bin/curl
+22 -20
View File
@@ -13,60 +13,60 @@ source "${BASH_SOURCE%/*}/../unix/SetEnvVar.sh"
######### VXworks libs #########
# Installs to /opt/vxworks
PrimaryUrl="http://ci-files01-hki.ci.qt.io/input/vxworks/vxworks_libs_2603.tar.gz"
PrimaryUrl="http://ci-files01-hki.ci.qt.io/input/vxworks/vxworks_libs_2503.tar.gz"
AltUrl=""
sha1="e9337894d4591e1d9e67640181c3d48fdb3d4a12"
sha1="96db52d86c2138a1ca31212372f48838ec08013e"
targetFolder="/opt"
InstallFromCompressedFileFromURL "$PrimaryUrl" "$AltUrl" "$sha1" "$targetFolder" ""
SetEnvVar "VXWORKS_HOME" "/opt/vxworks"
SetEnvVar "VXWORKS_SSH" "WindRiver@172.31.1.10"
# IMX 6
VXWORKS_BUILD_VER="20-08-2026"
VXWORKS_BUILD_VER="16-04-2025"
######### VXworks toolchain #########
# Installs to /opt/fsl_imx6_2_0_6_3_VSB
# Installs to /opt/fsl_imx6_2_0_6_2_VSB
PrimaryUrl="http://ci-files01-hki.ci.qt.io/input/vxworks/vxworks_arm_vsb_${VXWORKS_BUILD_VER}.tar.gz"
AltUrl=""
sha1="cb40acde7227aaefe8397e3472318fe09af2d9d0"
sha1="88f0f139ac62e8c0a4c5477d880a1ff345826479"
targetFolder="/opt/"
InstallFromCompressedFileFromURL "$PrimaryUrl" "$AltUrl" "$sha1" "$targetFolder" ""
SetEnvVar "WIND_CC_SYSROOT" "/opt/fsl_imx6_2_0_6_3_VSB"
SetEnvVar "WIND_CC_SYSROOT" "/opt/fsl_imx6_2_0_6_2_VSB"
######### VXworks VIP kernel #########
# Installs to /opt/fsl_imx6_2_0_6_3_VIP_QEMU
# Installs to /opt/fsl_imx6_2_0_6_2_VIP_QEMU
PrimaryUrl="http://ci-files01-hki.ci.qt.io/input/vxworks/vxworks_arm_vip_${VXWORKS_BUILD_VER}.tar.gz"
AltUrl=""
sha1="4209a8c2724fccfec9d30a22e53ca6598ef83b57"
sha1="96056c0f9b1234160db2d9038a9e6fc24a2bbbd7"
targetFolder="/opt/"
InstallFromCompressedFileFromURL "$PrimaryUrl" "$AltUrl" "$sha1" "$targetFolder" ""
# IMX 8
# Installs to /opt/nxp_imx8_1_0_7_1_VSB
# Installs to /opt/nxp_imx8_1_0_6_3_VSB
PrimaryUrl="http://ci-files01-hki.ci.qt.io/input/vxworks/vxworks_arm_imx8_vsb_${VXWORKS_BUILD_VER}.tar.gz"
AltUrl=""
sha1="20c1c31fc8ddc5356566a717a913e51bef42d41f"
sha1="cf6194b78bf08b894397fd5ce2a57abd25cf497b"
targetFolder="/opt/"
InstallFromCompressedFileFromURL "$PrimaryUrl" "$AltUrl" "$sha1" "$targetFolder" ""
# Installs to /opt/itl_generic_skylake_VSB
PrimaryUrl="http://ci-files01-hki.ci.qt.io/input/vxworks/vxworks_intel_vsb_${VXWORKS_BUILD_VER}.tar.gz"
AltUrl=""
sha1="dae9280a45f0ece5a2adc3bc6182ff0b675f4389"
sha1="4c75222364d3907db9fb1605cabe0c92616d9ec9"
targetFolder="/opt/"
InstallFromCompressedFileFromURL "$PrimaryUrl" "$AltUrl" "$sha1" "$targetFolder" ""
# Installs to /opt/itl_generic_skylake_VIP_QEMU
PrimaryUrl="http://ci-files01-hki.ci.qt.io/input/vxworks/vxworks_intel_vip_${VXWORKS_BUILD_VER}.tar.gz"
AltUrl=""
sha1="264b3280e6fa89c8c8a2b1cdc8cb29bd3f1bb621"
sha1="c3af7da92832ea71201dcf1022d7404966291f5c"
targetFolder="/opt/"
InstallFromCompressedFileFromURL "$PrimaryUrl" "$AltUrl" "$sha1" "$targetFolder" ""
######### VXworks fonts and certs #########
# Installs to /opt/fsl_imx6_2_0_6_3_VSB
# Installs to /opt/fsl_imx6_2_0_6_2_VSB
PrimaryUrl="http://ci-files01-hki.ci.qt.io/input/vxworks/vxworks_misc.tar.gz"
AltUrl=""
sha1="1bc529b90b35b0b249f219e47d5798225a9b68d8"
targetFolder="/opt/fsl_imx6_2_0_6_3_VSB/"
targetFolder="/opt/fsl_imx6_2_0_6_2_VSB/"
InstallFromCompressedFileFromURL "$PrimaryUrl" "$AltUrl" "$sha1" "$targetFolder" ""
######### VXworks fonts and certs #########
# Installs to /opt/itl_generic_skylake_VSB
@@ -76,13 +76,15 @@ sha1="1bc529b90b35b0b249f219e47d5798225a9b68d8"
targetFolder="/opt/itl_generic_skylake_VSB/"
InstallFromCompressedFileFromURL "$PrimaryUrl" "$AltUrl" "$sha1" "$targetFolder" ""
# Setup NFS exports that are needed by VxWorks qemu
sudo bash -c "echo '/home/qt/work 172.31.1.10/24(rw,sync,root_squash,no_subtree_check,anonuid=2001,anongid=100)' >> /etc/exports"
sudo bash -c "echo '/opt/fsl_imx6_2_0_6_2_VSB 172.31.1.10/24(rw,sync,root_squash,no_subtree_check,anonuid=2001,anongid=100)' >> /etc/exports"
sudo bash -c "echo '/opt/itl_generic_skylake_VSB 172.31.1.10/24(rw,sync,root_squash,no_subtree_check,anonuid=2001,anongid=100)' >> /etc/exports"
sudo exportfs -a
# Enable ipv4 routing from vxWorks to Qt DNS
if [ -f /etc/sysctl.conf ]; then
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
else
# There's no /etc/sysctl.conf in Ubuntu 26.04, use sysctl.d instead
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-vxworks.conf
fi
sudo sed -i s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g /etc/sysctl.conf
sudo iptables -I FORWARD 1 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
@@ -2,160 +2,57 @@
# 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
# Launch a single VxWorks QEMU emulator instance.
#
# Usage: vxworks_qemu_launcher.sh <arm|intel> [instance-id]
#
# Multiple instances are run in parallel to speed up the autotest run. Each
# instance gets its own tap device, guest IP, MAC address, serial FIFO pair,
# QEMU log and (for the TCG-based ARM emulator) a dedicated set of host CPU
# cores. Instance 0 keeps the historical addresses so a single-instance run
# behaves exactly as before.
[ $# -ge 1 ] || echo "Supply parameter which emulator to start <arm|intel> [instance-id]"
TYPE=$1
INSTANCE=${2:-0}
# Per-instance identifiers. Instance 0 == the original single-emulator layout.
TAP="tap${INSTANCE}"
GUEST_IP="172.31.1.$((10 + INSTANCE))"
MAC=$(printf '52:54:00:12:34:%02x' "$INSTANCE")
PIPE="/tmp/guest${INSTANCE}"
QEMU_LOG_PATH="/home/qt/work/vxworks_qemu_log_${INSTANCE}.txt"
# Per-instance SSH target: same user as VXWORKS_SSH, but the instance's IP.
if [[ "$VXWORKS_SSH" == *"@"* ]]; then
SSH_TARGET="${VXWORKS_SSH%@*}@${GUEST_IP}"
else
SSH_TARGET="${GUEST_IP}"
fi
# Host bridge and per-instance tap setup. Serialized across parallel launches
# and made idempotent so concurrent instances don't race on the shared bridge.
exec 9>"/tmp/vxworks_qemu_host_setup.lock"
flock 9
NFS_CONF_MARKER="# VxWorks QEMU NFS settings (added by vxworks_qemu_launcher.sh)"
# Persist the sysctl settings so they survive the reboot between the build
# and test phases, then apply them to the running kernel as well.
SYSCTL_CONF="/etc/sysctl.d/90-vxworks-qemu.conf"
if [ ! -f "$SYSCTL_CONF" ]; then
sudo tee "$SYSCTL_CONF" >/dev/null <<'EOF'
# VxWorks QEMU network settings (added by vxworks_qemu_launcher.sh)
net.core.rmem_max=8388608
net.core.rmem_default=8388608
net.core.wmem_max=8388608
net.core.wmem_default=8388608
net.ipv4.ipfrag_high_thresh=16777216
net.ipv4.ipfrag_low_thresh=12582912
EOF
fi
sudo sysctl -q -p "$SYSCTL_CONF"
if ! grep -qF "$NFS_CONF_MARKER" /etc/nfs.conf; then
# Configure NFS for UDP traffic
sudo bash -c "echo -e '\n${NFS_CONF_MARKER}\n' >> /etc/nfs.conf"
sudo bash -c "echo -e '[nfsd]\n' >> /etc/nfs.conf"
sudo bash -c "echo -e 'threads=32\n' >> /etc/nfs.conf"
sudo bash -c "echo -e 'udp=y\n' >> /etc/nfs.conf"
sudo bash -c "echo -e 'tcp=n\n' >> /etc/nfs.conf"
sudo bash -c "echo -e 'vers2=n\n' >> /etc/nfs.conf"
sudo bash -c "echo -e 'vers3=y\n' >> /etc/nfs.conf"
sudo bash -c "echo -e 'vers4=n\n' >> /etc/nfs.conf"
# Setup NFS exports that are needed by VxWorks qemu
sudo bash -c "echo '/home/qt/work 172.31.1.10/24(rw,async,root_squash,no_subtree_check,anonuid=2001,anongid=100)' >> /etc/exports"
sudo bash -c "echo '/opt/fsl_imx6_2_0_6_3_VSB 172.31.1.10/24(rw,async,root_squash,no_subtree_check,anonuid=2001,anongid=100)' >> /etc/exports"
sudo bash -c "echo '/opt/itl_generic_skylake_VSB 172.31.1.10/24(rw,async,root_squash,no_subtree_check,anonuid=2001,anongid=100)' >> /etc/exports"
# Restart NFS server
sudo exportfs -ra
sudo systemctl restart nfs-server
fi
# Setup bridge if not exist for VxWorks QEMU
if ! ip link show br0 >/dev/null 2>&1; then
sudo brctl addbr br0
sudo brctl stp br0 off
sudo ifconfig br0 172.31.1.1 netmask 255.255.255.0 promisc up
sudo tunctl -u qt -t tap0
sudo ifconfig tap0 promisc up
sudo brctl addif br0 tap0
fi
if ! ip link show "${TAP}" >/dev/null 2>&1; then
sudo tunctl -u qt -t "${TAP}"
sudo ifconfig "${TAP}" promisc up
sudo brctl addif br0 "${TAP}"
fi
exec 9>&-
[ $# -eq 1 ] || echo "Supply parameter which emulator to start <arm|intel>"
TYPE=$1
QEMU_LOG_PATH="/home/qt/work/vxworks_qemu_log.txt"
if [ "$TYPE" = "arm" ] || [ "$TYPE" = "" ]; then
$VXWORKS_QEMU/bin/qemu-system-arm \
-machine sabrelite \
-smp 2 \
-m 3G \
-smp 4 \
-m 1G \
-nographic \
-monitor none \
-serial null \
-serial pipe:${PIPE} \
-kernel /opt/fsl_imx6_2_0_6_3_VIP_QEMU/default/uVxWorks \
-dtb /opt/fsl_imx6_2_0_6_3_VIP_QEMU/default/imx6q-sabrelite.dtb \
-append "enet(0,0)host:vxWorks h=172.31.1.1 g=172.31.1.1 e=${GUEST_IP} u=target pw=vxTarget s=/romfs/startup_script.txt" \
-rtc base=localtime,clock=rt \
-icount sleep=off \
-nic "tap,ifname=${TAP},script=no,mac=${MAC}" >"${QEMU_LOG_PATH}" 2>&1 &
-serial pipe:/tmp/guest \
-kernel /opt/fsl_imx6_2_0_6_2_VIP_QEMU/default/uVxWorks \
-dtb /opt/fsl_imx6_2_0_6_2_VIP_QEMU/default/imx6q-sabrelite.dtb \
-append "enet(0,0)host:vxWorks h=172.31.1.1 g=172.31.1.1 e=172.31.1.10 u=target pw=vxTarget s=/romfs/startup_script.txt" \
-nic "tap,ifname=tap0,script=no" >"${QEMU_LOG_PATH}" 2>&1 &
elif [ "$TYPE" = "intel" ]; then
$VXWORKS_QEMU/bin/qemu-system-x86_64 \
-M q35 \
-smp 4 \
-m 15G \
-smp 8 \
-m 16G \
-cpu "Skylake-Client" \
-enable-kvm \
-monitor none \
-nographic \
-serial null \
-serial pipe:${PIPE} \
-serial pipe:/tmp/guest \
-kernel "/opt/itl_generic_skylake_VIP_QEMU/default/vxWorks" \
-append "sysbootline:gei(0,0)host:vxWorks h=172.31.1.1 g=172.31.1.1 e=${GUEST_IP} u=target pw=vxTarget s=/romfs/startup_script.txt" \
-nic "tap,ifname=${TAP},script=no,downscript=no,mac=${MAC}" >"${QEMU_LOG_PATH}" 2>&1 &
-append "sysbootline:gei(0,0)host:vxWorks h=172.31.1.1 g=172.31.1.1 e=172.31.1.10 u=target pw=vxTarget s=/romfs/startup_script.txt" \
-nic tap,ifname=tap0,script=no,downscript=no >"${QEMU_LOG_PATH}" 2>&1 &
fi
QEMU_PID=$!
# The launcher is also re-invoked from inside the ctest environment when
# coin_vxworks_qemu_runner.sh restarts a wedged emulator. That environment
# carries a library path with the provisioned OpenSSL, which the system ssh
# (linked against the distro OpenSSL) refuses to load ("OpenSSL version
# mismatch"), so run ssh with a clean library path. Bound each probe with a
# hard timeout as well: ConnectTimeout only limits TCP connect, and a
# half-booted guest that accepts the connection but never answers would
# otherwise stall the loop.
#
# Boot-to-ssh takes seconds on KVM x86 but 15-60s+ on TCG ARM, with a long
# tail when several instances boot in parallel (a fixed 30-try budget killed
# healthy relaunches mid-boot on qemu_armv7), so wait on a wall-clock
# deadline rather than a retry count, and give up early only when the QEMU
# process itself has died.
SSH_WAIT_SECS=${VXWORKS_SSH_WAIT_SECS:-300}
SSH_UP=0
deadline=$((SECONDS + SSH_WAIT_SECS))
while (( SECONDS < deadline ))
for _ in $(seq 30)
do
if [[ -n "$QEMU_PID" ]] && ! kill -0 "$QEMU_PID" 2>/dev/null; then
echo "QEMU process for instance ${INSTANCE} exited during boot"
break
fi
status=$(env -u LD_LIBRARY_PATH timeout -k 5 15 \
ssh -n -o BatchMode=yes -o HostKeyAlgorithms=+ssh-rsa \
-o ConnectTimeout=1 "${SSH_TARGET}" echo emulator up) || true
status=$(ssh -o BatchMode=yes -o HostKeyAlgorithms=+ssh-rsa -o ConnectTimeout=1 "${VXWORKS_SSH}" echo emulator up) || true
if [[ $status == *"emulator up"* ]] ; then
echo "VXWORKS QEMU SSH server up (instance ${INSTANCE} @ ${GUEST_IP})"
SSH_UP=1
echo "VXWORKS QEMU SSH server up"
break
else
echo "Waiting VXWORKS QEMU SSH server (instance ${INSTANCE} @ ${GUEST_IP})"
echo "Waiting VXWORKS QEMU SSH server"
sleep 1
fi
done
# Do not report success for an instance whose SSH server never came up: the
# caller would go on to source the test script on a guest in an unknown
# state. Exit non-zero so the testrunner's restart path can fail the attempt
# and let qt-testrunner retry with a clean slot.
if [[ $SSH_UP -ne 1 ]]; then
echo "VXWORKS QEMU SSH server did not come up (instance ${INSTANCE} @ ${GUEST_IP})"
exit 1
fi
+5 -2
View File
@@ -25,8 +25,8 @@ basePath="http://ci-files01-hki.ci.qt.io/input/android"
toolsVersion="19.0"
toolsFile="commandlinetools-mac-13114758_latest.zip"
toolsBackupUrl="https://dl.google.com/android/repository/$toolsFile"
sdkBuildToolsVersion="37.0.0"
sdkApiLevel="android-37.0"
sdkBuildToolsVersion="35.0.1"
sdkApiLevel="android-35"
toolsSha1="c3e06a1959762e89167d1cbaa988605f6f7c1d24"
ndkVersionLatest="r27c"
@@ -43,6 +43,9 @@ ndkVersionNightly1=$ndkVersionLatest # Set as same version as latest = skip NDK
ndkSha1Nightly1=$ndkSha1Latest
ndkVersionNightly2=$ndkVersionLatest
ndkSha1Nightly2=$ndkSha1Latest
sdkBuildToolsVersion="36.0.0"
# this is compile sdk version
sdkApiLevel="android-36"
toolsTargetFile="/tmp/$toolsFile"
toolsSourceFile="$basePath/$toolsFile"
+3 -3
View File
@@ -11,11 +11,11 @@ source "${BASH_SOURCE%/*}/InstallAppFromCompressedFileFromURL.sh"
# shellcheck source=../unix/SetEnvVar.sh
source "${BASH_SOURCE%/*}/../unix/SetEnvVar.sh"
majorminorversion="4.3"
version="4.3.2"
majorminorversion="3.30.5"
version="3.30.5"
PrimaryUrl="http://ci-files01-hki.ci.qt.io/input/cmake/cmake-$version-macos-universal.tar.gz"
AltUrl="https://cmake.org/files/v$majorminorversion/cmake-$version-macos-universal.tar.gz"
SHA1="e3b456c03d992239f9d83d933336768c7fc1ff54"
SHA1="c81c2f7482a901c4a32a81034920c23c22233a0f"
appPrefix="cmake-$version-macos-universal"
InstallAppFromCompressedFileFromURL "$PrimaryUrl" "$AltUrl" "$SHA1" "$appPrefix"
@@ -1,3 +1,2 @@
diffutils
nasm
yasm
+13 -100
View File
@@ -9,105 +9,18 @@ source "${BASH_SOURCE%/*}/../unix/DownloadURL.sh"
# shellcheck source=../unix/SourceEnvVars.sh
source "${BASH_SOURCE%/*}/../unix/SourceEnvVars.sh"
echo "Caching Gradle distributions and dependencies"
echo "Caching Gradle distribution and dependencies"
gradleCacheFileName="gradle_9.3.1_darwin_cache_v2.tar.gz"
gradleCacheUrl="http://ci-files01-hki.ci.qt.io/input/gradle/$gradleCacheFileName"
gradleCacheSha1="d4f93be293224e3d55779cf64252337fbb26b53b"
gradleCacheFile="/tmp/$gradleCacheFileName"
DownloadURL "$gradleCacheUrl" "$gradleCacheUrl" "$gradleCacheSha1" "$gradleCacheFile"
mkdir -p "$HOME/.gradle"
tar -xzf "$gradleCacheFile" -C "$HOME/.gradle" --strip-components=1
rm "$gradleCacheFile"
gradle_project_source="${BASH_SOURCE%/*}/../shared/gradle/project"
gradleDistributionMirror="http://ci-files01-hki.ci.qt.io/input/gradle"
gradleInitScript="init.d/nexus-mirror.gradle"
# Route every Gradle repository through the internal Nexus mirror.
mkdir -p "$HOME/.gradle/init.d"
cp "${BASH_SOURCE%/*}/../shared/gradle/$gradleInitScript" "$HOME/.gradle/$gradleInitScript"
# Returns the hash of the Gradle binary distribution for a given Gradle version.
# Gradle calculates the hash as base36(md5(distributionUrl)).
gradleDistributionHash () {
version="$1"
propertiesFile="$gradle_project_source/gradle/wrapper/gradle-wrapper.properties"
# 1. Read the project's distributionUrl.
distributionUrl=$(grep '^distributionUrl=' "$propertiesFile")
distributionUrl=${distributionUrl#distributionUrl=}
# 2. Unescape the Java-properties (e.g. '\:').
distributionUrl=${distributionUrl//\\:/:}
# 3. Swap in the requested version while maintaining the distribution URL.
distributionUrl=${distributionUrl/gradle-[0-9.]*-bin.zip/gradle-$version-bin.zip}
if command -v md5sum >/dev/null 2>&1; then
md5Hex=$(printf '%s' "$distributionUrl" | md5sum | awk '{print $1}')
else
md5Hex=$(printf '%s' "$distributionUrl" | md5)
fi
# Convert the md5 to base36: read it as a number, then repeatedly take the
# next digit (number % 36) and divide by 36, prepending each digit's character.
number=$(printf 'ibase=16; %s\n' "$(printf '%s' "$md5Hex" | tr 'a-f' 'A-F')" | bc)
hash=""
alphabet="0123456789abcdefghijklmnopqrstuvwxyz"
while [ "$number" != "0" ]; do
digit=$(printf '%s %% 36\n' "$number" | bc)
number=$(printf '%s / 36\n' "$number" | bc)
hash="${alphabet:$digit:1}$hash"
done
printf '%s' "$hash"
}
# Seed a Gradle distribution binary into ~/.gradle from the internal mirror.
seedGradleDistribution () {
version="$1"
sha="$2"
distributionDir="$HOME/.gradle/wrapper/dists/gradle-${version}-bin/$(gradleDistributionHash "$version")"
if [ -e "$distributionDir/gradle-${version}-bin.zip.ok" ]; then
return 0
fi
mkdir -p "$distributionDir"
zip="$distributionDir/gradle-${version}-bin.zip"
url="$gradleDistributionMirror/gradle-${version}-bin.zip"
DownloadURL "$url" "$url" "$sha" "$zip"
unzip -q -o "$zip" -d "$distributionDir"
rm -f "$zip"
touch "$distributionDir/gradle-${version}-bin.zip.ok"
}
# Populate ~/.gradle/caches by priming the shared project for each Gradle and AGP profile.
cacheGradleProfile () {
echo "Caching Gradle profile $*"
tmp="$(mktemp -d)"
project="$tmp/project"
cp -r "$gradle_project_source" "$project"
props="$project/gradle/wrapper/gradle-wrapper.properties"
for kv in "$@"; do
case "$kv" in
gradle=*)
sed "s#gradle-[0-9.]*-bin.zip#gradle-${kv#*=}-bin.zip#" "$props" > "$props.tmp"
mv "$props.tmp" "$props"
;;
esac
done
toml="$project/gradle/libs.versions.toml"
for kv in "$@"; do
case "$kv" in
gradle=*) ;;
*)
key="${kv%%=*}"
val="${kv#*=}"
sed "/^\[versions\]/,/^\[/ s/^$key = .*/$key = \"$val\"/" "$toml" > "$toml.tmp"
mv "$toml.tmp" "$toml"
;;
esac
done
sh "$project/gradlew" --project-dir "$project" build
rm -rf "$tmp"
}
# Cache both the current and the previous versions to avoid issues during bumps.
seedGradleDistribution 9.3.1 "b266d5ff6b90eada6dc3b20cb090e3731302e553a27c5d3e4df1f0d76beaff06"
cacheGradleProfile gradle=9.3.1 agp=9.0.0
seedGradleDistribution 9.5.1 "bafc141b619ad6350fd975fc903156dd5c151998cc8b058e8c1044ab5f7b031f"
cacheGradleProfile gradle=9.5.1 agp=9.2.1
echo "Cached Gradle distributions and dependencies under $HOME/.gradle."
cp -r "$gradle_project_source" /tmp/gradle_project
cd /tmp/gradle_project
chmod +x gradlew
sh gradlew build
@@ -1,68 +0,0 @@
#!/usr/bin/env bash
# Copyright (C) 2025 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
# This script install HarmonyOS sdk and patches.
set -e
# shellcheck source=../unix/DownloadURL.sh
source "${BASH_SOURCE%/*}/../unix/DownloadURL.sh"
# shellcheck source=../unix/check_and_set_proxy.sh
source "${BASH_SOURCE%/*}/../unix/check_and_set_proxy.sh"
# shellcheck source=../unix/SetEnvVar.sh
source "${BASH_SOURCE%/*}/../unix/SetEnvVar.sh"
targetFolder="/opt/harmonyos"
sdkTargetFolder="$targetFolder/command-line-tools"
sudo mkdir -p "$sdkTargetFolder"
basePath="http://ci-files01-hki.ci.qt.io/input/harmonyos"
toolsVersion="6.1.0.860"
toolsFile="commandline-tools-mac-arm64-6.1.0.860.zip"
toolsSha1="4ba9df069fc5c651753c74297d723a2461be12e9"
toolsTargetFile="/tmp/$toolsFile"
toolsSourceFile="$basePath/$toolsFile"
echo "Download and unzip HarmonyOS SDK"
DownloadURL "$toolsSourceFile" "$toolsSourceFile" "$toolsSha1" "$toolsTargetFile"
echo "Unzipping HarmonyOS Tools to '$targetFolder'"
sudo unzip -q "$toolsTargetFile" -d "$targetFolder"
rm "$toolsTargetFile"
patchFile="harmonyos_sdk_patches.zip"
patchSha1="7f912104a5600bc176891bc6e9d97732f4266ad6"
patchTargetFile="/tmp/$patchFile"
patchSourceFile="$basePath/$patchFile"
patchTargetFolder="$targetFolder/harmonyos_sdk_patches"
echo "Download and unzip HarmonyOS SDK patches"
DownloadURL "$patchSourceFile" "$patchSourceFile" "$patchSha1" "$patchTargetFile"
echo "Unzipping HarmonyOS SDK patches to '$targetFolder'"
sudo unzip -q "$patchTargetFile" -d "$targetFolder"
rm "$patchTargetFile"
echo "Changing ownership of HarmonyOS files."
sudo chown -R qt:wheel "$sdkTargetFolder"
sudo chmod -R 755 $sdkTargetFolder
sudo chown -R qt:wheel "$patchTargetFolder"
sudo chmod -R 755 $patchTargetFolder
echo "Patching HarmonyOS SDK"
sdkRootFolder="$sdkTargetFolder/sdk/default/openharmony"
echo "Checking the contents of HarmonyOS SDK..."
ls -l "$sdkRootFolder"
SetEnvVar "HARMONYOS_SDK_ROOT" "$sdkRootFolder"
export HARMONYOS_SDK_ROOT="$sdkRootFolder"
# Same meaning as on Linux: the command-line-tools root, which holds hvigorw.
SetEnvVar "HARMONYOS_SDK_ROOT_CURRENT" "$sdkTargetFolder"
export HARMONYOS_SDK_ROOT_CURRENT="$sdkTargetFolder"
echo "HarmonyOS SDK setup finished"
@@ -102,6 +102,7 @@ build_ffmpeg_ios() {
--extra-ldflags="${common_arch_flags}"
--target-os=darwin
--install-name-dir="@rpath"
--disable-audiotoolbox
# We perform manual stripping after generating dSYMs.
# Make sure to skip it during FFmpeg compilation.
@@ -22,12 +22,6 @@ ffmpeg_config_options=$(get_ffmpeg_config_options "shared")
default_prefix="/usr/local/$ffmpeg_name"
prefix="${2:-$default_prefix}"
# Disable X11 linkage on macOS. FFmpeg auto-detect
# mechanisms will pull it in as a dependency if found
# on the host. If this happens, it makes the binaries
# not loadable on macOS machines without libx11 installed.
ffmpeg_config_options+=" --disable-libxcb --disable-xlib"
build_ffmpeg() {
local arch="$1"
local build_dir="$ffmpeg_source_dir/build/$arch"
@@ -58,12 +58,7 @@ function InstallXCode() {
# Xcode 26 ships a more minimal base install
if ((majorVersion >= 26)); then
xcodebuild -downloadComponent MetalToolchain
if ((majorVersion >= 27)); then
# No more universal iOS simulator in Xcode 27
xcodebuild -downloadPlatform iOS
else
xcodebuild -downloadPlatform iOS -architectureVariant universal
fi
xcodebuild -downloadPlatform iOS
if [[ $(uname -m) == "arm64" ]]; then
xcodebuild -downloadPlatform visionOS
fi
+1 -1
View File
@@ -34,6 +34,6 @@ SetEnvVar "SBOM_PYTHON_APPS_PATH" "/Library/Frameworks/Python.framework/Versions
SetEnvVar "SBOM_PYTHON_INTERP_PATH" "/Library/Frameworks/Python.framework/Versions/3.11/bin/python3"
# Install Python certificates. Required at least for emsdk installation
/Applications/Python\ 3.11/Install\ Certificates.command
open /Applications/Python\ 3.11/Install\ Certificates.command
echo "python3 = 3.11.9" >> ~/versions.txt
@@ -1,39 +0,0 @@
// Copyright (C) 2026 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
// Installed by Coin into $GRADLE_USER_HOME/init.d to route every gradle
// invocation's repositories through the internal Nexus mirror.
def mirror = 'https://ci-passth-cache.ci.qt.io/repository/gradle-all/'
def addMirror = { repositories ->
repositories.maven { mavenRepository ->
mavenRepository.name = 'qt-nexus-mirror'
mavenRepository.url = mirror
}
}
def enforceMirror = { repositories ->
repositories.all { repository ->
if (repository.name != 'qt-nexus-mirror')
repositories.remove(repository)
}
addMirror(repositories)
}
// Modern templates: replace the settings-level repositories with the mirror.
settingsEvaluated { settings ->
settings.pluginManagement.repositories.clear()
addMirror(settings.pluginManagement.repositories)
settings.dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.PREFER_PROJECT)
repositories.clear()
addMirror(repositories)
}
}
// Legacy templates: replace the buildscript and project repositories with the mirror.
allprojects { project ->
enforceMirror(project.buildscript.repositories)
enforceMirror(project.repositories)
}
@@ -7,9 +7,7 @@ which use `--offline`.
Caches dependencies for:
- `com.android.application`: used by Qt test/example APK builds
- `com.android.library`: used by Qt JAR builds
- `android.dynamic.feature`: used by Feature Delivery tests
- `org.jetbrains.kotlin.android`: used by some Qt modules
- `org.qtproject.qt.gradleplugin`: used by Qt for Android Studio projects
- AndroidX: used by app builds
These files should be updated each time Qt bumps the supported Android or
@@ -4,21 +4,17 @@ plugins {
android {
namespace = 'org.qtproject.qt.gradlecache.app'
compileSdk = 37
compileSdkMinor = 0
compileSdk = 36
defaultConfig {
applicationId 'org.qtproject.qt.gradlecache.app'
minSdk = 28
}
dynamicFeatures = [':feature']
}
dependencies {
implementation libs.core
implementation libs.appcompat
implementation libs.material
implementation libs.play.feature.delivery
testImplementation libs.junit
}
@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="feature_title">Feature</string>
</resources>
@@ -1,6 +1,4 @@
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
alias(libs.plugins.android.dynamic.feature) apply false
alias(libs.plugins.qt.gradle.plugin) apply false
}
@@ -1,18 +0,0 @@
plugins {
alias(libs.plugins.android.dynamic.feature)
}
android {
namespace = 'org.qtproject.qt.gradlecache.feature'
compileSdk = 37
compileSdkMinor = 0
defaultConfig {
minSdk = 28
}
}
dependencies {
implementation project(':app')
implementation libs.play.feature.delivery
}
@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:dist="http://schemas.android.com/apk/distribution">
<dist:module
dist:instant="false"
dist:title="@string/feature_title">
<dist:delivery>
<dist:on-demand />
</dist:delivery>
<dist:fusing dist:include="true" />
</dist:module>
</manifest>
@@ -1,5 +0,0 @@
package org.qtproject.qt.gradlecache.feature
object Feature {
fun hello(): String = "hello"
}
@@ -1,21 +1,16 @@
[versions]
agp = "9.2.1"
agp = "9.0.0"
core = "1.17.0"
appcompat = "1.7.1"
material = "1.13.0"
junit = "4.13.2"
play-feature-delivery = "2.1.0"
qt-gradle-plugin = "1.4"
[libraries]
core = { group = "androidx.core", name = "core", version.ref = "core" }
appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
junit = { group = "junit", name = "junit", version.ref = "junit" }
play-feature-delivery = { module = "com.google.android.play:feature-delivery", version.ref = "play-feature-delivery" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.library", version.ref = "agp" }
android-dynamic-feature = { id = "com.android.dynamic-feature", version.ref = "agp" }
qt-gradle-plugin = { id = "org.qtproject.qt.gradleplugin", version.ref = "qt-gradle-plugin" }
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
@@ -4,8 +4,7 @@ plugins {
android {
namespace = 'org.qtproject.qt.gradlecache.lib'
compileSdk = 37
compileSdkMinor = 0
compileSdk = 36
defaultConfig {
minSdk = 28

Some files were not shown because too many files have changed in this diff Show More