summaryrefslogtreecommitdiffstats
path: root/qt.pro
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2015-12-18 18:50:54 +0100
committerJani Heikkinen <jani.heikkinen@theqtcompany.com>2016-01-22 04:26:12 +0000
commit06c3d40cc90ae33a4d06b3dc21b9c0f23ad00c35 (patch)
tree037bf84fa19e76aad707f89e8447550562519121 /qt.pro
parentf47e82703c80504304dd18335d669852e72be09f (diff)
move module dependencies from qt.pro to .gitmodules
this removes the last redundant module list. the module build order which is not determined by dependencies is pretty random now. this is avoided for a few heavy and "less relevant" modules by setting a priority to built them as late as possible. Change-Id: Ie8ef9777d050a4915cd2282dc9ccb48fcdbc02d2 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Diffstat (limited to 'qt.pro')
-rw-r--r--qt.pro133
1 files changed, 52 insertions, 81 deletions
diff --git a/qt.pro b/qt.pro
index 5e168fae..f8d3d4d3 100644
--- a/qt.pro
+++ b/qt.pro
@@ -7,97 +7,68 @@ CONFIG -= build_pass # unhack, as it confuses Qt Creator
TEMPLATE = subdirs
-defineReplace(moduleName) {
- return(module_$$replace(1, -, _))
+# Extract submodules from .gitmodules.
+lines = $$cat(.gitmodules, lines)
+for (line, lines) {
+ mod = $$replace(line, "^\\[submodule \"([^\"]+)\"\\]$", \\1)
+ !equals(mod, $$line) {
+ module = $$mod
+ modules += $$mod
+ } else {
+ prop = $$replace(line, "^$$escape_expand(\\t)([^ =]+) *=.*$", \\1)
+ !equals(prop, $$line) {
+ val = $$replace(line, "^[^=]+= *", )
+ module.$${module}.$$prop = $$split(val)
+ } else {
+ error("Malformed line in .gitmodules: $$line")
+ }
+ }
}
+QMAKE_INTERNAL_INCLUDED_FILES += $$PWD/.gitmodules
+
+modules = $$sort_depends(modules, module., .depends .recommends)
+modules = $$reverse(modules)
+for (mod, modules) {
+ equals(module.$${mod}.qt, false): \
+ next()
-# Arguments: module name, [mandatory deps], [optional deps], [project file]
-defineTest(addModule) {
- for(d, $$list($$2 $$3)): \
- !contains(MODULES, $$d): \
- error("'$$1' depends on not (yet) declared '$$d'.")
- MODULES += $$1
- export(MODULES)
+ deps = $$eval(module.$${mod}.depends)
+ recs = $$eval(module.$${mod}.recommends)
+ for (d, $$list($$deps $$recs)): \
+ !contains(modules, $$d): \
+ error("'$$mod' depends on undeclared '$$d'.")
- contains(QT_SKIP_MODULES, $$1): return(false)
- !isEmpty(QT_BUILD_MODULES):!contains(QT_BUILD_MODULES, $$1): return(false)
- mod = $$moduleName($$1)
+ contains(QT_SKIP_MODULES, $$mod): \
+ next()
+ !isEmpty(QT_BUILD_MODULES):!contains(QT_BUILD_MODULES, $$mod): \
+ next()
- isEmpty(4) {
- !exists($$1/$${1}.pro): return(false)
- $${mod}.subdir = $$1
- export($${mod}.subdir)
+ project = $$eval(module.$${mod}.project)
+ isEmpty(project) {
+ !exists($$mod/$${mod}.pro): \
+ next()
+ $${mod}.subdir = $$mod
} else {
- !exists($$1/$${4}): return(false)
- $${mod}.file = $$1/$$4
+ !exists($$mod/$$project): \
+ next()
+ $${mod}.file = $$mod/$$project
$${mod}.makefile = Makefile
- export($${mod}.file)
- export($${mod}.makefile)
}
+ $${mod}.target = module-$$mod
- for(d, 2) {
- dn = $$moduleName($$d)
- !contains(SUBDIRS, $$dn): \
- return(false)
- $${mod}.depends += $$dn
+ for (d, deps) {
+ !contains(SUBDIRS, $$d) {
+ $${mod}.target =
+ break()
+ }
+ $${mod}.depends += $$d
}
- for(d, 3) {
- dn = $$moduleName($$d)
- contains(SUBDIRS, $$dn): \
- $${mod}.depends += $$dn
+ isEmpty($${mod}.target): \
+ next()
+ for (d, recs) {
+ contains(SUBDIRS, $$d): \
+ $${mod}.depends += $$d
}
- !isEmpty($${mod}.depends): \
- export($${mod}.depends)
-
- $${mod}.target = module-$$1
- export($${mod}.target)
SUBDIRS += $$mod
- export(SUBDIRS)
- return(true)
}
-
-# only qtbase is required to exist. The others may not - but it is the
-# users responsibility to ensure that all needed dependencies exist, or
-# it may not build.
-
-addModule(qtbase)
-addModule(qtandroidextras, qtbase)
-addModule(qtmacextras, qtbase)
-addModule(qtx11extras, qtbase)
-addModule(qtsvg, qtbase)
-addModule(qtxmlpatterns, qtbase)
-addModule(qtdeclarative, qtbase, qtsvg qtxmlpatterns)
-addModule(qtgraphicaleffects, qtdeclarative)
-addModule(qtquickcontrols, qtdeclarative, qtgraphicaleffects)
-addModule(qtquickcontrols2, qtquickcontrols)
-addModule(qtmultimedia, qtbase, qtdeclarative)
-addModule(qtwinextras, qtbase, qtdeclarative qtmultimedia)
-addModule(qtactiveqt, qtbase)
-addModule(qtsystems, qtbase, qtdeclarative)
-addModule(qtsensors, qtbase, qtdeclarative)
-addModule(qtconnectivity, qtbase, qtdeclarative qtandroidextras)
-addModule(qtfeedback, qtdeclarative, qtmultimedia)
-addModule(qtpim, qtdeclarative)
-addModule(qtwebsockets, qtbase, qtdeclarative)
-addModule(qtwebchannel, qtbase, qtdeclarative qtwebsockets)
-addModule(qtserialport, qtbase)
-addModule(qtlocation, qtbase, qtdeclarative qtquickcontrols qtserialport qtsystems)
-addModule(qtwebkit, qtbase, qtdeclarative qtlocation qtmultimedia qtsensors qtwebchannel qtxmlpatterns, WebKit.pro)
-addModule(qttools, qtbase, qtdeclarative qtactiveqt qtwebkit)
-addModule(qtwebkit-examples, qtwebkit qttools)
-addModule(qtimageformats, qtbase)
-addModule(qt3d, qtdeclarative qtimageformats)
-addModule(qtcanvas3d, qtdeclarative)
-addModule(qtscript, qtbase, qttools)
-addModule(qtquick1, qtscript, qtsvg qtxmlpatterns)
-addModule(qtdocgallery, qtdeclarative)
-addModule(qtwayland, qtbase, qtdeclarative)
-addModule(qtserialbus, qtserialport)
-addModule(qtenginio, qtdeclarative)
-addModule(qtwebengine, qtquickcontrols qtwebchannel, qtlocation)
-addModule(qtwebview, qtdeclarative, qtwebengine)
-addModule(qtpurchasing, qtbase, qtdeclarative)
-addModule(qttranslations, qttools)
-addModule(qtdoc, qtdeclarative)
-addModule(qtqa, qtbase)