summaryrefslogtreecommitdiffstats
path: root/qmake
Commit message (Collapse)AuthorAgeFilesLines
* qmake: Update documentation that c++17 is the defaultKai Köhne2021-02-191-2/+2
| | | | | | | Since commit 4933a5f8923, CONFIG contains C++17 by default. Change-Id: I1033c256242c03d79a643c12a63d17eb9f4c705f Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* qmake: Introduce QT_HOST_LIBEXECS propertyJoerg Bornemann2021-02-182-0/+4
| | | | | | | | | This will be used to access host tools that are installed in ${prefix}/libexec instead of ${prefix}/bin. Pick-to: 6.1 Change-Id: I36c4b5736330f8229d267a117c65d55cd5e12758 Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* Update name of c++2a to c++20Kai Köhne2021-02-101-4/+5
| | | | | | | | | | Keep the c++2a feature, but make it an alias for compatibility purposes. Pick-to: 6.1 Change-Id: I6f153109be84659806f1b7a57a88a187875166d8 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* qmake: Introduce compile_included_sources CONFIG optionJoerg Bornemann2021-02-083-4/+13
| | | | | | | | | | | By default, qmake does not compile source files that are included in other source files. The new CONFIG option compile_included_sources disables this behavior. Pick-to: 5.15 Fixes: QTBUG-90801 Change-Id: I60c997938895f3a743d32ea385efdbe6bcf315bb Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* QLibraryInfo: Rename Qml2ImportsPath to QmlImportsPathUlf Hermann2021-02-081-1/+1
| | | | | | | | | | The "2" is meaningless. We retain the old name as alias for source compatibility, but we don't document it anymore. Task-number: QTBUG-85064 Change-Id: Id10d58f6d39a0faaec042304b374ae6b23469362 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
* Remove usage of the definitions that are never definedAlexey Edelev2021-02-011-2/+0
| | | | | | | | The QT_BUILD_QMAKE_BOOTSTRAP and QT_BUILD_QMAKE_LIBRARY definitions are never defined in the project since migrating to CMake build. Change-Id: I7108c92387005a2fde6ebdb2d74843e3efc6413e Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* If available, use a version-specific qt<major-version>.confRalf Habacker2021-01-141-3/+10
| | | | | | | | | | | To enable the current Qt version to use a qt.conf that is independent from the previous version, a file named 'qt<major-version>.conf' is searched for first. If this file does not exist, a file with the name 'qt.conf' is searched for. Task-number: QTBUG-88635 Change-Id: If75b63f72a7bdbdf1de7729ea4ecb00810b58d12 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
* Remove .prev_CMakeLists.txt filesJoerg Bornemann2021-01-121-235/+0
| | | | | | | | | | Those serve no purpose anymore, now that the .pro files are gone. Task-number: QTBUG-88742 Change-Id: I39943327b8c9871785b58e9973e4e7602371793e Reviewed-by: Cristian Adam <cristian.adam@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* Replace some more erase/remove patterns with removeIfGiuseppe D'Angelo2021-01-101-1/+1
| | | | | Change-Id: I6c6f33450fbfd798e5ef71a8ba18f590581dc3a2 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Remove the qmake project filesJoerg Bornemann2021-01-072-291/+0
| | | | | | | | | | | | | | | | Remove the qmake project files for most of Qt. Leave the qmake project files for examples, because we still test those in the CI to ensure qmake does not regress. Also leave the qmake project files for utils and other minor parts that lack CMake project files. Task-number: QTBUG-88742 Change-Id: I6cdf059e6204816f617f9624f3ea9822703f73cc Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* Adjust the format of code blocksHou Lei2021-01-041-4/+4
| | | | | | Change-Id: Id4a98b8b6f66ea4ea18eb90b86c1b84b6342e825 Reviewed-by: Hou Lei <houlei@uniontech.com> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Remove qmake-related code from configureJoerg Bornemann2020-12-216-940/+0
| | | | | | | | | | | | This leaves a very simple script that delegates the heavy configure work to a CMake script. This also removes the Makefile templates that were used for bootstrapping qmake. Task-number: QTBUG-88742 Change-Id: Iab9c477e0bb611d680bda2cf8aaa7ad88356a8d1 Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* CMake: Regenerate projects using pro2cmake one last timeAlexandru Croitor2020-12-101-0/+1
| | | | | | | | | And fix up some wrong qmake project files Pick-to: 6.0 Change-Id: I66cb82aeb9c1419a74df1a650fa78a511ade7443 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Use (new) erase()/erase_if() algorithmsMarc Mutz2020-12-054-18/+7
| | | | | Change-Id: I45c18fd45c20b226e44d16315e3ebb6c305d4ab0 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix undefined behavior in ProString/ProKey::appendToJoerg Bornemann2020-12-021-0/+4
| | | | | | | | | We must not pass null pointers to memcpy. Pick-to: 6.0 Fixes: QTBUG-88780 Change-Id: Ic1d77b4672310a3f6d0d4fbee5f2889e3e4d219d Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Replace discouraged Q_MOVABLE_TYPE by Q_RELOCATABLE_TYPEAndreas Buhr2020-11-306-9/+9
| | | | | | | | | | | | | | Q_MOVABLE_TYPE was conceived before C++ had move semantics. Now, with move semantics, its name is misleading. Q_RELOCATABLE_TYPE was introduced as a synonym to Q_MOVABLE_TYPE. Usage of Q_MOVABLE_TYPE is discouraged now. This patch replaces all usages of Q_MOVABLE_TYPE by Q_RELOCATABLE_TYPE in QtBase. As the two are synonymous, this patch should have no impact on users. Pick-to: 6.0 Change-Id: Ie653984363198c1aeb1f70f8e0fa189aae38eb5c Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
* Change android target SDK version to 29Fabio Falsini2020-11-261-1/+1
| | | | | | | | | Play Store now accept only app with target SDK version set to 29 or above Pick-to: 6.0 Change-Id: If38f20c88fd6b0e6f29939cdf3d2eb793c0e1489 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
* qmake: Sync back changes from qttoolsJoerg Bornemann2020-11-263-2/+13
| | | | | | | | | | | | | | | | Copy back changes to qmake internals that were done in qttools. This makes it easier to keep the qmakelib copies in sync. The code guarded by PROEVALUATOR_CUMULATIVE is not used by qmake itself, but only by lupdate and Qt Creator. It seems to be sensible to have the same behavior with regards to feature file evaluation in both projects. It was originally introduced in qttools for QTBUG-62478. The change regarding QT_BOOTSTRAPPED is safe, because the 'process' feature is available and off in the boostrapped case. Change-Id: I030ca8b093c017040a9ff9f4bb09a7cca4aa8964 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Doc: Fix documentation of qmake's exists() functionJoerg Bornemann2020-11-241-2/+3
| | | | | | | | | This function may take a wildcard expression, not a general regular expression. Pick-to: 5.15 Change-Id: Ia7ba3bac47c310bc035620583b9d2102fdc5ffb0 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
* QFileInfo: mark constructors as explicitGiuseppe D'Angelo2020-11-151-2/+2
| | | | | | | | | | | | | | | | | | | | | | | These look like leftovers (API flaws). Construction of QFileInfo from QString (or similar) should be not implicit, as QFileInfo construction is expensive (might hit the file system), and this may have users overlook APIs (for instance build a QFileInfo out of QDirIterator::next(), instead of using ::fileInfo(); using QDir::entryList instead of entryInfoList; etc.). Leave an opt-out mechanism to ease porting. Fix a handful of usages around qtbase, with at least a couple of them likely to be actual "sloppy" code. [ChangeLog][Potentially Source-Incompatible Changes][QFileInfo] Most QFileInfo constructors are now explicit. The QT_IMPLICIT_QFILEINFO_CONSTRUCTION macro is provided to keep old code working. Change-Id: Ic580e6316e67edbc840aa0c60d98c7aaabaf1af6 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Build Qt (and client apps using it) with /permissive-Giuseppe D'Angelo2020-11-101-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | *Not* using /permissive- exposes Qt and client apps to interesting bugs and/or build failures, (e.g. QTBUG-87225, or 19b5520abfb5f66d4b83c7a18cc72d68673d098a). We demand strict conformance by any other compiler, it's time to demand it from MSVC too. The Windows headers themselves are clean starting from the Windows Fall Creators SDK (10.0.16299.0), and moreover Qt 6 will drop WinRT; therefore, the comment in the mkspecs does not apply any more. Since /permissive- implies /Zc:referenceBinding, drop that option. The other implied options are set on MSVC < 2017, but I leave them in to avoid tinkering with the fragile lists of C/C++ flags. Rename the CMake internal helper function to better describe what it does. Fixes: QTBUG-85633 Fixes: QTBUG-85637 Fixes: QTBUG-85635 Fixes: QTBUG-88244 Change-Id: Ie03fddb61aa066fdc14b7231c22e7108b4a02fbb Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Kai Koehne <kai.koehne@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Android: recommend against using ANDROID_ABIS inside the project fileAssam Boudjelthia2020-11-101-7/+3
| | | | | | | Pick-to: 5.15 Task-number: QTCREATORBUG-24674 Change-Id: Iad6baa1af61d3d1a44f26cb9d51e3cb97d235707 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Add new way to mess up projects with QMAKE_INSTALL_REPLACEMichal Klocek2020-11-092-5/+14
| | | | | | | | | | | | | | | | | | | | | Qmake supports currently: * QMAKE_PRL_INSTALL_REPLACE, * QMAKE_LIBTOOL_INSTALL_REPLACE * QMAKE_PKGCCONFIG_INSTALL_REPLACE Introduce QMAKE_INSTALL_REPLACE, where more sed magic can be put in action in more generic manner. replace_foo.filename = foo.h replace_foo.matches = /bad/looking/path/to/foo replace_foo.replace = /awesome/looking/path/to/foo QMAKE_INSTALL_REPLACE += replace_foo Pick-to: 5.15 Task-number: QTBUG-87154 Change-Id: Ie43d0ab4f1d4575bbf6279eb36383f38047484d9 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Minor refactor of installMetaFileMichal Klocek2020-11-092-20/+27
| | | | | | | | | | Move some lines into createSedArgs. This is used in follow up patch. Pick-to: 5.15 Task-number: QTBUG-87154 Change-Id: I226f4aad4aaf703a4726c42b40afb4bde3a9d878 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* qmake/vcxproj: Fix handling of extra compiler outputsJoerg Bornemann2020-11-021-1/+1
| | | | | | | | | | | | | | In commit 68866b1a7bcade79e425f609fc1680203b89112e we introduced a bug: At a point where the first output of an extra compiler is extracted, we try to evaluate the first output as qmake variable. This is as nonsensical as it sounds and leads to malformed extra compiler output in vcxproj files. Pick-to: 5.15 Task-number: QTBUG-87601 Change-Id: Ib9aaf8a6eed8c69243f364554325c240d0bfc7f4 Reviewed-by: Miguel Costa <miguel.costa@qt.io> Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* Android: fix documentation about ANDROID_EXTRA_LIBSAssam Boudjelthia2020-11-021-8/+13
| | | | | | | | | ANDROID_ABIS should be used instead of ANDROID_TARGET_ARCH. Fixes: QTBUG-81866 Pick-to: 5.15 Change-Id: I6dc9e0cd2a19bea8864e3ab4174bd609c0aad4dc Reviewed-by: Andy Shaw <andy.shaw@qt.io>
* Add doc target for qmakePaul Wicking2020-10-271-0/+7
| | | | | | | | | | | qmake currently doesn't have a doc target in CMake. In qmake builds, the doc target is in qtbase/ (not in qtbase/qmake). This patch mimics the mechanic used in QDoc, and adds this as a special case (as the project file doesn't contain the doc target). Fixes: QTBUG-87868 Change-Id: Ib1ca249465c5df2f22ba73084c680781e595c30a Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Make "qmake -qtconf my-qt.conf -install ..." possibleJoerg Bornemann2020-10-231-0/+2
| | | | | | | | | Detect the case where the first argument is -qtconf <file> and ignore that for the -install argument. Task-number: QTBUG-87801 Change-Id: If6822ee3ebef99de645aee8d110ebdcb13fb2da2 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Make "qmake -qtconf my-qt.conf -query" possibleJoerg Bornemann2020-10-231-0/+5
| | | | | | | | | It's now possible to put the -qtconf argument in front of the -query argument (and others). Fixes: QTBUG-85136 Change-Id: I74b78f084acf264ef637ed2f6cb63b655b176056 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* qmake: Fix qHash-related integer conversion warningsFriedemann Kleint2020-10-175-17/+17
| | | | | | | Use size_t instead of uint. Change-Id: I1dc38f61653f9bfc4ddeddcc65b0271aa4ad1256 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* qmake: Fix iOS code signing after QSettings behavior changeAlexandru Croitor2020-10-061-3/+8
| | | | | | | | | | | | | | | | 6d9ec41f6fef7af0129d13fc99fffc7a548f6125 changed the behavior of QSettings::NativeFormat for .plist files. Previously an array of values was flattened into a multi-key QMap. Now that QMap doesn't support multiple values for the same key, the array is returned as QVariantList. Adjust the code to take that into account. Task-number: QTBUG-87218 Change-Id: I0cbf8ac7ef10b81539a29d1e68a09a40d3fe74ca Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Android: rename Android's package name for Qt 6Assam Boudjelthia2020-10-031-1/+1
| | | | | | | | | | Rename Android package name org.qtproject.qt5.android to org.qtproject.qt.android to avoid inconsistency with Qt 6 name. Also, we include the major version number in the jar target. Task-number: QTBUG-86969 Change-Id: Ibb68947289be1079911b34ea157bf089cc52c47f Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Android: set default API level to 23 in docsAssam Boudjelthia2020-09-231-1/+1
| | | | | | | | | Android minimum API level for Qt 6 is 23, this reflects that to some instances that still mention 21. Change-Id: I996f3ed3af14dca114129351d6ea06afcb8f45f5 Reviewed-by: Andy Shaw <andy.shaw@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* CMake: Regenerate projects to use new qt_internal_ APIAlexandru Croitor2020-09-232-13/+13
| | | | | | | | | | | Modify special case locations to use the new API as well. Clean up some stale .prev files that are not needed anymore. Clean up some project files that are not used anymore. Task-number: QTBUG-86815 Change-Id: I9947da921f98686023c6bb053dfcc101851276b5 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* CMake: Regenerate projectsAlexandru Croitor2020-09-222-3/+3
| | | | | | | | | Clean up the state of the projects, before changing the internal CMake API function names. Task-number: QTBUG-86815 Change-Id: I90f1b21b8ae4439a4a293872c3bb728dab44a50d Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* qmake: Make use of QHash deterministicKai Koehne2020-09-191-1/+3
| | | | | | | | | As a build tool, qmake should produce deterministic outputs. Pick-to: 5.15 Task-number: QTBUG-86675 Change-Id: Ifc855d6ddf025cdad3aa57aee79beabf9c6008e2 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* qmake: Support multiple /MERGE:from=to options in MSVC generatorJoerg Bornemann2020-09-181-1/+7
| | | | | | | | | | | | Any but the last /MERGE:from=to option passed to QMAKE_LFLAGS was ignored. Now, the first options gets a <MergeSections> tag and all further options are added as AdditionalOptions, because vcxproj files / the VS property editor do not support multiple MergeSections entries. Pick-to: 5.15 Fixes: QTBUG-86062 Change-Id: I65bddf0b8c7ed6c162008d6ad1b58c2aba2d07d9 Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* qmake: Compile fixJarek Kobus2020-09-181-1/+1
| | | | | | | This code, after applying it to linguist, didn't compile. Change-Id: I25011a44ca059a149f041f8f07848232883140cc Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* Rename QLibraryInfo::location() to path()Lars Knoll2020-09-122-3/+3
| | | | | | | | As per ### Qt6 comment. Also rename the LibraryLocation enum to LibraryPath. Change-Id: I556025a19c5bcdf2ff52598eaba32269522d4128 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Cleanup ProString::append/prependLars Knoll2020-09-102-55/+38
| | | | | | | | | | Don't use evil hacks that make assumptions about QString internals. Change-Id: I663602d197f0fcf62886dbfb9a87547097cdab04 Reviewed-by: Andrei Golubev <andrei.golubev@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io> Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* Use QList instead of QVector in qmakeJarek Kobus2020-09-0511-22/+22
| | | | | | | Task-number: QTBUG-84469 Change-Id: I4a3da94702f1dad1ee10b1ba3c6712b6f40338c9 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* Reimplement QSequentialIterable using QMetaSequenceUlf Hermann2020-09-035-1/+11
| | | | | Change-Id: Ie721a5f0caa697c4bf15a81f3762cf79d3c54f5a Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Add a QMetaSequence interfaceUlf Hermann2020-09-014-1/+12
| | | | | | | | | | | | | | | This is in line with QMetaType and will be used to implement a mutable QSequentialIterable. Later on, a QMetaAssociation will be added as well, to implement a mutable QAssociativeIterable. The code here represents the minimal set of functionality needed to have a practical sequential container. The functionality is not completely orthogonal. In particular, the index based operations could be implemented in terms of iterator-based operations. Task-number: QTBUG-81716 Change-Id: Ibd41eb7db248a774673c701549d9a03cbf2e48b6 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Remove MSVC workaround for QPolygonMarcel Krems2020-08-292-2/+1
| | | | | Change-Id: I62f7c6da7629dcdfda653a136d3bcd483359c86c Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Android: add option to get app arguments with AndroidManifest.xmlAssam Boudjelthia2020-08-281-0/+13
| | | | | | | | | | | AndroidManifest.xml file and the Android plugin already has a way to provide commandline-arguments to app with the tag "android.app.arguments". This change allow to set it from qmake/cmake and allow Qt Creator to use that. Task-number: QTCREATORBUG-23712 Change-Id: I3e680f40fd36ba6aaac7f344fb9509d2c3360e74 Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
* Doc: Improve documentation of ANDROID_EXTRA_PLUGINS qmake variableTopi Reinio2020-08-251-4/+35
| | | | | | | | | | | Clarify that the variable must point to a directory with a specific structure, and how the name mangling is applied to the deployed plugins. Pick-to: 5.15 Fixes: QTBUG-60022 Change-Id: I949cd73f65f86d4902eeab41fa7e5c6e6ffe44c3 Reviewed-by: BogDan Vatra <bogdan@kdab.com>
* Automatically register data/debug stream operations in QMetaTypeLars Knoll2020-08-241-0/+1
| | | | | | | | | | | | | | | | | | | | | | And remove the old manual registration code for those operators. Add some special handling for long/ulong, as these types could be streamed as a QVariant so far, but are not directly streamable through QDataStream. [ChangeLog][QtCore][QMetaType] The QMetaType::registerStreamOperators() and QMetaType::registerDebugStreamOperator() methods have been removed. The streaming operators for a type are now automatically registered together with the type registration. This implies that the operators should be visible wherever the type is visible and being used. [ChangeLog][Behavior Incompatible Changes] Because the QDataStream and QDebug serialization operators are automatically registered with QMetaType, the declarations of those functions must be present at any point where the type is used with QMetaType and QVariant. Change-Id: I4a0732651b20319af4a8397ff90b848ca4580d99 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Doc: Drop dependency on qtgraphicaleffectsPaul Wicking2020-08-201-1/+0
| | | | | | | qtgraphicaleffects is not part of 6.0, drop the doc dependency. Change-Id: I64a355860e0a3a92fa0ffe5ed960796f2e756d61 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* Document qmake variable ANDROID_TARGET_ARCHKai Koehne2020-08-191-8/+8
| | | | | | | | | ANDROID_ABI is only available in CMake. In qmake, the variable is called ANDROID_TARGET_ARCH. Fixes: QTBUG-85542 Change-Id: I0f3f7320b08a4fe6448dd40c294254c644cfb3ee Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Disentangle QIODevice dependenciesLars Knoll2020-08-151-0/+1
| | | | | | | | | | | | | | | | | Move the QIODevice::OpenMode enum into a base class, so that we can remove the full QIODevice (and thus QObject) dependency from qdatastream.h and qtextstream.h. This is required so that we can include QDataStream in qmetatype.h without getting circular dependencies. As a nice side effect, QDataStream and QTextStream can now inherit QIODeviceBase and provide the OpenMode enum directly in their class scope. Change-Id: Ifa68b7b1d8d95687ed032f6c9206f92e63bfacdf Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>