On 23 juin 2016, at 09:29, Lars Knoll <lars.kn...@qt.io> wrote:

> Hi,
> 
> As some of you might know, I’ve been working for some time now on developing 
> a new configuration system for Qt. As the first large change went in 
> yesterday evening, I guess it’s time I describe it a little, and also tell 
> you a bit about what’s still coming.
> 
> The goal of the new system is twofold. First of all, we are seeing a large 
> need, especially with our embedded users, to customise how Qt is being built. 
> Many of them have size restrictions ore rather hard testing requirements, 
> where being able to limit the functionality available in Qt is extremely 
> helpful. We had such a system (see src/corelib/global/qfeatures.txt) before, 
> but it was disconnected from the configure script, wasn’t really maintained 
> since Qt 4 times, and had quite many limitations that I hope to solve with 
> the new system.
> 
> Secondly, we have had to deal for a long time with two different 
> configuration systems. We had a monster of a shell script for unix, and an Qt 
> based executable on Windows. Changes to Qt often required changing both, and 
> it was very easy to sneak subtle errors in. Maintainability of the old system 
> was in general very poor.
> 
> So with that comes the new system. As I said, the first (but largest) patch 
> went yesterday evening (see https://codereview.qt-project.org/#/c/149202/). 
> It basically moves most of the configuration handling from the shell script 
> over to a declarative json file (currently configure.json) that is being 
> processed by qmake. This currently only affects Unix, Windows platforms are 
> still being configured through configure.exe. The change aims to be a 1 to 1 
> (or at least as close as possible) mapping of the old shell script to the new 
> system. So if you find that some configuration you’re using is suddenly 
> broken let me know.
> 
> I’ll send out a separate email describing the new system in more detail for 
> those who are interested.
> 
> For everybody else, there are a couple of changes that will still come in 
> over the next couple of weeks:
> 
> * Give every module a qtmoduleglobal.h and qtmoduleglobal_p.h file
> 
> We already have per module global files for many modules (they are often 
> required for the export/import handling of classes/symbols). With the new 
> system we will add a public and private global file per module. I’ll start 
> requiring that all public headers of the module include the public global 
> file first, all private headers the private global file.
> 
> This is needed some steps below to modularise the configuration system and to 
> allow us to track whether a certain feature we rely upon in code is actually 
> available or not.
> 
> See https://codereview.qt-project.org/#/c/161143 and subsequent changes (the 
> change adding global_p.h is still missing here, but will come as well)
> 
> * Saner handling of 3rd party libs
> 
> Currently all our dependencies to external libs are handled in a rather 
> ad-hoc way in the pro files. The goal is to unify this, see 
> https://codereview.qt-project.org/#/c/161660/
> 
> * Modularisation of the new configuration system
> 
> I have some patches pending to modularise the new system. We will basically 
> have one json configuration file per module/shared library. This will also 
> allow us to use the system fully on repositories outside of qtbase, who 
> currently have rather limited support for being configured.
> 
> With this change, we will start creating a qtmodule-config.h and 
> qtmodule-config_p.h file as well as a corresponding public and private .pri 
> files for each module. qtmodule-config.h will get included from the public 
> global header for the module, qtmodule-config_p.h from the private one.
> 
> The public pro file will contain definitions for the features that are being 
> exported by the module, the private one for features that are only relevant 
> in the context of the module itself. As an example, ‘mimetypes’ would be a 
> public feature of QtCore (as it changes the set of available API), whereas 
> ‘glib’ would be most likely a private one (as it only determines which event 
> loop to use and doesn’t change API).
> 
> See change https://codereview.qt-project.org/#/c/159604/40 and the following 
> commit
> 
> * Integration of the old feature system
> 
> As said above, there is the old feature system (see qfeatures.txt in 
> corelib/global). With the work above done, integrating it into the system 
> will be trivial (change https://codereview.qt-project.org/#/c/159763/)
> 
> * With this done, I will also want to introduce a new mechanism to handle 
> features in our cpp and header files. The current double negated #ifndef 
> QT_NO_FOO is hard to read and unsafe. By unsafe, I mean that the compiler 
> won’t error out or warn us if the feature ‘foo’ isn’t available (because of a 
> typo or because the feature is actually defined in widgets and you tried 
> using it in gui). I have some pending work that would change this to use a 
> macro function "#if QT_HAS_FEATURE(foo)” where we would actually get a 
> compile error if the feature foo isn’t known to the system. As a nice side 
> effect I’m planning on having the same names for features between .pro and 
> c++ files.
> 
> * Further reduce the shell script
> 
> The longer term goal will be to reduce the shell script further, until it’s 
> basically a bootstrapping step for qmake, and hand all the other 
> configuration work over to qmake. Some more patches for this are pending, but 
> further help here would be appreciated.
> 
> 
> * Get rid of configure.exe
> 
> Finally, I’d also like to get rid of configure.exe, and do the same thing on 
> Windows (ie. Bootstrap qmake from a small script, like we bootstrap 
> configure.exe today) and then let qmake deal with the rest. With that we 
> should be able to get to one cross-platform configuration system. For this 
> task I’d be looking for volunteers :)
> 
> Cheers,
> Lars
> 

Hi,

Pretty nice ! That will be very useful to simplify Qt customization for 
constrained hardware.

Will there also be a GUI available to help create custom configurations ?

A side question, I've got a few submissions adding handling for a bunch of 
missing QT_NO_DRAGANDDROP/CLIBOARD tests. Should I ping them to get them in 
before the QT_HAS_FEATURE migration or rather wait for it and update the 
patches then ?

Regards
Samuel

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to