diff options
author | Dominik Holland <dominik.holland@pelagicore.com> | 2017-11-07 17:26:39 +0100 |
---|---|---|
committer | Iikka Eklund <iikka.eklund@qt.io> | 2017-11-09 12:02:18 +0000 |
commit | 419d05c13974266c292a0c145acca0d70b662acf (patch) | |
tree | 2e5a496720df63b1e1e3532e67591188536ada06 | |
parent | eb1d6585ad60d2606e88aff80503fcfc2c1013b6 (diff) | |
download | qtivi-419d05c13974266c292a0c145acca0d70b662acf.tar.gz |
Improve the build system to be more modular
The configure output is improved to now show whether a specific
module is build or not. Either by showing the summary of features
which are build for this module, or by hiding the section and
Showing "Module... No"
Dependencies between the modules have been added to the configure
system to make it possible to disable specific modules and by that
also disable all the modules depending on that.
The build system has been changed to enable building only the modules
which has been selected to be build.
Change-Id: Ic70f23c159eee3fe7ce6c63aa6f785c8b754ce31
Reviewed-by: Robert Griebl <robert.griebl@pelagicore.com>
-rw-r--r-- | examples/examples.pro | 2 | ||||
-rw-r--r-- | src/doc/qtivi/src/configuration.qdoc | 15 | ||||
-rw-r--r-- | src/geniviextras/configure.json | 14 | ||||
-rw-r--r-- | src/imports/imports.pro | 4 | ||||
-rw-r--r-- | src/ivicore/configure.json | 12 | ||||
-rw-r--r-- | src/ivimedia/configure.json | 14 | ||||
-rw-r--r-- | src/ivivehiclefunctions/configure.json | 15 | ||||
-rw-r--r-- | src/plugins/plugins.pro | 3 | ||||
-rw-r--r-- | src/src.pro | 33 |
9 files changed, 89 insertions, 23 deletions
diff --git a/examples/examples.pro b/examples/examples.pro index 9ac0612..baa862b 100644 --- a/examples/examples.pro +++ b/examples/examples.pro @@ -1,6 +1,6 @@ TEMPLATE = subdirs -SUBDIRS += ivicore +qtHaveModule(ivicore): SUBDIRS += ivicore qtHaveModule(ivivehiclefunctions): SUBDIRS += ivivehiclefunctions qtHaveModule(ivimedia): SUBDIRS += ivimedia qtHaveModule(geniviextras): SUBDIRS += geniviextras diff --git a/src/doc/qtivi/src/configuration.qdoc b/src/doc/qtivi/src/configuration.qdoc index 16053ff..1e85064 100644 --- a/src/doc/qtivi/src/configuration.qdoc +++ b/src/doc/qtivi/src/configuration.qdoc @@ -87,6 +87,21 @@ These command-line options can be passed to qmake using the \c QMAKE_EXTRA_ARGS QMAKE_EXTRA_ARGS="--host-tools-only" qmake <qtivi-src>/qtivi.pro \endcode +\section2 Only build what is needed + +By default all QtIvi modules are configured to be built, depending on whether all needed dependencies +are available for the respective module or not. Similar to other Qt Features, every module can be +requested to be built or skipped explicitly using the "--[no-]feature-<modulename>" arguments when +invoking \c qmake. + +E.g. to disable building QtIvi Media: +\code + QMAKE_EXTRA_ARGS="--no-feature-ivimedia" qmake <qtivi-src>/qtivi.pro +\endcode + +Selecting the needed module explicitly has the advantage to show an error at configuration time +if not all dependencies are met. + \section1 Runtime Configuration The following environment variables are supported for runtime configurations: diff --git a/src/geniviextras/configure.json b/src/geniviextras/configure.json index 38bae96..c98bfe5 100644 --- a/src/geniviextras/configure.json +++ b/src/geniviextras/configure.json @@ -46,6 +46,12 @@ "label": "Only build Qt GENIVI Extras", "condition": "input.geniviextras-only == 'yes'", "output": [ "privateFeature" ] + }, + + "geniviextras" : { + "label": "Qt GENIVI Extras", + "condition": "features.dlt", + "output": [ "publicFeature" ] } }, @@ -57,7 +63,7 @@ }, { "type": "note", - "condition": "!features.dlt_2_12", + "condition": "features.dlt && !features.dlt_2_12", "message": "Old DLT version detected. Not all features of Qt GENIVI Extras can be enabled." }, { @@ -70,10 +76,16 @@ "summary": [ { "section": "Qt GENIVI Extras", + "condition": "features.geniviextras", "entries": [ "dlt", "dlt_2_12" ] + }, + { + "type": "feature", + "args": "geniviextras", + "condition": "!features.geniviextras" } ] } diff --git a/src/imports/imports.pro b/src/imports/imports.pro index d70d6d5..996d662 100644 --- a/src/imports/imports.pro +++ b/src/imports/imports.pro @@ -1,5 +1,5 @@ TEMPLATE = subdirs -SUBDIRS = core \ - media +qtHaveModule(ivicore): SUBDIRS += core +qtHaveModule(ivimedia): SUBDIRS += media qtHaveModule(ivivehiclefunctions): SUBDIRS += vehiclefunctions diff --git a/src/ivicore/configure.json b/src/ivicore/configure.json index ece6c51..f048156 100644 --- a/src/ivicore/configure.json +++ b/src/ivicore/configure.json @@ -48,7 +48,7 @@ "label": "IVI Generator", "enable": "input.ivigenerator == 'qt' || input.ivigenerator == 'system'", "disable": "input.ivigenerator == 'no'", - "condition": "features.python3.&& features.python3-virtualenv || features.system-ivigenerator", + "condition": "features.ivicore && features.python3 && features.python3-virtualenv || features.system-ivigenerator", "output": [ "publicFeature" ] }, "host-tools-only": { @@ -60,6 +60,10 @@ "label": "QtSimulator Support", "condition": "module.simulator", "output": [ "publicFeature" ] + }, + "ivicore": { + "label": "Qt IVI Core", + "output": [ "publicFeature" ] } }, @@ -82,6 +86,7 @@ The QtSimulator Support is needed for the communication between the simulation b "summary": [ { "section": "Qt IVI Core", + "condition": "features.ivicore", "entries": [ { "section": "Python3", @@ -95,6 +100,11 @@ The QtSimulator Support is needed for the communication between the simulation b "ivigenerator", "simulator" ] + }, + { + "type": "feature", + "args": "ivicore", + "condition": "!features.ivicore" } ] } diff --git a/src/ivimedia/configure.json b/src/ivimedia/configure.json index 01e3a74..30f31a8 100644 --- a/src/ivimedia/configure.json +++ b/src/ivimedia/configure.json @@ -1,6 +1,9 @@ { "module": "ivimedia", "testDir": "../../config.tests", + "depends": [ + "ivicore" + ], "libraries": { "taglib": { @@ -22,15 +25,26 @@ "privateFeature", { "type": "define", "name": "QT_TAGLIB" } ] + }, + "ivimedia" : { + "label": "Qt IVI Media", + "condition": "features.ivicore", + "output": [ "publicFeature" ] } }, "summary": [ { "section": "Qt IVI Media", + "condition": "features.ivimedia", "entries": [ "taglib" ] + }, + { + "type": "feature", + "args": "ivimedia", + "condition": "!features.ivimedia" } ] } diff --git a/src/ivivehiclefunctions/configure.json b/src/ivivehiclefunctions/configure.json index a20db32..fc5bb7e 100644 --- a/src/ivivehiclefunctions/configure.json +++ b/src/ivivehiclefunctions/configure.json @@ -1,10 +1,21 @@ { "module": "ivivehiclefunctions", "testDir": "../../config.tests", + "depends": [ + "ivicore" + ], - "features": {}, + "features": { + "ivivehiclefunctions" : { + "label": "Qt IVI VehicleFunctions", + "condition": "features.ivicore && features.ivigenerator", + "output": [ "publicFeature" ] + } + }, "report": [], - "summary": [] + "summary": [ + "ivivehiclefunctions" + ] } diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro index 549db23..af84b4b 100644 --- a/src/plugins/plugins.pro +++ b/src/plugins/plugins.pro @@ -1,4 +1,3 @@ TEMPLATE = subdirs -SUBDIRS = ivimedia - +qtHaveModule(ivimedia): SUBDIRS += ivimedia qtHaveModule(ivivehiclefunctions): SUBDIRS += ivivehiclefunctions diff --git a/src/src.pro b/src/src.pro index bb21da8..c9e5f76 100644 --- a/src/src.pro +++ b/src/src.pro @@ -1,20 +1,22 @@ TEMPLATE = subdirs +SUBDIRS = plugins \ + imports + doc # Include the config.pri from the build folder as the qtgenivieextras-config.pri is copied # while syncqt is running for the module and this is not done yet. include($$OUT_PWD/geniviextras/qtgeniviextras-config.pri) include($$OUT_PWD/ivicore/qtivicore-config.pri) -QT_FOR_CONFIG += geniviextras-private ivicore ivicore-private +include($$OUT_PWD/ivivehiclefunctions/qtivivehiclefunctions-config.pri) +include($$OUT_PWD/ivimedia/qtivimedia-config.pri) +QT_FOR_CONFIG += geniviextras geniviextras-private ivicore ivicore-private ivivehiclefunctions ivimedia !qtConfig(host-tools-only) { - !qtConfig(geniviextras-only) { - SUBDIRS = ivicore \ - ivimedia \ - plugins \ - imports \ - doc - - qtConfig(ivigenerator): { + !qtConfig(geniviextras-only):qtConfig(ivicore) { + SUBDIRS += ivicore + imports.depends += ivicore + + qtConfig(ivigenerator): qtConfig(ivivehiclefunctions): { SUBDIRS += ivivehiclefunctions ivivehiclefunctions.depends = ivicore !qtConfig(system-ivigenerator): ivivehiclefunctions.depends += sub-ivigenerator @@ -22,16 +24,19 @@ QT_FOR_CONFIG += geniviextras-private ivicore ivicore-private imports.depends += ivivehiclefunctions } - ivimedia.depends = ivicore - plugins.depends += ivimedia - imports.depends += ivimedia + qtConfig(ivimedia) { + SUBDIRS += ivimedia + ivimedia.depends = ivicore + plugins.depends += ivimedia + imports.depends += ivimedia + } } - qtConfig(dlt): SUBDIRS += geniviextras + qtConfig(geniviextras): SUBDIRS += geniviextras } !qtConfig(geniviextras-only) { - qtConfig(ivigenerator) { + qtConfig(ivicore): qtConfig(ivigenerator) { !qtConfig(system-ivigenerator) { src_tools_ivigenerator.subdir = tools/ivigenerator src_tools_ivigenerator.target = sub-ivigenerator |