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-<module>.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 <oswald.buddenhagen@theqtcompany.com>
This commit is contained in:
Lars Knoll 2016-08-26 21:19:12 +02:00
parent b22471edf9
commit a668c6a6b6
33 changed files with 981 additions and 182 deletions

16
configure vendored
View File

@ -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" <<EOF
# Feature defaults set by configure command line
config.input.extra_features = $CFG_FEATURES
config.input.qt_edition = $Edition
config.input.qt_licheck = $Licheck
config.input.qt_release_date = $ReleaseDate

View File

@ -11,6 +11,7 @@
"src/network",
"src/sql",
"src/gui",
"src/xml",
"src/widgets",
"src/printsupport"
],
@ -933,6 +934,8 @@
},
"concurrent": {
"label": "Qt Concurrent",
"purpose": "Provides a high-level multi-threading API.",
"section": "Kernel",
"output": [ "publicFeature", "feature" ]
},
"dbus": {
@ -1032,10 +1035,6 @@
"autoDetect": false,
"condition": "tests.wmf",
"output": [ "publicQtConfig" ]
},
"extra_features": {
"comment": "### remove, once qfeatures.txt is ported to the new system",
"output": [ "extraFeatures" ]
}
},

View File

@ -379,43 +379,6 @@ defineTest(qtConfOutput_compilerVersion) {
export($${currentConfig}.output.publicPro)
}
# should go away when qfeatures.txt is ported
defineTest(qtConfOutput_extraFeatures) {
isEmpty(config.input.extra_features): return()
# write to qconfig.pri
$${currentConfig}.output.publicPro += "$${LITERAL_HASH}ifndef QT_BOOTSTRAPPED"
for (f, config.input.extra_features) {
feature = $$replace(f, "^no-", "")
FEATURE = $$upper($$replace(feature, -, _))
contains(f, "^no-.*") {
$${currentConfig}.output.publicPro += \
"$${LITERAL_HASH}ifndef QT_NO_$$FEATURE" \
"$${LITERAL_HASH}define QT_NO_$$FEATURE" \
"$${LITERAL_HASH}endif"
} else {
$${currentConfig}.output.publicPro += \
"$${LITERAL_HASH}if defined(QT_$$FEATURE) && defined(QT_NO_$$FEATURE)" \
"$${LITERAL_HASH}undef QT_$$FEATURE" \
"$${LITERAL_HASH}elif !defined(QT_$$FEATURE) && !defined(QT_NO_$$FEATURE)" \
"$${LITERAL_HASH}define QT_$$FEATURE" \
"$${LITERAL_HASH}endif"
}
}
$${currentConfig}.output.publicPro += "$${LITERAL_HASH}endif"
export($${currentConfig}.output.publicPro)
# write to qmodule.pri
disabled_features =
for (f, config.input.extra_features) {
feature = $$replace(f, "^no-", "")
FEATURE = $$upper($$replace(feature, -, _))
contains(f, "^no-.*"): disabled_features += $$FEATURE
}
!isEmpty(disabled_features): qtConfOutputVar(assign, "privatePro", QT_NO_DEFINES, $$disabled_features)
}
defineTest(qtConfOutput_compilerFlags) {
# this output also exports the variables locally, so that subsequent compiler tests can use them

View File

@ -19,8 +19,7 @@ qtHaveModule(widgets) {
multicastreceiver \
multicastsender
load(qfeatures)
!contains(QT_DISABLED_FEATURES, bearermanagement) {
qtConfig(bearermanagement) {
# no QProcess
!vxworks:!qnx:!winrt:!integrity:!uikit: SUBDIRS += network-chat

View File

@ -16,8 +16,7 @@ SUBDIRS = \
contains(DEFINES, QT_NO_TRANSLATION): SUBDIRS -= i18n
load(qfeatures)
contains(QT_DISABLED_FEATURES, library) {
!qtConfig(library) {
SUBDIRS -= \
echoplugin \
plugandpaint

View File

@ -6,7 +6,6 @@ QMAKE_PLATFORM += android
include(linux.conf)
include(gcc-base-unix.conf)
DEFINES += QT_NO_PRINTER QT_NO_PRINTDIALOG
QT_QPA_DEFAULT_PLATFORM = minimal
NDK_ROOT = $$(ANDROID_NDK_ROOT)

View File

@ -6,6 +6,6 @@ QMAKE_PLATFORM += uikit
CONFIG += bitcode reduce_exports
INCLUDEPATH += $$PWD/uikit
DEFINES += DARWIN_NO_CARBON QT_NO_PRINTER QT_NO_PRINTDIALOG
DEFINES += DARWIN_NO_CARBON
include(mac.conf)

View File

@ -10,8 +10,7 @@ MAKEFILE_GENERATOR = MSBUILD
QMAKE_COMPILER = msvc
QMAKE_PLATFORM = winrt win32
CONFIG = package_manifest $$CONFIG incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target rtti
DEFINES += UNICODE WIN32 QT_LARGEFILE_SUPPORT Q_BYTE_ORDER=Q_LITTLE_ENDIAN \
QT_NO_PRINTER QT_NO_PRINTDIALOG # TODO: Remove when printing is re-enabled
DEFINES += UNICODE WIN32 QT_LARGEFILE_SUPPORT Q_BYTE_ORDER=Q_LITTLE_ENDIAN
DEPLOYMENT_PLUGIN += qwinrt

View File

@ -1,4 +0,0 @@
# This file needs to be loaded explicitly, as the evaluation is relatively
# expensive, and not many projects will actually need it.
QMAKE_QT_FEATURES = $$[QT_HOST_DATA/get]/mkspecs/qfeatures.pri
include($$QMAKE_QT_FEATURES) | error("Failed to load $$QMAKE_QT_FEATURES")

View File

@ -285,8 +285,20 @@ defineTest(qtConfParseCommandLine) {
}
# handle builtin [-no]-feature-xxx
isEmpty(type):contains(opt, "feature-(.*)") {
# simply skip for now
next()
opt ~= s,^feature-,,
found = false
for (cc, allConfigs) {
contains($${cc}.features._KEYS_, $$opt) {
found = true
break()
}
}
!$$found {
qtConfAddError("Enabling/Disabling unknown feature '$$opt'.")
return()
}
# this is a boolean enabling/disabling the corresponding feature
type = boolean
}
isEmpty(type) {

View File

@ -4,7 +4,6 @@
include(../common/ghs-integrity-armv7.conf)
DEFINES += QT_NO_CLIPBOARD
DEFINES += QT_STATICPLUGIN
QTPLUGIN.platforms += qeglfs qeglfs-viv-integration

View File

@ -4,7 +4,6 @@
include(../common/ghs-integrity-armv7.conf)
DEFINES += QT_NO_CLIPBOARD
DEFINES += QT_STATICPLUGIN
QTPLUGIN.platforms += integrityfb

View File

@ -5,7 +5,6 @@
include(../common/ghs-integrity-x86.conf)
QMAKE_CFLAGS += -cpu=Corei
DEFINES += QT_NO_CLIPBOARD
DEFINES += QT_STATICPLUGIN
QTPLUGIN.platforms += integrityfb

View File

@ -2,7 +2,7 @@
# qmake configuration for qnx aarch64le systems
#
DEFINES += QT_NO_CLIPBOARD _FORTIFY_SOURCE=2
DEFINES += _FORTIFY_SOURCE=2
QMAKE_LFLAGS_SHLIB += -Wl,-z,relro -Wl,-z,now

View File

@ -3,5 +3,3 @@
#
include(../common/qcc-base-qnx-armle-v7.conf)
DEFINES += QT_NO_CLIPBOARD

View File

@ -2,8 +2,6 @@
# qmake configuration for qnx x86-64 systems
#
DEFINES += QT_NO_CLIPBOARD
QMAKE_LFLAGS_SHLIB += -Wl,-z,relro -Wl,-z,now
include(../common/qcc-base-qnx-x86-64.conf)

View File

@ -3,5 +3,3 @@
#
include(../common/qcc-base-qnx-x86.conf)
DEFINES += QT_NO_CLIPBOARD

View File

@ -75,90 +75,10 @@ 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()
# 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 <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()
# 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

View File

@ -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" ]
}
},

View File

@ -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])

View File

@ -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

View File

@ -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" ]
}
},

View File

@ -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" ]
}
},

View File

@ -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
}

View File

@ -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
}

View File

@ -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" ]
}
},

View File

@ -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
}

View File

@ -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" ]
}
},

16
src/xml/configure.json Normal file
View File

@ -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" ]
}
}
}

View File

@ -41,6 +41,9 @@
#define QTXMLGLOBAL_H
#include <QtCore/qglobal.h>
#ifndef QT_BOOTSTRAPPED
# include <QtXml/qtxml-config.h>
#endif
QT_BEGIN_NAMESPACE

View File

@ -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:

View File

@ -3,8 +3,7 @@ SUBDIRS=\
qfactoryloader \
quuid
load(qfeatures)
!contains(QT_DISABLED_FEATURES, library): SUBDIRS += \
qtConfig(library): SUBDIRS += \
qpluginloader \
qplugin \
qlibrary

View File

@ -19,7 +19,6 @@ win32 {
mac: CONFIG -= app_bundle
load(qfeatures)
contains(QT_DISABLED_FEATURES, library) {
!qtConfig(library) {
LIBS += -L ../bin/ -lplugin1 -lplugin2
}