semi-automate adding submodules
authorOswald Buddenhagen <oswald.buddenhagen@digia.com>
Wed, 20 Feb 2013 09:33:49 +0000 (10:33 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Wed, 20 Feb 2013 21:55:09 +0000 (22:55 +0100)
this way adding a module actually becomes a one-liner

Change-Id: Ie31039d36e948094c3ec241758eaab330304b194
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
qt.pro

diff --git a/qt.pro b/qt.pro
index 0d118de..9614e43 100644 (file)
--- a/qt.pro
+++ b/qt.pro
@@ -5,121 +5,62 @@ TEMPLATE      = subdirs
 
 CONFIG += prepare_docs qt_docs_targets testcase_targets
 
-module_qtbase.subdir = qtbase
-module_qtbase.target = module-qtbase
-
-module_qtsvg.subdir = qtsvg
-module_qtsvg.target = module-qtsvg
-module_qtsvg.depends = module_qtbase
-
-module_qtxmlpatterns.subdir = qtxmlpatterns
-module_qtxmlpatterns.target = module-qtxmlpatterns
-module_qtxmlpatterns.depends = module_qtbase
-
-module_qtscript.subdir = qtscript
-module_qtscript.target = module-qtscript
-module_qtscript.depends = module_qtbase
-
-module_qtjsbackend.subdir = qtjsbackend
-module_qtjsbackend.target = module-qtjsbackend
-module_qtjsbackend.depends = module_qtbase
-
-module_qtdeclarative.subdir = qtdeclarative
-module_qtdeclarative.target = module-qtdeclarative
-module_qtdeclarative.depends = module_qtbase module_qtjsbackend
-
-module_qtwebkit.file = qtwebkit/WebKit.pro
-module_qtwebkit.makefile = Makefile
-module_qtwebkit.depends = module_qtbase module_qtdeclarative
-module_qtwebkit.target = module-qtwebkit
-
-module_qtwebkit_examples_and_demos.subdir = qtwebkit-examples-and-demos
-module_qtwebkit_examples_and_demos.target = module-qtwebkit-examples-and-demos
-module_qtwebkit_examples_and_demos.depends = module_qtwebkit module_qttools
-
-module_qttools.subdir = qttools
-module_qttools.target = module-qttools
-module_qttools.depends = module_qtbase
-
-module_qttranslations.subdir = qttranslations
-module_qttranslations.target = module-qttranslations
-module_qttranslations.depends = module_qttools
-
-module_qtdoc.subdir = qtdoc
-module_qtdoc.target = module-qtdoc
-module_qtdoc.depends = module_qtbase module_qtdeclarative
-
-module_qtactiveqt.subdir = qtactiveqt
-module_qtactiveqt.target = module-qtactiveqt
-module_qtactiveqt.depends = module_qtbase
-
-module_qtqa.subdir = qtqa
-module_qtqa.target = module-qtqa
-module_qtqa.depends = module_qtbase
+defineReplace(moduleName) {
+    return(module_$$replace(1, -, _))
+}
 
-module_qtmultimedia.subdir = qtmultimedia
-module_qtmultimedia.target = module-qtmultimedia
-module_qtmultimedia.depends = module_qtbase
+# Arguments: module name, [mandatory deps], [optional deps], [project file]
+defineTest(addModule) {
+    mod = $$moduleName($$1)
+
+    isEmpty(4) {
+        !exists($$1/$${1}.pro): return(false)
+        $${mod}.subdir = $$1
+        export($${mod}.subdir)
+    } else {
+        !exists($$1/$${4}): return(false)
+        $${mod}.file = $$1/$$4
+        $${mod}.makefile = Makefile
+        export($${mod}.file)
+        export($${mod}.makefile)
+    }
 
-module_qtimageformats.subdir = qtimageformats
-module_qtimageformats.target = module-qtimageformats
-module_qtimageformats.depends = module_qtbase
+    for(d, 2): \
+        $${mod}.depends += $$moduleName($$d)
+    for(d, 3) {
+        dn = $$moduleName($$d)
+        contains(SUBDIRS, $$dn): \
+            $${mod}.depends += $$dn
+    }
+    !isEmpty($${mod}.depends): \
+        export($${mod}.depends)
 
-module_qtquick1.subdir = qtquick1
-module_qtquick1.target = module-qtquick1
-module_qtquick1.depends = module_qtbase module_qtscript
+    $${mod}.target = module-$$1
+    export($${mod}.target)
 
-module_qtgraphicaleffects.subdir = qtgraphicaleffects
-module_qtgraphicaleffects.target = module-qtgraphicaleffects
-module_qtgraphicaleffects.depends = module_qtbase module_qtdeclarative
+    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.
 
-SUBDIRS = module_qtbase
-
-exists(qtsvg/qtsvg.pro) {
-    SUBDIRS += module_qtsvg
-    # These modules do not require qtsvg, but can use it if it is available
-    module_qtdeclarative.depends += module_qtsvg
-    module_qtquick1.depends += module_qtsvg
-}
-exists(qtxmlpatterns/qtxmlpatterns.pro) {
-    SUBDIRS += module_qtxmlpatterns
-    # These modules do not require qtxmlpatterns, but can use it if it is available
-    module_qtdeclarative.depends += module_qtxmlpatterns
-    module_qtquick1.depends += module_qtxmlpatterns
-}
-
-exists(qtjsbackend/qtjsbackend.pro): SUBDIRS += module_qtjsbackend
-exists(qtdeclarative/qtdeclarative.pro) {
-    SUBDIRS += module_qtdeclarative
-    # These modules do not require qtdeclarative, but can use it if it is available
-    module_qttools.depends += module_qtdeclarative
-    module_qtmultimedia.depends += module_qtdeclarative
-}
-exists(qtscript/qtscript.pro): SUBDIRS += module_qtscript
-exists(qtmultimedia/qtmultimedia.pro): SUBDIRS += module_qtmultimedia
-exists(qtactiveqt/qtactiveqt.pro) {
-    SUBDIRS += module_qtactiveqt
-    module_qttools.depends += module_qtactiveqt
-}
-exists(qtwebkit/WebKit.pro) {
-    SUBDIRS += module_qtwebkit
-    module_qttools.depends += module_qtwebkit
-    module_qtquick1.depends += module_qtwebkit
-    exists(qtwebkit-examples-and-demos/qtwebkit-examples-and-demos.pro) {
-        SUBDIRS += module_qtwebkit_examples_and_demos
-    }
-}
-exists(qttools/qttools.pro) {
-    SUBDIRS += module_qttools
-    module_qtquick1.depends += module_qttools
-}
-exists(qtquick1/qtquick1.pro): SUBDIRS += module_qtquick1
-exists(qtimageformats/qtimageformats.pro): SUBDIRS += module_qtimageformats
-exists(qtgraphicaleffects/qtgraphicaleffects.pro): SUBDIRS += module_qtgraphicaleffects
-exists(qttranslations/qttranslations.pro): SUBDIRS += module_qttranslations
-exists(qtdoc/qtdoc.pro): SUBDIRS += module_qtdoc
-exists(qtqa/qtqa.pro): SUBDIRS += module_qtqa
+addModule(qtbase)
+addModule(qtsvg, qtbase)
+addModule(qtxmlpatterns, qtbase)
+addModule(qtjsbackend, qtbase)
+addModule(qtdeclarative, qtjsbackend, qtsvg qtxmlpatterns)
+addModule(qtmultimedia, qtbase, qtdeclarative)
+addModule(qtactiveqt, qtbase)
+addModule(qtwebkit, qtdeclarative, , WebKit.pro)
+addModule(qttools, qtbase, qtdeclarative qtactiveqt qtwebkit)
+addModule(qtwebkit-examples-and-demos, qtwebkit qttools)
+addModule(qtimageformats, qtbase)
+addModule(qtgraphicaleffects, qtdeclarative)
+addModule(qtscript, qtbase)
+addModule(qtquick1, qtscript, qtsvg qtxmlpatterns qtwebkit qttools)
+addModule(qttranslations, qttools)
+addModule(qtdoc, qtdeclarative)
+addModule(qtqa, qtbase)