summaryrefslogtreecommitdiff
path: root/share/qbs/modules/cpp/CppModule.qbs
Commit message (Collapse)AuthorAgeFilesLines
* Unify generation of precompiled headersDenis Shienkov2021-09-281-0/+1
| | | | | | | | This patch unifies the functions to generate the output file tags, and the output artifacts for the precompiled headers. Change-Id: I84be3f56037220ae5ade6e3d1d1a4e7d0a46847f Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Long live Digital Mars toolchainDenis Shienkov2021-07-271-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds an experimental support for the Digital Mars C/C++ compiler for Windows: * https://www.digitalmars.com/ This compiler is only distributed for Windows host platform, but allows to create the binaries for Win32, Win16, DOS32 and DOS targets. This patch implements only the Win32 targets and has the following limitations: * Support for precompiled headers is not implemented yet (but which is supported by the compiler). * There is no support for the CI autotests due to the fact that the compiler has the following restrictions: - it needs a separate masm386 assembler. - it needs a special format of DLL library sources (required the DLL main function). - it needs the `kernel32.lib` to be always explicitly linked. - and, maybe other unexpected stuff. The following features are currently supported: * Compiling a source files in the C or the C++ mode. * Compiling the source resource (RC) files. * Creation of an applications (both console and GUI). * Creation of an dynamic (DLL) libraries with its import files. * Creation of a static libraries. Task-number: QBS-1598 Change-Id: I5a6ac05a7e7513a1c6d2403db037c309b0f12b90 Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
* Make property cpp.compilerExtension as sharedDenis Shienkov2021-06-141-0/+1
| | | | | | | | It makes sense to share the cpp.compilerExtension property, because this property is used in almost all CPP modules. Change-Id: I0bf44a83c722772b93d7f2febbef7b4e38d11103 Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
* baremetal: Introduce new toolchainDetails propertyDenis Shienkov2021-06-131-0/+1
| | | | | | | .. to reduce the number of if/else conditions and to simplify the code. Change-Id: Id4e6574b719986d3fc7f8b27106a60b00cbd67ea Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
* baremetal: Implement validate script in CPP toolchain modulesDenis Shienkov2021-06-071-1/+10
| | | | | | | | It makes sense to check the architecture inside of the 'validate' script in the module; and then we can throw an error only once. Change-Id: I17821404ad854e38bafc70f1ca6904c33c48147f Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
* Use separate functions for repetitive actionsDenis Shienkov2021-05-251-0/+8
| | | | | | | | | It makes sense to minimize the copy-paste errors by moving the repetitive code into the separate functions to the cpp.js file. This will simplify the code and improve the maintenance. Change-Id: Id5a2914ff28619553b855cc6f09810ad370c408c Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
* Share cpp::{assembler|compiler}ListingSuffix propertiesDenis Shienkov2021-04-061-0/+2
| | | | | | | | | | | | | | | | It makes sense to add the cpp.assemblerListingSuffix and the cpp.compilerListingSuffix properties to the base CppModule due the following reasons: 1. It is possible that the user wants to change the extension for the generated listing files, which makes working with Qbs more flexible. 2. It will be easier to write an autotests that check the generation of the listing files for a bare metal platforms, where listing files can have various extensions such as ".lst", ".ls", and so forth. Change-Id: I9989288bff0659dd3e8b7a443d0354bb78475270 Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
* Share cpp::linkerMapSuffix propertyDenis Shienkov2021-04-011-0/+1
| | | | | | | | | | | | | | | | It makes sense to add the cpp.linkerMapSuffix property to the base CppModule due the following reasons: 1. It is possible that the user wants to change the extension for the generated map files, which makes working with Qbs more flexible. 2. It will be easier to write an autotests that check the generation of the map files for a bare metal platforms, where object files can have various extensions such as ".map", ".m51", ".m66", and so forth. Change-Id: I1e5e3b39bf84fddfe8c06f2db9d3936c6a3ff027 Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Share cpp::objectSuffix propertyDenis Shienkov2021-03-301-0/+1
| | | | | | | | | | | | | | | It makes sense to add the cpp.objectSuffix property to the base CppModule due the following reasons: 1. It is possible that the user wants to change the extension for the generated object files, which makes working with Qbs more flexible. 2. It will be easier to write an autotests that check the generation of the object files for a bare metal platforms, where object files can have various extensions such as ".rel", ".r90", ".r43", and so forth. Change-Id: Ib73836d5e614a6924d312d061f02437c3b318785 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Merge branch '1.18'Ivan Komissarov2020-12-181-0/+1
|\ | | | | | | Change-Id: I37c359289dcd957fbc964a35fab381a047f7d04a
| * Android: Fix debugging supportRaphaƫl Cotty2020-12-081-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add archSuffix to generate the library with the architecture name for Qt > 5.14 (before the lib was renamed which prevented debugging). Remove rpaths as they are not used on android and generate warnings. Update target and defines to comply with android's Build System Maintainers Guide. Remove stripping step in Qt.android_support as androiddeployqt actually does the stripping. Change-Id: I46a273c1cded753223c7b759670477815b625267 Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* | Make `cpp.toolchainInstallPath` property as public for toolchainsDenis Shienkov2020-12-021-0/+6
|/ | | | | | | | This property re-declared in each of toolchain modules. So, it makes sense to declare this property once in a base CppModule. Change-Id: I1df76b288660d4b999c918a0019a01825ee0890a Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
* Implement missing check for allowed values in PropertyOptionsIvan Komissarov2020-10-281-2/+0
| | | | | | | | | | | | | | ========== Performance data for Resolving ========== Old instruction count: 10195378481 New instruction count: 10238464294 Relative change: 0 % [ChangeLog] Qbs now checks string and stringList values according to the allowedValues property in PropertyOptions Change-Id: Ide88987c74b35f4172ffaf71aacd991536131ee5 Reviewed-by: Richard Weickelt <richard@weickelt.de> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* doc: Document more cpp module propertiesIvan Komissarov2020-07-311-3/+4
| | | | | | Fixes: QBS-1304 Change-Id: Ie7d2c4827119dbdc6c807c56912431fb3111f712 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* MSVC: Use compiler driver for linkingIvan Komissarov2020-01-241-0/+15
| | | | | | | | | | | | | | | To be able to use cpp.driverFlags and cpp.driverLinkerFlags with clang- cl. This patchset makes possible to use clang-cl with "- fsanitize=address" flag without passing the sanitizer libraries manually to the linker There's also a behavior change in which linker is used - clang-cl uses native linker by default. Old behavior can be restored by setting cpp.linkerVariant to "lld" Fixes: QBS-1522 Change-Id: I9528ce40aa5fdfab987672b15fffd830fa2d6376 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* GCC: avoid duplicating objects in linker command lineAlberto Mardegan2019-11-121-0/+1
| | | | | | | | | | | Long command lines are especially a problem when building statically in MXE. This commit tries to replicate the logic employed by qmake, where before adding a new object to the command line, all of its previous appearences get removed. Fixes: QBS-1273 Change-Id: I51c843c4a7cfc170ed4fab30deae6c4229690dd0 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* baremetal: Introduce new cpp::generate{Assembler|Compiler}ListingFilesDenis Shienkov2019-10-171-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This properties enables or disables generation of a compiler or assembler listing files. Reason why we need in this property is in that some compilers (e.g. KEIL C51) generates a listing files by default, that spams a project sources directory. So, we need to have a possibility e.g. to disable it or to generate to an output directory. This patch implements this feature for KEIL, IAR, SDCC compilers with the following restrictions: * IAR (8051, AVR, STM8, MSP430, ARM) - full support. * KEIL (8051) - full support. * KEIL (ARM) - has only one restriction in that a compiler does not support specifying of an output listing file name. It is possible to specify only an output listing directory. So, a listing file names will be a bit different than for other compilers (e.g. if a source file name is 'foo.c', then the listing file name will be 'foo.lst', instead of 'foo.c.lst'). * SDCC (8051, STM8) - seems, has not possibility to disable an auto-generated listing files. But it generates an output listing files to a right output directory with the object files. Besides, a listing files has a correct names (e.g. for the 'foo.c' file, the listing file will be 'foo.c.lst'). Change-Id: Ic3516101e69eed156cf71606a7144efc72d40204 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Refactor the map file generation propertyDenis Shienkov2019-10-011-0/+6
| | | | | | | | | | | | | | 1. It is makes sense to define this property once inside of CppModule, instead of duplicate it in each other module. 2. A new property name 'generateLinkerMapFile' will be better than a previous, so, we can rename this property. 3. The map file generation is not necessary to be always enabled, so, we can disable this property by default. Change-Id: I0439e8b3e0273593c8456d32b1c099ff09498fad Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Set minimumTvosVersion to "6.0" by defaultIvan Komissarov2019-07-151-1/+1
| | | | | | | | | | | | | | This fixes (at least) two compile errors: - clang: error: invalid deployment target for -stdlib=libc++ (requires iOS 5.0 or later) - ld: library not found for -ldylib1.o The dylib1 is only present on macOS and not present in recent tvOS/iOS SDKs, clang tries to link to it if deployment target is less or equal to "5.0". Change-Id: Ie77a514bb2661312823df054f0dfca07d69e3059 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Set cpp.minimumIosVersion to "6.0" by defaultIvan Komissarov2019-07-051-1/+1
| | | | | | | | | This is required because earlier iOS versions are broken in recent XCode installations (at least, for XCode >= 7.0.0) Change-Id: Ib55e2eafcf26357695ab057da8109921518b7fea Reviewed-by: Qbs CI Bot <travis-bot@weickelt.de> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Add support for the clang-cl compilerIvan Komissarov2019-04-101-33/+39
| | | | | | Task-number: QBS-1316 Change-Id: Ibf9da364610c260ead088a8990a70c7739d53c39 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Enable the Application item to create Android appsChristian Kandeler2018-08-101-1/+1
| | | | | | | | | | | | | | | The formerly required AndroidApk item is no longer needed: We just tag the APK file as an application and let the Application item pull in the Android.sdk module for Android targets. It is also possible to have native code directly in the Application product; in that case, the multiplexed variants become dynamic libraries and the APK file is built for the aggregate. [ChangeLog] The AndroidApk item was deprecated, a normal Application item can be used instead. Change-Id: I04f5f3892f354ca9eb4f2da8055abcd8d072aba0 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Merge 1.12 into masterChristian Kandeler2018-07-121-1/+1
|\ | | | | | | Change-Id: I056a96c062881c2a07ec15b1803efa9c9aa1a02a
| * Update link for minimumWindowsVersionOrgad Shaneh2018-07-111-1/+1
| | | | | | | | | | Change-Id: Ibb98b4a9166e3cd61fe9aacd0e6a5a2eb9eb7624 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* | mingw: Create import libraries alongside DLLsChristian Kandeler2018-07-051-0/+1
|/ | | | | | | This is the platform standard, and it gives us smart relinking for free. Change-Id: Iee9e14fe66c9418adaa14893fe2b4f573408f77d Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Fix the type of the cpp.cLanguageVersion propertyChristian Kandeler2018-05-281-1/+1
| | | | | | | This was forgotten in 2bda52aa3d. Also added autotest. Change-Id: Iba8c7c7aa6629f321017315b03964ce20809ac23 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Make cpp.cxxLanguageVersion a listChristian Kandeler2018-05-141-1/+1
| | | | | | | | | | | ... and choose the highest entry. This enables different modules to specify their requirements without introducing conflicts. Same for cpp.cLanguageVersion. Task-number: QBS-1225 Change-Id: I96ed6c370eb190023fdb69274dcb080d967f512d Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Only use fallback values for the -std= command line option when neededJake Petroules2018-02-211-0/+7
| | | | | | | | | | | | | | | Instead of always using the fallback value, we instead always use the standard value unless we know we're running an older toolchain which does not support it. This alleviates the potential for differing behavior in newer versions of compilers which may attempt to remain compatible with earlier drafts of corresponding standards. [ChangeLog] Always use standard values for -std= when possible Change-Id: I61ff3ecd863caa24cb8fb54500e62dc310a2af02 Reviewed-by: Jake Petroules <jake.petroules@qt.io> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Officially provide "c++17" as possible value for cpp.cxxLanguageVersionChristian Kandeler2018-02-071-1/+1
| | | | | | | | The standard is out now. Task-number: QBS-1020 Change-Id: Ie8249e1c860d5ebc2f9dadf02551544ddaaf2868 Reviewed-by: Jake Petroules <jake.petroules@qt.io>
* Merge 1.10 into masterChristian Kandeler2017-12-221-12/+12
|\ | | | | | | Change-Id: Iecddc2722d22d7c15d4b32efd676fa8e7c00e99f
| * cpp module: Init all suffix and prefix properties to the empty stringChristian Kandeler2017-12-191-12/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | ...rather than leaving them undefined. This way, the string "undefined" will not end up in file names. It's safer to do it this way compared to checking for "undefined" in all the places that could make use of the properties. Due to the semantics of these properties, there is also no value in treating "undefined" in a special way. Task-number: QBS-1265 Change-Id: I6ce7626485baa284a6c782b513740f9d150e18c3 Reviewed-by: Jake Petroules <jake.petroules@qt.io> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* | Validate the compiler's target platform as well as arch and endiannessJake Petroules2017-12-191-0/+2
| | | | | | | | | | | | | | This helps to block inappropriate host compilers when cross compiling. Change-Id: Ied22fce094fdb726babea4e94a7ef1d78afc9a98 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* | Merge 1.10 into masterChristian Kandeler2017-12-151-0/+2
|\ \ | |/ | | | | Change-Id: Iab942ed25d06038cf8c172eb70dcd8e9a720e1c8
| * Fix GCC support for "bare metal" systems againChristian Kandeler2017-12-111-0/+2
| | | | | | | | | | | | | | | | | | This was fixed before in 8176a4d419 and broken again in 72eedbb0a4. Fix it for good this time using module priorities. Task-number: QBS-1263 Change-Id: Ib1702299ef6c51b19a9082da96485ef5387dc1bb Reviewed-by: Jake Petroules <jake.petroules@qt.io>
* | Introduce cpp.rpathOriginJake Petroules2017-12-081-0/+1
| | | | | | | | | | | | | | | | [ChangeLog] Added property cpp.rpathOrigin which evaluates to @loader_path on Darwin and $ORIGIN on other Unix-like platforms. Change-Id: If5770a83ae32f29ee520fd00b07ed8f0caf6bd48 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* | Consider library dependencies when setting up run environmentChristian Kandeler2017-11-221-7/+3
| | | | | | | | | | | | | | | | | | | | There is no need to hardcode a heuristic in qbs.commonRunEnvironment when we can find out the actual paths. Task-number: QTCREATORBUG-19274 Change-Id: I7a07eb9ff658e38a15c954972370242651114b11 Reviewed-by: Jake Petroules <jake.petroules@qt.io> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* | Make Module.setup{Build,Run}Environment first-class citizensChristian Kandeler2017-11-201-3/+3
| | | | | | | | | | | | | | | | | | | | | | They did not have the project and product variables available, and they accessed module properties in a way that made it look as if they were normal properties rather than scripts, which was misleading. Now everything works the same as in Rule scripts and JS commands. Task-number: QBS-744 Change-Id: I11d70876185d528282a56747747dd8310a77fbc4 Reviewed-by: Jake Petroules <jake.petroules@qt.io>
* | cpp module: Add property for linking-only driver flagsChristian Kandeler2017-11-021-0/+6
|/ | | | | | | | | | | | For instance, GCC has various flags that are only used for linking, but that are not ld flags and thus must not be escaped via "-Wl,". [ChangeLog] Added cpp.driverLinkerFlags for flags to be passed to the compiler driver only when linking. Task-number: QBS-1236 Change-Id: Idc1498a74e0219306fda99de9adad2730f3a6f73 Reviewed-by: Jake Petroules <jake.petroules@qt.io>
* Introduce the cpufeatures moduleChristian Kandeler2017-08-281-0/+3
| | | | | | | | | Provides an abstraction for the respective compiler flags. The initial set of properties is the superset of what Qt can configure and what MSVC supports. Change-Id: I1be90361f2f104a55d2a784a69625396680b0713 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Introduce property cpp.discardUnusedDataChristian Kandeler2017-08-251-0/+1
| | | | | | | | | Maps to linker options that strip unneeded symbols or sections. [ChangeLog] Added new property cpp.discardUnusedData. Change-Id: I2f2c7f449e9ac426af859fac4d1e3b941be2a2ab Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Automatically determine built-in compiler definesJake Petroules2017-08-111-2/+7
| | | | | | | | This provides users with access to the full list of macros defined by the MSVC, GCC, Clang, or MinGW compiler in use. Change-Id: I6e7f6841bbc18aed13958724b268283d97b17320 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Don't force -undefined into linker flagsJake Petroules2017-08-031-1/+1
| | | | | | | | | | | | This is important if the user wants to use a different value than the ones supported here. Also, change the default of cpp.allowUnresolvedSymbols to undefined in accordance with the design philosophy that 'undefined' typically results in no flags passed. This will make no difference for user projects since the only platform affected is Darwin and on that platform '-undefined error' is default. Change-Id: I5557da37f4ed8c609e98a6f74ad4b553cae0b817 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Add initial support for Universal Windows PlatformJake Petroules2017-08-011-0/+3
| | | | | | | | | | | [ChangeLog] Added initial support for the Universal Windows Platform (properties for which API families/partitions are available to code being compiled, and whether compiled binaries require an app container context to load/execute). Change-Id: Idd3e117bbb40bd547ae06c16318b2d2e38f07bb4 Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Cpp module: Default value for use*PrecompiledHeader is now trueChristian Kandeler2017-07-051-4/+4
| | | | | | | | | | | | | This is of course the right default: If a precompiled header is present, then you will tpyically want to use it. We just couldn't do that so far, because we did not have access to the "explicitlyDependsOn" artifacts in the compiler rule. Now we do. [ChangeLog] The property cpp.useCxxPrecompiledHeader, as well as the variants for the other languages, now default to true. Change-Id: Ie04172790ad21b0ebdfbf3366b6f549f705e774c Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Re-introduce endianness propertyJake Petroules2017-06-291-0/+2
| | | | | | | | | | | | | Now it can actually be useful, in order to select a specific endianness when building for architectures that are bi-endian. For example, MIPS and PowerPC. This patch makes it possible to build for ppc64le, which is the only variant of the PowerPC architecture that seems to be relevant today. ppc32 and all big-endian variants seem to have fallen out of use. Change-Id: Id1b9f9b397990136ab9aa899829345d426465824 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Add a property to specify the -rpath-link flagJake Petroules2017-06-231-0/+1
| | | | | | | Will be used in a following patch. Change-Id: I43c0c093fd0c0278e4bfd72e6ed457b57bc6ba32 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Introduce dependency parameter cpp.symbolLinkModeJake Petroules2017-05-301-0/+3
| | | | | | | | | | | | | | | | Maps to -lazy_library, -reexport_library, -upward_library, or -weak_library on Apple platforms. [ChangeLog][Parameters] When pulling in library products, the new Depends parameter cpp.symbolLinkMode can now be specified to control how the library is linked into the target binary on Apple platforms: specifically, whether the library is linked as weak, lazy, reexported, and/or upward (see the ld64 man page for more information). Task-number: QBS-200 Task-number: QBS-874 Change-Id: Ia68cfdf6d99f300c5a28f5638980711022d32d2f Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Implement basic support for multi-config products on Darwin and AndroidJake Petroules2017-05-231-0/+1
| | | | | | | | Task-number: QBS-13 Task-number: QBS-292 Change-Id: I63c2e0a4de5949c73ca33af7381c32606190a43a Reviewed-by: Jake Petroules <jake.petroules@qt.io> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* Introduce dependency parameter cpp.linkWholeArchiveChristian Kandeler2017-05-221-0/+3
| | | | | | | | | | | | | Maps to --whole-archive, -force_load and /WHOLEARCHIVE on the toolchain level. [ChangeLog][Parameters] When pulling in static library products, the new Depends parameter cpp.linkWholeArchive can now be specified to force all the library's objects into the target binary. Task-number: QBS-701 Change-Id: Ic6482092f39f9ecb1ffb8e37d3031a94dc830be8 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Make it possible to parametrize dependenciesJoerg Bornemann2017-05-221-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Modules can declare dependency parameters, e.g. Module { name: "cpp" Parameter { property bool link } } Those parameters can be set in Depends items: CppApplication { Depends { name: "otherProduct" cpp.link: false } } Export items can provide default values for dependency parameters: DynamicLibrary { ... Export { Parameters { cpp.link: false } } } Rules can react on dependency parameters by accessing dep.parameters where dep is an object from the product.dependencies hierarchy. Showcase and test the feature by adding the cpp.link parameter, which can be set to false for library dependencies that should not be linked. [ChangeLog] Added a way to parametrize dependencies. [ChangeLog][Parameters] Added the cpp.link parameter to enable library dependencies to be excluded from linking. Task-number: QBS-585 Change-Id: I3b445ed65d5949a94426879e07a533a1c2af24d8 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>