summaryrefslogtreecommitdiffstats
path: root/tools/configure/configureapp.h
Commit message (Collapse)AuthorAgeFilesLines
* ... and so configureapp.exe disappearethOswald Buddenhagen2016-12-231-74/+0
| | | | | Change-Id: I3fd9f2b0d4cf05a625484fce21532da8563cd62c Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* move qdevice.pri creation to qmake-based configure systemOswald Buddenhagen2016-12-131-13/+0
| | | | | | | Change-Id: I06540c3b6d98303bd9a218feedfb529993477ed6 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: BogDan Vatra <bogdan@kdab.com> Reviewed-by: Jake Petroules <jake.petroules@qt.io>
* move generation of qconfig.cpp (and qt.conf) to qmake-based configureOswald Buddenhagen2016-12-131-8/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | this moves us another step towards the "outer" configure doing just minimal bootstrapping of qmake. a challenge here was that so far, qmake itself needed qconfig.cpp. this was replaced by usage of a qt.conf file instead of compiled-in values. however, to make the executable still self-contained, that qt.conf is embedded into it (by simple appending of a fixed signature and the text file). the qmake with the embedded qt.conf is not used for the qt build itself, which instead relies on the qt.conf in bin/ as before. however, due to the missing built-in values, this file now needs to contain more information than before. but except for a minimal version that is needed to start up qmake/configure at all, that file is now also generated with qmake. as some of the newly set up properties are subsequently used by configure itself, qmake gains a (deliberately undocumented) function to reload the qt.conf after it's fully populated. unlike the old implementations, this one doesn't emit redundant qt.conf entries which match the hard-coded fallbacks. omitting them leads to leaner files which are more comprehensible. Started-by: Paolo Angelelli <paolo.angelelli@qt.io> Change-Id: I4526ef64b3c89d9851e10f83965fe479ed7f39f6 Reviewed-by: Jake Petroules <jake.petroules@qt.io>
* move configure -redo handling (mostly) to qmake-based systemOswald Buddenhagen2016-12-131-2/+1
| | | | | | | | | the qmake bootstrap uses some of the options, so the configures still read config.opt for their own purposes, but the general handling is entirely in the new system now. Change-Id: I2c6c657d4da01c8d520ac74795454747bb224bdd Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* move preparation of configure test build dir to qmake-based systemOswald Buddenhagen2016-12-131-1/+0
| | | | | Change-Id: I650fb92cfa858bf6d7ff5756aa0efe182f036a55 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* move license check to qmake-based configure systemOswald Buddenhagen2016-12-081-6/+0
| | | | | | | | | | | | | this also removes the need for passing pre-processed options via configure.cfg, so get rid of that. a somewhat unfortunate side effect is that the android-style-assets feature had to move back to the top level, as the licensing options depend on it. Started-by: Lars Knoll <lars.knoll@qt.io> Change-Id: Id4d1e0ba18b3e3104400293b8f0c7f2f65e68dea Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* configure: delete some dead code and outdated commentsOswald Buddenhagen2016-11-231-2/+0
| | | | | Change-Id: I764a9b383176e1fe9573790547ce0e12d1f88261 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Modularize the new configure system (infrastructure part)Lars Knoll2016-09-101-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change implements the required infrastructure to modularize the new configuration system. This requires a hierarchy of configuration files, both for handling multiple repositories and for individual modules inside the same repository. When configuring, they all need to get loaded first, as command line processing needs to know about all possible command line options. When the command line has been processed, the individual configuration files need to get processed one after the other and independently from each other. Configure is now automatically invoked when building the a project tree's "root" project; this works with both modular and top-level builds of Qt (the latter with an according change in the super repo). As an immediate consequence, the -skip option moves to the super repo with a different implementation, as configuration is now done after the repo list is determined. The option belongs there anyway. This commit also adds an optional testDir entry to the json file. Like this, we can still have all configure tests in qtbase/config.tests and the configuration file in, e.g., corelib can reference those. The files section can now be left out as long as a 'module' entry is present, specifying the module name. The names of the files to generate can then be deduced from that name. We still need to be able to specify names directly for the global configuration files. qtConfig() now also queries features which are module-specific. As it is sometimes necessary to query the configuration of modules which should not be actually linked (and cannot in the case of subdirs projects), the new variable QT_FOR_CONFIG which allows specifying configuration-only dependencies is introduced. Done-with: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Change-Id: Id1b518a3aa34044748b87fb8fac14d79653f6b18 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* make failure to apply -redo fatalOswald Buddenhagen2016-08-251-1/+1
| | | | | | | like it already is on unix. Change-Id: Id55f8743ae0879fabe13c19ea214da74a35e43a6 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* fix location of config.{opt,status} in top-level buildsOswald Buddenhagen2016-08-251-0/+1
| | | | | | | | | | write them to the top-level build dir, not the qtbase build dir. the old files will be still used for a smooth migration. Task-number: QTBUG-46974 Change-Id: I6eae678ffc7dfb921ecd9e9012e79e3b915ad3fa Reviewed-by: Jake Petroules <jake.petroules@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* remove dead code relating to help outputOswald Buddenhagen2016-08-251-5/+0
| | | | | | | | amends mostly c027cffbe, but also pre-historic d32a03469 (2005). Change-Id: I2a897556191cff761ea8440bc5b7e47077947d75 Reviewed-by: Jake Petroules <jake.petroules@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Use the qmake based configuration system also on WindowsLars Knoll2016-08-181-56/+3
| | | | | | | | | | | | | | | | | | | | Adapt configure.exe to use qmake to do most of the work of configuring Qt. This unifies a large part of our configuration system between Unix and Windows. configure.exe is now still doing the license check, creating qconfig.cpp, building qmake, and not much more. On the way, re-implement the still missing Windows-specific tests with the new system. The opengles2 vs. opengl-desktop conditions got a bit convoluted, as Unix prefers desktop GL, while Windows GLES2 (via ANGLE). Superficially, there is a circular dependency, but the platform scopes are supposed to break it. Done-with: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Change-Id: Ia1941f2c34b7f5bd4990a7673cd737361381c2e7 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* make the windows configure also use config_help.txtOswald Buddenhagen2016-08-181-4/+0
| | | | | | | | | | | specifically, make configure.bat dump the text file (which got some windows-specific adjustments). incidentally, this change removes the need for including a pre-built configure.exe into our source packages. Change-Id: Ib3515c113f3602767554fe1493df226551a7bf10 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Remove some dead code from the configuresLars Knoll2016-08-181-14/+0
| | | | | | Done-with: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Change-Id: If725ae0abee4d636ac8775c53e34ab138d360905 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* don't clear the rest of the command line when -redo is usedOswald Buddenhagen2016-07-221-1/+1
| | | | | | | | it's entirely reasonable to extend the saved command line by new arguments. note that these are not saved in turn. Change-Id: I02c1a2b33e93c85b3a29c50de00c2e5334f6ef51 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Updated license headersJani Heikkinen2016-01-211-17/+12
| | | | | | | | | | | | | From Qt 5.7 -> tools & applications are lisenced under GPL v3 with some exceptions, see http://blog.qt.io/blog/2016/01/13/new-agreement-with-the-kde-free-qt-foundation/ Updated license headers to use new GPL-EXCEPT header instead of LGPL21 one (in those files which will be under GPL 3 with exceptions) Change-Id: I42a473ddc97101492a60b9287d90979d9eb35ae1 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
* Merge remote-tracking branch 'origin/5.6' into devLiang Qi2015-10-141-0/+2
|\ | | | | | | | | | | | | | | | | Conflicts: tests/auto/corelib/io/qfile/tst_qfile.cpp tests/auto/corelib/io/qprocess/tst_qprocess.cpp tests/auto/corelib/tools/qversionnumber/qversionnumber.pro Change-Id: Ia93ce500349d96a2fbf0b4a37b73f088cc505c6e
| * configure.exe: Add -verbose option.Friedemann Kleint2015-10-021-0/+2
| | | | | | | | | | | | | | | | Make it possible to inspect the output of the configure tests. Task-number: QTBUG-48525 Change-Id: If93d597679ae1b189dfdaa485852d34cad52593b Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* | configure: Add support for detecting AVX512 instructionsThiago Macieira2015-09-251-0/+1
|/ | | | | | | | | | | | | | | | | Tested on Linux with Clang 3.7, GCC 4.9, 5.1 and 6.0, ICC 16 beta; on OS X with Clang-XCode 6.4, ICC 16 beta; on Windows with MSVC 2013 and ICC 15. MinGW is not tested. GCC 4.9: AVX512F AVX512ER AVX512CD AVX512PF GCC 5 & 6: AVX512F AVX512ER AVX512CD AVX512PF AVX512DQ AVX512BW AVX512VL AVX512IFMA AVX512VBMI Clang 3.7: AVX512F AVX512ER AVX512CD Clang-XCode: <none> ICC 15 & 16: AVX512F AVX512ER AVX512CD AVX512PF AVX512DQ AVX512BW AVX512VL MSVC 2013: <none> Change-Id: Ib306f8f647014b399b87ffff13f1da1b161c31d7 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Detect which C++ standard edition the compiler defaults toThiago Macieira2015-08-251-1/+2
| | | | | Change-Id: I2991557a5cc74cd18e88ffff13f670bf25d5423e Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
* adjust configure's path output to relative pathsOswald Buddenhagen2015-03-061-0/+2
| | | | | | | amends 5b27d02c3 (literally - i forgot to push the squashed commit). Change-Id: I2c588d13d5c79f9d1e4cb1ce46c4637574377c6a Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* Update copyright headersJani Heikkinen2015-02-111-7/+7
| | | | | | | | | | | | | | | | | | Qt copyrights are now in The Qt Company, so we could update the source code headers accordingly. In the same go we should also fix the links to point to qt.io. Outdated header.LGPL removed (use header.LGPL21 instead) Old header.LGPL3 renamed to header.LGPL3-COMM to match actual licensing combination. New header.LGPL-COMM taken in the use file which were using old header.LGPL3 (src/plugins/platforms/android/extract.cpp) Added new header.LGPL3 containing Commercial + LGPLv3 + GPLv2 license combination Change-Id: I6f49b819a8a20cc4f88b794a8f6726d975e8ffbe Reviewed-by: Matti Paaso <matti.paaso@theqtcompany.com>
* write relative paths to qconfig.cpp as far as possibleOswald Buddenhagen2015-02-051-1/+4
| | | | | | | | | | | | | | | this cuts down the bloat in the binaries and the binary patching requirements in the installer. as a side effect, the sysroot and makespecs are not binary patchable any more as well, which is ok, as the installer does not do it anyway. we now also warn if -[host]<foo>dir is not a subdir of -[host]prefix, as putting things outside the prefix is anti-thetical (the obvious exception being the (unix-only) -sysconfdir). Change-Id: I878f0e71a4dfcfd55b2f8b1cf3045b98b502569b Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
* Update license headers and add new license filesMatti Paaso2014-09-241-19/+11
| | | | | | | | | - Renamed LICENSE.LGPL to LICENSE.LGPLv21 - Added LICENSE.LGPLv3 - Removed LICENSE.GPL Change-Id: Iec3406e3eb3f133be549092015cefe33d259a3f2 Reviewed-by: Iikka Eklund <iikka.eklund@digia.com>
* Merge remote-tracking branch 'origin/5.3' into devFrederik Gladhorn2014-08-041-0/+1
|\ | | | | | | | | | | | | | | | | Conflicts: config.tests/arch/arch.cpp src/opengl/qgl_qpa.cpp src/widgets/kernel/qapplication.cpp Change-Id: I80b442a4c2c9632743a5b5c7319ff201ec5bc4fd
| * pass --sysroot to compile tests also on windowsOswald Buddenhagen2014-08-011-0/+1
| | | | | | | | | | | | | | Change-Id: I486059197479842f32c3590d7fd269550d22698e Reviewed-by: David Schulz <david.schulz@digia.com> Reviewed-by: Oliver Wolff <oliver.wolff@digia.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* | Merge remote-tracking branch 'origin/5.3' into devFrederik Gladhorn2014-07-291-0/+1
|\| | | | | | | | | | | | | Conflicts: src/network/ssl/qsslsocket_openssl_symbols.cpp Change-Id: Ic62419fa1fee5f4de6c372459d72e6e16f9a810b
| * Improve dbus cross compilationBernd Weimer2014-07-281-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Building QtDBus on Linux host for QNX target had two issues: * Configure check failed, because dbus-1 library was not linked in, if target platform doesn't support pkg-config. * Host tools were not built, because pkg-config was not used to locate dbus headers on the host. Task-number: QTBUG-37324 Change-Id: I71d8309599fd40ef2dd8c9e3b44b93a7482019f1 Reviewed-by: Rolf Eike Beer <eb@emlix.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* | remove dead code relating MakeItemOswald Buddenhagen2014-07-071-23/+0
|/ | | | | Change-Id: I413f038391dba02a22242eafef4a946f81babfca Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* Revert "Automatically link printsupport plugins to static applications."Oswald Buddenhagen2014-04-181-1/+0
| | | | | | | | | | It has been fully obsoleted by 4255ba40ab073afcf2a095b135883612859af4c2. This reverts commit 99eecab83d4a4c79979aa0b1fcf1f58c14dcf526. Change-Id: Id7b8d3bba27ff43e38e4fe32a4f2950de9ced493 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: John Layt <jlayt@kde.org>
* Externalize license key handling from configureKalle Viironen2014-03-251-1/+0
| | | | | | | | | | Enterprise only license key handling removed from configure. This does not affect the functionality of the Open Source version nor the enterprise version. Change-Id: I01736eba3066c56b6e50e022fae8de6aa9bd884b Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* Automatically link printsupport plugins to static applications.Friedemann Kleint2014-02-081-0/+1
| | | | | | | | | | | | Add the required printsupport plugins to the QTPLUGIN variable as is done for the QPA plugin. [ChangeLog][QtPrintSupport] Made the Qt buildsystem automatically include the necessary plugins so that static applications can print. Task-number: QTBUG-29663 Change-Id: I0e2e3b0f25dd5714bd187711c85893926b0c4e85 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* expand tabs and related whitespace fixes in *.{cpp,h,qdoc}Oswald Buddenhagen2014-01-131-7/+7
| | | | | | | | the diff -w for this commit is empty. Started-by: Thiago Macieira <thiago.macieira@intel.com> Change-Id: I77bb84e71c63ce75e0709e5b94bee18e3ce6ab9e Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* bring the windows configure -qconfig handling in line with the unix oneOswald Buddenhagen2013-10-301-1/+0
| | | | | | | | on the way, this significantly simplifies the code. Change-Id: I24f0a517e62cc4b913ffef5cab096e721653c013 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Integrate device-option into the windows configureBjoern Breitmeyer2013-08-151-0/+1
| | | | | | | | | | | | | | | Windows configure does not have -device-option yet. A hack for android already generated the qdevice.pri. But it did this even if no android was build, so merged the device-option with the android generation of qdevice.pri. The qdevice.pri is generated earlier in the configure steps than before to match the linux configure and allow to set device options before the config.tests are run. Change-Id: I753cf0d5eba1479792a685d6e1f5acb38b970893 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* add configure -extprefix optionOswald Buddenhagen2013-08-151-0/+2
| | | | | | | | | | | | | | | | | this adds the possibility to put the actual qt installation outside the sysroot it is configured for. this makes it possible to install an x-built qt without "polluting" the sysroot, which makes it possible to have read-only sysroots, and multiple qt builds for one sysroot. -prefix is the location within the sysroot as seen by the target itself, and gets "burned" into QLibraryInfo in QtCore. -extprefix is the location in the host file system and gets "burned" into QLibraryInfo in qmake. if it is not specified, it defaults to the sysrootified prefix, which is the previous behavior. Task-number: QTBUG-26680 Change-Id: Ia43833c4e27733159afeb8c8b9b2d981378d0cd1 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* de-duplicate writeout of config filesOswald Buddenhagen2013-07-151-0/+10
| | | | | Change-Id: Iaad06f170cf2be3d3fca533a735b69316347ed5b Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* prune unused filesDiffer() and writeToFile() functionsOswald Buddenhagen2013-07-151-1/+0
| | | | | Change-Id: I470a5b3514260a02e73389d057d89c64b08e05d0 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* complain about bad arguments to -make/-nomakeOswald Buddenhagen2013-06-191-0/+1
| | | | | | Task-number: QTBUG-5366 Change-Id: I461a6c85fcee4a0216571d294171652b05ee6a34 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* reality adjustment: rename generateSystemVars() => prepareConfigTests()Oswald Buddenhagen2013-05-221-1/+1
| | | | | Change-Id: I3f9cd8b8cdb54d682d0207f28168f4e518b98280 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* purge buildkey-related dead codeOswald Buddenhagen2013-05-221-1/+0
| | | | | Change-Id: I196dbe33b349d437450a5ea68befb3d6bfe1b574 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* purge obsolete EVAL #ifdefsOswald Buddenhagen2013-05-221-10/+0
| | | | | | | clearly, nobody's been maintaining them for an extended period of time. Change-Id: I41c6b40026f107d34f7964934f36bc727fb6b795 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* add -skip option to the configuresOswald Buddenhagen2013-02-201-0/+1
| | | | | | | | | | | | | | | this makes it possible to exclude modules from the build without moving their sources out of the way. substitutes the much-requested -no-webkit. not adding a symmetrical option, as it is relatively pointless: to build only specific "leaf" modules, you only need to run "make module-qt<module> ..." once you configured. and removing particular "intermediate" modules is achieved with this very option. Task-number: QTBUG-26697 Change-Id: I25cebdbd029885a2c653c4cde696f9bb78691768 Reviewed-by: Tuukka Turunen <tuukka.turunen@digia.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* Update copyright year in Digia's license headersSergio Ahumada2013-01-181-1/+1
| | | | | Change-Id: Ic804938fc352291d011800d21e549c10acac66fb Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* slash the -fast configure optionOswald Buddenhagen2012-12-181-1/+0
| | | | | | | | | it's completely broken, and i have no time to fix it properly now. configure runs no qmake -r by default any more, so it's fast enough. Change-Id: Ib2b4c68f1fc2fe95accecbe93dd5a87c9b015692 Reviewed-by: David Faure (KDE) <faure@kde.org> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Improve Direct X SDK detection in configure.exeFriedemann Kleint2012-11-061-0/+2
| | | | | | | | | | | | | Check presence of Direct X SDK depending on compiler version. Check for presence of the headers d3dcompile.h and intrin.h (SSE2) as well as d3d9.lib and the shader compiler since the header d3dcompile.h is also present in MinGW. Change-Id: I7ee9701f4f9dc175ed2d733db79dda46de4d69f1 Reviewed-by: Kai Koehne <kai.koehne@digia.com>
* Improve path search in configure.Friedemann Kleint2012-11-051-4/+3
| | | | | | | | | | | | | | - Remove duplicated code locateFile/locateFileInPaths. - Move basic path search functionality to Environment. - Add functions for headerPaths/libraryPaths to Environment. - Use QStandardPaths::findExecutable(). - Replace Environment::detectExecutable by QStandardPaths::findExecutable(). - Introduce static path lists in findFile() to avoid repeated directory scans Change-Id: I9b93066a3de65f40527780d6ddf7989bca35cd04 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* rewrite default spec handlingOswald Buddenhagen2012-11-011-1/+0
| | | | | | | | | | instead of symlinking (on unix) or creating a forwarding spec (on windows), just put the default specs into (the bootstrapped) QLibraryInfo. Change-Id: I595500ef7399f77cb8ec117c4303bc0a2ffe505f Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Generate a .qmake.cache in config.tests from configure.exe.Jason Barron2012-10-301-0/+1
| | | | | | | | | | We need to generate a .qmake.cache file in the config.tests directory on Windows to ensure that the config.tests can actually be compiled before the qmodule.pri is created. Task-number: QTBUG-27708 Change-Id: I8d9397a8cbdb2aa19a5318497177d76049f9fa91 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* Blackberry mkspecs: Refine compiler optionsPeter Hartmann2012-10-011-0/+1
| | | | | | | | | | | | | | | | | | stack-protector-strong gives performance benefits over stack-protector-all and is still checking more than -stack-protector, so seems to be a good middle way and we want to use it when it is there. The -shared option for the compiler (not the linker) prevents a RIM internal version of qcc from forcing -fPIE, and should not harm in general when set. In addition, add a method "compilerSupportsFlag" for Windows as is present in the Unix configure script. Change-Id: Iba300e9cb82f34043e7b36f8e45287a1aed2a1a5 Original-patch-by: Greg Bentz Reviewed-by: Sean Harmer <sean.harmer@kdab.com>