summaryrefslogtreecommitdiff
path: root/src/plugins/genericprojectmanager
Commit message (Collapse)AuthorAgeFilesLines
* Toolchains: Detect unspecified language versionNikolai Kosjar2018-10-081-4/+2
| | | | | | | | | | | | | | | | | | | | We checked the command line from the project manager for "-std=X" and friends to figure out the language version to use. However, if such a flag was not provided, we assumed the latest version we support. This could conflict with the actual version of the compiler and its predefined macros. Figure out the version by inspecting __cplusplus/__STDC_VERSION__ in the predefined macros of the toolchain. The MSVC compiler is an exception to this, as it does not seem to properly set the value - check for _MSVC_LANG if possible, otherwise simply assume some versions as before. While at it, add also support for C17/C18 and the upcoming C++2a. Task-number: QTCREATORBUG-20884 Task-number: QTCREATORBUG-21188 Change-Id: I464ffcd52d2120c0208275a050e82efda44fae1c Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
* GenericProject: fix sorting file list when appending an entryAndre Hartmann2018-10-051-1/+4
| | | | | | | | | | | | | | pos was -1 for a value that should have been appended as last element to the list. Unfortunately, list->insert treats -1 as prepending in front of the list, which lead to incorrectly sorted lists. The function got broken during the review process of the introducing commit 758544c0581a70f87d375692ff93d. Change-Id: I693e4d79b0d493deeac0ea8781d637fe50d008b8 Reviewed-by: Orgad Shaneh <orgads@gmail.com> Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
* Use base make step for autotools projectsEike Ziller2018-05-232-45/+0
| | | | | | | | | | | | | | | | Unify generic and autotools make steps, by moving the better maintained logic from the generic make step to the base make step. Add fallback code for restoring settings from previous autotools make steps, since a key was named slightly different. The autotools make step was behaving a little bit better when there is no C++ toolchain set in the kit, but on the other hand would just take the make command from a random existing toolchain, which can be wrong too. Anyhow, this must be fixed in a follow-up patch for all make steps. Change-Id: I47af7d327feb9336790d30c8b9a4968c25b25db3 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
* Make step is always called "Make"Eike Ziller2018-05-221-8/+2
| | | | | | | So provide it through the base class, also for the factories. Change-Id: Ie4a6113b785ec6c0ddde694ec0bcd11a26331c39 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
* Centralize retrieving the "parent" build configurationEike Ziller2018-05-221-2/+0
| | | | | | | | | | | | | If a step is part of a build configuration, that is used, but many steps can be used as part of a deploy configuration. In that case the active build configuration of the step's target must be used, and that logic was duplicated many times. Instead, let BuildStep::buildConfiguration take care of that logic. For steps that are not offered for deploy configurations there is no semantic difference, and for the others this removes code duplication. Change-Id: I02f3bb50226590092cedcec02fce6fde9c7c6e63 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
* Add effectiveMakeCommand to MakeStep baseEike Ziller2018-05-161-1/+1
| | | | | | | | | | | | Similar to the make step from qmakeprojectmanager. There is an internal semantic change when there is no C++ toolchain: Now the effective make command will be empty in that case. Before this patch it was defaulting to "make", but init() was never using that because it also checks for an existing C++ toolchain, so there is no visible change, and actually more consistent now. Change-Id: I31157fee63c465b4b61701d76152f3ad172c29e8 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
* Move generic make step to project explorerEike Ziller2018-05-167-342/+5
| | | | | | | | As a first step of creating a generic base for the 3 existing implementations. Change-Id: I2456db74cb635316f97a247e2a2b6bdb34931440 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
* ProjectExplorer: Pass id directly to BuildConfigurationshjk2018-05-082-6/+6
| | | | | | | It's what the base class wants, and follows run and deploy precedence. Change-Id: I26eff43337851702417e7e4284fc390b904060f6 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
* ProjectExplorer: Add and use addNestedNode(...) that takes unique_ptrTobias Hunger2018-05-021-10/+11
| | | | | Change-Id: Ieb26721d053111fb350494e31d1f6da3fe642420 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* ProjectExplorer: Use unique_ptr for Project::setRootProjectNodeTobias Hunger2018-05-021-2/+2
| | | | | Change-Id: If63a49d0eecfb93adcc6076fcb3208c87603af10 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Merge remote-tracking branch 'origin/4.6'Eike Ziller2018-04-131-1/+2
|\ | | | | | | | | | | | | | | | | | | | | Conflicts: src/libs/utils/settingsaccessor.cpp src/plugins/autotest/autotestplugin.cpp src/plugins/git/gitclient.cpp src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp src/plugins/qbsprojectmanager/qbsrunconfiguration.h Change-Id: I65f143cad18af509a2621d6c5925abbd038ea70f
| * BuildStep: Make build steps more widely availableTobias Hunger2018-04-111-1/+2
| | | | | | | | | | | | | | | | Make the build steps apply to more buildsteplists. Task-number: QTCREATORBUG-19823 (and similar for other build steps) Change-Id: I09d3b4b6ad99453cb587303aa78b46e8a4f360bb Reviewed-by: Eike Ziller <eike.ziller@qt.io>
* | Merge remote-tracking branch 'origin/4.6'Eike Ziller2018-03-281-4/+1
|\ \ | |/ | | | | | | | | | | Conflicts: src/plugins/projectexplorer/msvctoolchain.cpp Change-Id: If2116aa2dbfdb9d07088595e791f8fa706b39e00
| * GenericProject: Fix adding several makestepsTobias Hunger2018-03-231-4/+1
| | | | | | | | | | | | | | | | | | | | | | | | Fix adding several makesteps to generic projects again. The problem used to be that the constructor called by "Step" set a buildTarget of "" via the delegation to GenericMakeStep's constructor and then added "all" explicitly. So it was attempting to build two targets, with the empty target being a syntax error. Task-number: QTCREATORBUG-20108 Change-Id: I7382a1fa8b8b5869e6be11367e27d6a786f6aa74 Reviewed-by: hjk <hjk@qt.io>
* | Fix warnings about unused lambda capturesTobias Hunger2018-02-211-1/+1
| | | | | | | | | | Change-Id: Ib9bcf180fd8ceffbf88836a62fc9532e6f7fc656 Reviewed-by: hjk <hjk@qt.io>
* | GenericProject: Pimpl and remove uses of global object poolhjk2018-02-062-30/+41
|/ | | | | Change-Id: I2020ab5a72af9dfce5393fa3f91755f914a9e021 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
* Use project id uniformly as project contexthjk2017-12-203-3/+1
| | | | | | | | | | | | | | | | | | | The possibly intented flexibility e.g. to have different project types share the same idea of a common context was never used, in all cases we had a 1:1 relation ship between project ids and ids that were used as context. This led to oversights like the one fixed in 60fb35a2. This patch here uses the project id unconditionally as context and drops all context ids. If we'll ever have the situation where the original flexibility was needed, Project::projectContext() could be made virtual and overridden were needed. Also, the context was never modified for any given project, so the updating machinery is not needed. Change-Id: I3f7fac0ed5e4704e126558987c48577f26082dfd Reviewed-by: Christian Stenger <christian.stenger@qt.io> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
* ProjectExplorer/all: Re-organize BuildSteps/{Deploy,Build}Config setuphjk2017-12-085-192/+64
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This follow the rough pattern of recent *RunConfigurationFactory changes for build and deploy configurations. - Collapse the two lines of constructors similar to what 890c1906e6fb2ec did for RunConfigurations * Deploy* was purely mechanical * Build* ctors are split in connects() in the ctor body to create "empty shell for clone" etc and build step additions in initialize() functions which are only used in the create() case. -- Allows to collapse the shared 'ctor()' functions, too. - Move FooBuildConfigurationFactory::create() implementations to FooBuildConfiguration() constructor. That was a strange and unneeded ping-pong between factories and objects, and furthermore allows one level less of indirection (and for a later, left out here, some reduction of the FooBuildConfiguration interfaces that were only used to accommodate the *Factory::create() functions. - Most {Build,Deploy}Configuration{,Factory} classes had a canHandle(), but there wasn't one in the base classses. Have one there. - Most canHandle() functions were checking simple restrictions on e.g. project or target types, specify those by setters in the constructors instead and check them in the base canHandle() - clone() is generally replaced by a creation of a "shell object" and a fromMap(source->toMap()), implemented in the base, there are two cases left for Android and Qbs that needed(?) some extra polish - generally use canHandle() in base implementation, instead of doing that in all Derived::canFoo() - as a result, canCreate/create/canClone/clone reimplementations are not needed anymore, keep the base implementation for now (could be inlined into their only users later), but de-virtualize them. - Combine Ios{Preset,DSym}BuildStepFactory. There was only one 'dsym' build step they could create. - Split the 'mangled' id into the ProjectConfiguration subtype specific constant identifier, and a QString extraId() bit. Only maintain the mangled id in saved settings. - Make ProjectConfiguration::m_id a constant member, adapt all constructors of derived classe. Not done in this patch: - Finish possible cosmetic changes on top - Add a way to specify restrictions to supported Qt versions (used in Android/Ios), as the base implementation does not depend on the qtsupport plugin - Combine the QList<X> availableFoo() + createFoo(X) function pairs to somthing like a direct QList<struct { X; std::function<X()>; }> fooCreators() to avoid e.g. the baseId.withSuffix() <-> id.suffixAfter(base) pingpong - Remove the *Factories from the global object pool - Do something about priority(). Falling back to plain qmake in android+qmake setup is not helpful. Change-Id: I2be7d88d554c5aa8b7db8edf5b93278e1ae0112a Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
* Project: Make Project::files return a FileNameListTobias Hunger2017-12-081-2/+1
| | | | | Change-Id: I75ceb22ac65b8288d824f229d44089cba6fc8ea3 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
* Merge remote-tracking branch 'origin/4.5'Eike Ziller2017-11-291-2/+7
|\ | | | | | | Change-Id: I86852d289c22210a0439e8e297819dc7276a96de
| * BuildConfiguration: Fix caching of environmentTobias Hunger2017-11-281-2/+7
| | | | | | | | | | | | Task-number: QTCREATORBUG-19371 Change-Id: I5ab20cd39d18283d0bd9e5c24db69e7ddba387b9 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
* | ProjectExplorer: Implement RunConfiguration::do{Clone,Restore} in basehjk2017-11-161-1/+1
| | | | | | | | | | | | | | | | It's possible now. Change-Id: I49ed73312aea1627a9543890431e2e379e3fb3ec Reviewed-by: Tobias Hunger <tobias.hunger@qt.io> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* | CustomExecutable: standardize RunConfiguration::initialize() signaturehjk2017-11-141-1/+1
|/ | | | | | | | | | Most other signatures look like {...}RunConfiguration::initialize(Core::Id), make this here the same, even if the Id is unused (or, rather always the same) so we can use a virtual function in the base RunConfiguration at some time. Change-Id: I5d3d4a7bf856bb0cc31f8e26bc0e5a80fd1a4066 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* QtSupport: Do not prepend QT_HOST_BINS to PATHTobias Hunger2017-10-181-0/+5
| | | | | | | | | | | | Do not unconditionally prepend QT_HOST_BINS to PATH as part of the Kit setup. Prepend this directory to PATH in the Qmake- and GenericBuildConfigurations instead. Task-number: QTCREATORBUG-18714 Change-Id: I1c1d1362105b82f9c369d989e90d4f7079c2c9a2 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
* ProjectExplorer: Do not prepend compiler path to PATH everywhere!Tobias Hunger2017-10-182-0/+7
| | | | | | | | | | | | | | | | | | | | | Do not unconditionally prepend the (c++) compiler path to PATH for all projects using GCC-derived toolchains. Prepend the compiler path in the Qmake- and GenericBuildConfigurations instead. Also change the order: Apply buildconfiguration's addToEnvironment first, only then apply the kit's addToEnvironment. This does change a few things: * CMake and Qbs will now get the normal PATH * MSVC compilers will have their compiler path prepended to PATH by the effected BuildConfigurations. This should be harmless, since that happens before the environment setup script is appended. Task-number: QTCREATORBUG-18714 Change-Id: I548182bc447d80d24f4de4ce7cf12ee1a753ed26 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
* ProjectExplorer: Re-organize RunConfiguration constructorshjk2017-09-131-1/+1
| | | | | | | | | | | | | | | | | | | | The idea is to massage the setup in a way to make implementation of new configurations less error prone by identifying recurring patterns and sharing repetitive code that tends to be forgotten (see Android cloning). The former two lines of constructors (owner-and-id, owner-and-source) are split into a simple, shared, constructor and new setId() and copyFrom() functions. The change is mostly mechanical, some multiple calls to fromMap have been removed, though, some consts added. Otherwise, to keep the patch small it temporarily introduces two helper templates in IRunConfigurationFactory. Also, setId() signatures have not been unified yet. These won't be needed in the final setup. Change-Id: I8c0734496caae744a9883fe6d92c1d8f8e0234ea Reviewed-by: hjk <hjk@qt.io>
* BuildSteps: Fix a number of crashesTobias Hunger2017-09-081-1/+1
| | | | | | | | | | | Fix crashes due to activeProjectConfigurationChanged signal sending a nullptr. Uses the same fix as QTCREATORBUG-18865, but in more places:-) Task-number: QTCREATORBUG-18866 Change-Id: Ic71af5ed26b2a44339f0c687f3f46bfdf62c2489 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
* Fix qbs build regarding app_version.hNikolai Kosjar2017-09-061-0/+1
| | | | | Change-Id: I2b6bd8bf10221dc3d08ada30701d5b39cc763251 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
* app_version.h: Make IDE name configurableTobias Hunger2017-09-051-1/+3
| | | | | | Change-Id: I993f452c8d09cf89e9a2958fc8e36b7d2c17ee6f Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
* Merge remote-tracking branch 'origin/4.4'Eike Ziller2017-09-051-2/+4
|\ | | | | | | Change-Id: Ic9a1cf3b40b259d9c77f2f542405d189171e0fbf
| * CppTools: set default -std=c++11 for Qt4Ivan Donchevskii2017-09-051-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | qmake from Qt4 does not provide C++ standard and clang can't properly compile Qt4.8.6 and earlier with c++1z. Behavior in this commit mimics qmake from Qt5 which also provides c++11 as a default standard. Task-number: QTCREATORBUG-16441 Change-Id: I3d29891d6e47f2367f2b3b2bf4be4d86661924e9 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
* | Merge remote-tracking branch 'origin/4.4'Orgad Shaneh2017-08-301-1/+1
|\ \ | |/ | | | | Change-Id: I9ab2c68d2bd07b0dd89051a2f5f6fa51676d8594
| * Fix copyright year in plugin info, --version, and macOS infoEike Ziller2017-08-241-1/+1
| | | | | | | | | | | | | | | | By using the new QTCREATOR_COPYRIGHT_YEAR variable Task-number: QTCREATORBUG-18612 Change-Id: I3bcf0319660d210436d3130c00f43325c460a66c Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* | ProjectExplorer: Add subscribeSignal method to targets and projectsTobias Hunger2017-08-022-10/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a subscribeSignal method to targets and projects that will make sure all signals of all project configurations added during the lifetime of the project/target will get connected (if the type matches). Use this to connect to some signal in all BuildConfigurations of a project and get rid of code that keeps connecting to the current build configuration. Use Project::buildEnvironmentChanged as an example and convert its usages. Change-Id: I689bcebac4b191bf3f8a18765bf18eaac371c5fe Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
* | ProjectNodes: Do not derive Project Nodes from QObjectTobias Hunger2017-08-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | That should save some memory per node, and since creator has a lot of nodes (e.g. opening the LLVM project adds about 1 000 000 nodes) this should be noticeable:-) Calling update inside ProjectTree::currentNode() and rename it to findCurrentNode() to make sure it is an still existing pointer. Also, try to reduce the somehow more expensive currentNode() calls and sprinkle some const around that usage. Change-Id: I6a7c5db01a71d53d39544d3013cad557d5b96cdc Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
* | Project: Move signalling of parsing state into ProjectTobias Hunger2017-07-261-1/+2
|/ | | | | | | Get rid of duplicated code to do such signaling in derived Project types. Change-Id: I26914a1d751d72ee65c15a7943e0e7f34978f042 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
* Plugins: Fix that mimetype definition was not valid JSONEike Ziller2017-07-251-25/+25
| | | | | | | | | | | | | JSON officially does not support multiline strings, so we should use the same mechanism that we already use for the plugin description (i.e. additionally support arrays of strings which are interpreted as lines). This just happens to work because Qt's JSON parser eats it without choking. Change-Id: I25ef04600b209775c5a7af916c687fda4a8b1a4d Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io> Reviewed-by: Christian Stenger <christian.stenger@qt.io>
* Wizards: Make the big wizards icons smallerAlessandro Portale2017-07-212-0/+0
| | | | | | | | | | | | The feedback was clear: Icons were too big. This patch decreases the sizes from 92x68 to 48x48. 48x48 should not be too big anymore, and at the same time it should still allow to have an understandable image. Change-Id: I45a9f2214a43987ed60d2bd7527c025016dde745 Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Tobias Hunger <tobias.hunger@qt.io> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
* Update wizard template iconsMitch Curtis2017-06-065-8/+9
| | | | | | | | | | | | | | | | | | The icons have been redesigned to have a more consistent and clean look. The colors work well with both dark and light themes. The dimensions of the icons have been made larger in order to facilitate their use in an icon grid. A follow-up commit will add more wizard templates that make use of the larger icons in order to depict various Qt Quick UI layouts. Some icons (Qt Quick Application, Qt Quick Controls 2 Application) were unchanged, as the follow-up commit will remove them in favor of more specific templates. Task-number: QTPM-395 Change-Id: I5804c3fb92c60e53e1380cfb05d4c7f14e877d8a Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
* Reduce usage of qApp in favor of static function callsAlessandro Portale2017-04-241-1/+1
| | | | | | | | | | | | Q*Application classes have unusually many static functions. In many cases in our code, these functions are unnecessarily called as instance functions, using the qApp helper. This patch replaces many occurencies of qApp with the according Q*Application classname. Change-Id: I6099a419fa7bf969891269c37ed7a9e817ef5124 Reviewed-by: hjk <hjk@qt.io>
* Merge remote-tracking branch 'origin/4.3'Eike Ziller2017-04-192-9/+7
|\ | | | | | | | | | | | | | | | | | | Conflicts: src/plugins/genericprojectmanager/genericproject.cpp src/plugins/genericprojectmanager/genericproject.h src/plugins/genericprojectmanager/genericprojectnodes.cpp src/plugins/genericprojectmanager/genericprojectnodes.h Change-Id: Ie0c870f68c8d200a75489b75860987655b2f6175
| * Project: Unify handling of displayNameTobias Hunger2017-04-072-7/+1
| | | | | | | | | | | | | | | | Unify the handling of displayName with a proper changed signal across all projects. Change-Id: I7e503528854b85f6f38de4b0943775f82a0d6123 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
| * ProjectNodes: Handle supported actions one-by-onehjk2017-04-052-10/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Getting the full list for a node can get quite expensive e.g. in cases of recursive calls of QMakeProjectManager::findPriFile. However, the FlatModel needs to decide quickly on whether an item is editable to potentially allow renaming. So split up QList<Actions> supportedActions() into individual bool supportsAction(action) calls and make sure Rename is not on the critical path. Task-number: QTCREATORBUG-17953 Change-Id: I31841847f8aa7d7b94c63d76ce71efb1c930fa69 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
* | Merge remote-tracking branch 'origin/4.3'Eike Ziller2017-03-302-16/+15
|\ \ | |/ | | | | | | | | | | Conflicts: src/plugins/cmakeprojectmanager/servermodereader.cpp Change-Id: I58e7b33d32c41cb48a24a5638ddb256212dd6107
| * Project: Move ProjectDocument setup into Project classTobias Hunger2017-03-291-4/+3
| | | | | | | | | | Change-Id: I5c0ec79ddf066e37660fb9a6b24f9d882355d511 Reviewed-by: hjk <hjk@qt.io>
| * ProjectExplorer: Provide ProjectDocument and use it in all projectsTobias Hunger2017-03-292-61/+14
| | | | | | | | | | Change-Id: I6e054ebf1043bd1f6748f1567f35c68394bd6528 Reviewed-by: hjk <hjk@qt.io>
* | Merge remote-tracking branch 'origin/4.3'Eike Ziller2017-03-283-19/+2
|\ \ | |/ | | | | | | | | | | | | | | Conflicts: src/plugins/genericprojectmanager/genericproject.cpp src/plugins/genericprojectmanager/genericproject.h src/plugins/projectexplorer/projectmodels.cpp Change-Id: I290cba328212cadd3c12909d1f2f3642d326a1ca
| * ProjectExplorer: Handle project file list globallyTobias Hunger2017-03-273-20/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Handle the generation of the list of files in a project globally, based on the project tree. Creator now has the concept of TreeManagers which can enrich the project tree with additional data (e.g. the files found in a resource file), which the project does not necessarily know about. So use that tree to find the files that belong to a project instead of implementing similar features in each project. Change-Id: Ia375a914a1f2c0adaa427f9eda834eec2db07f68 Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Marco Benelli <marco.benelli@qt.io>
* | GenericProject: Code cleanuphjk2017-03-218-269/+111
|/ | | | | | | | Remove unused code from project node, access own members directly, etc. Change-Id: Icbffb4d3328757ffe3aa756ca1448fefba9bb00a Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
* ProjectExplorer: Add a FolderNode::addNestedNode() functionhjk2017-03-141-16/+13
| | | | | | | | | | | Also, rename buildTree() to addNestedNodes(), it's really adding things, not recompletely (re-)building the subtree. Use it whenever possible to avoid intermediate lists of items to insert. Change-Id: I5fde41e5b164a8a292410bd381a85f5efadf3471 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>