summaryrefslogtreecommitdiffstats
path: root/qmake
Commit message (Collapse)AuthorAgeFilesLines
* 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>
* Long Live QMap as a refcounted std::map!Giuseppe D'Angelo2020-08-064-5/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ... and QMultiMap as std::multimap. Just use the implementation from the STL; we can't really claim that our code is much better than STL's, or does things any differently (de facto they're both red-black trees). Decouple QMultiMap from QMap, by making it NOT inherit from QMap any longer. This completes the deprecation started in 5.15: QMap now does not store duplicated keys any more. Something to establish is where to put the QExplictlySharedDataPointer replcement that is in there as an ad-hoc solution. There's a number of patches in-flight by Marc that try to introduce the same (or very similar) functionality. Miscellanea changes to the Q(Multi)Map code itself: * consistently use size_type instead of int; * pass iterators by value; * drop QT_STRICT_ITERATORS; * iterators implictly convert to const_iterators, and APIs take const_iterators; * iterators are just bidirectional and not random access; * added noexcept where it makes sense; * "inline" dropped (churn); * qMapLessThanKey dropped (undocumented, 0 hits in Qt, 1 hit in KDE); * operator== on Q(Multi)Map requires operator== on the key type (we're checking for equality, not equivalence!). Very few breakages occur in qtbase. [ChangeLog][Potentially Source-Incompatible Changes] QMap does not support multiple equivalent keys any more. Any related functionality has been removed from QMap, following the deprecation that happened in Qt 5.15. Use QMultiMap for this use case. [ChangeLog][Potentially Source-Incompatible Changes] QMap and QMultiMap iterators random-access API have been removed. Note that the iterators have always been just bidirectional; moving an iterator by N positions can still be achieved using std::next or std::advance, at the same cost as before (O(N)). [ChangeLog][Potentially Source-Incompatible Changes] QMultiMap does not inherit from QMap any more. Amongst other things, this means that iterators on a QMultiMap now belong to the QMultiMap class (and not to the QMap class); new Java iterators have been added. Change-Id: I5a0fe9b020f92c21b37065a1defff783b5d2b7a9 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* iOS: Add a variable to customize where the launch image is taken fromAndy Shaw2020-07-223-0/+23
| | | | | | | | | | | | | For those who are providing their own launch images for their iOS projects then QMAKE_IOS_LAUNCH_SCREEN can be set to point to the location where the launch image to be used over the default. [ChangeLog][Platform Specific Changes][iOS] Added support for specifying a launch image to be used for an iOS project. This can be achieved by using QMAKE_IOS_LAUNCH_SCREEN. Change-Id: Ibb236655b282132ab5eee747986a93abb9802200 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* Move QRegExp and its remaining mentions out of QtCoreSona Kurazyan2020-07-139-15/+4
| | | | | | Task-number: QTBUG-85235 Change-Id: Ibd6c98d952c1bb9916b64715c6430fb0d3fe3843 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Silence some warnings about fallthroughFriedemann Kleint2020-07-091-1/+2
| | | | | | | | src/corelib/text/qunicodetools.cpp:1243:13: warning: this statement may fall through [-Wimplicit-fallthrough=] src/corelib/text/qunicodetools.cpp:1247:55: warning: this statement may fall through [-Wimplicit-fallthrough=] Change-Id: I441000db46cb6d85a5dcd0534ea2168b39a3f3bd Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Add ; to Q_UNUSEDLars Schmertmann2020-07-073-5/+5
| | | | | | | | This is required to remove the ; from the macro with Qt 6. Task-number: QTBUG-82978 Change-Id: I3f0b6717956ca8fa486bed9817b89dfa19f5e0e1 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* Use qsizetype in QListLars Knoll2020-07-061-1/+1
| | | | | | | | | | | | | | | | | | | | The change creates a slight source incompatibility. The main things to take care of are * code using printf statements on list.size(). Using qsizetype in printf statements will always require a cast to work on both 32 and 64 bit. * A few places where overloads now get ambiguous. One example is QRandomGenerator::bounded() that has overloads for int, uint and double, but not int64. * Streaming list.size() to a QDataStream will change the format depending on the architecture. [ChangeLog][QtCore][QList] QList now uses qsizetype to index into elements. Change-Id: Iaff562a4d072b97f458417b670f95971bd47cbc6 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Get rid of shared null for QByteArray, QString and QVectorLars Knoll2020-07-062-2/+2
| | | | | | | | | | | | | | As a side effect, data() can now return a nullptr. This has the potential to cause crashes in existig code. To work around this, return an empty string from QString::data() and QByteArray::data() for now. For Qt 6 (and once all our internal issues are fixed), data() will by default return a nullptr for a null QString, but we'll offer a #define to enable backwards compatible behavior. Change-Id: I4f66d97ff1dce3eb99a239f1eab9106fa9b1741a Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* MinGW: Use a response file for long include pathsOrgad Shaneh2020-07-063-7/+28
| | | | | Change-Id: I55ce73ad08473bca27c7ab5730f633fb77c9b8cd Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Makefile: Deduplicate logic for response file nameOrgad Shaneh2020-07-064-40/+32
| | | | | | | + verify that the file was actually written. Change-Id: I14a3c0b75f41f926b469109a1d7f2f80368ec9bb Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* QMake: fixup a mistake when porting to QREGiuseppe D'Angelo2020-07-061-1/+1
| | | | | | | | | | The original expression seems to have been accidentally changed during the port. Amends a1947aeffe158a0ea7de3ced1bf8d6a4719a27ef. Change-Id: I87821e1e025621a5efaf7a1e4f946fd3109fb256 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Remove unused variables in MSVC generator after WinRT removalTor Arne Vestbø2020-06-291-3/+0
| | | | | Change-Id: I2b7e1dbecc17d61c9126145bea95947dab38e7d1 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
* Move QTextCodec support out of QtCoreKarsten Heimrich2020-06-202-4/+0
| | | | | | | | | | * Assume UTF-8 on all Unix like systems * Export some functions to be able to compile QTextCodec once moved to Qt5Compat. Task-number: QTBUG-75665 Change-Id: I52ec47a848bc0ba72e9c7689668b1bcc5d736c29 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* CMake: Use intelcet flags for bootstrap and qmakeAlexandru Croitor2020-06-181-0/+1
| | | | | | | | | This should fix build failures on Ubuntu 20.04. Amends fa98adbd04de9d44ce921436b92589a41f285dcd Change-Id: Iff399faff0cf06f5b88d756b1f632b8798069578 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* qmake: Fix generation of Visual Studio projectsOliver Wolff2020-06-171-0/+8
| | | | | | | | | | | | While removing winrt code too much code was removed. The ProjectConfiguration is needed for every Visual Studio project. This patch amends 45b0f1be686cfba8dcecb9be5c875cae59c69276 Fixes: QTBUG-85086 Change-Id: Ic8b42583a159d5b69c0c4e82f46dd98ad8e54ce2 Reviewed-by: Miguel Costa <miguel.costa@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* CMake: Fix usage of gc_binaries featureAlexandru Croitor2020-06-121-1/+1
| | | | | | | | | | | | | | | | The qt_internal_apply_gc_binaries function should apply both compile and link flags, not just link flags. The flags should be applied publically to all consumers of Bootstrap regardless if the gc_binaries feature is enabled. The flags should be applied publically to Core only in case if the feature is enabled (aka for static builds only). Change-Id: Id42af0d9b527004d74c04eff2c9e3c2be1e76aac Fixes: QTBUG-84461 Task-number: QTBUG-83929 Reviewed-by: Cristian Adam <cristian.adam@qt.io>
* Remove winrtOliver Wolff2020-06-065-317/+56
| | | | | | | | | Macros and the await helper function from qfunctions_winrt(_p).h are needed in other Qt modules which use UWP APIs on desktop windows. Task-number: QTBUG-84434 Change-Id: Ice09c11436ad151c17bdccd2c7defadd08c13925 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* qmake: Stop using -isystem flagDmitry Shachnev2020-06-062-14/+3
| | | | | | | | | | | This option changes the order of include paths, which can cause problems of various kinds. See https://bugs.debian.org/958479 for an example. The benefit of that option is minimal for what it was intended. Pick-to: 5.15 5.12 Change-Id: I80eeabd09764df290b60bc59aeb2f90d07723608 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Port qmake from QStringRef to QStringViewLars Knoll2020-06-0518-108/+107
| | | | | | Change-Id: Ie07a976cd3c634e04c8b9b1e0a6cacd4c2d94939 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* CMake: Make it possible to build tools when cross-compilingLeander Beernaert2020-06-022-17/+21
| | | | | | | | | | | | | | | | | | | This patch allows tools to be built for the target platform when the QT_BUILD_TOOLS_WHEN_CROSSCOMPILING parameter is set at configuration time. To avoid naming conflicts, the target tools are suffixed with "_native". The qt_get_tool_target_name() function can be used to get the tool name for both scenarios (cross and non-cross compilation). Extend pro2cmake to refer to the right target name for tools. The relevant write_XXX functions have a new target_ref parameter that will be "${target_name}" for tools and literally the target name for everything else. Fixes: QTBUG-81901 Change-Id: If4efbc1fae07a4a3a044dd09c9c06be6d517825e Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Mark qmake as Qt tool in qmake/qmake.proJoerg Bornemann2020-05-293-4/+6
| | | | | | | | | ...and re-regenerate qmake/CMakeLists.txt. This removes one special case and is necessary for a subsequent patch that changes how pro2cmake converts Qt tools. Change-Id: Ie87b7841f3c29de3f2c8907e82975b6272f096cc Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* CMake: Re-generate qmake/CMakeLists.txtJoerg Bornemann2020-05-292-32/+50
| | | | | Change-Id: Ifb1fadbd0f2ea13068085e7e47d0b883efff7380 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Fix qmake.proJoerg Bornemann2020-05-291-1/+1
| | | | | | | | | | The registry.cpp file is in the library subdirectory. This doesn't contribute to the qmake or CMake build, but it removes the need for a special case in qmake/CMakeLists.txt. Change-Id: I66a566f0d1e0b82791822ca55a7de037369536a7 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Remove last remainings of Qt Quick 1 importsKai Koehne2020-05-251-1/+0
| | | | | | | amends e1fd6074935cd0be0 Change-Id: I4587ae287635bc9718325a24bee728f1c1938978 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Remove qxmlstream from qmake compileLars Knoll2020-05-254-16/+1
| | | | | | | It's not used at all. Change-Id: Ia30befd497cc337221dfad89c201822b5bb7fd7c Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Make utf8_source the default for qmake buildsLars Knoll2020-05-141-2/+2
| | | | | | | | | | | | | | We now assume that source code is encoded in UTF-8 by default on all platforms (and verify this with an auto test). Provide a CONFIG+=no_utf8_source option for backwards compatibility. [ChangeLog][qmake] qmake will tell the compiler that source code is encoded in utf-8 by default. This mainly has an effect on Windows, where MSVC still assumes source code is encoded in the current ANSI code page. Use CONFIG+=no_utf8_source to get back the Qt 5 behavior. Change-Id: I6dcafcaeefdea7d3907ccb723aeb7d23ccc0f04f Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Move the UTF conversion methods to qstringconverterLars Knoll2020-05-144-10/+10
| | | | | | | | | | | | | | Separate them from the qutfcodec, so that the codec can later on be moved out of Qt Core. Fix the QUtf methods to take qsizetype instead of int for length arguments. This also makes it possible to not build QTextCodec into the bootstrap lib anymore. Change-Id: I0b4f83139d61b19c651520a2f3a5012aa7e85cb8 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Android: add ANDROID_ABIS qmake snippetAssam Boudjelthia2020-05-131-0/+10
| | | | | | | | | | Add snippet on how to use ANDROID_ABIS inside the .pro file. Pick-to: 5.15 Task-number: QTCREATORBUG-24014 Change-Id: Id3bb960c04ea6480b06878121ad33f89c03e5642 Reviewed-by: BogDan Vatra <bogdan@kdab.com> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
* Disable the PCRE Jit when compiling qmakeLars Knoll2020-05-123-3/+5
| | | | | | | | | I'm getting compile errors with gcc 9.3 without this, and it makes sense to disable the JIT in bootstrapped builds anyway. Change-Id: Ife867bd2d6fd0bf133edae4903bb6b6d295db547 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* qmake: fix a few deprecated QChar(non-char-type) warningsMarc Mutz2020-05-123-9/+9
| | | | | | | | The QChar ctors from non-char-types are going to be deprecated. Change-Id: I17d7916fb1dac9889ead61daca846b1257d17312 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* qmake: Remove the DISCARDABLE flag for icon resourcesYuhang Zhao2020-05-111-1/+1
| | | | | | | | | | According to [1] the DISCARDABLE attribute is for 16-bit Windows, and it is ignored. We can drop it. [1] https://docs.microsoft.com/en-us/windows/win32/menurc/common-resource-attributes Change-Id: I70e5b0441a9d20f6c76c3d7a84947f8bce5c8fbd Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* qmake: Update the macro namesYuhang Zhao2020-05-121-2/+2
| | | | | | | | | | | | | | | | I generated a rc file using VS2019 and I found that it's using other macros. According to [1], both of VOS_NT_WINDOWS32 and VOS__WINDOWS32 refers to "File was designed for 32-bit Windows", although they have different values, and 0x0L is the value of VFT2_UNKNOWN. So I think it's safe to update them. VS2019 is using them as the default template for rc files, after all. [1] https://docs.microsoft.com/en-us/windows/win32/menurc/versioninfo-resource Change-Id: Ibaf91394668844492f1357da05b881b9d81aa15f Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* qmake: Fix handling of manifest file of msvcYuhang Zhao2020-05-115-15/+11
| | | | | | | | | | | | | Setting the QMAKE_MANIFEST variable doesn't have any effect for MSVC. This commit fixes that. If the developer is setting this variable, he/she will definitely use CONFIG-=embed_manifest_exe or CONFIG-=embed_manifest_dll at the same time, so I think there is no need to check this. Change-Id: Ie32b7e0cded71efcf14bf4c0eecab5ab1944fa2c Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Add a QRegularExpression::fromWildcard() convenience methodLars Knoll2020-05-063-7/+5
| | | | | | | | | Simplify constructing QRegularExpression objects from a glob pattern. Change-Id: I06f60b1dfea3da969e2474dedd44b6ca5d456d7d Reviewed-by: Simon Hausmann <hausmann@gmail.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Remove QRegExp from the bootstrap libraryLars Knoll2020-05-061-0/+1
| | | | | | | All it's uses have been replaces with QRegularExpression. Change-Id: I5bcdfdd8a39dad6d1288f18f1b24d2eea9e028d2 Reviewed-by: Simon Hausmann <hausmann@gmail.com>
* Port qmake over to user QRegularExpressionLars Knoll2020-05-0514-98/+129
| | | | | | | | | Use the DotMatchesEverythingOption for all places where we interpret .pro files, to increase compatibility with QRegExp. Change-Id: I347d6b17858069f3c9cedcedd04df58358d83f27 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Compile QRegularExpression into qmakeLars Knoll2020-05-057-8/+246
| | | | | | | | This is required to be able to port qmake over to use QRegularExpression instead of QRegExp. Change-Id: I0ad2c19bf3c0a28e52c1e12b4d3daa0300a75ed2 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Build qmake with QT_USE_STRINGBUILDERLars Knoll2020-05-0512-35/+78
| | | | | | | | Should improve performance and is going to be required in the future anyway. Change-Id: I89d7c50441d2491da1ab0a4d564dcc91f52ade85 Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
* Add more entries for QMAKE_TARGET_XXXYuhang Zhao2020-05-052-3/+59
| | | | | Change-Id: I1cf4a8f19ec47247fbe469b9cc81ed80f6ba5a82 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Merge remote-tracking branch 'origin/5.15' into devQt Forward Merge Bot2020-05-041-1/+1
|\ | | | | | | | | | | | | | | | | | | Conflicts: src/corelib/text/qlocale.cpp src/network/access/qnetworkaccessmanager.cpp Regenerated tests/auto/testlib/selftests/float/CMakeLists.txt Change-Id: I5a8ae42511380ca49a38b13c6fa8a3c5df8bed01
| * Use QMAKE_TARGET for the name of the object script fileAndy Shaw2020-04-281-1/+1
| | | | | | | | | | | | | | | | | | | | Since TARGET at this point contains the path to where the target will be then it can include ".." as part of it which will cause problems when building for Android on Windows. Therefore, QMAKE_TARGET should be used as an identifier here as the path is not needed. Change-Id: Idb8babd0459c65cbcfd64fe47baeac4303a3fd87 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* | CMake: Fix developer build of MinGW cmake configurationAlexandru Croitor2020-05-011-0/+1
| | | | | | | | | | | | | | | | qmake is not warnings clean, so don't add -Werror. Change-Id: I7a823241ded56967c1b802203f404ee36ed26429 Reviewed-by: Simon Hausmann <hausmann@gmail.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* | Remove textcodec codepaths in qmakeLars Knoll2020-05-012-30/+1
| | | | | | | | | | | | | | They were anyway unused since years Change-Id: I559b5042f6b942d7a940ac374d2b2740f2d4dc12 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | Merge remote-tracking branch 'origin/5.15' into devQt Forward Merge Bot2020-04-221-0/+188
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/widgets/widgets/qabstractbutton.cpp src/widgets/widgets/qbuttongroup.cpp src/widgets/widgets/qbuttongroup.h src/widgets/widgets/qsplashscreen.cpp tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp tests/benchmarks/opengl/main.cpp Needed update: src/plugins/platforms/cocoa/CMakeLists.txt Change-Id: I7be4baebb63844ec2b3e0de859ca9de1bc730bb5
| * Android: update Android specific variables docsAssam Boudjelthia2020-04-171-0/+188
| | | | | | | | | | | | | | | | | | Android variable are missing from the list of QMake variables... Task-number: QTBUG-80390 Change-Id: Ic10f96687334eea99c0302d7137685b1bf6e56c6 Reviewed-by: BogDan Vatra <bogdan@kdab.com> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
* | Change qHash() to work with size_t instead of uintLars Knoll2020-04-096-10/+10
| | | | | | | | | | | | | | | | | | | | | | This is required, so that QHash and QSet can hold more than 2^32 items on 64 bit platforms. The actual hashing functions for strings are still 32bit, this will be changed in a follow-up commit. Change-Id: I4372125252486075ff3a0b45ecfa818359fe103b Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>