From a668c6a6b605ce516f71b9339df53699e85ad248 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Fri, 26 Aug 2016 21:19:12 +0200 Subject: [PATCH] Convert the old feature system ... to the new qmake based configuration system. This removes the old qfeatures.txt (distributed over configure.json files) and qfeatures.h (distributed over qconfig-.h files). qfeatures.prf is gone without replacement, as attempts to use it would lead to followup errors anyway. Change-Id: I1598de19db937082283a905b9592d3849d2199d0 Reviewed-by: Oswald Buddenhagen --- configure | 16 - configure.json | 7 +- configure.pri | 37 -- examples/network/network.pro | 3 +- examples/widgets/tools/tools.pro | 3 +- mkspecs/common/linux-android.conf | 1 - mkspecs/common/uikit.conf | 2 +- mkspecs/common/winrt_winphone/qmake.conf | 3 +- mkspecs/features/qfeatures.prf | 4 - mkspecs/features/qt_configure.prf | 16 +- mkspecs/integrity-armv7-imx6/qmake.conf | 1 - mkspecs/integrity-armv7/qmake.conf | 1 - mkspecs/integrity-x86/qmake.conf | 1 - mkspecs/qnx-aarch64le-qcc/qmake.conf | 2 +- mkspecs/qnx-armle-v7-qcc/qmake.conf | 2 - mkspecs/qnx-x86-64-qcc/qmake.conf | 2 - mkspecs/qnx-x86-qcc/qmake.conf | 2 - qtbase.pro | 82 +-- src/corelib/configure.json | 177 +++++++ src/corelib/corelib.pro | 3 +- src/corelib/tools/tools.pri | 2 +- src/gui/configure.json | 192 ++++++- src/network/configure.json | 58 +++ src/plugins/generic/generic.pro | 6 +- src/plugins/plugins.pro | 11 +- src/printsupport/configure.json | 30 ++ src/src.pro | 2 +- src/widgets/configure.json | 470 ++++++++++++++++++ src/xml/configure.json | 16 + src/xml/qtxmlglobal.h | 3 + sync.profile | 2 +- tests/auto/corelib/plugin/plugin.pro | 3 +- .../plugin/qfactoryloader/test/test.pro | 3 +- 33 files changed, 981 insertions(+), 182 deletions(-) delete mode 100644 mkspecs/features/qfeatures.prf create mode 100644 src/xml/configure.json diff --git a/configure b/configure index 81bf483634..789ba4cc74 100755 --- a/configure +++ b/configure @@ -753,21 +753,6 @@ while [ "$#" -gt 0 ]; do opensource) COMMERCIAL_USER="no" ;; - feature-*) - FEATURE=`echo $VAR | sed 's,^[^-]*-\([^-]*\),\1,' | tr 'abcdefghijklmnopqrstuvwxyz-' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` - if grep "^Feature: *${FEATURE} *\$" "$relpath"/src/corelib/global/qfeatures.txt >/dev/null 2>&1; then - F=`echo $VAR | sed 's,^[^-]*-\([^-]*\),\1,'` - if [ "$VAL" = "no" ]; then - F="no-$F" - elif [ "$VAL" != "yes" ] && [ "$VAL" != "unknown" ]; then - UNKNOWN_OPT=yes - fi - CFG_FEATURES="$CFG_FEATURES $F" - else - echo "ERROR: Unknown feature $FEATURE" - UNKNOWN_OPT=yes - fi - ;; confirm-license) if [ "$VAL" = "yes" ]; then OPT_CONFIRM_LICENSE="$VAL" @@ -1894,7 +1879,6 @@ fi cat > "$outpath/config.tests/configure.cfg" </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() -# 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() - -no_features = -lines = $$cat($$OUT_PWD/src/corelib/global/qconfig.h, 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("qconfig.h disables unknown feature $$t") - no_features += $$t - } -} -for (def, QT_NO_DEFINES) { - !isEmpty(features.$${def}.name): \ - no_features += $$def -} -no_features = $$unique(no_features) - -# Don't simply add these to QT_CONFIG, as then one might expect them to be there without load(qfeatures). -# And we don't want to do that automatically, as the dynamic dependency resolution is somewhat expensive. -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 /src/corelib/global/qfeatures.txt:" \ - $$FEATURES_PRI \ - "QT_DISABLED_FEATURES = \$\$unique(QT_DISABLED_FEATURES)" -write_file($$OUT_PWD/mkspecs/qfeatures.pri, FEATURES_PRI)|error() - -# Files created by us -QMAKE_DISTCLEAN += \ - src/corelib/global/qfeatures.h \ - include/QtCore/qfeatures.h \ - mkspecs/qfeatures.pri - #mkspecs mkspecs.path = $$[QT_HOST_DATA]/mkspecs mkspecs.files = \ - $$OUT_PWD/mkspecs/qconfig.pri $$OUT_PWD/mkspecs/qmodule.pri $$OUT_PWD/mkspecs/qfeatures.pri \ + $$OUT_PWD/mkspecs/qconfig.pri $$OUT_PWD/mkspecs/qmodule.pri \ $$OUT_PWD/mkspecs/qdevice.pri $$OUT_PWD/mkspecs/qhost.pri \ $$files($$PWD/mkspecs/*) mkspecs.files -= $$PWD/mkspecs/modules $$PWD/mkspecs/modules-inst diff --git a/src/corelib/configure.json b/src/corelib/configure.json index 887e1ea5bf..b0c78f5122 100644 --- a/src/corelib/configure.json +++ b/src/corelib/configure.json @@ -244,6 +244,8 @@ }, "iconv": { "label": "iconv", + "purpose": "Provides internationalization on Unix.", + "section": "Internationalization", "condition": "features.posix-libiconv || features.sun-libiconv || features.gnu-libiconv", "output": [ "privateFeature", "feature" ] }, @@ -302,6 +304,8 @@ }, "mimetype": { "label": "Mimetype handling", + "purpose": "Provides MIME type handling.", + "section": "Utilities", "output": [ "publicFeature", "feature" ] }, "system-pcre": { @@ -380,6 +384,179 @@ "publicQtConfig", { "type": "define", "name": "QT_THREADSAFE_CLOEXEC", "value": 1 } ] + }, + "properties": { + "label": "Properties", + "purpose": "Supports scripting Qt-based applications.", + "section": "Kernel", + "output": [ "publicFeature", "feature" ] + }, + "regularexpression": { + "label": "QRegularExpression", + "purpose": "Provides an API to Perl-compatible regular expressions.", + "section": "Kernel", + "output": [ "publicFeature", "feature" ] + }, + "sharedmemory": { + "label": "QSharedMemory", + "purpose": "Provides access to a shared memory segment.", + "section": "Kernel", + "output": [ "publicFeature", "feature" ] + }, + "systemsemaphore": { + "label": "QSystemSemaphore", + "purpose": "Provides a general counting system semaphore.", + "section": "Kernel", + "output": [ "publicFeature", "feature" ] + }, + "xmlstream": { + "label": "XML Streaming APIs", + "purpose": "Provides a simple streaming API for XML.", + "section": "Kernel", + "output": [ "publicFeature", "feature" ] + }, + "xmlstreamreader": { + "label": "QXmlStreamReader", + "purpose": "Provides a well-formed XML parser with a simple streaming API.", + "section": "Kernel", + "condition": "features.xmlstream", + "output": [ "publicFeature", "feature" ] + }, + "xmlstreamwriter": { + "label": "QXmlStreamWriter", + "purpose": "Provides a XML writer with a simple streaming API.", + "section": "Kernel", + "condition": "features.xmlstream", + "output": [ "publicFeature", "feature" ] + }, + "textdate": { + "label": "Text Date", + "purpose": "Supports month and day names in dates.", + "section": "Data structures", + "output": [ "publicFeature", "feature" ] + }, + "datestring": { + "label": "QDate/QTime/QDateTime", + "purpose": "Provides convertion between dates and strings.", + "section": "Data structures", + "condition": "features.textdate", + "output": [ "publicFeature", "feature" ] + }, + "process": { + "label": "QProcess", + "purpose": "Supports external process invocation.", + "section": "File I/O", + "output": [ "publicFeature", "feature" ] + }, + "temporaryfile": { + "label": "QTemporaryFile", + "purpose": "Provides an I/O device that operates on temporary files.", + "section": "File I/O", + "output": [ "publicFeature", "feature" ] + }, + "library": { + "label": "QLibrary", + "purpose": "Provides a wrapper for dynamically loaded libraries.", + "section": "File I/O", + "output": [ "publicFeature", "feature" ] + }, + "settings": { + "label": "QSettings", + "purpose": "Provides persistent application settings.", + "section": "File I/O", + "output": [ "publicFeature", "feature" ] + }, + "filesystemwatcher": { + "label": "QFileSystemWatcher", + "purpose": "Provides an interface for monitoring files and directories for modifications.", + "section": "File I/O", + "output": [ "publicFeature", "feature" ] + }, + "filesystemiterator": { + "label": "QFileSystemIterator", + "purpose": "Provides fast file system iteration.", + "section": "File I/O", + "output": [ "publicFeature", "feature" ] + }, + "itemmodel": { + "label": "Qt Item Model", + "purpose": "Provides the item model for item views", + "section": "ItemViews", + "output": [ "publicFeature", "feature" ] + }, + "proxymodel": { + "label": "QAbstractProxyModel", + "purpose": "Supports processing of data passed between another model and a view.", + "section": "ItemViews", + "condition": "features.itemmodel", + "output": [ "publicFeature", "feature" ] + }, + "sortfilterproxymodel": { + "label": "QSortFilterProxyModel", + "purpose": "Supports sorting and filtering of data passed between another model and a view.", + "section": "ItemViews", + "condition": "features.proxymodel", + "output": [ "publicFeature", "feature" ] + }, + "identityproxymodel": { + "label": "QIdentityProxyModel", + "purpose": "Supports proxying a source model unmodified.", + "section": "ItemViews", + "condition": "features.proxymodel", + "output": [ "publicFeature", "feature" ] + }, + "stringlistmodel": { + "label": "QStringListModel", + "purpose": "Provides a model that supplies strings to views.", + "section": "ItemViews", + "condition": "features.itemmodel", + "output": [ "publicFeature", "feature" ] + }, + "translation": { + "label": "Translation", + "purpose": "Supports translations using QObject::tr().", + "section": "Internationalization", + "output": [ "publicFeature", "feature" ] + }, + "textcodec": { + "label": "QTextCodec", + "purpose": "Supports conversions between text encodings.", + "section": "Internationalization", + "output": [ "publicFeature", "feature" ] + }, + "codecs": { + "label": "Codecs", + "purpose": "Supports non-unicode text conversions.", + "section": "Internationalization", + "condition": "features.textcodec", + "output": [ "publicFeature", "feature" ] + }, + "big_codecs": { + "label": "Big Codecs", + "purpose": "Supports big codecs, e.g. CJK.", + "section": "Internationalization", + "condition": "features.textcodec", + "output": [ "publicFeature", "feature" ] + }, + "animation": { + "label": "Animation", + "purpose": "Provides a framework for animations.", + "section": "Utilities", + "condition": "features.properties", + "output": [ "publicFeature", "feature" ] + }, + "statemachine": { + "label": "State machine", + "purpose": "Provides hierarchical finite state machines.", + "section": "Utilities", + "condition": "features.properties", + "output": [ "publicFeature", "feature" ] + }, + "gestures": { + "label": "Gesture", + "purpose": "Provides a framework for gestures.", + "section": "Utilities", + "output": [ "publicFeature", "feature" ] } }, diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro index 1db814180b..616a9641a1 100644 --- a/src/corelib/corelib.pro +++ b/src/corelib/corelib.pro @@ -31,8 +31,6 @@ ANDROID_PERMISSIONS = \ # OpenBSD 6.0 will include environ in libc. freebsd|openbsd: QMAKE_LFLAGS_NOUNDEF = -load(qfeatures) - include(animation/animation.pri) include(arch/arch.pri) include(global/global.pri) @@ -100,6 +98,7 @@ cmake_umbrella_config_version_file.output = $$DESTDIR/cmake/Qt5/Qt5ConfigVersion load(cmake_functions) +##### This requires fixing, so that the feature system works with cmake as well CMAKE_DISABLED_FEATURES = $$join(QT_DISABLED_FEATURES, "$$escape_expand(\\n) ") CMAKE_HOST_DATA_DIR = $$cmakeRelativePath($$[QT_HOST_DATA/src], $$[QT_INSTALL_PREFIX]) diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri index 7ebd9cf710..e3d89651e4 100644 --- a/src/corelib/tools/tools.pri +++ b/src/corelib/tools/tools.pri @@ -168,7 +168,7 @@ qtConfig(icu) { SOURCES += tools/qcollator_posix.cpp } -!contains(QT_DISABLED_FEATURES, regularexpression) { +qtConfig(regularexpression) { include($$PWD/../../3rdparty/pcre_dependency.pri) HEADERS += tools/qregularexpression.h diff --git a/src/gui/configure.json b/src/gui/configure.json index 8513bff5d0..46014188e5 100644 --- a/src/gui/configure.json +++ b/src/gui/configure.json @@ -668,7 +668,9 @@ }, "sessionmanager": { "label": "Session Management", - "output": [ "feature" ] + "purpose": "Provides an interface to the windowing system's session management.", + "section": "Kernel", + "output": [ "publicFeature", "feature" ] }, "tslib": { "label": "tslib", @@ -756,6 +758,194 @@ "label": "Xrender", "condition": "libs.xrender", "output": [ "privateFeature", "feature" ] + }, + "texthtmlparser": { + "label": "HtmlParser", + "purpose": "Provides a parser for HTML.", + "section": "Kernel", + "output": [ "publicFeature", "feature" ] + }, + "textodfwriter": { + "label": "OdfWriter", + "purpose": "Provides an ODF writer.", + "section": "Kernel", + "condition": "features.xmlstreamwriter", + "output": [ "publicFeature", "feature" ] + }, + "cssparser": { + "label": "CssParser", + "purpose": "Provides a parser for Cascading Style Sheets.", + "section": "Kernel", + "output": [ "publicFeature", "feature" ] + }, + "draganddrop": { + "label": "Drag and Drop", + "purpose": "Supports the drag and drop mechansim.", + "section": "Kernel", + "condition": "features.imageformat_xpm", + "output": [ "publicFeature", "feature" ] + }, + "shortcut": { + "label": "QShortcut", + "purpose": "Provides keyboard accelerators and shortcuts.", + "section": "Kernel", + "output": [ "publicFeature", "feature" ] + }, + "action": { + "label": "QAction", + "purpose": "Provides widget actions.", + "section": "Kernel", + "output": [ "publicFeature", "feature" ] + }, + "cursor": { + "label": "QCursor", + "purpose": "Provides mouse cursors.", + "section": "Kernel", + "output": [ "publicFeature", "feature" ] + }, + "clipboard": { + "label": "QClipboard", + "purpose": "Provides cut and paste operations.", + "section": "Kernel", + "condition": "!config.integrity && !config.qnx", + "output": [ "publicFeature", "feature" ] + }, + "wheelevent": { + "label": "QWheelEvent", + "purpose": "Supports wheel events.", + "section": "Kernel", + "output": [ "publicFeature", "feature" ] + }, + "tabletevent": { + "label": "QTabletEvent", + "purpose": "Supports tablet events.", + "section": "Kernel", + "output": [ "publicFeature", "feature" ] + }, + "im": { + "label": "QInputContext", + "purpose": "Provides complex input methods.", + "section": "Kernel", + "condition": "features.library", + "output": [ "publicFeature", "feature" ] + }, + "validator": { + "label": "QValidator", + "purpose": "Supports validation of input text.", + "section": "Widgets", + "output": [ "publicFeature", "feature" ] + }, + "standarditemmodel": { + "label": "QStandardItemModel", + "purpose": "Provides a generic model for storing custom data.", + "section": "ItemViews", + "condition": "features.itemmodel", + "output": [ "publicFeature", "feature" ] + }, + "imageformatplugin": { + "label": "QImageIOPlugin", + "purpose": "Provides a base for writing a image format plugins.", + "section": "Images", + "condition": "features.library", + "output": [ "publicFeature", "feature" ] + }, + "movie": { + "label": "QMovie", + "purpose": "Supports animated images.", + "section": "Images", + "output": [ "publicFeature", "feature" ] + }, + "imageformat_bmp": { + "label": "BMP Image Format", + "purpose": "Supports Microsoft's Bitmap image file format.", + "section": "Images", + "output": [ "publicFeature", "feature" ] + }, + "imageformat_ppm": { + "label": "PPM Image Format", + "purpose": "Supports the Portable Pixmap image file format.", + "section": "Images", + "output": [ "publicFeature", "feature" ] + }, + "imageformat_xbm": { + "label": "XBM Image Format", + "purpose": "Supports the X11 Bitmap image file format.", + "section": "Images", + "output": [ "publicFeature", "feature" ] + }, + "imageformat_xpm": { + "label": "XPM Image Format", + "purpose": "Supports the X11 Pixmap image file format.", + "section": "Images", + "output": [ "publicFeature", "feature" ] + }, + "imageformat_png": { + "label": "PNG Image Format", + "purpose": "Supports the Portable Network Graphics image file format.", + "section": "Images", + "output": [ "publicFeature", "feature" ] + }, + "imageformat_jpeg": { + "label": "JPEG Image Format", + "purpose": "Supports the Joint Photographic Experts Group image file format.", + "section": "Images", + "output": [ "publicFeature", "feature" ] + }, + "image_heuristic_mask": { + "label": "QImage::createHeuristicMask()", + "purpose": "Supports creating a 1-bpp heuristic mask for images.", + "section": "Images", + "output": [ "publicFeature", "feature" ] + }, + "image_text": { + "label": "Image Text", + "purpose": "Supports image file text strings.", + "section": "Images", + "output": [ "publicFeature", "feature" ] + }, + "picture": { + "label": "QPicture", + "purpose": "Supports recording and replaying QPainter commands.", + "section": "Painting", + "output": [ "publicFeature", "feature" ] + }, + "colornames": { + "label": "Color Names", + "purpose": "Supports color names such as \"red\", used by QColor and by some HTML documents.", + "section": "Painting", + "output": [ "publicFeature", "feature" ] + }, + "pdf": { + "label": "QPdf", + "purpose": "Provides a PDF backend for QPainter.", + "section": "Painting", + "condition": "features.temporaryfile", + "output": [ "publicFeature", "feature" ] + }, + "freetype": { + "label": "Freetype Font Engine", + "purpose": "Supports the FreeType 2 font engine (and its supported font formats).", + "section": "Fonts", + "output": [ "publicFeature", "feature" ] + }, + "desktopservices": { + "label": "QDesktopServices", + "purpose": "Provides methods for accessing common desktop services.", + "section": "Utilities", + "output": [ "publicFeature", "feature" ] + }, + "systemtrayicon": { + "label": "QSystemTrayIcon", + "purpose": "Provides an icon for an application in the system tray.", + "section": "Utilities", + "output": [ "publicFeature", "feature" ] + }, + "accessibility": { + "label": "Accessibility", + "purpose": "Provides accessibility support.", + "section": "Utilities", + "condition": "features.properties", + "output": [ "publicFeature", "feature" ] } }, diff --git a/src/network/configure.json b/src/network/configure.json index 3372d177c3..97bf92167d 100644 --- a/src/network/configure.json +++ b/src/network/configure.json @@ -176,6 +176,64 @@ "system-proxies": { "label": "Use system proxies", "output": [ "privateFeature" ] + }, + "ftp": { + "label": "FTP", + "purpose": "Provides support for the File Transfer Protocol in QNetworkAccessManager.", + "section": "Networking", + "condition": "features.textdate", + "output": [ "publicFeature", "feature" ] + }, + "http": { + "label": "HTTP", + "purpose": "Provides support for the Hypertext Transfer Protocol in QNetworkAccessManager.", + "section": "Networking", + "output": [ "publicFeature", "feature" ] + }, + "udpsocket": { + "label": "QUdpSocket", + "purpose": "Provides access to UDP sockets.", + "section": "Networking", + "output": [ "publicFeature", "feature" ] + }, + "networkproxy": { + "label": "QNetworkProxy", + "purpose": "Provides network proxy support.", + "section": "Networking", + "output": [ "publicFeature", "feature" ] + }, + "socks5": { + "label": "SOCKS5", + "purpose": "Provides SOCKS5 support in QNetworkProxy.", + "section": "Networking", + "output": [ "publicFeature", "feature" ] + }, + "networkinterface": { + "label": "QNetworkInterface", + "purpose": "Supports enumerating a host's IP addresses and network interfaces.", + "section": "Networking", + "output": [ "publicFeature", "feature" ] + }, + "networkdiskcache": { + "label": "QNetworkDiskCache", + "purpose": "Provides a disk cache for network resources.", + "section": "Networking", + "condition": "features.temporaryfile", + "output": [ "publicFeature", "feature" ] + }, + "bearermanagement": { + "label": "Bearer management", + "purpose": "Provides bearer management for the network stack.", + "section": "Networking", + "condition": "features.library && features.networkinterface && features.properties", + "output": [ "publicFeature", "feature" ] + }, + "localserver": { + "label": "QLocalServer", + "purpose": "Provides a local socket based server.", + "section": "Networking", + "condition": "features.temporaryfile", + "output": [ "publicFeature", "feature" ] } }, diff --git a/src/plugins/generic/generic.pro b/src/plugins/generic/generic.pro index 69e832906b..996e57d015 100644 --- a/src/plugins/generic/generic.pro +++ b/src/plugins/generic/generic.pro @@ -1,7 +1,5 @@ TEMPLATE = subdirs -QT_FOR_CONFIG += gui-private - -load(qfeatures) +QT_FOR_CONFIG += gui-private network-private qtConfig(evdev) { SUBDIRS += evdevmouse evdevtouch evdevkeyboard evdevtablet @@ -11,7 +9,7 @@ qtConfig(tslib) { SUBDIRS += tslib } -!contains(QT_DISABLED_FEATURES, udpsocket) { +qtConfig(udpsocket) { SUBDIRS += tuiotouch } diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro index 0f4207c636..941c25361f 100644 --- a/src/plugins/plugins.pro +++ b/src/plugins/plugins.pro @@ -1,14 +1,13 @@ TEMPLATE = subdirs +QT_FOR_CONFIG += network -load(qfeatures) SUBDIRS *= sqldrivers -qtHaveModule(network):!contains(QT_DISABLED_FEATURES, bearermanagement): SUBDIRS += bearer +qtHaveModule(network):qtConfig(bearermanagement): SUBDIRS += bearer qtHaveModule(gui) { SUBDIRS *= platforms platforminputcontexts platformthemes - !contains(QT_DISABLED_FEATURES, imageformatplugin): SUBDIRS *= imageformats - !android:!contains(QT_DISABLED_FEATURES, library): SUBDIRS *= generic + qtConfig(imageformatplugin): SUBDIRS *= imageformats + !android:qtConfig(library): SUBDIRS *= generic } -!winrt:!wince*:qtHaveModule(widgets):!contains(QT_DISABLED_FEATURES, printer) { +!winrt:!wince:qtHaveModule(printsupport): \ SUBDIRS += printsupport -} diff --git a/src/printsupport/configure.json b/src/printsupport/configure.json index 6bf4208e9c..439f2dbdd8 100644 --- a/src/printsupport/configure.json +++ b/src/printsupport/configure.json @@ -26,8 +26,38 @@ "features": { "cups": { "label": "CUPS", + "purpose": "Provides support for the Common Unix Printing System.", + "section": "Painting", "condition": "libs.cups", "output": [ "privateFeature", "feature" ] + }, + "printer": { + "label": "QPrinter", + "purpose": "Provides a printer backend of QPainter.", + "section": "Painting", + "condition": "!config.android && !config.uikit && !config.winrt && features.picture && features.temporaryfile && features.pdf", + "output": [ "publicFeature", "feature" ] + }, + "printpreviewwidget": { + "label": "QPrintPreviewWidget", + "purpose": "Provides a widget for previewing page layouts for printer output.", + "section": "Widgets", + "condition": "features.graphicsview && features.printer && features.mainwindow", + "output": [ "publicFeature", "feature" ] + }, + "printdialog": { + "label": "QPrintDialog", + "purpose": "Provides a dialog widget for specifying printer configuration.", + "section": "Dialogs", + "condition": "features.printer && features.combobox && features.buttongroup && features.spinbox && features.treeview && features.tabwidget", + "output": [ "publicFeature", "feature" ] + }, + "printpreviewdialog": { + "label": "QPrintPreviewDialog", + "purpose": "Provides a dialog for previewing and configuring page layouts for printer output.", + "section": "Dialogs", + "condition": "features.printpreviewwidget && features.printdialog && features.toolbar", + "output": [ "publicFeature", "feature" ] } }, diff --git a/src/src.pro b/src/src.pro index 60d6a57e2a..541053eba5 100644 --- a/src/src.pro +++ b/src/src.pro @@ -134,7 +134,7 @@ src_android.subdir = $$PWD/android } } SUBDIRS += src_tools_bootstrap src_tools_moc src_tools_rcc -!contains(QT_DISABLED_FEATURES, regularexpression):pcre { +qtConfig(regularexpression):pcre { SUBDIRS += src_3rdparty_pcre src_corelib.depends += src_3rdparty_pcre } diff --git a/src/widgets/configure.json b/src/widgets/configure.json index 2c1f8b1e6c..ee7e1dd8e0 100644 --- a/src/widgets/configure.json +++ b/src/widgets/configure.json @@ -71,10 +71,480 @@ "autoDetect": "config.android", "output": [ "styles" ] }, + "style-stylesheet": { + "label": "QStyleSheetStyle", + "purpose": "Provides a widget style which is configurable via CSS.", + "section": "Styles", + "condition": "features.style-windows && features.properties && features.cssparser", + "output": [ "publicFeature", "feature" ] + }, "android-style-assets": { "label": "Android Style Assets", "condition": "features.style-android", "output": [ "privateConfig" ] + }, + "effects": { + "label": "Effects", + "purpose": "Provides special widget effects (e.g. fading and scrolling).", + "section": "Kernel" + }, + "filesystemmodel": { + "label": "QFileSystemModel", + "purpose": "Provides a data model for the local filesystem.", + "section": "File I/O", + "output": [ "publicFeature", "feature" ] + }, + "itemviews": { + "label": "The Model/View Framework", + "purpose": "Provides the model/view architecture managing the relationship between data and the way it is presented to the user.", + "section": "ItemViews", + "condition": "features.itemmodel && features.rubberband && features.scrollarea", + "output": [ "publicFeature", "feature" ] + }, + "treewidget": { + "label": "QTreeWidget", + "purpose": "Provides views using tree models.", + "section": "Widgets", + "condition": "features.treeview", + "output": [ "publicFeature", "feature" ] + }, + "listwidget": { + "label": "QListWidget", + "purpose": "Provides item-based list widgets.", + "section": "Widgets", + "condition": "features.listview", + "output": [ "publicFeature", "feature" ] + }, + "tablewidget": { + "label": "QTableWidget", + "purpose": "Provides item-based table views.", + "section": "Widgets", + "condition": "features.tableview", + "output": [ "publicFeature", "feature" ] + }, + "datetimeedit": { + "label": "QDateTimeEdit", + "purpose": "Supports editing dates and times.", + "section": "Widgets", + "condition": "features.calendarwidget && features.datestring", + "output": [ "publicFeature", "feature" ] + }, + "stackedwidget": { + "label": "QStackedWidget", + "purpose": "Provides stacked widgets.", + "section": "Widgets", + "output": [ "publicFeature", "feature" ] + }, + "textbrowser": { + "label": "QTextBrowser", + "purpose": "Supports HTML document browsing.", + "section": "Widgets", + "condition": "features.textedit", + "output": [ "publicFeature", "feature" ] + }, + "splashscreen": { + "label": "QSplashScreen", + "purpose": "Supports splash screens that can be shown during application startup.", + "section": "Widgets", + "output": [ "publicFeature", "feature" ] + }, + "splitter": { + "label": "QSplitter", + "purpose": "Provides user controlled splitter widgets.", + "section": "Widgets", + "condition": "features.rubberband", + "output": [ "publicFeature", "feature" ] + }, + "lcdnumber": { + "label": "QLCDNumber", + "purpose": "Provides LCD-like digits.", + "section": "Widgets", + "output": [ "publicFeature", "feature" ] + }, + "menu": { + "label": "QMenu", + "purpose": "Provides popup-menus.", + "section": "Widgets", + "condition": "features.action", + "output": [ "publicFeature", "feature" ] + }, + "lineedit": { + "label": "QLineEdit", + "purpose": "Provides single-line edits.", + "section": "Widgets", + "output": [ "publicFeature", "feature" ] + }, + "spinbox": { + "label": "QSpinBox", + "purpose": "Provides spin boxes handling integers and discrete sets of values.", + "section": "Widgets", + "condition": "features.spinwidget && features.lineedit && features.validator", + "output": [ "publicFeature", "feature" ] + }, + "tabbar": { + "label": "QTabBar", + "purpose": "Provides tab bars, e.g., for use in tabbed dialogs.", + "section": "Widgets", + "condition": "features.toolbutton", + "output": [ "publicFeature", "feature" ] + }, + "tabwidget": { + "label": "QTabWidget", + "purpose": "Supports stacking tabbed widgets.", + "section": "Widgets", + "condition": "features.tabbar && features.stackedwidget", + "output": [ "publicFeature", "feature" ] + }, + "combobox": { + "label": "QComboBox", + "purpose": "Provides drop-down boxes presenting a list of options to the user.", + "section": "Widgets", + "condition": "features.lineedit && features.standarditemmodel && features.listview", + "output": [ "publicFeature", "feature" ] + }, + "fontcombobox": { + "label": "QFontComboBox", + "purpose": "Provides a combobox that lets the user select a font family.", + "section": "Widgets", + "condition": "features.combobox && features.stringlistmodel", + "output": [ "publicFeature", "feature" ] + }, + "toolbutton": { + "label": "QToolButton", + "purpose": "Provides quick-access buttons to commands and options.", + "section": "Widgets", + "condition": "features.action", + "output": [ "publicFeature", "feature" ] + }, + "toolbar": { + "label": "QToolBar", + "purpose": "Provides movable panels containing a set of controls.", + "section": "Widgets", + "condition": "features.mainwindow", + "output": [ "publicFeature", "feature" ] + }, + "toolbox": { + "label": "QToolBox", + "purpose": "Provides columns of tabbed widget items.", + "section": "Widgets", + "condition": "features.toolbutton && features.scrollarea", + "output": [ "publicFeature", "feature" ] + }, + "groupbox": { + "label": "QGroupBox", + "purpose": "Provides widget grouping boxes with frames.", + "section": "Widgets", + "output": [ "publicFeature", "feature" ] + }, + "buttongroup": { + "label": "QButtonGroup", + "purpose": "Supports organizing groups of button widgets.", + "section": "Widgets", + "condition": "features.groupbox", + "output": [ "publicFeature", "feature" ] + }, + "mainwindow": { + "label": "QMainWindow", + "purpose": "Provides main application windows.", + "section": "Widgets", + "condition": "features.menu && features.resizehandler && features.toolbutton", + "output": [ "publicFeature", "feature" ] + }, + "dockwidget": { + "label": "QDockwidget", + "purpose": "Supports docking widgets inside a QMainWindow or floated as a top-level window on the desktop.", + "section": "Widgets", + "condition": "features.rubberband && features.mainwindow", + "output": [ "publicFeature", "feature" ] + }, + "mdiarea": { + "label": "QMdiArea", + "purpose": "Provides an area in which MDI windows are displayed.", + "section": "Widgets", + "condition": "features.scrollarea", + "output": [ "publicFeature", "feature" ] + }, + "resizehandler": { + "label": "QWidgetResizeHandler", + "purpose": "Provides an internal resize handler for dock widgets.", + "section": "Widgets", + "output": [ "publicFeature", "feature" ] + }, + "statusbar": { + "label": "QStatusBar", + "purpose": "Supports presentation of status information.", + "section": "Widgets", + "output": [ "publicFeature", "feature" ] + }, + "menubar": { + "label": "QMenuBar", + "purpose": "Provides pull-down menu items.", + "section": "Widgets", + "condition": "features.menu && features.toolbutton", + "output": [ "publicFeature", "feature" ] + }, + "contextmenu": { + "label": "Context menus", + "purpose": "Adds pop-up menus on right mouse click to numerous widgets.", + "section": "Widgets", + "condition": "features.menu", + "output": [ "publicFeature", "feature" ] + }, + "progressbar": { + "label": "QProgressBar", + "purpose": "Supports presentation of operation progress.", + "section": "Widgets", + "output": [ "publicFeature", "feature" ] + }, + "slider": { + "label": "QSlider", + "purpose": "Provides sliders controlling a bounded value.", + "section": "Widgets", + "output": [ "publicFeature", "feature" ] + }, + "scrollbar": { + "label": "QScrollBar", + "purpose": "Provides scrollbars allowing the user access parts of a document that is larger than the widget used to display it.", + "section": "Widgets", + "condition": "features.slider", + "output": [ "publicFeature", "feature" ] + }, + "dial": { + "label": "QDial", + "purpose": "Provides a rounded range control, e.g., like a speedometer.", + "section": "Widgets", + "condition": "features.slider", + "output": [ "publicFeature", "feature" ] + }, + "scrollarea": { + "label": "QScrollArea", + "purpose": "Supports scrolling views onto widgets.", + "section": "Widgets", + "condition": "features.scrollbar", + "output": [ "publicFeature", "feature" ] + }, + "graphicsview": { + "label": "QGraphicsView", + "purpose": "Provides a canvas/sprite framework.", + "section": "Widgets", + "condition": "features.scrollarea", + "output": [ "publicFeature", "feature" ] + }, + "graphicseffect": { + "label": "QGraphicsEffect", + "purpose": "Provides various graphics effects.", + "section": "Widgets", + "condition": "features.graphicsview", + "output": [ "publicFeature", "feature" ] + }, + "spinbox": { + "label": "QSpinBox", + "purpose": "Provides spinbox control widgets.", + "section": "Widgets", + "output": [ "publicFeature", "feature" ] + }, + "textedit": { + "label": "QTextEdit", + "purpose": "Supports rich text editing.", + "section": "Widgets", + "condition": "features.scrollarea && features.properties", + "output": [ "publicFeature", "feature" ] + }, + "syntaxhighlighter": { + "label": "QSyntaxHighlighter", + "purpose": "Supports custom syntax highlighting.", + "section": "Widgets", + "condition": "features.textedit", + "output": [ "publicFeature", "feature" ] + }, + "rubberband": { + "label": "QRubberBand", + "purpose": "Supports using rubberbands to indicate selections and boundaries.", + "section": "Widgets", + "output": [ "publicFeature", "feature" ] + }, + "tooltip": { + "label": "QToolTip", + "purpose": "Supports presentation of tooltips.", + "section": "Widgets", + "output": [ "publicFeature", "feature" ] + }, + "statustip": { + "label": "Status Tip", + "purpose": "Supports status tip functionality and events.", + "section": "Widgets", + "output": [ "publicFeature", "feature" ] + }, + "whatsthis": { + "label": "QWhatsThis", + "purpose": "Supports displaying \"What's this\" help.", + "section": "Widgets", + "condition": "features.toolbutton", + "output": [ "publicFeature", "feature" ] + }, + "sizegrip": { + "label": "QSizeGrip", + "purpose": "Provides corner-grips for resizing top-level windows.", + "section": "Widgets", + "output": [ "publicFeature", "feature" ] + }, + "calendarwidget": { + "label": "QCalendarWidget", + "purpose": "Provides a monthly based calendar widget allowing the user to select a date.", + "section": "Widgets", + "condition": "features.tableview && features.menu && features.textdate && features.spinbox && features.toolbutton", + "output": [ "publicFeature", "feature" ] + }, + "keysequenceedit": { + "label": "QKeySequenceEdit", + "purpose": "Provides a widget for editing QKeySequences.", + "section": "Widgets", + "condition": "features.lineedit && features.shortcut", + "output": [ "publicFeature", "feature" ] + }, + "messagebox": { + "label": "QMessageBox", + "purpose": "Provides message boxes displaying informative messages and simple questions.", + "section": "Dialogs", + "output": [ "publicFeature", "feature" ] + }, + "colordialog": { + "label": "QColorDialog", + "purpose": "Provides a dialog widget for specifying colors.", + "section": "Dialogs", + "condition": "features.spinbox", + "output": [ "publicFeature", "feature" ] + }, + "filedialog": { + "label": "QFileDialog", + "purpose": "Provides a dialog widget for selecting files or directories.", + "section": "Dialogs", + "condition": "features.dirmodel && features.treeview && features.combobox && features.toolbutton && features.buttongroup && features.tooltip && features.splitter && features.stackedwidget && features.proxymodel", + "output": [ "publicFeature", "feature" ] + }, + "fontdialog": { + "label": "QFontDialog", + "purpose": "Provides a dialog widget for selecting fonts.", + "section": "Dialogs", + "condition": "features.stringlistmodel && features.combobox && features.validator && features.groupbox", + "output": [ "publicFeature", "feature" ] + }, + "progressdialog": { + "label": "QProgressDialog", + "purpose": "Provides feedback on the progress of a slow operation.", + "section": "Dialogs", + "condition": "features.progressbar", + "output": [ "publicFeature", "feature" ] + }, + "inputdialog": { + "label": "QInputDialog", + "purpose": "Provides a simple convenience dialog to get a single value from the user.", + "section": "Dialogs", + "condition": "features.combobox && features.spinbox && features.stackedwidget", + "output": [ "publicFeature", "feature" ] + }, + "errormessage": { + "label": "QErrorMessage", + "purpose": "Provides an error message display dialog.", + "section": "Dialogs", + "condition": "features.textedit", + "output": [ "publicFeature", "feature" ] + }, + "wizard": { + "label": "QWizard", + "purpose": "Provides a framework for multi-page click-through dialogs.", + "section": "Dialogs", + "condition": "features.properties", + "output": [ "publicFeature", "feature" ] + }, + "dirmodel": { + "label": "QDirModel", + "purpose": "Provides a data model for the local filesystem.", + "section": "ItemViews", + "condition": "features.itemviews && features.filesystemmodel", + "output": [ "publicFeature", "feature" ] + }, + "listview": { + "label": "QListView", + "purpose": "Provides a list or icon view onto a model.", + "section": "ItemViews", + "condition": "features.itemviews", + "output": [ "publicFeature", "feature" ] + }, + "tableview": { + "label": "QTableView", + "purpose": "Provides a default model/view implementation of a table view.", + "section": "ItemViews", + "condition": "features.itemviews", + "output": [ "publicFeature", "feature" ] + }, + "treeview": { + "label": "QTreeView", + "purpose": "Provides a default model/view implementation of a tree view.", + "section": "ItemViews", + "condition": "features.itemviews", + "output": [ "publicFeature", "feature" ] + }, + "datawidgetmapper": { + "label": "QDataWidgetMapper", + "purpose": "Provides mapping between a section of a data model to widgets.", + "section": "ItemViews", + "condition": "features.itemviews && features.properties", + "output": [ "publicFeature", "feature" ] + }, + "columnview": { + "label": "QColumnView", + "purpose": "Provides a model/view implementation of a column view.", + "section": "ItemViews", + "condition": "features.listview", + "output": [ "publicFeature", "feature" ] + }, + "paint_debug": { + "label": "Painting Debug Utilities", + "purpose": "Enabled debugging painting with the environment variables QT_FLUSH_UPDATE and QT_FLUSH_PAINT.", + "section": "Painting", + "output": [ "publicFeature", "feature" ] + }, + "completer": { + "label": "QCompleter", + "purpose": "Provides completions based on an item model.", + "section": "Utilities", + "condition": "features.proxymodel", + "output": [ "publicFeature", "feature" ] + }, + "fscompleter": { + "label": "QFSCompleter", + "purpose": "Provides file name completion in QFileDialog.", + "section": "Utilities", + "condition": "features.filesystemmodel && features.completer", + "output": [ "publicFeature", "feature" ] + }, + "undocommand": { + "label": "QUndoCommand", + "purpose": "Applies (redo or) undo of a single change in a document.", + "section": "Utilities", + "output": [ "publicFeature", "feature" ] + }, + "undostack": { + "label": "QUndoStack", + "purpose": "Provides the ability to (redo or) undo a list of changes in a document.", + "section": "Utilities", + "condition": "features.undocommand", + "output": [ "publicFeature", "feature" ] + }, + "undogroup": { + "label": "QUndoGroup", + "purpose": "Provides the ability to cluster QUndoCommands.", + "section": "Utilities", + "condition": "features.undostack", + "output": [ "publicFeature", "feature" ] + }, + "undoview": { + "label": "QUndoView", + "purpose": "Provides a widget which shows the contents of an undo stack.", + "section": "Utilities", + "condition": "features.undostack && features.listview", + "output": [ "publicFeature", "feature" ] } }, diff --git a/src/xml/configure.json b/src/xml/configure.json new file mode 100644 index 0000000000..345eb8544b --- /dev/null +++ b/src/xml/configure.json @@ -0,0 +1,16 @@ +{ + "module": "xml", + "depends": [ + "core" + ], + "testDir": "../../config.tests", + + "features": { + "dom": { + "label": "DOM", + "purpose": "Supports the Document Object Model.", + "section": "File I/O", + "output": [ "publicFeature", "feature" ] + } + } +} diff --git a/src/xml/qtxmlglobal.h b/src/xml/qtxmlglobal.h index de5a8ab39d..ed5de8db87 100644 --- a/src/xml/qtxmlglobal.h +++ b/src/xml/qtxmlglobal.h @@ -41,6 +41,9 @@ #define QTXMLGLOBAL_H #include +#ifndef QT_BOOTSTRAPPED +# include +#endif QT_BEGIN_NAMESPACE diff --git a/sync.profile b/sync.profile index 0860c7692a..4da3499667 100644 --- a/sync.profile +++ b/sync.profile @@ -65,7 +65,7 @@ my @zlib_headers = ( "zconf.h", "zlib.h" ); @ignore_headers = ( @internal_zlib_headers ); @ignore_for_include_check = ( "qsystemdetection.h", "qcompilerdetection.h", "qprocessordetection.h", @zlib_headers, @angle_headers); @ignore_for_qt_begin_namespace_check = ( "qt_windows.h", @zlib_headers, @angle_headers); -%inject_headers = ( "$basedir/src/corelib/global" => [ "qconfig.h", "qconfig_p.h", "qfeatures.h" ] ); +%inject_headers = ( "$basedir/src/corelib/global" => [ "qconfig.h", "qconfig_p.h" ] ); # Module dependencies. # Every module that is required to build this module should have one entry. # Each of the module version specifiers can take one of the following values: diff --git a/tests/auto/corelib/plugin/plugin.pro b/tests/auto/corelib/plugin/plugin.pro index 777e920995..774edc655a 100644 --- a/tests/auto/corelib/plugin/plugin.pro +++ b/tests/auto/corelib/plugin/plugin.pro @@ -3,8 +3,7 @@ SUBDIRS=\ qfactoryloader \ quuid -load(qfeatures) -!contains(QT_DISABLED_FEATURES, library): SUBDIRS += \ +qtConfig(library): SUBDIRS += \ qpluginloader \ qplugin \ qlibrary diff --git a/tests/auto/corelib/plugin/qfactoryloader/test/test.pro b/tests/auto/corelib/plugin/qfactoryloader/test/test.pro index f1e76c31bf..3345651730 100644 --- a/tests/auto/corelib/plugin/qfactoryloader/test/test.pro +++ b/tests/auto/corelib/plugin/qfactoryloader/test/test.pro @@ -19,7 +19,6 @@ win32 { mac: CONFIG -= app_bundle -load(qfeatures) -contains(QT_DISABLED_FEATURES, library) { +!qtConfig(library) { LIBS += -L ../bin/ -lplugin1 -lplugin2 }