[Development] Specifying module dependencies
Frederik Gladhorn
frederik.gladhorn at theqtcompany.com
Wed Jun 10 18:30:34 CEST 2015
Hi all,
when talking about how we manage dependencies in the CI system, an interesting
pain point came up during the contributors' summit:
We have several redundant overlapping, not very clear ways of specifying a
module's dependencies. Optional deps make it harder.
I'll list the 5 options I know of below. My question is, can we agree on
something less hidden, with simple syntax that can be used by both qmake and
the CI system.
For the CI system, we can parse pretty much anything, of course we don't want
to implement a qmake copy...
A sensible compromise might be JSON since afaict qmake eats that.
Greetings,
Frederik
What we currently have (probably incomplete):
1) sync.profile
A file in each module that allows specifying dependencies in terms of git
modules (including sha1s), perl syntax. Used by syncqt for public headers but
also has a section like this (qtdeclarative):
# Module dependencies.
# Every module that is required to build this module should have one entry.
# Each of the module version specifiers can take one of the following values:
# - A specific Git revision.
# - any git symbolic ref resolvable from the module's repository (e.g.
"refs/heads/master" to track master branch)
# - an empty string to use the same branch under test (dependencies will
become "refs/heads/master" if we are in the master branch)
#
%dependencies = (
"qtbase" => "",
"qtxmlpatterns" => "",
);
2) qt_modulename_.pro
sometimes things seem to be excluded here, e.g. qtserialport has:
requires(!winrt)
3) module/src/src.pro
example qtwinextras and others:
win32 {
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += winextras
qtHaveModule(quick): SUBDIRS += imports
} else {
# fake project for creating the documentation
TEMPLATE = aux
QMAKE_DOCS = $$PWD/winextras/doc/qtwinextras.qdocconf
}
4) qt5.git
in qt.pro we list all modules again, with deps:
addModule(qtdeclarative, qtbase, qtsvg qtxmlpatterns)
(amusingly this is not even correct, qtsvg is not a dependency of
qtdeclarative any more)
5) I don't even understand how qtwebengine does it to not build for
Android/iOS...
More information about the Development
mailing list