[Development] Optional Qt module dependencies (was: RE: qtsystems doesn't compile...)
Mcgovern Rohan (Nokia-MP-Qt/Brisbane)
rohan.mcgovern at nokia.com
Wed Nov 2 02:10:06 CET 2011
Blasche Alex (Nokia-MP-Qt/Brisbane) said:
> >-----Original Message-----
> >From: development-bounces+alex.blasche=nokia.com at qt-project.org
> >[mailto:development-bounces+alex.blasche=nokia.com at qt-project.org] On
> >Behalf Of ext Rohan McGovern
>
> >Incidentally it's rather dangerous to do this kind of
> >
> > contains(QT_CONFIG,some_module):QT+=some_module
> >
> >...behavior nowadays. In Qt4, QT_CONFIG would be decided at configure
> >time, but in Qt5 it can be changed when you qmake additional modules.
> >
> >In other words, if you test contains(QT_CONFIG,some_module) in your Qt5
> >module, you've made your build behavior implicitly depend on the order in
> >which the user happened to run `qmake' over the qt5 modules, which is
> >largely undefined. e.g. if you are doing a `make -j20' in qt5.git, the
> >qmakes are also parallelized, and your result might flipflop between
> >builds.
>
> Surely there must be a way of enforcing dependencies between Qt modules. How would somebody create such a dependency? Is it a matter of mentioning it in sync.profile? Note that the dependency might be platform specific on and currently I don't see a way of specifying it in syn.profile.
Just do
platform_specific_scope:QT+=some_module
That will give you a big warning if some_module is not available.
IMHO it should be changed into an error, in the meantime that could be
simulated by
platform_specific_scope:!contains(QT_CONFIG,some_module):error(some_module is required!)
QT+=some_module
That "enforces" the dependency: either it's available, or the build
fails. That will be true no matter what weird build procedure might be
used. Then, to avoid "the build fails":
- put the dependency in qt.pro so that anyone issuing a `make' in qt5
will build things in the right order.
- put the gitmodule name into sync.profile so that the CI scripts know
to clone that gitmodule for the build.
- if you are packaging up the qt5 modules using your own packaging
metadata, then it's your problem to get it right there.
Incidentally I think config tests are overused in various qt5 modules at
the moment - qtsystems for example has 6 config tests, all of them
non-mandatory, doesn't that give 2**6 => 64 possible build
configurations? Surely it's not intended to actually support them all.
More information about the Development
mailing list