summaryrefslogtreecommitdiffstats
path: root/qtbase.pro
diff options
context:
space:
mode:
Diffstat (limited to 'qtbase.pro')
-rw-r--r--qtbase.pro75
1 files changed, 74 insertions, 1 deletions
diff --git a/qtbase.pro b/qtbase.pro
index d3b03d1fba..9091fba4e0 100644
--- a/qtbase.pro
+++ b/qtbase.pro
@@ -103,10 +103,83 @@ prefix_build|!equals(PWD, $$OUT_PWD) {
}
+# Generate qfeatures.h
+features =
+lines = $$cat("src/corelib/global/qfeatures.txt", lines)
+for (line, lines) {
+ t = $$replace(line, "^Feature: (\\S+)\\s*$", "\\1")
+ !isEqual(t, $$line) {
+ feature = $$t
+ features += $$t
+ } else {
+ t = $$replace(line, "^Requires: (.*)$", "\\1")
+ !isEqual(t, $$line) {
+ features.$${feature}.depends = $$replace(t, \\s+$, )
+ } else {
+ t = $$replace(line, "^Name: (.*)$", "\\1")
+ !isEqual(t, $$line) {
+ features.$${feature}.name = $$replace(t, \\s+$, )
+ }
+ }
+ }
+}
+features = $$sort_depends(features, features.)
+features = $$reverse(features)
+FEATURES_H = \
+ "/*" \
+ " * All feature dependencies." \
+ " *" \
+ " * This list is generated by qmake from <qtbase>/src/corelib/global/qfeatures.txt" \
+ " */"
+FEATURES_PRI =
+for (ft, features) {
+ !isEmpty(features.$${ft}.depends) {
+ FEATURES_H += \
+ "$${LITERAL_HASH}if !defined(QT_NO_$$ft) && ($$join($$list($$split(features.$${ft}.depends)), ") || defined(QT_NO_", "defined(QT_NO_", ")"))" \
+ "$${LITERAL_HASH} define QT_NO_$$ft" \
+ "$${LITERAL_HASH}endif"
+ FEATURES_PRI += \
+ "contains(QT_DISABLED_FEATURES, "^($$lower($$join($$list($$replace(features.$${ft}.depends, _, -)), "|")))$"): \\" \
+ " QT_DISABLED_FEATURES += $$lower($$replace(ft, _, -))"
+ }
+}
+write_file($$OUT_PWD/src/corelib/global/qfeatures.h, FEATURES_H)|error("Aborting.")
+# Create forwarding header
+FWD_FEATURES_H = \
+ '$${LITERAL_HASH}include "../../src/corelib/global/qfeatures.h"'
+write_file($$OUT_PWD/include/QtCore/qfeatures.h, FWD_FEATURES_H)|error("Aborting.")
+
+no_features =
+lines = $$cat($$absolute_path($$QT_QCONFIG_PATH, $$PWD/src/corelib/global), lines)
+for (line, lines) {
+ # We ignore all defines that don't follow the #ifndef + indent pattern.
+ # This makes it possible to have unchecked defines which are no features.
+ t = $$replace(line, "^$${LITERAL_HASH} define QT_NO_(\\S+)\\s*$", "\\1")
+ !isEqual(t, $$line) {
+ isEmpty(features.$${t}.name): \
+ error("$$QT_QCONFIG_PATH disables unknown feature $$t")
+ no_features += $$t
+ }
+}
+for (def, QT_NO_DEFINES) {
+ !isEmpty(features.$${def}.name): \
+ no_features += $$def
+}
+no_features = $$unique(no_features)
+
+# Can't simply add these to QT_CONFIG, as e.g., contains(QT_CONFIG, accessibility) matches no-accessibililty.
+FEATURES_PRI = \
+ "$${LITERAL_HASH} Features disabled by configure:" \
+ "QT_DISABLED_FEATURES =$$lower($$join($$list($$replace(no_features, _, -)), " ", " "))" \
+ "$$escape_expand(\\n)$${LITERAL_HASH} Dependencies derived from <qtbase>/src/corelib/global/qfeatures.txt:" \
+ $$FEATURES_PRI \
+ "QT_DISABLED_FEATURES = \$\$unique(QT_DISABLED_FEATURES)"
+write_file($$OUT_PWD/mkspecs/qfeatures.pri, FEATURES_PRI)|error("Aborting.")
+
#mkspecs
mkspecs.path = $$[QT_HOST_DATA]/mkspecs
mkspecs.files = \
- $$OUT_PWD/mkspecs/qconfig.pri $$OUT_PWD/mkspecs/qmodule.pri $$OUT_PWD/mkspecs/qdevice.pri \
+ $$OUT_PWD/mkspecs/qconfig.pri $$OUT_PWD/mkspecs/qmodule.pri $$OUT_PWD/mkspecs/qdevice.pri $$OUT_PWD/mkspecs/qfeatures.pri \
$$files($$PWD/mkspecs/*)
mkspecs.files -= $$PWD/mkspecs/modules
INSTALLS += mkspecs