diff options
Diffstat (limited to 'qtbase.pro')
-rw-r--r-- | qtbase.pro | 75 |
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 |