diff --git a/config.tests/x11/xrender/xrender.cpp b/config.tests/x11/xrender/xrender.cpp deleted file mode 100644 index 223328a3dfc..00000000000 --- a/config.tests/x11/xrender/xrender.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the config.tests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include - -#if RENDER_MAJOR == 0 && RENDER_MINOR < 5 -# error "Required Xrender version 0.6 not found." -#else -int main(int, char **) -{ - XRenderPictFormat *format; - format = 0; - return 0; -} -#endif diff --git a/config.tests/x11/xrender/xrender.pro b/config.tests/x11/xrender/xrender.pro deleted file mode 100644 index ab5c5efa773..00000000000 --- a/config.tests/x11/xrender/xrender.pro +++ /dev/null @@ -1,3 +0,0 @@ -SOURCES = xrender.cpp -CONFIG += x11 -CONFIG -= qt diff --git a/configure.pri b/configure.pri index 2dde7477a02..42f3247a591 100644 --- a/configure.pri +++ b/configure.pri @@ -835,7 +835,7 @@ defineTest(qtConfOutput_preparePaths) { !equals(QT_SOURCE_TREE, $$QT_BUILD_TREE): \ cont += \ "[EffectiveSourcePaths]" \ - "Prefix=$$QT_SOURCE_TREE" + "Prefix=$$[QT_INSTALL_PREFIX/src]" write_file($$QT_BUILD_TREE/bin/qt.conf, cont)|error() reload_properties() diff --git a/doc/global/macros.qdocconf b/doc/global/macros.qdocconf index 1182af14e95..5544da425a9 100644 --- a/doc/global/macros.qdocconf +++ b/doc/global/macros.qdocconf @@ -38,3 +38,17 @@ macro.beginfloatright.HTML = "
" macro.endfloat.HTML = "
" macro.clearfloat.HTML = "
" macro.emptyspan.HTML = "" + +# Embed YouTube content by video ID - Example: \youtube dQw4w9WgXcQ +# Also requires a .jpg thumbnail for offline docs. In .qdocconf, add: +# +# HTML.extraimages += images/dQw4w9WgXcQ.jpg +# qhp.ProjectName.extraFiles += images/dQw4w9WgXcQ.jpg +# +macro.youtube.HTML = "
\n\n" \ + "
\n" diff --git a/doc/global/template/style/offline-simple.css b/doc/global/template/style/offline-simple.css index a805b924a30..043e42981d9 100644 --- a/doc/global/template/style/offline-simple.css +++ b/doc/global/template/style/offline-simple.css @@ -160,3 +160,7 @@ td#buildversion { .footer p { margin: 0px; } + +.video { + margin: 15px 0 0 15px; +} diff --git a/doc/global/template/style/offline.css b/doc/global/template/style/offline.css index e2081596c92..a65cf48d91e 100644 --- a/doc/global/template/style/offline.css +++ b/doc/global/template/style/offline.css @@ -780,3 +780,23 @@ div.multi-column div { margin-right: 4em; width: 24em; } + +.mainContent .video { + width:40%; + max-width:640px; + margin: 15px 0 0 15px; + position:relative; + display:table +} + +.mainContent .video > .vspan { + padding-top:60%; + display:block +} +.mainContent .video iframe { + width:100%; + height:100%; + position:absolute; + top:0; + left:0 +} diff --git a/doc/global/template/style/online.css b/doc/global/template/style/online.css index 3c305f3ddbe..2d758f53019 100644 --- a/doc/global/template/style/online.css +++ b/doc/global/template/style/online.css @@ -1721,3 +1721,22 @@ a.qa-mark:target:before { color: #ff0000; } +.mainContent .video { + width:60%; + max-width:640px; + margin: 0.5em 0 1.5em 0.5em; + position:relative; + display:table +} + +.mainContent .video > .vspan { + padding-top:60%; + display:block +} +.mainContent .video iframe { + width:100%; + height:100%; + position:absolute; + top:0; + left:0 +} diff --git a/examples/sql/relationaltablemodel/relationaltablemodel.cpp b/examples/sql/relationaltablemodel/relationaltablemodel.cpp index c8faece1ddc..5292256cd9b 100644 --- a/examples/sql/relationaltablemodel/relationaltablemodel.cpp +++ b/examples/sql/relationaltablemodel/relationaltablemodel.cpp @@ -117,7 +117,7 @@ int main(int argc, char *argv[]) initializeModel(&model); - QTableView *view = createView(QObject::tr("Relational Table Model"), &model); + QScopedPointer view(createView(QObject::tr("Relational Table Model"), &model)); view->show(); return app.exec(); diff --git a/examples/widgets/tools/treemodelcompleter/mainwindow.cpp b/examples/widgets/tools/treemodelcompleter/mainwindow.cpp index c00e058fc4f..4aabb040235 100644 --- a/examples/widgets/tools/treemodelcompleter/mainwindow.cpp +++ b/examples/widgets/tools/treemodelcompleter/mainwindow.cpp @@ -194,16 +194,17 @@ QAbstractItemModel *MainWindow::modelFromFile(const QString& fileName) if (line.isEmpty() || trimmedLine.isEmpty()) continue; - QRegExp re("^\\s+"); - int nonws = re.indexIn(line); + QRegularExpression re("^\\s+"); + QRegularExpressionMatch match = re.match(line); + int nonws = match.capturedStart(); int level = 0; if (nonws == -1) { level = 0; } else { if (line.startsWith("\t")) { - level = re.cap(0).length(); + level = match.capturedLength(); } else { - level = re.cap(0).length()/4; + level = match.capturedLength()/4; } } diff --git a/mkspecs/features/mac/default_post.prf b/mkspecs/features/mac/default_post.prf index 3a1f7584b7b..cb8543254ab 100644 --- a/mkspecs/features/mac/default_post.prf +++ b/mkspecs/features/mac/default_post.prf @@ -32,6 +32,11 @@ qt { equals(TEMPLATE, lib):!plugin:lib_bundle: QMAKE_RPATHDIR += @loader_path/Frameworks } +# Don't pass -headerpad_max_install_names when using Bitcode. +# In that case the linker emits a warning stating that the flag is ignored when +# used with bitcode, for reasons that cannot be determined (rdar://problem/20748962). +# Using this flag is also unnecessary in practice on UIKit platforms since they +# are sandboxed, and only UIKit platforms support bitcode to begin with. !bitcode: QMAKE_LFLAGS += $$QMAKE_LFLAGS_HEADERPAD app_extension_api_only { diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf index e2e1a5a7621..2b3faeb21b1 100644 --- a/mkspecs/features/qt_configure.prf +++ b/mkspecs/features/qt_configure.prf @@ -125,7 +125,8 @@ defineTest(qtConfValidateValue) { defineTest(qtConfCommandline_string) { opt = $${1} val = $${2} - isEmpty(val): val = $$qtConfGetNextCommandlineArg() + nextok = $${3} + isEmpty(val):$$nextok: val = $$qtConfGetNextCommandlineArg() # Note: Arguments which are variable assignments are legit here. contains(val, "^-.*")|isEmpty(val) { @@ -142,9 +143,10 @@ defineTest(qtConfCommandline_string) { defineTest(qtConfCommandline_optionalString) { opt = $${1} val = $${2} + nextok = $${3} isEmpty(val) { - v = $$qtConfPeekNextCommandlineArg() - contains(v, "^-.*|[A-Z_]+=.*")|isEmpty(v): \ + $$nextok: val = $$qtConfPeekNextCommandlineArg() + contains(val, "^-.*|[A-Z_]+=.*")|isEmpty(val): \ val = "yes" else: \ val = $$qtConfGetNextCommandlineArg() @@ -160,7 +162,8 @@ defineTest(qtConfCommandline_optionalString) { defineTest(qtConfCommandline_addString) { opt = $${1} val = $${2} - isEmpty(val): val = $$qtConfGetNextCommandlineArg() + nextok = $${3} + isEmpty(val):$$nextok: val = $$qtConfGetNextCommandlineArg() # Note: Arguments which are variable assignments are legit here. contains(val, "^-.*")|isEmpty(val) { @@ -236,6 +239,7 @@ defineTest(qtConfParseCommandLine) { } # parse out opt and val + nextok = false contains(c, "^--?enable-(.*)") { opt = $$replace(c, "^--?enable-(.*)", "\\1") val = yes @@ -247,10 +251,11 @@ defineTest(qtConfParseCommandLine) { val = $$replace(c, "^--([^=]+)=(.*)", "\\2") } else: contains(c, "^--(.*)") { opt = $$replace(c, "^--(.*)", "\\1") - val = yes + val = } else: contains(c, "^-(.*)") { opt = $$replace(c, "^-(.*)", "\\1") val = + nextok = true for (cc, allConfigs) { type = $$eval($${cc}.commandline.options.$${opt}) !isEmpty(type): break() @@ -277,6 +282,7 @@ defineTest(qtConfParseCommandLine) { contains(c, $$e) { opt = $$eval($${cc}.commandline.prefix.$${p}) val = $$replace(c, $$e, "\\1") + nextok = true type = "addString" break() } @@ -315,7 +321,7 @@ defineTest(qtConfParseCommandLine) { error("Command line option '$$c' has unknown type '$$type'.") # now that we have opt and value, process it - $${call}($$opt, $$val) + $${call}($$opt, $$val, $$nextok) } } @@ -1743,10 +1749,6 @@ defineTest(qtConfProcessOneOutput) { fpfx = $${currentConfig}.features.$${feature} opfx = $${fpfx}.output.$${2} - condition = $$eval($${opfx}.condition) - !isEmpty(condition):!$$qtConfEvaluate($$condition): \ - return() - call = $$eval($${opfx}.type) isEmpty(call) { # output is just a string, not an object @@ -1755,11 +1757,8 @@ defineTest(qtConfProcessOneOutput) { !defined("qtConfOutput_$$call", test): \ error("Undefined type '$$call' in output '$$2' of feature '$$feature'.") - condition = $$eval($${opfx}.condition) - !isEmpty(condition) { - !$$qtConfEvaluate($$condition): \ - return(false) - } + !$$qtConfEvaluate($$eval($${opfx}.condition)): \ + return() $${opfx}.feature = $$feature qtConfOutput_$${call}($$opfx, $$eval($${fpfx}.available)) diff --git a/mkspecs/features/qt_module_headers.prf b/mkspecs/features/qt_module_headers.prf index a0be15c4a0d..0e04b46448b 100644 --- a/mkspecs/features/qt_module_headers.prf +++ b/mkspecs/features/qt_module_headers.prf @@ -182,7 +182,7 @@ headersclean:!internal_module { # Turn on some extra warnings not found in -Wall -Wextra. # Common to GCC, Clang and ICC (and other compilers that masquerade as GCC): hcleanFLAGS = -Wall -Wextra -Werror \ - -Woverloaded-virtual -Wshadow -Wundef \ + -Woverloaded-virtual -Wshadow -Wundef -Wfloat-equal \ -Wnon-virtual-dtor -Wpointer-arith -Wformat-security \ -Wno-long-long -Wno-variadic-macros -pedantic-errors diff --git a/mkspecs/features/uikit/bitcode.prf b/mkspecs/features/uikit/bitcode.prf index a1dff19eb33..df298171c0e 100644 --- a/mkspecs/features/uikit/bitcode.prf +++ b/mkspecs/features/uikit/bitcode.prf @@ -1,7 +1,13 @@ lessThan(QMAKE_XCODE_VERSION, "7.0") { warning("You need to update Xcode to version 7 or newer to support bitcode") -} else { - release:device { +} else: !macx-xcode { + # Simulator builds and all debug builds SHOULD use -fembed-bitcode-marker, + # but unfortunately the -fembed-bitcode and -fembed-bitcode-marker driver + # flags do not work in conjunction with -Xarch, so we'll have to let it use + # the "wrong" flags for now (note that this issue affects only the Makefile + # generator). We also don't want the flags to be passed in Xcode builds, as + # the Xcode ENABLE_BITCODE setting will take care of that for us. + release { QMAKE_CFLAGS += -fembed-bitcode QMAKE_CXXFLAGS += -fembed-bitcode QMAKE_OBJECTIVE_CFLAGS += -fembed-bitcode diff --git a/qmake/library/qmakebuiltins.cpp b/qmake/library/qmakebuiltins.cpp index 808bf53da45..461f46e705e 100644 --- a/qmake/library/qmakebuiltins.cpp +++ b/qmake/library/qmakebuiltins.cpp @@ -470,7 +470,7 @@ QMakeEvaluator::writeFile(const QString &ctx, const QString &fn, QIODevice::Open return ReturnTrue; } -#ifndef QT_BOOTSTRAPPED +#if QT_CONFIG(process) void QMakeEvaluator::runProcess(QProcess *proc, const QString &command) const { proc->setWorkingDirectory(currentDirectory()); @@ -491,7 +491,7 @@ void QMakeEvaluator::runProcess(QProcess *proc, const QString &command) const QByteArray QMakeEvaluator::getCommandOutput(const QString &args, int *exitCode) const { QByteArray out; -#ifndef QT_BOOTSTRAPPED +#if QT_CONFIG(process) QProcess proc; runProcess(&proc, args); *exitCode = (proc.exitStatus() == QProcess::NormalExit) ? proc.exitCode() : -1; @@ -1712,7 +1712,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional( #ifdef PROEVALUATOR_FULL if (m_cumulative) // Anything else would be insanity return ReturnFalse; -#ifndef QT_BOOTSTRAPPED +#if QT_CONFIG(process) QProcess proc; proc.setProcessChannelMode(QProcess::ForwardedChannels); runProcess(&proc, args.at(0).toQString(m_tmp2)); diff --git a/qmake/library/qmakeevaluator.h b/qmake/library/qmakeevaluator.h index 544c257f074..5948bd7d149 100644 --- a/qmake/library/qmakeevaluator.h +++ b/qmake/library/qmakeevaluator.h @@ -44,7 +44,7 @@ #include #include #include -#ifndef QT_BOOTSTRAPPED +#if QT_CONFIG(process) # include #else # include @@ -237,7 +237,7 @@ public: VisitReturn writeFile(const QString &ctx, const QString &fn, QIODevice::OpenMode mode, bool exe, const QString &contents); -#ifndef QT_BOOTSTRAPPED +#if QT_CONFIG(process) void runProcess(QProcess *proc, const QString &command) const; #endif QByteArray getCommandOutput(const QString &args, int *exitCode) const; diff --git a/src/3rdparty/forkfd/forkfd.c b/src/3rdparty/forkfd/forkfd.c index e57d9aa1e0a..8113fdb9e7c 100644 --- a/src/3rdparty/forkfd/forkfd.c +++ b/src/3rdparty/forkfd/forkfd.c @@ -281,7 +281,7 @@ static void notifyAndFreeInfo(Header *header, ProcessInfo *entry, freeInfo(header, entry); } -static void sigchld_handler(int signum) +static void sigchld_handler(int signum, siginfo_t *handler_info, void *handler_context) { /* * This is a signal handler, so we need to be careful about which functions @@ -289,7 +289,20 @@ static void sigchld_handler(int signum) * specification at: * http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04_03 * + * The handler_info and handler_context parameters may not be valid, if + * we're a chained handler from another handler that did not use + * SA_SIGINFO. Therefore, we must obtain the siginfo ourselves directly by + * calling waitid. + * + * But we pass them anyway. Let's call the chained handler first, while + * those two arguments have a chance of being correct. */ + if (old_sigaction.sa_handler != SIG_IGN && old_sigaction.sa_handler != SIG_DFL) { + if (old_sigaction.sa_flags & SA_SIGINFO) + old_sigaction.sa_sigaction(signum, handler_info, handler_context); + else + old_sigaction.sa_handler(signum); + } if (ffd_atomic_load(&forkfd_status, FFD_ATOMIC_RELAXED) == 1) { /* is this one of our children? */ @@ -317,9 +330,8 @@ search_next_child: waitid(P_ALL, 0, &info, WNOHANG | WNOWAIT | WEXITED); if (info.si_pid == 0) { /* there are no further un-waited-for children, so we can just exit. - * But before, transfer control to the chained SIGCHLD handler. */ - goto chain_handler; + return; } for (i = 0; i < (int)sizeofarray(children.entries); ++i) { @@ -407,12 +419,6 @@ search_arrays: array = ffd_atomic_load(&array->header.nextArray, FFD_ATOMIC_ACQUIRE); } } - -#ifdef HAVE_WAITID -chain_handler: -#endif - if (old_sigaction.sa_handler != SIG_IGN && old_sigaction.sa_handler != SIG_DFL) - old_sigaction.sa_handler(signum); } static void ignore_sigpipe() @@ -457,8 +463,8 @@ static void forkfd_initialize() struct sigaction action; memset(&action, 0, sizeof action); sigemptyset(&action.sa_mask); - action.sa_flags = SA_NOCLDSTOP; - action.sa_handler = sigchld_handler; + action.sa_flags = SA_NOCLDSTOP | SA_SIGINFO; + action.sa_sigaction = sigchld_handler; /* ### RACE CONDITION * The sigaction function does a memcpy from an internal buffer diff --git a/src/corelib/codecs/qiconvcodec.cpp b/src/corelib/codecs/qiconvcodec.cpp index e4fb359f2c8..d6362b6fbc3 100644 --- a/src/corelib/codecs/qiconvcodec.cpp +++ b/src/corelib/codecs/qiconvcodec.cpp @@ -43,7 +43,6 @@ QT_REQUIRE_CONFIG(iconv); #include "qiconvcodec_p.h" #include "qtextcodec_p.h" -#include #include #include diff --git a/src/corelib/configure.json b/src/corelib/configure.json index 4fbc51a09ca..c6c5c93ddbe 100644 --- a/src/corelib/configure.json +++ b/src/corelib/configure.json @@ -56,6 +56,9 @@ }, { "libs": "-licuin -licuuc -licudt", "condition": "config.win32 && features.shared" }, { "libs": "-licui18n -licuuc -licudata", "condition": "!config.win32" } + ], + "use": [ + { "lib": "libdl", "condition": "features.dlopen" } ] }, "journald": { @@ -74,10 +77,10 @@ ] }, "libdl": { - "label": "dlopen() in libdl", - "export": "", + "label": "dlopen()", "test": "unix/dlopen", "sources": [ + "", "-ldl" ] }, @@ -131,11 +134,6 @@ "type": "compile", "test": "unix/cloexec" }, - "dlopen": { - "label": "dlopen() in libc", - "type": "compile", - "test": "unix/dlopen" - }, "eventfd": { "label": "eventfd", "type": "compile", @@ -211,12 +209,8 @@ }, "dlopen": { "label": "dlopen()", - "condition": "tests.dlopen || libs.libdl" - }, - "libdl": { - "label": "dlopen() in libdl", - "condition": "!tests.dlopen && libs.libdl", - "output": [ { "type": "privateConfig", "negative": true } ] + "condition": "config.unix && libs.libdl", + "output": [ "privateFeature" ] }, "doubleconversion": { "label": "DoubleConversion", diff --git a/src/corelib/global/qconfig-bootstrapped.h b/src/corelib/global/qconfig-bootstrapped.h index 1c806e07742..bda8ad79168 100644 --- a/src/corelib/global/qconfig-bootstrapped.h +++ b/src/corelib/global/qconfig-bootstrapped.h @@ -71,9 +71,9 @@ #define QT_FEATURE_iconv -1 #define QT_FEATURE_icu -1 #define QT_FEATURE_journald -1 -#define QT_NO_LIBRARY #define QT_FEATURE_library -1 #define QT_NO_QOBJECT +#define QT_FEATURE_process -1 #define QT_NO_SYSTEMLOCALE #define QT_FEATURE_slog2 -1 #define QT_FEATURE_syslog -1 diff --git a/src/corelib/io/forkfd_qt.cpp b/src/corelib/io/forkfd_qt.cpp index 141efeb08c3..dce0ebb4da8 100644 --- a/src/corelib/io/forkfd_qt.cpp +++ b/src/corelib/io/forkfd_qt.cpp @@ -39,7 +39,6 @@ // these might be defined via precompiled headers #include -#include "qprocess_p.h" #define FORKFD_NO_SPAWNFD diff --git a/src/corelib/io/io.pri b/src/corelib/io/io.pri index 78416cdf5ef..b0cac59f42b 100644 --- a/src/corelib/io/io.pri +++ b/src/corelib/io/io.pri @@ -22,8 +22,6 @@ HEADERS += \ io/qlockfile.h \ io/qlockfile_p.h \ io/qnoncontiguousbytedevice_p.h \ - io/qprocess.h \ - io/qprocess_p.h \ io/qtextstream.h \ io/qtextstream_p.h \ io/qtemporarydir.h \ @@ -72,7 +70,6 @@ SOURCES += \ io/qiodevice.cpp \ io/qlockfile.cpp \ io/qnoncontiguousbytedevice.cpp \ - io/qprocess.cpp \ io/qstorageinfo.cpp \ io/qtextstream.cpp \ io/qtemporarydir.cpp \ @@ -96,6 +93,19 @@ SOURCES += \ io/qloggingcategory.cpp \ io/qloggingregistry.cpp +qtConfig(processenvironment) { + SOURCES += \ + io/qprocess.cpp + HEADERS += \ + io/qprocess.h \ + io/qprocess_p.h + + win32:!winrt: \ + SOURCES += io/qprocess_win.cpp + else: unix: \ + SOURCES += io/qprocess_unix.cpp +} + win32 { SOURCES += io/qfsfileengine_win.cpp SOURCES += io/qlockfile_win.cpp @@ -112,7 +122,6 @@ win32 { io/qwinoverlappedionotifier_p.h SOURCES += \ - io/qprocess_win.cpp \ io/qsettings_win.cpp \ io/qstandardpaths_win.cpp \ io/qstorageinfo_win.cpp \ @@ -132,7 +141,6 @@ win32 { io/qfsfileengine_unix.cpp \ io/qfilesystemengine_unix.cpp \ io/qlockfile_unix.cpp \ - io/qprocess_unix.cpp \ io/qfilesystemiterator_unix.cpp !integrity:!uikit { diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp index 90708b0473b..b1e218de9cd 100644 --- a/src/corelib/io/qfilesystemengine_win.cpp +++ b/src/corelib/io/qfilesystemengine_win.cpp @@ -152,14 +152,15 @@ QT_BEGIN_NAMESPACE Q_CORE_EXPORT int qt_ntfs_permission_lookup = 0; #if defined(Q_OS_WINRT) -// As none of the functions we try to resolve do exist on WinRT -// we use QT_NO_LIBRARY to shorten everything up a little bit. -# ifndef QT_NO_LIBRARY -# define QT_NO_LIBRARY 1 -# endif +// As none of the functions we try to resolve do exist on WinRT we +// avoid library loading on WinRT in general to shorten everything +// up a little bit. +# define QT_FEATURE_fslibs -1 +#else +# define QT_FEATURE_fslibs QT_FEATURE_library #endif // Q_OS_WINRT -#if !defined(QT_NO_LIBRARY) +#if QT_CONFIG(fslibs) QT_BEGIN_INCLUDE_NAMESPACE typedef DWORD (WINAPI *PtrGetNamedSecurityInfoW)(LPWSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*); static PtrGetNamedSecurityInfoW ptrGetNamedSecurityInfoW = 0; @@ -267,7 +268,7 @@ static void resolveLibs() ptrGetUserProfileDirectoryW = (PtrGetUserProfileDirectoryW)GetProcAddress(userenvHnd, "GetUserProfileDirectoryW"); } } -#endif // QT_NO_LIBRARY +#endif // QT_CONFIG(fslibs) typedef DWORD (WINAPI *PtrNetShareEnum)(LPWSTR, DWORD, LPBYTE*, DWORD, LPDWORD, LPDWORD, LPDWORD); static PtrNetShareEnum ptrNetShareEnum = 0; @@ -337,7 +338,7 @@ static QString readSymLink(const QFileSystemEntry &link) free(rdb); CloseHandle(handle); -#if !defined(QT_NO_LIBRARY) +#if QT_CONFIG(fslibs) resolveLibs(); QRegExp matchVolName(QLatin1String("^Volume\\{([a-z]|[0-9]|-)+\\}\\\\"), Qt::CaseInsensitive); if (matchVolName.indexIn(result) == 0) { @@ -347,7 +348,7 @@ static QString readSymLink(const QFileSystemEntry &link) if (GetVolumePathNamesForVolumeName(reinterpret_cast(volumeName.utf16()), buffer, MAX_PATH, &len) != 0) result.replace(0,matchVolName.matchedLength(), QString::fromWCharArray(buffer)); } -#endif // !Q_OS_WINRT +#endif // QT_CONFIG(fslibs) } #else Q_UNUSED(link); @@ -357,7 +358,7 @@ static QString readSymLink(const QFileSystemEntry &link) static QString readLink(const QFileSystemEntry &link) { -#if !defined(QT_NO_LIBRARY) +#if QT_CONFIG(fslibs) QString ret; bool neededCoInit = false; @@ -396,7 +397,7 @@ static QString readLink(const QFileSystemEntry &link) #else Q_UNUSED(link); return QString(); -#endif // QT_NO_LIBRARY +#endif // QT_CONFIG(fslibs) } static bool uncShareExists(const QString &server) @@ -629,7 +630,7 @@ QByteArray QFileSystemEngine::id(const QFileSystemEntry &entry) QString QFileSystemEngine::owner(const QFileSystemEntry &entry, QAbstractFileEngine::FileOwner own) { QString name; -#if !defined(QT_NO_LIBRARY) +#if QT_CONFIG(fslibs) extern int qt_ntfs_permission_lookup; if((qt_ntfs_permission_lookup > 0) && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based)) { resolveLibs(); @@ -679,7 +680,7 @@ QString QFileSystemEngine::owner(const QFileSystemEntry &entry, QAbstractFileEng bool QFileSystemEngine::fillPermissions(const QFileSystemEntry &entry, QFileSystemMetaData &data, QFileSystemMetaData::MetaDataFlags what) { -#if !defined(QT_NO_LIBRARY) +#if QT_CONFIG(fslibs) if((qt_ntfs_permission_lookup > 0) && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based)) { resolveLibs(); if(ptrGetNamedSecurityInfoW && ptrBuildTrusteeWithSidW && ptrGetEffectiveRightsFromAclW) { @@ -1143,7 +1144,7 @@ QString QFileSystemEngine::rootPath() QString QFileSystemEngine::homePath() { QString ret; -#if !defined(QT_NO_LIBRARY) +#if QT_CONFIG(fslibs) resolveLibs(); if (ptrGetUserProfileDirectoryW) { HANDLE hnd = ::GetCurrentProcess(); diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp index a7fd50df83a..ab651ead796 100644 --- a/src/corelib/io/qfsfileengine_win.cpp +++ b/src/corelib/io/qfsfileengine_win.cpp @@ -589,7 +589,7 @@ bool QFSFileEnginePrivate::doStat(QFileSystemMetaData::MetaDataFlags flags) cons bool QFSFileEngine::link(const QString &newName) { #if !defined(Q_OS_WINRT) -# if !defined(QT_NO_LIBRARY) +# if QT_CONFIG(library) bool ret = false; QString linkName = newName; @@ -630,10 +630,10 @@ bool QFSFileEngine::link(const QString &newName) CoUninitialize(); return ret; -# else // QT_NO_LIBRARY +# else // QT_CONFIG(library) Q_UNUSED(newName); return false; -# endif // QT_NO_LIBRARY +# endif // QT_CONFIG(library) #else // !Q_OS_WINRT Q_UNUSED(newName); Q_UNIMPLEMENTED(); diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp index c27484acbe2..c0ec35ff325 100644 --- a/src/corelib/io/qprocess.cpp +++ b/src/corelib/io/qprocess.cpp @@ -99,8 +99,6 @@ QT_END_NAMESPACE #include #endif -#if QT_CONFIG(processenvironment) - QT_BEGIN_NAMESPACE /*! @@ -430,8 +428,6 @@ void QProcessEnvironment::insert(const QProcessEnvironment &e) d->insert(*e.d); } -#endif // QT_CONFIG(processenvironment) - #if QT_CONFIG(process) void QProcessPrivate::Channel::clear() @@ -2605,9 +2601,8 @@ QString QProcess::nullDevice() \sa QProcess::pid() */ +#endif // QT_CONFIG(process) + QT_END_NAMESPACE #include "moc_qprocess.cpp" - -#endif // QT_NO_PROCESS - diff --git a/src/corelib/io/qprocess.h b/src/corelib/io/qprocess.h index 37e71aef5d0..19157bdd02e 100644 --- a/src/corelib/io/qprocess.h +++ b/src/corelib/io/qprocess.h @@ -46,12 +46,12 @@ #include +QT_REQUIRE_CONFIG(processenvironment); + QT_BEGIN_NAMESPACE class QProcessPrivate; -#if QT_CONFIG(processenvironment) - #if !defined(Q_OS_WIN) || defined(Q_CLANG_QDOC) typedef qint64 Q_PID; #else @@ -105,8 +105,6 @@ private: Q_DECLARE_SHARED(QProcessEnvironment) -#endif // QT_CONFIG(processenvironment) - #if QT_CONFIG(process) class Q_CORE_EXPORT QProcess : public QIODevice @@ -302,7 +300,7 @@ private: friend class QProcessManager; }; -#endif // QT_NO_PROCESS +#endif // QT_CONFIG(process) QT_END_NAMESPACE diff --git a/src/corelib/io/qprocess_p.h b/src/corelib/io/qprocess_p.h index 92b747f6baa..6e0630eb66b 100644 --- a/src/corelib/io/qprocess_p.h +++ b/src/corelib/io/qprocess_p.h @@ -57,6 +57,9 @@ #include "QtCore/qhash.h" #include "QtCore/qshareddata.h" #include "private/qiodevice_p.h" + +QT_REQUIRE_CONFIG(processenvironment); + #ifdef Q_OS_UNIX #include #endif @@ -78,8 +81,6 @@ class QWindowsPipeWriter; class QWinEventNotifier; class QTimer; -#if QT_CONFIG(processenvironment) - #ifdef Q_OS_WIN class QProcEnvKey : public QString { @@ -233,8 +234,6 @@ template<> Q_INLINE_TEMPLATE void QSharedDataPointer d = x; } -#endif // QT_CONFIG(processenvironment) - #if QT_CONFIG(process) class QProcessPrivate : public QIODevicePrivate @@ -390,7 +389,7 @@ public: void setErrorAndEmit(QProcess::ProcessError error, const QString &description = QString()); }; -#endif // QT_NO_PROCESS +#endif // QT_CONFIG(process) QT_END_NAMESPACE diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp index deca5c50ffd..795229419ca 100644 --- a/src/corelib/io/qprocess_unix.cpp +++ b/src/corelib/io/qprocess_unix.cpp @@ -119,7 +119,7 @@ QT_END_NAMESPACE QT_BEGIN_NAMESPACE -#if QT_CONFIG(processenvironment) && !defined(Q_OS_DARWIN) +#if !defined(Q_OS_DARWIN) QProcessEnvironment QProcessEnvironment::systemEnvironment() { @@ -138,7 +138,7 @@ QProcessEnvironment QProcessEnvironment::systemEnvironment() return env; } -#endif // QT_CONFIG(processenvironment) && !defined(Q_OS_DARWIN) +#endif // !defined(Q_OS_DARWIN) #if QT_CONFIG(process) @@ -1040,6 +1040,6 @@ bool QProcessPrivate::startDetached(const QString &program, const QStringList &a return success; } -#endif // QT_NO_PROCESS +#endif // QT_CONFIG(process) QT_END_NAMESPACE diff --git a/src/corelib/io/qprocess_win.cpp b/src/corelib/io/qprocess_win.cpp index aa69e9e1db1..329d1842f0e 100644 --- a/src/corelib/io/qprocess_win.cpp +++ b/src/corelib/io/qprocess_win.cpp @@ -62,8 +62,6 @@ QT_BEGIN_NAMESPACE -#if QT_CONFIG(processenvironment) - QProcessEnvironment QProcessEnvironment::systemEnvironment() { QProcessEnvironment env; @@ -86,8 +84,6 @@ QProcessEnvironment QProcessEnvironment::systemEnvironment() return env; } -#endif // QT_CONFIG(processenvironment) - #if QT_CONFIG(process) static void qt_create_pipe(Q_PIPE *pipe, bool isInputPipe) @@ -895,6 +891,6 @@ bool QProcessPrivate::startDetached(const QString &program, const QStringList &a return success; } -#endif // QT_NO_PROCESS +#endif // QT_CONFIG(process) QT_END_NAMESPACE diff --git a/src/corelib/io/qwindowspipewriter_p.h b/src/corelib/io/qwindowspipewriter_p.h index 5a0d04855fa..c43e986f344 100644 --- a/src/corelib/io/qwindowspipewriter_p.h +++ b/src/corelib/io/qwindowspipewriter_p.h @@ -156,4 +156,4 @@ private: QT_END_NAMESPACE -#endif // QT_NO_PROCESS +#endif // QWINDOWSPIPEWRITER_P_H diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp index 3faa8e14410..0c87dd56594 100644 --- a/src/corelib/itemmodels/qabstractitemmodel.cpp +++ b/src/corelib/itemmodels/qabstractitemmodel.cpp @@ -3071,7 +3071,7 @@ void QAbstractItemModel::endRemoveColumns() When reimplementing a subclass, this method simplifies moving entities in your model. This method is responsible for moving persistent indexes in the model, which you would otherwise be - required to do yourself. Using beginMoveRows and endMoveRows + required to do yourself. Using beginMoveColumns and endMoveColumns is an alternative to emitting layoutAboutToBeChanged and layoutChanged directly along with changePersistentIndex. diff --git a/src/corelib/kernel/qcore_unix_p.h b/src/corelib/kernel/qcore_unix_p.h index 80058d91155..8f37aec6e2c 100644 --- a/src/corelib/kernel/qcore_unix_p.h +++ b/src/corelib/kernel/qcore_unix_p.h @@ -300,7 +300,7 @@ static inline int qt_safe_close(int fd) #define QT_CLOSE qt_safe_close // - VxWorks & iOS/tvOS/watchOS don't have processes -#if !defined(Q_OS_VXWORKS) && !defined(QT_NO_PROCESS) +#if QT_CONFIG(process) static inline int qt_safe_execve(const char *filename, char *const argv[], char *const envp[]) { @@ -329,7 +329,7 @@ static inline pid_t qt_safe_waitpid(pid_t pid, int *status, int options) EINTR_LOOP(ret, ::waitpid(pid, status, options)); return ret; } -#endif // Q_OS_VXWORKS +#endif // QT_CONFIG(process) #if !defined(_POSIX_MONOTONIC_CLOCK) # define _POSIX_MONOTONIC_CLOCK -1 diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index 0ac49c5019d..e4b1562b8bf 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -376,7 +376,7 @@ struct QCoreApplicationData { bool applicationNameSet; // true if setApplicationName was called bool applicationVersionSet; // true if setApplicationVersion was called -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) QScopedPointer app_libpaths; QScopedPointer manual_libpaths; #endif @@ -569,7 +569,7 @@ void QCoreApplicationPrivate::checkReceiverThread(QObject *receiver) void QCoreApplicationPrivate::appendApplicationPathToLibraryPaths() { -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) QStringList *app_libpaths = coreappdata()->app_libpaths.data(); if (!app_libpaths) coreappdata()->app_libpaths.reset(app_libpaths = new QStringList); @@ -773,7 +773,7 @@ void QCoreApplicationPrivate::init() QLoggingRegistry::instance()->init(); -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) // Reset the lib paths, so that they will be recomputed, taking the availability of argv[0] // into account. If necessary, recompute right away and replay the manual changes on top of the // new lib paths. @@ -872,7 +872,7 @@ QCoreApplication::~QCoreApplication() QCoreApplicationPrivate::eventDispatcher = 0; #endif -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) coreappdata()->app_libpaths.reset(); coreappdata()->manual_libpaths.reset(); #endif @@ -2479,7 +2479,7 @@ QString QCoreApplication::applicationVersion() return coreappdata() ? coreappdata()->applicationVersion : QString(); } -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) Q_GLOBAL_STATIC_WITH_ARGS(QMutex, libraryPathMutex, (QMutex::Recursive)) @@ -2691,7 +2691,7 @@ void QCoreApplication::removeLibraryPath(const QString &path) QFactoryLoader::refreshAll(); } -#endif //QT_NO_LIBRARY +#endif // QT_CONFIG(library) #ifndef QT_NO_QOBJECT diff --git a/src/corelib/kernel/qcoreapplication.h b/src/corelib/kernel/qcoreapplication.h index a22e1c4f9e6..5e10136dc5b 100644 --- a/src/corelib/kernel/qcoreapplication.h +++ b/src/corelib/kernel/qcoreapplication.h @@ -141,12 +141,12 @@ public: static QString applicationFilePath(); static qint64 applicationPid(); -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) static void setLibraryPaths(const QStringList &); static QStringList libraryPaths(); static void addLibraryPath(const QString &); static void removeLibraryPath(const QString &); -#endif // QT_NO_LIBRARY +#endif // QT_CONFIG(library) #ifndef QT_NO_TRANSLATION static bool installTranslator(QTranslator * messageFile); diff --git a/src/corelib/kernel/qtimer.h b/src/corelib/kernel/qtimer.h index d3b1fd6a187..6e61ca10cb4 100644 --- a/src/corelib/kernel/qtimer.h +++ b/src/corelib/kernel/qtimer.h @@ -168,7 +168,7 @@ public: Q_ALWAYS_INLINE void setInterval(std::chrono::milliseconds value) { - setInterval(value.count()); + setInterval(int(value.count())); } Q_ALWAYS_INLINE diff --git a/src/corelib/plugin/plugin.pri b/src/corelib/plugin/plugin.pri index 473480eb559..a0e0d76044c 100644 --- a/src/corelib/plugin/plugin.pri +++ b/src/corelib/plugin/plugin.pri @@ -1,38 +1,37 @@ # Qt core library plugin module HEADERS += \ - plugin/qfactoryinterface.h \ - plugin/qpluginloader.h \ - plugin/qlibrary.h \ - plugin/qlibrary_p.h \ - plugin/qplugin.h \ - plugin/quuid.h \ - plugin/qfactoryloader_p.h \ - plugin/qsystemlibrary_p.h \ + plugin/qfactoryinterface.h \ + plugin/qpluginloader.h \ + plugin/qplugin.h \ + plugin/quuid.h \ + plugin/qfactoryloader_p.h + +SOURCES += \ + plugin/qfactoryinterface.cpp \ + plugin/qpluginloader.cpp \ + plugin/qfactoryloader.cpp \ + plugin/quuid.cpp + +win32 { + HEADERS += plugin/qsystemlibrary_p.h + SOURCES += plugin/qsystemlibrary.cpp +} + +qtConfig(library) { + HEADERS += \ + plugin/qlibrary.h \ + plugin/qlibrary_p.h \ plugin/qelfparser_p.h \ plugin/qmachparser_p.h -SOURCES += \ - plugin/qfactoryinterface.cpp \ - plugin/qpluginloader.cpp \ - plugin/qfactoryloader.cpp \ - plugin/quuid.cpp \ - plugin/qlibrary.cpp \ + SOURCES += \ + plugin/qlibrary.cpp \ plugin/qelfparser_p.cpp \ plugin/qmachparser.cpp -win32 { - SOURCES += \ - plugin/qlibrary_win.cpp \ - plugin/qsystemlibrary.cpp -} + unix: SOURCES += plugin/qlibrary_unix.cpp + else: SOURCES += plugin/qlibrary_win.cpp -unix { - SOURCES += plugin/qlibrary_unix.cpp + qtConfig(dlopen): QMAKE_USE_PRIVATE += libdl } - -integrity { - SOURCES += plugin/qlibrary_unix.cpp -} - -!no-libdl: LIBS_PRIVATE += $$QMAKE_LIBS_DYNLOAD diff --git a/src/corelib/plugin/qelfparser_p.cpp b/src/corelib/plugin/qelfparser_p.cpp index 0a219d1251a..7a42b0d0231 100644 --- a/src/corelib/plugin/qelfparser_p.cpp +++ b/src/corelib/plugin/qelfparser_p.cpp @@ -39,7 +39,6 @@ #include "qelfparser_p.h" -#ifndef QT_NO_LIBRARY #if defined (Q_OF_ELF) && defined(Q_CC_GNU) #include "qlibrary_p.h" @@ -237,4 +236,3 @@ int QElfParser::parse(const char *dataStart, ulong fdlen, const QString &library QT_END_NAMESPACE #endif // defined(Q_OF_ELF) && defined(Q_CC_GNU) -#endif // QT_NO_LIBRARY diff --git a/src/corelib/plugin/qelfparser_p.h b/src/corelib/plugin/qelfparser_p.h index bcda19e8b5b..3e73c5d1490 100644 --- a/src/corelib/plugin/qelfparser_p.h +++ b/src/corelib/plugin/qelfparser_p.h @@ -54,7 +54,8 @@ #include #include -#ifndef QT_NO_LIBRARY +QT_REQUIRE_CONFIG(library); + #if defined (Q_OF_ELF) && defined(Q_CC_GNU) QT_BEGIN_NAMESPACE @@ -101,6 +102,5 @@ public: QT_END_NAMESPACE #endif // defined(Q_OF_ELF) && defined(Q_CC_GNU) -#endif // QT_NO_LIBRARY #endif // QELFPARSER_P_H diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp index b8e18cc9a82..21f1007d5b0 100644 --- a/src/corelib/plugin/qfactoryloader.cpp +++ b/src/corelib/plugin/qfactoryloader.cpp @@ -62,7 +62,7 @@ class QFactoryLoaderPrivate : public QObjectPrivate public: QFactoryLoaderPrivate(){} QByteArray iid; -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) ~QFactoryLoaderPrivate(); mutable QMutex mutex; QList libraryList; @@ -73,7 +73,7 @@ public: #endif }; -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) Q_GLOBAL_STATIC(QList, qt_factory_loaders) @@ -232,7 +232,7 @@ void QFactoryLoader::refreshAll() } } -#endif // QT_NO_LIBRARY +#endif // QT_CONFIG(library) QFactoryLoader::QFactoryLoader(const char *iid, const QString &suffix, @@ -242,7 +242,7 @@ QFactoryLoader::QFactoryLoader(const char *iid, moveToThread(QCoreApplicationPrivate::mainThread()); Q_D(QFactoryLoader); d->iid = iid; -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) d->cs = cs; d->suffix = suffix; @@ -259,7 +259,7 @@ QList QFactoryLoader::metaData() const { Q_D(const QFactoryLoader); QList metaData; -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) QMutexLocker locker(&d->mutex); for (int i = 0; i < d->libraryList.size(); ++i) metaData.append(d->libraryList.at(i)->metaData); @@ -281,7 +281,7 @@ QObject *QFactoryLoader::instance(int index) const if (index < 0) return 0; -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) QMutexLocker lock(&d->mutex); if (index < d->libraryList.size()) { QLibraryPrivate *library = d->libraryList.at(index); diff --git a/src/corelib/plugin/qfactoryloader_p.h b/src/corelib/plugin/qfactoryloader_p.h index 70a934c9765..7be18942ae9 100644 --- a/src/corelib/plugin/qfactoryloader_p.h +++ b/src/corelib/plugin/qfactoryloader_p.h @@ -60,7 +60,9 @@ #include "QtCore/qjsondocument.h" #include "QtCore/qmap.h" #include "QtCore/qendian.h" +#if QT_CONFIG(library) #include "private/qlibrary_p.h" +#endif QT_BEGIN_NAMESPACE @@ -84,7 +86,7 @@ public: const QString &suffix = QString(), Qt::CaseSensitivity = Qt::CaseSensitive); -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) ~QFactoryLoader(); void update(); @@ -93,7 +95,7 @@ public: #if defined(Q_OS_UNIX) && !defined (Q_OS_MAC) QLibraryPrivate *library(const QString &key) const; #endif // Q_OS_UNIX && !Q_OS_MAC -#endif // !QT_NO_LIBRARY +#endif // QT_CONFIG(library) QMultiMap keyMap() const; int indexOf(const QString &needle) const; diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp index a4a654cd884..6421e7c5d8f 100644 --- a/src/corelib/plugin/qlibrary.cpp +++ b/src/corelib/plugin/qlibrary.cpp @@ -40,8 +40,6 @@ #include "qplatformdefs.h" #include "qlibrary.h" -#ifndef QT_NO_LIBRARY - #include "qfactoryloader_p.h" #include "qlibrary_p.h" #include @@ -1131,5 +1129,3 @@ bool qt_debug_component() } QT_END_NAMESPACE - -#endif // QT_NO_LIBRARY diff --git a/src/corelib/plugin/qlibrary.h b/src/corelib/plugin/qlibrary.h index 2b91fa40070..89be52aac35 100644 --- a/src/corelib/plugin/qlibrary.h +++ b/src/corelib/plugin/qlibrary.h @@ -42,9 +42,9 @@ #include -QT_BEGIN_NAMESPACE +QT_REQUIRE_CONFIG(library); -#ifndef QT_NO_LIBRARY +QT_BEGIN_NAMESPACE class QLibraryPrivate; @@ -99,8 +99,6 @@ private: Q_DECLARE_OPERATORS_FOR_FLAGS(QLibrary::LoadHints) -#endif //QT_NO_LIBRARY - QT_END_NAMESPACE #endif //QLIBRARY_H diff --git a/src/corelib/plugin/qlibrary_p.h b/src/corelib/plugin/qlibrary_p.h index 7147ff6ca26..3f650501c80 100644 --- a/src/corelib/plugin/qlibrary_p.h +++ b/src/corelib/plugin/qlibrary_p.h @@ -62,11 +62,10 @@ # include "QtCore/qt_windows.h" #endif +QT_REQUIRE_CONFIG(library); + QT_BEGIN_NAMESPACE -#ifndef QT_NO_LIBRARY - - bool qt_debug_component(); class QLibraryStore; @@ -130,8 +129,6 @@ private: friend class QLibraryStore; }; -#endif // QT_NO_LIBRARY - QT_END_NAMESPACE #endif // QLIBRARY_P_H diff --git a/src/corelib/plugin/qlibrary_unix.cpp b/src/corelib/plugin/qlibrary_unix.cpp index 3553763bcd8..3c4fbaf348e 100644 --- a/src/corelib/plugin/qlibrary_unix.cpp +++ b/src/corelib/plugin/qlibrary_unix.cpp @@ -44,8 +44,6 @@ #include #include -#ifndef QT_NO_LIBRARY - #ifdef Q_OS_MAC # include #endif @@ -308,5 +306,3 @@ QFunctionPointer QLibraryPrivate::resolve_sys(const char* symbol) } QT_END_NAMESPACE - -#endif // QT_NO_LIBRARY diff --git a/src/corelib/plugin/qlibrary_win.cpp b/src/corelib/plugin/qlibrary_win.cpp index 48aa0cdbb67..a4d3f67c27d 100644 --- a/src/corelib/plugin/qlibrary_win.cpp +++ b/src/corelib/plugin/qlibrary_win.cpp @@ -44,8 +44,6 @@ #include "qfileinfo.h" #include -#ifndef QT_NO_LIBRARY - #include QT_BEGIN_NAMESPACE @@ -174,5 +172,3 @@ QFunctionPointer QLibraryPrivate::resolve_sys(const char* symbol) return QFunctionPointer(address); } QT_END_NAMESPACE - -#endif // QT_NO_LIBRARY diff --git a/src/corelib/plugin/qmachparser.cpp b/src/corelib/plugin/qmachparser.cpp index a599fbcb230..f506a6a6b14 100644 --- a/src/corelib/plugin/qmachparser.cpp +++ b/src/corelib/plugin/qmachparser.cpp @@ -39,7 +39,7 @@ #include "qmachparser_p.h" -#if defined(Q_OF_MACH_O) && !defined(QT_NO_LIBRARY) +#if defined(Q_OF_MACH_O) #include #include "qlibrary_p.h" diff --git a/src/corelib/plugin/qmachparser_p.h b/src/corelib/plugin/qmachparser_p.h index ff7eaadb702..3884c927979 100644 --- a/src/corelib/plugin/qmachparser_p.h +++ b/src/corelib/plugin/qmachparser_p.h @@ -54,7 +54,8 @@ #include #include -#ifndef QT_NO_LIBRARY +QT_REQUIRE_CONFIG(library); + #if defined(Q_OF_MACH_O) QT_BEGIN_NAMESPACE @@ -72,6 +73,5 @@ public: QT_END_NAMESPACE #endif // defined(Q_OF_ELF) && defined(Q_CC_GNU) -#endif // QT_NO_LIBRARY #endif // QMACHPARSER_P_H diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp index 6723877ad51..dbd3bee556e 100644 --- a/src/corelib/plugin/qpluginloader.cpp +++ b/src/corelib/plugin/qpluginloader.cpp @@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) /*! \class QPluginLoader @@ -417,7 +417,7 @@ QLibrary::LoadHints QPluginLoader::loadHints() const return d ? d->loadHints() : QLibrary::LoadHints(); } -#endif // QT_NO_LIBRARY +#endif // QT_CONFIG(library) typedef QVector StaticPluginList; Q_GLOBAL_STATIC(StaticPluginList, staticPluginList) diff --git a/src/corelib/plugin/qpluginloader.h b/src/corelib/plugin/qpluginloader.h index 5dca59c2713..80b10f76bfd 100644 --- a/src/corelib/plugin/qpluginloader.h +++ b/src/corelib/plugin/qpluginloader.h @@ -40,12 +40,15 @@ #ifndef QPLUGINLOADER_H #define QPLUGINLOADER_H +#include +#if QT_CONFIG(library) #include +#endif #include QT_BEGIN_NAMESPACE -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) class QLibraryPrivate; class QJsonObject; @@ -93,7 +96,7 @@ public: static QVector staticPlugins(); }; -#endif // QT_NO_LIBRARY +#endif // QT_CONFIG(library) QT_END_NAMESPACE diff --git a/src/corelib/thread/qfutureinterface.h b/src/corelib/thread/qfutureinterface.h index 559d26e2314..7b12f51e3e0 100644 --- a/src/corelib/thread/qfutureinterface.h +++ b/src/corelib/thread/qfutureinterface.h @@ -159,7 +159,7 @@ public: ~QFutureInterface() { if (!derefT()) - resultStore().clear(); + resultStoreBase().template clear(); } static QFutureInterface canceledResult() @@ -169,7 +169,7 @@ public: { other.refT(); if (!derefT()) - resultStore().clear(); + resultStoreBase().template clear(); QFutureInterfaceBase::operator=(other); return *this; } @@ -184,11 +184,6 @@ public: inline const T &resultReference(int index) const; inline const T *resultPointer(int index) const; inline QList results(); -private: - QtPrivate::ResultStore &resultStore() - { return static_cast &>(resultStoreBase()); } - const QtPrivate::ResultStore &resultStore() const - { return static_cast &>(resultStoreBase()); } }; template @@ -199,15 +194,14 @@ inline void QFutureInterface::reportResult(const T *result, int index) return; } - QtPrivate::ResultStore &store = resultStore(); - + QtPrivate::ResultStoreBase &store = resultStoreBase(); if (store.filterMode()) { const int resultCountBefore = store.count(); - store.addResult(index, result); + store.addResult(index, result); this->reportResultsReady(resultCountBefore, resultCountBefore + store.count()); } else { - const int insertIndex = store.addResult(index, result); + const int insertIndex = store.addResult(index, result); this->reportResultsReady(insertIndex, insertIndex + 1); } } @@ -226,7 +220,7 @@ inline void QFutureInterface::reportResults(const QVector &_results, int b return; } - QtPrivate::ResultStore &store = resultStore(); + auto &store = resultStoreBase(); if (store.filterMode()) { const int resultCountBefore = store.count(); @@ -250,14 +244,14 @@ template inline const T &QFutureInterface::resultReference(int index) const { QMutexLocker lock(mutex()); - return resultStore().resultAt(index).value(); + return resultStoreBase().resultAt(index).template value(); } template inline const T *QFutureInterface::resultPointer(int index) const { QMutexLocker lock(mutex()); - return resultStore().resultAt(index).pointer(); + return resultStoreBase().resultAt(index).template pointer(); } template @@ -272,9 +266,9 @@ inline QList QFutureInterface::results() QList res; QMutexLocker lock(mutex()); - QtPrivate::ResultIterator it = resultStore().begin(); - while (it != resultStore().end()) { - res.append(it.value()); + QtPrivate::ResultIteratorBase it = resultStoreBase().begin(); + while (it != resultStoreBase().end()) { + res.append(it.value()); ++it; } diff --git a/src/corelib/thread/qresultstore.cpp b/src/corelib/thread/qresultstore.cpp index aa7ec02d6e4..9a6fcec6789 100644 --- a/src/corelib/thread/qresultstore.cpp +++ b/src/corelib/thread/qresultstore.cpp @@ -98,6 +98,12 @@ bool ResultIteratorBase::canIncrementVectorIndex() const ResultStoreBase::ResultStoreBase() : insertIndex(0), resultCount(0), m_filterMode(false), filteredResults(0) { } +ResultStoreBase::~ResultStoreBase() +{ + // QFutureInterface's dtor must delete the contents of m_results. + Q_ASSERT(m_results.isEmpty()); +} + void ResultStoreBase::setFilterMode(bool enable) { m_filterMode = enable; diff --git a/src/corelib/thread/qresultstore.h b/src/corelib/thread/qresultstore.h index 56cfcb6ed66..be9f632557d 100644 --- a/src/corelib/thread/qresultstore.h +++ b/src/corelib/thread/qresultstore.h @@ -93,20 +93,14 @@ public: protected: QMap::const_iterator mapIterator; int m_vectorIndex; -}; - -template -class ResultIterator : public ResultIteratorBase -{ public: - ResultIterator(const ResultIteratorBase &base) - : ResultIteratorBase(base) { } - + template const T &value() const { - return *pointer(); + return *pointer(); } + template const T *pointer() const { if (mapIterator.value().isVector()) @@ -130,7 +124,7 @@ public: ResultIteratorBase resultAt(int index) const; bool contains(int index) const; int count() const; - virtual ~ResultStoreBase() { } + virtual ~ResultStoreBase(); protected: int insertResultItem(int index, ResultItem &resultItem); @@ -147,64 +141,44 @@ protected: QMap pendingResults; int filteredResults; -}; - -template -class ResultStore : public ResultStoreBase -{ public: - ResultStore() { } - - ResultStore(const ResultStoreBase &base) - : ResultStoreBase(base) { } - - int addResult(int index, const T *result) + template + int addResult(int index, const T *result) { if (result == 0) - return ResultStoreBase::addResult(index, result); + return addResult(index, static_cast(nullptr)); else - return ResultStoreBase::addResult(index, new T(*result)); + return addResult(index, static_cast(new T(*result))); } + template int addResults(int index, const QVector *results) { - return ResultStoreBase::addResults(index, new QVector(*results), results->count(), results->count()); + return addResults(index, new QVector(*results), results->count(), results->count()); } + template int addResults(int index, const QVector *results, int totalCount) { if (m_filterMode == true && results->count() != totalCount && 0 == results->count()) - return ResultStoreBase::addResults(index, 0, 0, totalCount); + return addResults(index, 0, 0, totalCount); else - return ResultStoreBase::addResults(index, new QVector(*results), results->count(), totalCount); + return addResults(index, new QVector(*results), results->count(), totalCount); } int addCanceledResult(int index) { - return addResult(index, 0); + return addResult(index, static_cast(nullptr)); } + template int addCanceledResults(int index, int _count) { QVector empty; return addResults(index, &empty, _count); } - ResultIterator begin() const - { - return static_cast >(ResultStoreBase::begin()); - } - - ResultIterator end() const - { - return static_cast >(ResultStoreBase::end()); - } - - ResultIterator resultAt(int index) const - { - return static_cast >(ResultStoreBase::resultAt(index)); - } - + template void clear() { QMap::const_iterator mapIterator = m_results.constBegin(); @@ -218,12 +192,6 @@ public: resultCount = 0; m_results.clear(); } - - ~ResultStore() - { - clear(); - } - }; } // namespace QtPrivate diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp index 01ed3cea5bc..e9f740b7c5b 100644 --- a/src/corelib/tools/qdatetime.cpp +++ b/src/corelib/tools/qdatetime.cpp @@ -2853,6 +2853,9 @@ inline bool QDateTime::Data::isShort() const { bool b = quintptr(d) & QDateTimePrivate::ShortData; + // sanity check: + Q_ASSERT(b || (d->m_status & QDateTimePrivate::ShortData) == 0); + // even if CanBeSmall = false, we have short data for a default-constructed // QDateTime object. But it's unlikely. if (CanBeSmall) @@ -3678,7 +3681,7 @@ void QDateTime::setMSecsSinceEpoch(qint64 msecs) d.data.status = status; } else { d.detach(); - d->m_status = status; + d->m_status = status & ~QDateTimePrivate::ShortData; d->m_msecs = msecs; } diff --git a/src/corelib/tools/qdatetimeparser.cpp b/src/corelib/tools/qdatetimeparser.cpp index d66416207bc..c8aa4fbc898 100644 --- a/src/corelib/tools/qdatetimeparser.cpp +++ b/src/corelib/tools/qdatetimeparser.cpp @@ -49,7 +49,7 @@ //#define QDATETIMEPARSER_DEBUG #if defined (QDATETIMEPARSER_DEBUG) && !defined(QT_NO_DEBUG_STREAM) -# define QDTPDEBUG qDebug() << QString("%1:%2").arg(__FILE__).arg(__LINE__) +# define QDTPDEBUG qDebug() # define QDTPDEBUGN qDebug #else # define QDTPDEBUG if (false) qDebug() @@ -1325,39 +1325,16 @@ int QDateTimeParser::findDay(const QString &str1, int startDay, int sectionIndex } const QLocale l = locale(); for (int day=startDay; day<=7; ++day) { - const QString str2 = l.dayName(day, sn.count == 4 ? QLocale::LongFormat : QLocale::ShortFormat); - - if (str1.startsWith(str2.toLower())) { - if (used) - *used = str2.size(); - if (usedDay) { - *usedDay = str2; - } - return day; - } - if (context == FromString) - continue; + const QString dayName = l.dayName(day, sn.count == 4 ? QLocale::LongFormat : QLocale::ShortFormat); + const QString str2 = dayName.toLower(); const int limit = qMin(str1.size(), str2.size()); - bool found = true; - for (int i=0; i bestCount) { - bestCount = i; - bestMatch = day; - } - found = false; - break; - } - - } - if (found) { - if (used) - *used = limit; - if (usedDay) - *usedDay = str2; - - return day; + int i = 0; + while (i < limit && str1.at(i) == str2.at(i)) + ++i; + if (i > bestCount) { + bestCount = i; + bestMatch = day; } } if (usedDay && bestMatch != -1) { diff --git a/src/corelib/tools/qharfbuzz.cpp b/src/corelib/tools/qharfbuzz.cpp index fdd861690d6..a3e266ccd27 100644 --- a/src/corelib/tools/qharfbuzz.cpp +++ b/src/corelib/tools/qharfbuzz.cpp @@ -40,7 +40,9 @@ #include "qharfbuzz_p.h" #include "qunicodetables_p.h" +#if QT_CONFIG(library) #include "qlibrary.h" +#endif QT_USE_NAMESPACE @@ -70,7 +72,7 @@ HB_UChar16 HB_GetMirroredChar(HB_UChar16 ch) void (*HB_Library_Resolve(const char *library, int version, const char *symbol))() { -#ifdef QT_NO_LIBRARY +#if !QT_CONFIG(library) Q_UNUSED(library); Q_UNUSED(version); Q_UNUSED(symbol); diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h index f861c1e71cb..e2706de9ee0 100644 --- a/src/corelib/tools/qlist.h +++ b/src/corelib/tools/qlist.h @@ -895,7 +895,7 @@ Q_OUTOFLINE_TEMPLATE int QList::removeAll(const T &_t) *n++ = *i; } - int removedCount = e - n; + int removedCount = int(e - n); d->end -= removedCount; return removedCount; } diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index ae4befcb9ce..47d64c0df60 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -2117,8 +2117,8 @@ QList QLocale::matchingLocales(QLocale::Language language, && (language == QLocale::AnyLanguage || data->m_language_id == uint(language))) { if ((script == QLocale::AnyScript || data->m_script_id == uint(script)) && (country == QLocale::AnyCountry || data->m_country_id == uint(country))) { - QLocale locale(*QLocalePrivate::create(data)); - result.append(locale); + result.append(QLocale(*(data->m_language_id == C ? c_private() + : QLocalePrivate::create(data)))); } ++data; } diff --git a/src/corelib/tools/qlocale_icu.cpp b/src/corelib/tools/qlocale_icu.cpp index 0066e95d889..afe0aae5838 100644 --- a/src/corelib/tools/qlocale_icu.cpp +++ b/src/corelib/tools/qlocale_icu.cpp @@ -38,7 +38,6 @@ ****************************************************************************/ #include "qglobal.h" -#include "qlibrary.h" #include "qdebug.h" #include "qlocale_p.h" #include "qmutex.h" diff --git a/src/corelib/tools/qrect.h b/src/corelib/tools/qrect.h index f973cf3494c..4030cccbd5c 100644 --- a/src/corelib/tools/qrect.h +++ b/src/corelib/tools/qrect.h @@ -662,12 +662,18 @@ Q_DECL_CONSTEXPR inline QRectF::QRectF(const QRect &r) Q_DECL_NOTHROW { } +QT_WARNING_PUSH +QT_WARNING_DISABLE_CLANG("-Wfloat-equal") +QT_WARNING_DISABLE_GCC("-Wfloat-equal") + Q_DECL_CONSTEXPR inline bool QRectF::isNull() const Q_DECL_NOTHROW { return w == 0. && h == 0.; } Q_DECL_CONSTEXPR inline bool QRectF::isEmpty() const Q_DECL_NOTHROW { return w <= 0. || h <= 0.; } +QT_WARNING_POP + Q_DECL_CONSTEXPR inline bool QRectF::isValid() const Q_DECL_NOTHROW { return w > 0. && h > 0.; } diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h index c69d27bbf98..ab5a2944bf0 100644 --- a/src/corelib/tools/qvector.h +++ b/src/corelib/tools/qvector.h @@ -692,7 +692,7 @@ typename QVector::iterator QVector::insert(iterator before, size_type n, c { Q_ASSERT_X(isValidIterator(before), "QVector::insert", "The specified iterator argument 'before' is invalid"); - int offset = std::distance(d->begin(), before); + const auto offset = std::distance(d->begin(), before); if (n != 0) { const T copy(t); if (!isDetached() || d->size + n > int(d->alloc)) @@ -728,7 +728,7 @@ typename QVector::iterator QVector::erase(iterator abegin, iterator aend) Q_ASSERT_X(isValidIterator(abegin), "QVector::erase", "The specified iterator argument 'abegin' is invalid"); Q_ASSERT_X(isValidIterator(aend), "QVector::erase", "The specified iterator argument 'aend' is invalid"); - const int itemsToErase = aend - abegin; + const auto itemsToErase = aend - abegin; if (!itemsToErase) return abegin; @@ -737,7 +737,7 @@ typename QVector::iterator QVector::erase(iterator abegin, iterator aend) Q_ASSERT(aend <= d->end()); Q_ASSERT(abegin <= aend); - const int itemsUntouched = abegin - d->begin(); + const auto itemsUntouched = abegin - d->begin(); // FIXME we could do a proper realloc, which copy constructs only needed data. // FIXME we are about to delete data - maybe it is good time to shrink? @@ -766,7 +766,7 @@ typename QVector::iterator QVector::erase(iterator abegin, iterator aend) memmove(static_cast(abegin), static_cast(aend), (d->size - itemsToErase - itemsUntouched) * sizeof(T)); } - d->size -= itemsToErase; + d->size -= int(itemsToErase); } return d->begin() + itemsUntouched; } diff --git a/src/dbus/qdbus_symbols.cpp b/src/dbus/qdbus_symbols.cpp index f91a8d21762..1e93a46c0cd 100644 --- a/src/dbus/qdbus_symbols.cpp +++ b/src/dbus/qdbus_symbols.cpp @@ -39,7 +39,7 @@ ****************************************************************************/ #include -#ifndef QT_BOOTSTRAPPED +#if QT_CONFIG(library) #include #endif #include @@ -54,7 +54,7 @@ void (*qdbus_resolve_me(const char *name))(); #if !defined QT_LINKED_LIBDBUS -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) static QLibrary *qdbus_libdbus = 0; void qdbus_unloadLibDBus() @@ -71,7 +71,7 @@ void qdbus_unloadLibDBus() bool qdbus_loadLibDBus() { -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) #ifdef QT_BUILD_INTERNAL // this is to simulate a library load failure for our autotest suite. if (!qEnvironmentVariableIsEmpty("QT_SIMULATE_DBUS_LIBFAIL")) @@ -126,7 +126,7 @@ bool qdbus_loadLibDBus() #endif } -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) void (*qdbus_resolve_conditionally(const char *name))() { if (qdbus_loadLibDBus()) @@ -137,7 +137,7 @@ void (*qdbus_resolve_conditionally(const char *name))() void (*qdbus_resolve_me(const char *name))() { -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) if (Q_UNLIKELY(!qdbus_loadLibDBus())) qFatal("Cannot find libdbus-1 in your system to resolve symbol '%s'.", name); @@ -161,7 +161,7 @@ static void qdbus_unloadLibDBus() #endif // !QT_LINKED_LIBDBUS -#if defined(QT_LINKED_LIBDBUS) || !defined(QT_NO_LIBRARY) +#if defined(QT_LINKED_LIBDBUS) || QT_CONFIG(library) Q_DESTRUCTOR_FUNCTION(qdbus_unloadLibDBus) #endif diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp index c63fb05e746..20186ef9f06 100644 --- a/src/dbus/qdbusintegrator.cpp +++ b/src/dbus/qdbusintegrator.cpp @@ -1772,7 +1772,7 @@ static QDBusConnection::ConnectionCapabilities connectionCapabilies(DBusConnecti # if DBUS_VERSION-0 >= 0x010400 can_send_type = dbus_connection_can_send_type; # endif -#elif !defined(QT_NO_LIBRARY) +#elif QT_CONFIG(library) // run-time check if the next functions are available can_send_type = (can_send_type_t)qdbus_resolve_conditionally("dbus_connection_can_send_type"); #endif diff --git a/src/gui/configure.json b/src/gui/configure.json index a8ae656bcb2..9b86b16b457 100644 --- a/src/gui/configure.json +++ b/src/gui/configure.json @@ -45,8 +45,7 @@ "xkb-config-root": "string", "xkbcommon": { "type": "enum", "values": [ "no", "qt", "system" ] }, "xkbcommon-evdev": "boolean", - "xkbcommon-x11": { "type": "enum", "name": "xkbcommon", "values": [ "no", "qt", "system" ] }, - "xrender": "boolean" + "xkbcommon-x11": { "type": "enum", "name": "xkbcommon", "values": [ "no", "qt", "system" ] } } }, @@ -295,13 +294,6 @@ "sources": [ { "type": "pkgConfig", "args": "xkbcommon xkbcommon-x11 >= 0.4.1" } ] - }, - "xrender": { - "label": "XRender", - "test": "x11/xrender", - "sources": [ - "-lXrender" - ] } }, @@ -798,11 +790,6 @@ "condition": "tests.xlib", "output": [ "privateFeature" ] }, - "xrender": { - "label": "Xrender", - "condition": "libs.xrender", - "output": [ "privateFeature", "feature" ] - }, "texthtmlparser": { "label": "HtmlParser", "purpose": "Provides a parser for HTML.", @@ -1138,7 +1125,7 @@ QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your pla "section": "X11", "condition": "features.xcb", "entries": [ - "system-xcb", "egl_x11", "xinput2", "xkb", "xlib", "xrender", "xcb-render", "xcb-glx", "xcb-xlib", "xkbcommon-system" + "system-xcb", "egl_x11", "xinput2", "xkb", "xlib", "xcb-render", "xcb-glx", "xcb-xlib", "xkbcommon-system" ] }, { diff --git a/src/gui/image/qpixmapcache.cpp b/src/gui/image/qpixmapcache.cpp index 73448943e1e..625e1456474 100644 --- a/src/gui/image/qpixmapcache.cpp +++ b/src/gui/image/qpixmapcache.cpp @@ -341,7 +341,6 @@ bool QPMCache::insert(const QString& key, const QPixmap &pixmap, int cost) } else { //Insertion failed we released the new allocated key cacheKeys.remove(key); - releaseKey(cacheKey); } return success; } @@ -355,9 +354,6 @@ QPixmapCache::Key QPMCache::insert(const QPixmap &pixmap, int cost) theid = startTimer(flush_time); t = false; } - } else { - //Insertion failed we released the key and return an invalid one - releaseKey(cacheKey); } return cacheKey; } @@ -377,9 +373,6 @@ bool QPMCache::replace(const QPixmapCache::Key &key, const QPixmap &pixmap, int t = false; } const_cast(key) = cacheKey; - } else { - //Insertion failed we released the key - releaseKey(cacheKey); } return success; } diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index c057fccadec..334dc4a288d 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -99,7 +99,7 @@ #include #endif -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) #include #endif @@ -1449,7 +1449,7 @@ void QGuiApplicationPrivate::init() session_manager = new QSessionManager(q, session_id, session_key); #endif -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) if (qEnvironmentVariableIntValue("QT_LOAD_TESTABILITY") > 0) loadTestability = true; @@ -1469,7 +1469,7 @@ void QGuiApplicationPrivate::init() } #else Q_UNUSED(loadTestability); -#endif // QT_NO_LIBRARY +#endif // QT_CONFIG(library) if (layout_direction == Qt::LayoutDirectionAuto || force_reverse) QGuiApplication::setLayoutDirection(qt_detectRTLLanguage() ? Qt::RightToLeft : Qt::LeftToRight); diff --git a/src/gui/kernel/qplatformintegrationfactory.cpp b/src/gui/kernel/qplatformintegrationfactory.cpp index 1e04a673ebb..3fcf9014a7f 100644 --- a/src/gui/kernel/qplatformintegrationfactory.cpp +++ b/src/gui/kernel/qplatformintegrationfactory.cpp @@ -51,14 +51,14 @@ QT_BEGIN_NAMESPACE Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, (QPlatformIntegrationFactoryInterface_iid, QLatin1String("/platforms"), Qt::CaseInsensitive)) -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, directLoader, (QPlatformIntegrationFactoryInterface_iid, QLatin1String(""), Qt::CaseInsensitive)) -#endif // !QT_NO_LIBRARY +#endif // QT_CONFIG(library) QPlatformIntegration *QPlatformIntegrationFactory::create(const QString &platform, const QStringList ¶mList, int &argc, char **argv, const QString &platformPluginPath) { -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) // Try loading the plugin from platformPluginPath first: if (!platformPluginPath.isEmpty()) { QCoreApplication::addLibraryPath(platformPluginPath); @@ -81,7 +81,7 @@ QPlatformIntegration *QPlatformIntegrationFactory::create(const QString &platfor QStringList QPlatformIntegrationFactory::keys(const QString &platformPluginPath) { QStringList list; -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) if (!platformPluginPath.isEmpty()) { QCoreApplication::addLibraryPath(platformPluginPath); list = directLoader()->keyMap().values(); diff --git a/src/gui/kernel/qplatformthemefactory.cpp b/src/gui/kernel/qplatformthemefactory.cpp index 223d7344e31..447d385abee 100644 --- a/src/gui/kernel/qplatformthemefactory.cpp +++ b/src/gui/kernel/qplatformthemefactory.cpp @@ -51,7 +51,7 @@ QT_BEGIN_NAMESPACE Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, (QPlatformThemeFactoryInterface_iid, QLatin1String("/platformthemes"), Qt::CaseInsensitive)) -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, directLoader, (QPlatformThemeFactoryInterface_iid, QLatin1String(""), Qt::CaseInsensitive)) #endif @@ -60,7 +60,7 @@ QPlatformTheme *QPlatformThemeFactory::create(const QString& key, const QString { QStringList paramList = key.split(QLatin1Char(':')); const QString platform = paramList.takeFirst().toLower(); -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) // Try loading the plugin from platformPluginPath first: if (!platformPluginPath.isEmpty()) { QCoreApplication::addLibraryPath(platformPluginPath); @@ -83,7 +83,7 @@ QStringList QPlatformThemeFactory::keys(const QString &platformPluginPath) { QStringList list; -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) if (!platformPluginPath.isEmpty()) { QCoreApplication::addLibraryPath(platformPluginPath); list += directLoader()->keyMap().values(); diff --git a/src/gui/math3d/qmatrix4x4.h b/src/gui/math3d/qmatrix4x4.h index e143884f9d6..aca685920eb 100644 --- a/src/gui/math3d/qmatrix4x4.h +++ b/src/gui/math3d/qmatrix4x4.h @@ -212,6 +212,9 @@ private: friend class QGraphicsRotation; }; +QT_WARNING_PUSH +QT_WARNING_DISABLE_CLANG("-Wfloat-equal") +QT_WARNING_DISABLE_GCC("-Wfloat-equal") Q_DECLARE_TYPEINFO(QMatrix4x4, Q_MOVABLE_TYPE); inline QMatrix4x4::QMatrix4x4 @@ -1093,6 +1096,8 @@ inline void QMatrix4x4::viewport(const QRectF &rect) viewport(rect.x(), rect.y(), rect.width(), rect.height()); } +QT_WARNING_POP + #ifndef QT_NO_DEBUG_STREAM Q_GUI_EXPORT QDebug operator<<(QDebug dbg, const QMatrix4x4 &m); #endif diff --git a/src/gui/math3d/qquaternion.h b/src/gui/math3d/qquaternion.h index 808e0ee6d70..eff427117f7 100644 --- a/src/gui/math3d/qquaternion.h +++ b/src/gui/math3d/qquaternion.h @@ -168,7 +168,9 @@ inline QQuaternion::QQuaternion() : wp(1.0f), xp(0.0f), yp(0.0f), zp(0.0f) {} inline QQuaternion::QQuaternion(float aScalar, float xpos, float ypos, float zpos) : wp(aScalar), xp(xpos), yp(ypos), zp(zpos) {} - +QT_WARNING_PUSH +QT_WARNING_DISABLE_CLANG("-Wfloat-equal") +QT_WARNING_DISABLE_GCC("-Wfloat-equal") inline bool QQuaternion::isNull() const { return wp == 0.0f && xp == 0.0f && yp == 0.0f && zp == 0.0f; @@ -179,6 +181,12 @@ inline bool QQuaternion::isIdentity() const return wp == 1.0f && xp == 0.0f && yp == 0.0f && zp == 0.0f; } +inline bool operator==(const QQuaternion &q1, const QQuaternion &q2) +{ + return q1.wp == q2.wp && q1.xp == q2.xp && q1.yp == q2.yp && q1.zp == q2.zp; +} +QT_WARNING_POP + inline float QQuaternion::x() const { return xp; } inline float QQuaternion::y() const { return yp; } inline float QQuaternion::z() const { return zp; } @@ -277,11 +285,6 @@ inline QQuaternion &QQuaternion::operator/=(float divisor) return *this; } -inline bool operator==(const QQuaternion &q1, const QQuaternion &q2) -{ - return q1.wp == q2.wp && q1.xp == q2.xp && q1.yp == q2.yp && q1.zp == q2.zp; -} - inline bool operator!=(const QQuaternion &q1, const QQuaternion &q2) { return !operator==(q1, q2); diff --git a/src/gui/math3d/qvector2d.h b/src/gui/math3d/qvector2d.h index d2724c9498d..bdb56c9c1f0 100644 --- a/src/gui/math3d/qvector2d.h +++ b/src/gui/math3d/qvector2d.h @@ -204,6 +204,9 @@ inline QVector2D &QVector2D::operator/=(const QVector2D &vector) return *this; } +QT_WARNING_PUSH +QT_WARNING_DISABLE_CLANG("-Wfloat-equal") +QT_WARNING_DISABLE_GCC("-Wfloat-equal") Q_DECL_CONSTEXPR inline bool operator==(const QVector2D &v1, const QVector2D &v2) { return v1.xp == v2.xp && v1.yp == v2.yp; @@ -213,6 +216,7 @@ Q_DECL_CONSTEXPR inline bool operator!=(const QVector2D &v1, const QVector2D &v2 { return v1.xp != v2.xp || v1.yp != v2.yp; } +QT_WARNING_POP Q_DECL_CONSTEXPR inline const QVector2D operator+(const QVector2D &v1, const QVector2D &v2) { diff --git a/src/gui/math3d/qvector3d.h b/src/gui/math3d/qvector3d.h index c1d881a7358..a728fd76bf4 100644 --- a/src/gui/math3d/qvector3d.h +++ b/src/gui/math3d/qvector3d.h @@ -229,6 +229,9 @@ inline QVector3D &QVector3D::operator/=(const QVector3D &vector) return *this; } +QT_WARNING_PUSH +QT_WARNING_DISABLE_CLANG("-Wfloat-equal") +QT_WARNING_DISABLE_GCC("-Wfloat-equal") Q_DECL_CONSTEXPR inline bool operator==(const QVector3D &v1, const QVector3D &v2) { return v1.xp == v2.xp && v1.yp == v2.yp && v1.zp == v2.zp; @@ -238,6 +241,7 @@ Q_DECL_CONSTEXPR inline bool operator!=(const QVector3D &v1, const QVector3D &v2 { return v1.xp != v2.xp || v1.yp != v2.yp || v1.zp != v2.zp; } +QT_WARNING_POP Q_DECL_CONSTEXPR inline const QVector3D operator+(const QVector3D &v1, const QVector3D &v2) { diff --git a/src/gui/math3d/qvector4d.h b/src/gui/math3d/qvector4d.h index 9387e8d1877..f63b2f141b9 100644 --- a/src/gui/math3d/qvector4d.h +++ b/src/gui/math3d/qvector4d.h @@ -229,6 +229,9 @@ inline QVector4D &QVector4D::operator/=(const QVector4D &vector) return *this; } +QT_WARNING_PUSH +QT_WARNING_DISABLE_CLANG("-Wfloat-equal") +QT_WARNING_DISABLE_GCC("-Wfloat-equal") Q_DECL_CONSTEXPR inline bool operator==(const QVector4D &v1, const QVector4D &v2) { return v1.xp == v2.xp && v1.yp == v2.yp && v1.zp == v2.zp && v1.wp == v2.wp; @@ -238,6 +241,7 @@ Q_DECL_CONSTEXPR inline bool operator!=(const QVector4D &v1, const QVector4D &v2 { return v1.xp != v2.xp || v1.yp != v2.yp || v1.zp != v2.zp || v1.wp != v2.wp; } +QT_WARNING_POP Q_DECL_CONSTEXPR inline const QVector4D operator+(const QVector4D &v1, const QVector4D &v2) { diff --git a/src/gui/opengl/qopenglframebufferobject.cpp b/src/gui/opengl/qopenglframebufferobject.cpp index cedbe191919..98ff49ea311 100644 --- a/src/gui/opengl/qopenglframebufferobject.cpp +++ b/src/gui/opengl/qopenglframebufferobject.cpp @@ -47,7 +47,6 @@ #include #include -#include #include #include diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 083e68fcdbc..b186182c347 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -5968,7 +5968,7 @@ void QPainter::drawText(const QRect &r, int flags, const QString &str, QRect *br \snippet code/src_gui_painting_qpainter.cpp 17 \endtable - The \a boundingRect (if not null) is set to the what the bounding rectangle + The \a boundingRect (if not null) is set to what the bounding rectangle should be in order to enclose the whole text. For example, in the following image, the dotted line represents \a boundingRect as calculated by the function, and the dashed line represents \a rectangle: diff --git a/src/gui/painting/qtransform.h b/src/gui/painting/qtransform.h index 2aea19eca08..5ca1d469829 100644 --- a/src/gui/painting/qtransform.h +++ b/src/gui/painting/qtransform.h @@ -291,6 +291,10 @@ inline qreal QTransform::dy() const return affine._dy; } +QT_WARNING_PUSH +QT_WARNING_DISABLE_CLANG("-Wfloat-equal") +QT_WARNING_DISABLE_GCC("-Wfloat-equal") + inline QTransform &QTransform::operator*=(qreal num) { if (num == 1.) @@ -348,6 +352,8 @@ inline QTransform &QTransform::operator-=(qreal num) return *this; } +QT_WARNING_POP + inline bool qFuzzyCompare(const QTransform& t1, const QTransform& t2) { return qFuzzyCompare(t1.m11(), t2.m11()) diff --git a/src/gui/text/qdistancefield.cpp b/src/gui/text/qdistancefield.cpp index 933dd1bf540..064c2aca7fd 100644 --- a/src/gui/text/qdistancefield.cpp +++ b/src/gui/text/qdistancefield.cpp @@ -436,8 +436,8 @@ static void drawPolygons(qint32 *bits, int width, int height, const QPoint *vert const quint32 *indices, int indexCount, qint32 value) { Q_ASSERT(indexCount != 0); - Q_ASSERT(height <= 128); - QVarLengthArray scans[128]; + typedef QVarLengthArray ScanLine; + QVarLengthArray scans(height); int first = 0; for (int i = 1; i < indexCount; ++i) { quint32 idx1 = indices[i - 1]; diff --git a/src/network/kernel/qauthenticator.cpp b/src/network/kernel/qauthenticator.cpp index 107addae58c..099d9586d22 100644 --- a/src/network/kernel/qauthenticator.cpp +++ b/src/network/kernel/qauthenticator.cpp @@ -1445,7 +1445,8 @@ static PSecurityFunctionTable pSecurityFunctionTable = NULL; static bool q_NTLM_SSPI_library_load() { - QMutexLocker locker(QMutexPool::globalInstanceGet((void *)&pSecurityFunctionTable)); + static QBasicMutex mutex; + QMutexLocker l(&mutex); // Initialize security interface if (pSecurityFunctionTable == NULL) { diff --git a/src/network/kernel/qdnslookup_unix.cpp b/src/network/kernel/qdnslookup_unix.cpp index 41038dc8da8..1da00813ce2 100644 --- a/src/network/kernel/qdnslookup_unix.cpp +++ b/src/network/kernel/qdnslookup_unix.cpp @@ -39,7 +39,9 @@ #include "qdnslookup_p.h" +#if QT_CONFIG(library) #include +#endif #include #include #include @@ -58,7 +60,7 @@ QT_BEGIN_NAMESPACE -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) #if defined(Q_OS_OPENBSD) typedef struct __res_state* res_state; @@ -382,6 +384,6 @@ void QDnsLookupRunnable::query(const int requestType, const QByteArray &requestN return; } -#endif /* ifndef QT_NO_LIBRARY */ +#endif /* QT_CONFIG(library) */ QT_END_NAMESPACE diff --git a/src/network/kernel/qhostinfo_unix.cpp b/src/network/kernel/qhostinfo_unix.cpp index 7af8db73e0b..cf08a15f96f 100644 --- a/src/network/kernel/qhostinfo_unix.cpp +++ b/src/network/kernel/qhostinfo_unix.cpp @@ -45,7 +45,9 @@ #include "private/qnativesocketengine_p.h" #include "qiodevice.h" #include +#if QT_CONFIG(library) #include +#endif #include #include #include @@ -93,7 +95,7 @@ static res_state_ptr local_res = 0; static bool resolveLibraryInternal() { -#if !defined(QT_NO_LIBRARY) && !defined(Q_OS_QNX) +#if QT_CONFIG(library) && !defined(Q_OS_QNX) QLibrary lib; #ifdef LIBRESOLV_SO lib.setFileName(QStringLiteral(LIBRESOLV_SO)); diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index aca7507d13f..644dfdb6a89 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -78,7 +78,6 @@ #include #include #include -#include // for loading the security lib for the CA store #include @@ -530,7 +529,7 @@ void QSslSocketPrivate::ensureCiphersAndCertsLoaded() resetDefaultCiphers(); resetDefaultEllipticCurves(); -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) //load symbols needed to receive certificates from system store #if defined(Q_OS_WIN) HINSTANCE hLib = LoadLibraryW(L"Crypt32"); @@ -558,7 +557,7 @@ void QSslSocketPrivate::ensureCiphersAndCertsLoaded() } } #endif -#endif //QT_NO_LIBRARY +#endif // QT_CONFIG(library) // if on-demand loading was not enabled, load the certs now if (!s_loadRootCertsOnDemand) setDefaultCaCertificates(systemCaCertificates()); diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp index 2a0d746fde7..1b2419ef07c 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols.cpp +++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp @@ -58,7 +58,7 @@ #ifdef Q_OS_WIN # include -#else +#elif QT_CONFIG(library) # include #endif #include @@ -125,7 +125,7 @@ void qsslSocketUnresolvedSymbolWarning(const char *functionName) qCWarning(lcSsl, "QSslSocket: cannot call unresolved function %s", functionName); } -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) void qsslSocketCannotResolveSymbolWarning(const char *functionName) { qCWarning(lcSsl, "QSslSocket: cannot resolve %s", functionName); @@ -468,12 +468,11 @@ DEFINEFUNC(void, PKCS12_free, PKCS12 *pkcs12, pkcs12, return, DUMMYARG) #if !defined QT_LINKED_OPENSSL -#ifdef QT_NO_LIBRARY +#if !QT_CONFIG(library) bool q_resolveOpenSslSymbols() { - qCWarning(lcSsl, "QSslSocket: unable to resolve symbols. " - "QT_NO_LIBRARY is defined which means runtime resolving of " - "libraries won't work."); + qCWarning(lcSsl, "QSslSocket: unable to resolve symbols. Qt is configured without the " + "'library' feature, which means runtime resolving of libraries won't work."); qCWarning(lcSsl, "Either compile Qt statically or with support for runtime resolving " "of libraries."); return false; @@ -1034,7 +1033,7 @@ bool q_resolveOpenSslSymbols() delete libs.second; return true; } -#endif // QT_NO_LIBRARY +#endif // QT_CONFIG(library) #else // !defined QT_LINKED_OPENSSL diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 42baf448ac4..a2124974d70 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -65,7 +65,6 @@ #include #include "qcolormap.h" #include "qfile.h" -#include "qlibrary.h" #include #include "qsurfaceformat.h" diff --git a/src/opengl/qglframebufferobject.cpp b/src/opengl/qglframebufferobject.cpp index 857a89195c6..0b386ededc2 100644 --- a/src/opengl/qglframebufferobject.cpp +++ b/src/opengl/qglframebufferobject.cpp @@ -45,7 +45,6 @@ #include #include "gl2paintengineex/qpaintengineex_opengl2_p.h" -#include #include #include diff --git a/src/platformsupport/eglconvenience/eglconvenience.pro b/src/platformsupport/eglconvenience/eglconvenience.pro index d364a42b3bf..4301d63574b 100644 --- a/src/platformsupport/eglconvenience/eglconvenience.pro +++ b/src/platformsupport/eglconvenience/eglconvenience.pro @@ -38,6 +38,6 @@ qtConfig(xlib) { } CONFIG += egl -LIBS_PRIVATE += $$QMAKE_LIBS_DYNLOAD +qtConfig(dlopen): QMAKE_USE += libdl load(qt_module) diff --git a/src/platformsupport/glxconvenience/glxconvenience.pro b/src/platformsupport/glxconvenience/glxconvenience.pro index 185d6b03648..41c96d8f0d3 100644 --- a/src/platformsupport/glxconvenience/glxconvenience.pro +++ b/src/platformsupport/glxconvenience/glxconvenience.pro @@ -7,7 +7,6 @@ CONFIG += static internal_module DEFINES += QT_NO_CAST_FROM_ASCII PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h -qtConfig(xrender): QMAKE_USE_PRIVATE += xrender LIBS_PRIVATE += $$QMAKE_LIBS_X11 HEADERS += qglxconvenience_p.h diff --git a/src/platformsupport/glxconvenience/qglxconvenience.cpp b/src/platformsupport/glxconvenience/qglxconvenience.cpp index 4225bebf37d..8c26550c1e8 100644 --- a/src/platformsupport/glxconvenience/qglxconvenience.cpp +++ b/src/platformsupport/glxconvenience/qglxconvenience.cpp @@ -47,10 +47,6 @@ #include #include -#ifndef QT_NO_XRENDER -#include -#endif - #include enum { diff --git a/src/platformsupport/services/genericunix/qgenericunixservices.cpp b/src/platformsupport/services/genericunix/qgenericunixservices.cpp index a24ab820579..01d988fdbed 100644 --- a/src/platformsupport/services/genericunix/qgenericunixservices.cpp +++ b/src/platformsupport/services/genericunix/qgenericunixservices.cpp @@ -41,7 +41,9 @@ #include #include -#include +#if QT_CONFIG(process) +# include +#endif #include #include @@ -121,7 +123,7 @@ static inline bool launch(const QString &launcher, const QUrl &url) const QString command = launcher + QLatin1Char(' ') + QLatin1String(url.toEncoded()); if (debug) qDebug("Launching %s", qPrintable(command)); -#if defined(QT_NO_PROCESS) +#if !QT_CONFIG(process) const bool ok = ::system(qPrintable(command + QLatin1String(" &"))); #else const bool ok = QProcess::startDetached(command); diff --git a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp index 1e1b1af4b53..4eefcace0f0 100644 --- a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp +++ b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp @@ -225,6 +225,8 @@ QVariant QGenericUnixTheme::themeHint(ThemeHint hint) const } case QPlatformTheme::KeyboardScheme: return QVariant(int(X11KeyboardScheme)); + case QPlatformTheme::UiEffects: + return QVariant(int(HoverEffect)); default: break; } @@ -540,6 +542,8 @@ QVariant QKdeTheme::themeHint(QPlatformTheme::ThemeHint hint) const return QVariant(d->singleClick); case QPlatformTheme::WheelScrollLines: return QVariant(d->wheelScrollLines); + case QPlatformTheme::UiEffects: + return QVariant(int(HoverEffect)); default: break; } diff --git a/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp b/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp index 534467b32ce..e411ea55e9f 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp @@ -71,16 +71,16 @@ Q_LOGGING_CATEGORY(qLcEglDevDebug, "qt.qpa.egldeviceintegration") Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, (QEglFSDeviceIntegrationFactoryInterface_iid, QLatin1String("/egldeviceintegrations"), Qt::CaseInsensitive)) -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, directLoader, (QEglFSDeviceIntegrationFactoryInterface_iid, QLatin1String(""), Qt::CaseInsensitive)) -#endif // QT_NO_LIBRARY +#endif // QT_CONFIG(library) QStringList QEglFSDeviceIntegrationFactory::keys(const QString &pluginPath) { QStringList list; -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) if (!pluginPath.isEmpty()) { QCoreApplication::addLibraryPath(pluginPath); list = directLoader()->keyMap().values(); @@ -104,7 +104,7 @@ QStringList QEglFSDeviceIntegrationFactory::keys(const QString &pluginPath) QEglFSDeviceIntegration *QEglFSDeviceIntegrationFactory::create(const QString &key, const QString &pluginPath) { QEglFSDeviceIntegration *integration = Q_NULLPTR; -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) if (!pluginPath.isEmpty()) { QCoreApplication::addLibraryPath(pluginPath); integration = qLoadPlugin(directLoader(), key); diff --git a/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro b/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro index 5c084b33fc6..187cbc025ff 100644 --- a/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro +++ b/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro @@ -20,8 +20,6 @@ qtHaveModule(input_support-private): \ qtHaveModule(platformcompositor_support-private): \ QT += platformcompositor_support-private -LIBS += $$QMAKE_LIBS_DYNLOAD - # Avoid X11 header collision, use generic EGL native types DEFINES += QT_EGL_NO_X11 diff --git a/src/plugins/platforms/vnc/vnc.pro b/src/plugins/platforms/vnc/vnc.pro index 3cd7e9b1603..1fa682303ff 100644 --- a/src/plugins/platforms/vnc/vnc.pro +++ b/src/plugins/platforms/vnc/vnc.pro @@ -1,10 +1,5 @@ TARGET = qvnc -PLUGIN_TYPE = platforms -PLUGIN_CLASS_NAME = QVncIntegrationPlugin -!equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = - -load(qt_plugin) - QT += \ core-private network gui-private \ service_support-private theme_support-private fb_support-private \ @@ -29,3 +24,8 @@ HEADERS = \ qvncclient.h OTHER_FILES += vnc.json + +PLUGIN_TYPE = platforms +PLUGIN_CLASS_NAME = QVncIntegrationPlugin +!equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = - +load(qt_plugin) diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.cpp b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.cpp index 6650ca44aef..d69d969783e 100644 --- a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.cpp +++ b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.cpp @@ -50,14 +50,14 @@ QT_BEGIN_NAMESPACE Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, (QXcbGlIntegrationFactoryInterface_iid, QLatin1String("/xcbglintegrations"), Qt::CaseInsensitive)) -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, directLoader, (QXcbGlIntegrationFactoryInterface_iid, QLatin1String(""), Qt::CaseInsensitive)) -#endif // !QT_NO_LIBRARY +#endif // QT_CONFIG(library) QXcbGlIntegration *QXcbGlIntegrationFactory::create(const QString &platform, const QString &pluginPath) { -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) // Try loading the plugin from pluginPath first: if (!pluginPath.isEmpty()) { QCoreApplication::addLibraryPath(pluginPath); diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp index 1f36a1ad2a5..4e0c73450e6 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp @@ -38,7 +38,9 @@ ****************************************************************************/ #include +#if QT_CONFIG(library) #include +#endif #include "qxcbwindow.h" #include "qxcbscreen.h" @@ -54,7 +56,7 @@ #include #include -#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) +#if !defined(QT_STATIC) && QT_CONFIG(dlopen) #include #endif @@ -564,7 +566,7 @@ QFunctionPointer QGLXContext::getProcAddress(const char *procName) if (!glXGetProcAddressARB) { QList glxExt = QByteArray(glXGetClientString(m_display, GLX_EXTENSIONS)).split(' '); if (glxExt.contains("GLX_ARB_get_proc_address")) { -#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) +#if QT_CONFIG(dlopen) void *handle = dlopen(NULL, RTLD_LAZY); if (handle) { glXGetProcAddressARB = (qt_glXGetProcAddressARB) dlsym(handle, "glXGetProcAddressARB"); @@ -573,7 +575,7 @@ QFunctionPointer QGLXContext::getProcAddress(const char *procName) if (!glXGetProcAddressARB) #endif { -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) extern const QString qt_gl_library_name(); // QLibrary lib(qt_gl_library_name()); QLibrary lib(QLatin1String("GL")); diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro index 8aa6e1febde..215f5a3fe12 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro @@ -12,7 +12,7 @@ qtConfig(xcb-glx) { QMAKE_USE += xcb_glx } -LIBS += $$QMAKE_LIBS_DYNLOAD +!static:qtConfig(dlopen): QMAKE_USE += libdl HEADERS += \ qxcbglxintegration.h \ diff --git a/src/plugins/platforms/xcb/qxcbclipboard.cpp b/src/plugins/platforms/xcb/qxcbclipboard.cpp index 6a5d40267a6..01b3bca0d2b 100644 --- a/src/plugins/platforms/xcb/qxcbclipboard.cpp +++ b/src/plugins/platforms/xcb/qxcbclipboard.cpp @@ -602,7 +602,7 @@ void QXcbClipboard::handleSelectionRequest(xcb_selection_request_event_t *req) return; } - xcb_selection_notify_event_t event; + Q_DECLARE_XCB_EVENT(event, xcb_selection_notify_event_t); event.response_type = XCB_SELECTION_NOTIFY; event.requestor = req->requestor; event.selection = req->selection; diff --git a/src/plugins/platforms/xcb/qxcbconnection.h b/src/plugins/platforms/xcb/qxcbconnection.h index 7f0d5cf2ccb..ffd0c87a3e6 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.h +++ b/src/plugins/platforms/xcb/qxcbconnection.h @@ -731,6 +731,19 @@ private: QXcbConnection *m_connection; }; +template +union q_padded_xcb_event { + T event; + char padding[32]; +}; + +// The xcb_send_event() requires all events to have 32 bytes. It calls memcpy() on the +// passed in event. If the passed in event is less than 32 bytes, memcpy() reaches into +// unrelated memory. +#define Q_DECLARE_XCB_EVENT(event_var, event_type) \ + q_padded_xcb_event store = {}; \ + auto &event_var = store.event; + #ifdef Q_XCB_DEBUG template cookie_t q_xcb_call_template(const cookie_t &cookie, QXcbConnection *connection, const char *file, diff --git a/src/plugins/platforms/xcb/qxcbcursor.cpp b/src/plugins/platforms/xcb/qxcbcursor.cpp index 80fe5a21993..d257ab1242a 100644 --- a/src/plugins/platforms/xcb/qxcbcursor.cpp +++ b/src/plugins/platforms/xcb/qxcbcursor.cpp @@ -43,7 +43,9 @@ #include "qxcbimage.h" #include "qxcbxsettings.h" +#if QT_CONFIG(library) #include +#endif #include #include #include @@ -58,7 +60,7 @@ typedef char *(*PtrXcursorLibraryGetTheme)(void *); typedef int (*PtrXcursorLibrarySetTheme)(void *, const char *); typedef int (*PtrXcursorLibraryGetDefaultSize)(void *); -#if defined(XCB_USE_XLIB) && !defined(QT_NO_LIBRARY) +#if defined(XCB_USE_XLIB) && QT_CONFIG(library) #include enum { XCursorShape = CursorShape @@ -306,7 +308,7 @@ QXcbCursor::QXcbCursor(QXcbConnection *conn, QXcbScreen *screen) const char *cursorStr = "cursor"; xcb_open_font(xcb_connection(), cursorFont, strlen(cursorStr), cursorStr); -#if defined(XCB_USE_XLIB) && !defined(QT_NO_LIBRARY) +#if defined(XCB_USE_XLIB) && QT_CONFIG(library) static bool function_ptrs_not_initialized = true; if (function_ptrs_not_initialized) { QLibrary xcursorLib(QLatin1String("Xcursor"), 1); @@ -507,7 +509,7 @@ xcb_cursor_t QXcbCursor::createNonStandardCursor(int cshape) return cursor; } -#if defined(XCB_USE_XLIB) && !defined(QT_NO_LIBRARY) +#if defined(XCB_USE_XLIB) && QT_CONFIG(library) bool updateCursorTheme(void *dpy, const QByteArray &theme) { if (!ptrXcursorLibraryGetTheme || !ptrXcursorLibrarySetTheme) @@ -551,7 +553,7 @@ static xcb_cursor_t loadCursor(void *dpy, int cshape) } return cursor; } -#endif //XCB_USE_XLIB / QT_NO_LIBRARY +#endif // XCB_USE_XLIB / QT_CONFIG(library) xcb_cursor_t QXcbCursor::createFontCursor(int cshape) { @@ -560,7 +562,7 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape) xcb_cursor_t cursor = XCB_NONE; // Try Xcursor first -#if defined(XCB_USE_XLIB) && !defined(QT_NO_LIBRARY) +#if defined(XCB_USE_XLIB) && QT_CONFIG(library) if (cshape >= 0 && cshape <= Qt::LastCursor) { void *dpy = connection()->xlib_display(); // special case for non-standard dnd-* cursors diff --git a/src/plugins/platforms/xcb/qxcbcursor.h b/src/plugins/platforms/xcb/qxcbcursor.h index c15225f6d23..41ec4dbbf84 100644 --- a/src/plugins/platforms/xcb/qxcbcursor.h +++ b/src/plugins/platforms/xcb/qxcbcursor.h @@ -101,7 +101,7 @@ private: #ifndef QT_NO_CURSOR CursorHash m_cursorHash; #endif -#if defined(XCB_USE_XLIB) && !defined(QT_NO_LIBRARY) +#if defined(XCB_USE_XLIB) && QT_CONFIG(library) static void cursorThemePropertyChanged(QXcbVirtualDesktop *screen, const QByteArray &name, const QVariant &property, diff --git a/src/plugins/platforms/xcb/qxcbdrag.cpp b/src/plugins/platforms/xcb/qxcbdrag.cpp index 58fb1f39181..60d142157fb 100644 --- a/src/plugins/platforms/xcb/qxcbdrag.cpp +++ b/src/plugins/platforms/xcb/qxcbdrag.cpp @@ -1163,7 +1163,7 @@ static xcb_window_t findXdndAwareParent(QXcbConnection *c, xcb_window_t window) void QXcbDrag::handleSelectionRequest(const xcb_selection_request_event_t *event) { - xcb_selection_notify_event_t notify; + Q_DECLARE_XCB_EVENT(notify, xcb_selection_notify_event_t); notify.response_type = XCB_SELECTION_NOTIFY; notify.requestor = event->requestor; notify.selection = event->selection; diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index f7c36ec3867..3f0493669f5 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -844,7 +844,7 @@ void QXcbWindow::hide() Q_XCB_CALL(xcb_unmap_window(xcb_connection(), m_window)); // send synthetic UnmapNotify event according to icccm 4.1.4 - xcb_unmap_notify_event_t event; + Q_DECLARE_XCB_EVENT(event, xcb_unmap_notify_event_t); event.response_type = XCB_UNMAP_NOTIFY; event.event = xcbScreen()->root(); event.window = m_window; diff --git a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp index 7cfa5544186..ee439fa33ed 100644 --- a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp +++ b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp @@ -1421,13 +1421,17 @@ bool QMYSQLDriver::open(const QString& db, if (mysql_get_client_version() >= 50503 && mysql_get_server_version(d->mysql) >= 50503) { // force the communication to be utf8mb4 (only utf8mb4 supports 4-byte characters) mysql_set_character_set(d->mysql, "utf8mb4"); - } else { +#ifndef QT_NO_TEXTCODEC + d->tc = QTextCodec::codecForName("UTF-8"); +#endif + } else + { // force the communication to be utf8 mysql_set_character_set(d->mysql, "utf8"); - } -#endif #ifndef QT_NO_TEXTCODEC - d->tc = codec(d->mysql); + d->tc = codec(d->mysql); +#endif + } #endif #if MYSQL_VERSION_ID >= 40108 diff --git a/src/sql/models/qsqlrelationaldelegate.h b/src/sql/models/qsqlrelationaldelegate.h index f295de73969..32c994363ec 100644 --- a/src/sql/models/qsqlrelationaldelegate.h +++ b/src/sql/models/qsqlrelationaldelegate.h @@ -56,7 +56,7 @@ class QSqlRelationalDelegate: public QItemDelegate { public: -explicit QSqlRelationalDelegate(QObject *aParent = 0) +explicit QSqlRelationalDelegate(QObject *aParent = nullptr) : QItemDelegate(aParent) {} @@ -68,7 +68,7 @@ QWidget *createEditor(QWidget *aParent, const QModelIndex &index) const override { const QSqlRelationalTableModel *sqlModel = qobject_cast(index.model()); - QSqlTableModel *childModel = sqlModel ? sqlModel->relationModel(index.column()) : 0; + QSqlTableModel *childModel = sqlModel ? sqlModel->relationModel(index.column()) : nullptr; if (!childModel) return QItemDelegate::createEditor(aParent, option, index); @@ -86,7 +86,7 @@ void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex return; QSqlRelationalTableModel *sqlModel = qobject_cast(model); - QSqlTableModel *childModel = sqlModel ? sqlModel->relationModel(index.column()) : 0; + QSqlTableModel *childModel = sqlModel ? sqlModel->relationModel(index.column()) : nullptr; QComboBox *combo = qobject_cast(editor); if (!sqlModel || !childModel || !combo) { QItemDelegate::setModelData(editor, model, index); diff --git a/src/testlib/qbenchmark.cpp b/src/testlib/qbenchmark.cpp index c933a16c350..d49d07bb70f 100644 --- a/src/testlib/qbenchmark.cpp +++ b/src/testlib/qbenchmark.cpp @@ -42,7 +42,6 @@ #include #include -#include #include #include #include diff --git a/src/testlib/qbenchmark_p.h b/src/testlib/qbenchmark_p.h index 797071d7a48..dbfa0127b68 100644 --- a/src/testlib/qbenchmark_p.h +++ b/src/testlib/qbenchmark_p.h @@ -55,7 +55,7 @@ #include -#if (defined(Q_OS_LINUX) || defined Q_OS_MAC) && !defined(QT_NO_PROCESS) +#if (defined(Q_OS_LINUX) || defined Q_OS_MACOS) && QT_CONFIG(process) #define QTESTLIB_USE_VALGRIND #else #undef QTESTLIB_USE_VALGRIND diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 19d135e15f2..2a6cad698f6 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -51,7 +51,6 @@ #include #include #include -#include #include #include #include diff --git a/src/tools/rcc/main.cpp b/src/tools/rcc/main.cpp index f749b900191..4e37fc78870 100644 --- a/src/tools/rcc/main.cpp +++ b/src/tools/rcc/main.cpp @@ -153,6 +153,9 @@ int runRcc(int argc, char *argv[]) QCommandLineOption projectOption(QStringLiteral("project"), QStringLiteral("Output a resource file containing all files from the current directory.")); parser.addOption(projectOption); + QCommandLineOption formatVersionOption(QStringLiteral("format-version"), QStringLiteral("The RCC format version to write"), QStringLiteral("number")); + parser.addOption(formatVersionOption); + parser.addPositionalArgument(QStringLiteral("inputs"), QStringLiteral("Input files (*.qrc).")); @@ -160,7 +163,19 @@ int runRcc(int argc, char *argv[]) parser.process(app); QString errorMsg; - RCCResourceLibrary library; + + quint8 formatVersion = 2; + if (parser.isSet(formatVersionOption)) { + bool ok = false; + formatVersion = parser.value(formatVersionOption).toUInt(&ok); + if (!ok) { + errorMsg = QLatin1String("Invalid format version specified"); + } else if (formatVersion != 1 && formatVersion != 2) { + errorMsg = QLatin1String("Unsupported format version specified"); + } + } + + RCCResourceLibrary library(formatVersion); if (parser.isSet(nameOption)) library.setInitName(parser.value(nameOption)); if (parser.isSet(rootOption)) { diff --git a/src/tools/rcc/rcc.cpp b/src/tools/rcc/rcc.cpp index 24dc1092ef4..84fe6ef5c70 100644 --- a/src/tools/rcc/rcc.cpp +++ b/src/tools/rcc/rcc.cpp @@ -204,11 +204,13 @@ void RCCFileInfo::writeDataInfo(RCCResourceLibrary &lib) if (text || pass1) lib.writeChar('\n'); - // last modified time stamp - const QDateTime lastModified = m_fileInfo.lastModified(); - lib.writeNumber8(quint64(lastModified.isValid() ? lastModified.toMSecsSinceEpoch() : 0)); - if (text || pass1) - lib.writeChar('\n'); + if (lib.formatVersion() >= 2) { + // last modified time stamp + const QDateTime lastModified = m_fileInfo.lastModified(); + lib.writeNumber8(quint64(lastModified.isValid() ? lastModified.toMSecsSinceEpoch() : 0)); + if (text || pass1) + lib.writeChar('\n'); + } } qint64 RCCFileInfo::writeDataBlob(RCCResourceLibrary &lib, qint64 offset, @@ -341,7 +343,7 @@ RCCResourceLibrary::Strings::Strings() : { } -RCCResourceLibrary::RCCResourceLibrary() +RCCResourceLibrary::RCCResourceLibrary(quint8 formatVersion) : m_root(0), m_format(C_Code), m_verbose(false), @@ -352,7 +354,8 @@ RCCResourceLibrary::RCCResourceLibrary() m_dataOffset(0), m_useNameSpace(CONSTANT_USENAMESPACE), m_errorDevice(0), - m_outDevice(0) + m_outDevice(0), + m_formatVersion(formatVersion) { m_out.reserve(30 * 1000 * 1000); } @@ -1115,7 +1118,9 @@ bool RCCResourceLibrary::writeInitializer() if (m_root) { writeString(" "); writeAddNamespaceFunction("qRegisterResourceData"); - writeString("\n (0x02, qt_resource_struct, " + writeString("\n ("); + writeHex(m_formatVersion); + writeString(" qt_resource_struct, " "qt_resource_name, qt_resource_data);\n"); } writeString(" return 1;\n"); @@ -1136,7 +1141,9 @@ bool RCCResourceLibrary::writeInitializer() if (m_root) { writeString(" "); writeAddNamespaceFunction("qUnregisterResourceData"); - writeString("\n (0x02, qt_resource_struct, " + writeString("\n ("); + writeHex(m_formatVersion); + writeString(" qt_resource_struct, " "qt_resource_name, qt_resource_data);\n"); } writeString(" return 1;\n"); @@ -1153,10 +1160,10 @@ bool RCCResourceLibrary::writeInitializer() } else if (m_format == Binary) { int i = 4; char *p = m_out.data(); - p[i++] = 0; // 0x02 p[i++] = 0; p[i++] = 0; - p[i++] = 2; + p[i++] = 0; + p[i++] = m_formatVersion; p[i++] = (m_treeOffset >> 24) & 0xff; p[i++] = (m_treeOffset >> 16) & 0xff; diff --git a/src/tools/rcc/rcc.h b/src/tools/rcc/rcc.h index 157cd4809f5..19e04e401df 100644 --- a/src/tools/rcc/rcc.h +++ b/src/tools/rcc/rcc.h @@ -48,7 +48,7 @@ class RCCResourceLibrary RCCResourceLibrary &operator=(const RCCResourceLibrary &); public: - RCCResourceLibrary(); + RCCResourceLibrary(quint8 formatVersion); ~RCCResourceLibrary(); bool output(QIODevice &outDevice, QIODevice &tempDevice, QIODevice &errorDevice); @@ -91,6 +91,8 @@ public: QStringList failedResources() const { return m_failedResources; } + int formatVersion() const { return m_formatVersion; } + private: struct Strings { Strings(); @@ -141,6 +143,7 @@ private: QIODevice *m_errorDevice; QIODevice *m_outDevice; QByteArray m_out; + quint8 m_formatVersion; }; QT_END_NAMESPACE diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp index bd5bf08bb83..f2b8b66fed5 100644 --- a/src/widgets/graphicsview/qgraphicsitem.cpp +++ b/src/widgets/graphicsview/qgraphicsitem.cpp @@ -4516,7 +4516,7 @@ void QGraphicsItem::setMatrix(const QMatrix &matrix, bool combine) otherwise, \a matrix \e replaces the current matrix. \a combine is false by default. - To simplify interation with items using a transformed view, QGraphicsItem + To simplify interaction with items using a transformed view, QGraphicsItem provides mapTo... and mapFrom... functions that can translate between items' and the scene's coordinates. For example, you can call mapToScene() to map an item coordiate to a scene coordinate, or mapFromScene() to map diff --git a/src/widgets/kernel/qlayoutitem.cpp b/src/widgets/kernel/qlayoutitem.cpp index ee0c28ec76d..51793bf060b 100644 --- a/src/widgets/kernel/qlayoutitem.cpp +++ b/src/widgets/kernel/qlayoutitem.cpp @@ -767,7 +767,7 @@ QWidgetItemV2::QWidgetItemV2(QWidget *widget) QWidgetItemV2::~QWidgetItemV2() { if (wid) { - QWidgetPrivate *wd = wid->d_func(); + auto *wd = static_cast(QObjectPrivate::get(wid)); if (wd->widgetItem == this) wd->widgetItem = 0; } diff --git a/src/widgets/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp index 12679073030..95fd0e5b2f0 100644 --- a/src/widgets/styles/qfusionstyle.cpp +++ b/src/widgets/styles/qfusionstyle.cpp @@ -55,7 +55,6 @@ #include #include #include -#include #include #include #include @@ -66,7 +65,6 @@ #include #include #include -#include #include #include #include diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm index ae536b6bd92..a9aab10e0fa 100644 --- a/src/widgets/styles/qmacstyle_mac.mm +++ b/src/widgets/styles/qmacstyle_mac.mm @@ -6744,7 +6744,15 @@ QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, break; } case CT_Menu: { - sz = csz; + if (proxy() == this) { + sz = csz; + } else { + QStyleHintReturnMask menuMask; + QStyleOption myOption = *opt; + myOption.rect.setSize(sz); + if (proxy()->styleHint(SH_Menu_Mask, &myOption, widget, &menuMask)) + sz = menuMask.region.boundingRect().size(); + } break; } case CT_HeaderSection:{ const QStyleOptionHeader *header = qstyleoption_cast(opt); diff --git a/src/widgets/styles/qmacstyle_mac_p_p.h b/src/widgets/styles/qmacstyle_mac_p_p.h index 59f6e893b13..9bbd0995a53 100644 --- a/src/widgets/styles/qmacstyle_mac_p_p.h +++ b/src/widgets/styles/qmacstyle_mac_p_p.h @@ -95,7 +95,6 @@ #include #include #include -#include #include #include #include diff --git a/src/widgets/styles/qwindowsvistastyle_p_p.h b/src/widgets/styles/qwindowsvistastyle_p_p.h index ec7c2caad39..db358e6f6cd 100644 --- a/src/widgets/styles/qwindowsvistastyle_p_p.h +++ b/src/widgets/styles/qwindowsvistastyle_p_p.h @@ -58,7 +58,6 @@ #include #include #include -#include #include #include #include diff --git a/src/widgets/widgets/qabstractscrollarea.cpp b/src/widgets/widgets/qabstractscrollarea.cpp index d091d1e9707..abdd946c497 100644 --- a/src/widgets/widgets/qabstractscrollarea.cpp +++ b/src/widgets/widgets/qabstractscrollarea.cpp @@ -65,7 +65,6 @@ #include #endif #ifdef Q_OS_WIN -# include # include #endif diff --git a/src/widgets/widgets/qdialogbuttonbox.cpp b/src/widgets/widgets/qdialogbuttonbox.cpp index 5a789c2d665..a3e55114bb3 100644 --- a/src/widgets/widgets/qdialogbuttonbox.cpp +++ b/src/widgets/widgets/qdialogbuttonbox.cpp @@ -711,8 +711,7 @@ void QDialogButtonBox::removeButton(QAbstractButton *button) return; // Remove it from the standard button hash first and then from the roles - if (QPushButton *pushButton = qobject_cast(button)) - d->standardButtonHash.remove(pushButton); + d->standardButtonHash.remove(reinterpret_cast(button)); for (int i = 0; i < NRoles; ++i) { QList &list = d->buttonLists[i]; for (int j = 0; j < list.count(); ++j) { @@ -878,7 +877,7 @@ void QDialogButtonBoxPrivate::_q_handleButtonDestroyed() Q_Q(QDialogButtonBox); if (QObject *object = q->sender()) { QBoolBlocker skippy(internalRemove); - q->removeButton(static_cast(object)); + q->removeButton(reinterpret_cast(object)); } } diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index 2917083415b..1925b583265 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -401,17 +401,6 @@ void QMenuPrivate::updateActionRects(const QRect &screen) const itemsDirty = 0; } -QSize QMenuPrivate::adjustMenuSizeForScreen(const QRect &screen) -{ - Q_Q(QMenu); - QSize ret = screen.size(); - itemsDirty = true; - updateActionRects(screen); - const int fw = q->style()->pixelMetric(QStyle::PM_MenuPanelWidth, 0, q); - ret.setWidth(actionRects.at(getLastVisibleAction()).right() + fw); - return ret; -} - int QMenuPrivate::getLastVisibleAction() const { //let's try to get the last visible action @@ -2265,7 +2254,8 @@ void QMenu::popup(const QPoint &p, QAction *atAction) else pos = p; - QSize size = sizeHint(); + const QSize menuSizeHint(sizeHint()); + QSize size = menuSizeHint; QRect screen; #ifndef QT_NO_GRAPHICSVIEW bool isEmbedded = !bypassGraphicsProxyWidget(this) && d->nearestGraphicsProxyWidget(this); @@ -2278,13 +2268,11 @@ void QMenu::popup(const QPoint &p, QAction *atAction) bool adjustToDesktop = !window()->testAttribute(Qt::WA_DontShowOnScreen); // if the screens have very different geometries and the menu is too big, we have to recalculate - if (size.height() > screen.height() || size.width() > screen.width()) { - size = d->adjustMenuSizeForScreen(screen); - adjustToDesktop = true; - } - // Layout is not right, we might be able to save horizontal space - if (d->ncols >1 && size.height() < screen.height()) { - size = d->adjustMenuSizeForScreen(screen); + if ((size.height() > screen.height() || size.width() > screen.width()) || + // Layout is not right, we might be able to save horizontal space + (d->ncols >1 && size.height() < screen.height())) { + size.setWidth(qMin(menuSizeHint.width(), screen.width() - desktopFrame * 2)); + size.setHeight(qMin(menuSizeHint.height(), screen.height() - desktopFrame * 2)); adjustToDesktop = true; } @@ -2337,7 +2325,6 @@ void QMenu::popup(const QPoint &p, QAction *atAction) d->mousePopupPos = mouse; const bool snapToMouse = !d->causedPopup.widget && (QRect(p.x() - 3, p.y() - 3, 6, 6).contains(mouse)); - const QSize menuSize(sizeHint()); if (adjustToDesktop) { // handle popup falling "off screen" if (isRightToLeft()) { @@ -2371,7 +2358,7 @@ void QMenu::popup(const QPoint &p, QAction *atAction) if (pos.y() < screen.top() + desktopFrame) pos.setY(screen.top() + desktopFrame); - if (pos.y() + menuSize.height() - 1 > screen.bottom() - desktopFrame) { + if (pos.y() + menuSizeHint.height() - 1 > screen.bottom() - desktopFrame) { if (d->scroll) { d->scroll->scrollFlags |= uint(QMenuPrivate::QMenuScroller::ScrollDown); int y = qMax(screen.y(),pos.y()); @@ -2384,29 +2371,29 @@ void QMenu::popup(const QPoint &p, QAction *atAction) } const int subMenuOffset = style()->pixelMetric(QStyle::PM_SubMenuOverlap, 0, this); QMenu *caused = qobject_cast(d_func()->causedPopup.widget); - if (caused && caused->geometry().width() + menuSize.width() + subMenuOffset < screen.width()) { + if (caused && caused->geometry().width() + menuSizeHint.width() + subMenuOffset < screen.width()) { QRect parentActionRect(caused->d_func()->actionRect(caused->d_func()->currentAction)); const QPoint actionTopLeft = caused->mapToGlobal(parentActionRect.topLeft()); parentActionRect.moveTopLeft(actionTopLeft); if (isRightToLeft()) { - if ((pos.x() + menuSize.width() > parentActionRect.left() - subMenuOffset) + if ((pos.x() + menuSizeHint.width() > parentActionRect.left() - subMenuOffset) && (pos.x() < parentActionRect.right())) { - pos.rx() = parentActionRect.left() - menuSize.width(); + pos.rx() = parentActionRect.left() - menuSizeHint.width(); if (pos.x() < screen.x()) pos.rx() = parentActionRect.right(); - if (pos.x() + menuSize.width() > screen.x() + screen.width()) + if (pos.x() + menuSizeHint.width() > screen.x() + screen.width()) pos.rx() = screen.x(); } } else { if ((pos.x() < parentActionRect.right() + subMenuOffset) - && (pos.x() + menuSize.width() > parentActionRect.left())) + && (pos.x() + menuSizeHint.width() > parentActionRect.left())) { pos.rx() = parentActionRect.right(); - if (pos.x() + menuSize.width() > screen.x() + screen.width()) - pos.rx() = parentActionRect.left() - menuSize.width(); + if (pos.x() + menuSizeHint.width() > screen.x() + screen.width()) + pos.rx() = parentActionRect.left() - menuSizeHint.width(); if (pos.x() < screen.x()) - pos.rx() = screen.x() + screen.width() - menuSize.width(); + pos.rx() = screen.x() + screen.width() - menuSizeHint.width(); } } } @@ -3514,11 +3501,22 @@ void QMenu::internalDelayedPopup() d->activeMenu->d_func()->causedPopup.widget = this; d->activeMenu->d_func()->causedPopup.action = d->currentAction; + QRect screen; +#ifndef QT_NO_GRAPHICSVIEW + bool isEmbedded = !bypassGraphicsProxyWidget(this) && d->nearestGraphicsProxyWidget(this); + if (isEmbedded) + screen = d->popupGeometry(this); + else +#endif + screen = d->popupGeometry(QApplication::desktop()->screenNumber(pos())); + int subMenuOffset = style()->pixelMetric(QStyle::PM_SubMenuOverlap, 0, this); const QRect actionRect(d->actionRect(d->currentAction)); - const QPoint rightPos(mapToGlobal(QPoint(actionRect.right() + subMenuOffset + 1, actionRect.top()))); + QPoint subMenuPos(mapToGlobal(QPoint(actionRect.right() + subMenuOffset + 1, actionRect.top()))); + if (subMenuPos.x() > screen.right()) + subMenuPos.setX(QCursor::pos().x()); - d->activeMenu->popup(rightPos); + d->activeMenu->popup(subMenuPos); d->sloppyState.setSubMenuPopup(actionRect, d->currentAction, d->activeMenu); #if !defined(Q_OS_DARWIN) diff --git a/src/widgets/widgets/qmenu_p.h b/src/widgets/widgets/qmenu_p.h index 64291e842fb..898fa3161be 100644 --- a/src/widgets/widgets/qmenu_p.h +++ b/src/widgets/widgets/qmenu_p.h @@ -311,7 +311,6 @@ public: mutable uint ncols : 4; //4 bits is probably plenty uint collapsibleSeparators : 1; uint toolTipsVisible : 1; - QSize adjustMenuSizeForScreen(const QRect & screen); int getLastVisibleAction() const; bool activationRecursionGuard; diff --git a/src/widgets/widgets/qwidgetresizehandler.cpp b/src/widgets/widgets/qwidgetresizehandler.cpp index 016598849b8..dc7353a6cac 100644 --- a/src/widgets/widgets/qwidgetresizehandler.cpp +++ b/src/widgets/widgets/qwidgetresizehandler.cpp @@ -112,9 +112,9 @@ bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee) return false; } - QMouseEvent *e = (QMouseEvent*)ee; - switch (e->type()) { + switch (ee->type()) { case QEvent::MouseButtonPress: { + QMouseEvent *e = static_cast(ee); if (w->isMaximized()) break; if (!widget->rect().contains(widget->mapFromGlobal(e->globalPos()))) @@ -155,7 +155,7 @@ bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee) case QEvent::MouseButtonRelease: if (w->isMaximized()) break; - if (e->button() == Qt::LeftButton) { + if (static_cast(ee)->button() == Qt::LeftButton) { moveResizeMode = false; buttonDown = false; widget->releaseMouse(); @@ -171,6 +171,7 @@ bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee) case QEvent::MouseMove: { if (w->isMaximized()) break; + QMouseEvent *e = static_cast(ee); buttonDown = buttonDown && (e->buttons() & Qt::LeftButton); // safety, state machine broken! bool me = movingEnabled; movingEnabled = (me && o == widget && (buttonDown || moveResizeMode)); @@ -184,11 +185,11 @@ bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee) } } break; case QEvent::KeyPress: - keyPressEvent((QKeyEvent*)e); + keyPressEvent(static_cast(ee)); break; case QEvent::ShortcutOverride: if (buttonDown) { - ((QKeyEvent*)ee)->accept(); + ee->accept(); return true; } break; diff --git a/sync.profile b/sync.profile index add6766c49b..023751f472a 100644 --- a/sync.profile +++ b/sync.profile @@ -53,7 +53,7 @@ "qnumeric.h" => "QtNumeric", "qvariant.h" => "QVariantHash,QVariantList,QVariantMap", "qgl.h" => "QGL", - "qsql.h" => "QSql", + "qtsqlglobal.h" => "QSql", "qssl.h" => "QSsl", "qtest.h" => "QTest", "qtconcurrentmap.h" => "QtConcurrentMap", diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index cadd97fb3af..d3c4d470f5b 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -23,6 +23,7 @@ uikit: SUBDIRS = corelib gui wince: SUBDIRS -= printsupport cross_compile: SUBDIRS -= tools cmake installed_cmake +else:!qtConfig(process): SUBDIRS -= tools !qtHaveModule(opengl): SUBDIRS -= opengl !qtHaveModule(gui): SUBDIRS -= gui !qtHaveModule(widgets): SUBDIRS -= widgets diff --git a/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp b/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp index bdd862e3166..0f2e9b5d687 100644 --- a/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp +++ b/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp @@ -33,7 +33,9 @@ #include #include #include -#include +#if QT_CONFIG(process) +# include +#endif #include class tst_QTextCodec : public QObject @@ -2085,7 +2087,7 @@ void tst_QTextCodec::codecForUtfText() #if defined(Q_OS_UNIX) void tst_QTextCodec::toLocal8Bit() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else QProcess process; diff --git a/tests/auto/corelib/codecs/utf8/utf8data.cpp b/tests/auto/corelib/codecs/utf8/utf8data.cpp index 603ebbbcef8..2267dc85143 100644 --- a/tests/auto/corelib/codecs/utf8/utf8data.cpp +++ b/tests/auto/corelib/codecs/utf8/utf8data.cpp @@ -85,10 +85,10 @@ void loadInvalidUtf8Rows() // overlong 6: xxxx:xxz0 xz00:0000 xz00:0000 xz00:0000 xz00:0001 xz00:0001 QTest::newRow("overlong-1-6") << QByteArray("\xFC\x80\x80\x80\x81\x81"); - // NBSP: U+00A0: 10 00 0000 + // U+0080: 10 00 0000 // proper encoding: xxz0:0010 xz00:0000 // overlong 3: xxxz:0000 xz00:0010 xz00:0000 - QTest::newRow("overlong-2-3") << QByteArray("\xC0\x82\x80"); + QTest::newRow("overlong-2-3") << QByteArray("\xE0\x82\x80"); // overlong 4: xxxx:z000 xz00:0000 xz00:0010 xz00:0000 QTest::newRow("overlong-2-4") << QByteArray("\xF0\x80\x82\x80"); // overlong 5: xxxx:xz00 xz00:0000 xz00:0000 xz00:0010 xz00:0000 diff --git a/tests/auto/corelib/global/qlogging/tst_qlogging.cpp b/tests/auto/corelib/global/qlogging/tst_qlogging.cpp index c2d73380425..bb8bb6cc212 100644 --- a/tests/auto/corelib/global/qlogging/tst_qlogging.cpp +++ b/tests/auto/corelib/global/qlogging/tst_qlogging.cpp @@ -29,7 +29,9 @@ #include #include -#include +#if QT_CONFIG(process) +# include +#endif #include class tst_qmessagehandler : public QObject @@ -102,7 +104,7 @@ void tst_qmessagehandler::initTestCase() QVERIFY2(!m_appDir.isEmpty(), qPrintable( QString::fromLatin1("Couldn't find helper app dir starting from %1.").arg(QDir::currentPath()))); -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) m_baseEnvironment = QProcess::systemEnvironment(); for (int i = 0; i < m_baseEnvironment.count(); ++i) { if (m_baseEnvironment.at(i).startsWith("QT_MESSAGE_PATTERN=")) { @@ -110,7 +112,7 @@ void tst_qmessagehandler::initTestCase() break; } } -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) } void tst_qmessagehandler::cleanup() @@ -813,7 +815,7 @@ void tst_qmessagehandler::qMessagePattern_data() void tst_qmessagehandler::qMessagePattern() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("This test requires QProcess support"); #else QFETCH(QString, pattern); @@ -855,7 +857,7 @@ void tst_qmessagehandler::qMessagePattern() void tst_qmessagehandler::setMessagePattern() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("This test requires QProcess support"); #else @@ -892,7 +894,7 @@ void tst_qmessagehandler::setMessagePattern() output.replace("\r\n", "\n"); #endif QCOMPARE(QString::fromLatin1(output), QString::fromLatin1(expected)); -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) } Q_DECLARE_METATYPE(QtMsgType) diff --git a/tests/auto/corelib/io/qdir/tst_qdir.cpp b/tests/auto/corelib/io/qdir/tst_qdir.cpp index b64de488eda..762cb539e01 100644 --- a/tests/auto/corelib/io/qdir/tst_qdir.cpp +++ b/tests/auto/corelib/io/qdir/tst_qdir.cpp @@ -855,7 +855,7 @@ void tst_QDir::entryList() void tst_QDir::entryListTimedSort() { -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) const QString touchBinary = "/bin/touch"; if (!QFile::exists(touchBinary)) QSKIP("/bin/touch not found"); @@ -889,7 +889,7 @@ void tst_QDir::entryListTimedSort() QCOMPARE(actual.last(), aFileInfo.fileName()); #else QSKIP("This test requires QProcess support."); -#endif // QT_NO_PROCESS +#endif // QT_CONFIG(process) } void tst_QDir::entryListSimple_data() diff --git a/tests/auto/corelib/io/qfile/tst_qfile.cpp b/tests/auto/corelib/io/qfile/tst_qfile.cpp index 3620043eb18..a6da6d8e697 100644 --- a/tests/auto/corelib/io/qfile/tst_qfile.cpp +++ b/tests/auto/corelib/io/qfile/tst_qfile.cpp @@ -50,7 +50,9 @@ QT_END_NAMESPACE #if !defined(QT_NO_NETWORK) #include #endif -#include +#if QT_CONFIG(process) +# include +#endif #ifdef Q_OS_WIN # include #else @@ -884,7 +886,7 @@ void tst_QFile::readAllBuffer() QFile::remove(fileName); } -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) class StdinReaderProcessGuard { // Ensure the stdin reader process is stopped on destruction. Q_DISABLE_COPY(StdinReaderProcessGuard) @@ -908,11 +910,11 @@ public: private: QProcess *m_process; }; -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) void tst_QFile::readAllStdin() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else QByteArray lotsOfData(1024, '@'); // 10 megs @@ -935,7 +937,7 @@ void tst_QFile::readAllStdin() void tst_QFile::readLineStdin() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else QByteArray lotsOfData(1024, '@'); // 10 megs @@ -976,7 +978,7 @@ void tst_QFile::readLineStdin() void tst_QFile::readLineStdin_lineByLine() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else for (int i = 0; i < 2; ++i) { diff --git a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp index 7bdebd1593c..87b579bb2b0 100644 --- a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp +++ b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp @@ -31,7 +31,6 @@ #include #include #include -#include #include #include #include diff --git a/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp b/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp index b21701f3414..a13ff0358af 100644 --- a/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp +++ b/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp @@ -72,7 +72,7 @@ void tst_QLockFile::initTestCase() { #if defined(Q_OS_ANDROID) QSKIP("This test requires deploying and running external console applications"); -#elif defined(QT_NO_PROCESS) +#elif !QT_CONFIG(process) QSKIP("This test requires QProcess support"); #else QVERIFY2(dir.isValid(), qPrintable(dir.errorString())); @@ -80,7 +80,7 @@ void tst_QLockFile::initTestCase() QString testdata_dir = QFileInfo(QFINDTESTDATA("qlockfiletesthelper")).absolutePath(); QVERIFY2(QDir::setCurrent(testdata_dir), qPrintable("Could not chdir to " + testdata_dir)); m_helperApp = "qlockfiletesthelper/qlockfile_test_helper"; -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) } void tst_QLockFile::lockUnlock() @@ -114,7 +114,7 @@ void tst_QLockFile::lockUnlock() void tst_QLockFile::lockOutOtherProcess() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("This test requires QProcess support"); #else // Lock @@ -138,7 +138,7 @@ void tst_QLockFile::lockOutOtherProcess() QCOMPARE(ret, int(QLockFile::NoError)); // Lock doesn't survive process though (on clean exit) QVERIFY(!QFile::exists(fileName)); -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) } static QLockFile::LockError tryLockFromThread(const QString &fileName) @@ -254,7 +254,7 @@ void tst_QLockFile::staleLockFromCrashedProcess_data() void tst_QLockFile::staleLockFromCrashedProcess() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("This test requires QProcess support"); #else QFETCH(int, staleLockTime); @@ -274,12 +274,12 @@ void tst_QLockFile::staleLockFromCrashedProcess() QVERIFY(secondLock.tryLock()); #endif QCOMPARE(int(secondLock.error()), int(QLockFile::NoError)); -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) } void tst_QLockFile::staleLockFromCrashedProcessReusedPid() { -#if defined(QT_NO_PROCESS) +#if !QT_CONFIG(process) QSKIP("This test requires QProcess support"); #elif defined(Q_OS_WINRT) || defined(QT_PLATFORM_UIKIT) QSKIP("We cannot retrieve information about other processes on this platform."); @@ -298,12 +298,12 @@ void tst_QLockFile::staleLockFromCrashedProcessReusedPid() secondLock.setStaleLockTime(0); QVERIFY(secondLock.tryLock()); QCOMPARE(int(secondLock.error()), int(QLockFile::NoError)); -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) } void tst_QLockFile::staleShortLockFromBusyProcess() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("This test requires QProcess support"); #else const QString fileName = dir.path() + "/staleLockFromBusyProcess"; @@ -331,12 +331,12 @@ void tst_QLockFile::staleShortLockFromBusyProcess() proc.waitForFinished(); QVERIFY(secondLock.tryLock()); -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) } void tst_QLockFile::staleLongLockFromBusyProcess() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("This test requires QProcess support"); #else const QString fileName = dir.path() + "/staleLockFromBusyProcess"; @@ -358,7 +358,7 @@ void tst_QLockFile::staleLongLockFromBusyProcess() QVERIFY(!secondLock.removeStaleLockFile()); proc.waitForFinished(); -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) } static QString tryStaleLockFromThread(const QString &fileName) @@ -388,7 +388,7 @@ static QString tryStaleLockFromThread(const QString &fileName) void tst_QLockFile::staleLockRace() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("This test requires QProcess support"); #else // Multiple threads notice a stale lock at the same time @@ -406,7 +406,7 @@ void tst_QLockFile::staleLockRace() synchronizer.waitForFinished(); foreach (const QFuture &future, synchronizer.futures()) QVERIFY2(future.result().isEmpty(), qPrintable(future.result())); -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) } void tst_QLockFile::noPermissions() diff --git a/tests/auto/corelib/io/qprocess/testForwarding/main.cpp b/tests/auto/corelib/io/qprocess/testForwarding/main.cpp index d76156219ea..b7367ff8c6a 100644 --- a/tests/auto/corelib/io/qprocess/testForwarding/main.cpp +++ b/tests/auto/corelib/io/qprocess/testForwarding/main.cpp @@ -38,7 +38,6 @@ int main(int argc, char **argv) if (argc < 3) return 13; -#ifndef QT_NO_PROCESS QProcess process; QProcess::ProcessChannelMode mode = (QProcess::ProcessChannelMode)atoi(argv[1]); @@ -69,6 +68,5 @@ int main(int argc, char **argv) if ((mode == QProcess::ForwardedErrorChannel || mode == QProcess::ForwardedChannels) && !process.readAllStandardError().isEmpty()) return 6; -#endif return 0; } diff --git a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp index 03c28f4d0b0..0783a65d8b3 100644 --- a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp +++ b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp @@ -53,7 +53,6 @@ public slots: void cleanupTestCase(); void init(); -#ifndef QT_NO_PROCESS private slots: void getSetCheck(); void constructing(); @@ -159,26 +158,18 @@ protected slots: private: qint64 bytesAvailable; QTemporaryDir m_temporaryDir; -#endif //QT_NO_PROCESS }; void tst_QProcess::initTestCase() { -#ifdef QT_NO_PROCESS - QSKIP("This test requires QProcess support"); -#else QVERIFY2(m_temporaryDir.isValid(), qPrintable(m_temporaryDir.errorString())); // chdir to our testdata path and execute helper apps relative to that. QString testdata_dir = QFileInfo(QFINDTESTDATA("testProcessNormal")).absolutePath(); QVERIFY2(QDir::setCurrent(testdata_dir), qPrintable("Could not chdir to " + testdata_dir)); -#endif } void tst_QProcess::cleanupTestCase() { -#ifdef QT_NO_PROCESS - QSKIP("This test requires QProcess support"); -#endif } void tst_QProcess::init() @@ -186,8 +177,6 @@ void tst_QProcess::init() bytesAvailable = 0; } -#ifndef QT_NO_PROCESS - // Testing get/set functions void tst_QProcess::getSetCheck() { @@ -2406,7 +2395,5 @@ void tst_QProcess::processEventsInAReadyReadSlot() QVERIFY(process.waitForFinished()); } -#endif //QT_NO_PROCESS - QTEST_MAIN(tst_QProcess) #include "tst_qprocess.moc" diff --git a/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp b/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp index 7f29e2a7d72..0e423a56ca0 100644 --- a/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp +++ b/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp @@ -40,8 +40,9 @@ #include #include #include -#include - +#if QT_CONFIG(process) +# include +#endif #include "../../../network-settings.h" @@ -1493,7 +1494,7 @@ void tst_QTextStream::pos3LargeFile() // ------------------------------------------------------------------------------ void tst_QTextStream::readStdin() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else QProcess stdinProcess; @@ -1520,7 +1521,7 @@ void tst_QTextStream::readStdin() // ------------------------------------------------------------------------------ void tst_QTextStream::readAllFromStdin() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else QProcess stdinProcess; @@ -1541,7 +1542,7 @@ void tst_QTextStream::readAllFromStdin() // ------------------------------------------------------------------------------ void tst_QTextStream::readLineFromStdin() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else QProcess stdinProcess; diff --git a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp index a7c608ec2ed..31e76c4407b 100644 --- a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp +++ b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp @@ -928,7 +928,7 @@ void tst_QCoreApplication::threadedEventDelivery() QCOMPARE(receiver.recordedEvents.contains(QEvent::User + 1), eventsReceived); } -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) void tst_QCoreApplication::addRemoveLibPaths() { QStringList paths = QCoreApplication::libraryPaths(); diff --git a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.h b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.h index 342bd272a34..b6c20a915fe 100644 --- a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.h +++ b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.h @@ -59,7 +59,7 @@ private slots: void applicationEventFilters_auxThread(); void threadedEventDelivery_data(); void threadedEventDelivery(); -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) void addRemoveLibPaths(); #endif }; diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index f44c40c27fa..e4677c6e341 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -41,8 +41,9 @@ #include #include #include -#include - +#if QT_CONFIG(process) +# include +#endif #include "qobject.h" #ifdef QT_BUILD_INTERNAL #include @@ -281,7 +282,7 @@ static void playWithObjects() void tst_QObject::initTestCase() { -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) const QString testDataDir = QFileInfo(QFINDTESTDATA("signalbug")).absolutePath(); QVERIFY2(QDir::setCurrent(testDataDir), qPrintable("Could not chdir to " + testDataDir)); #endif @@ -3006,7 +3007,7 @@ void tst_QObject::dynamicProperties() void tst_QObject::recursiveSignalEmission() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else QProcess proc; diff --git a/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp b/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp index 26caff4301f..8833321b4fc 100644 --- a/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp +++ b/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp @@ -28,7 +28,9 @@ #include #include -#include +#if QT_CONFIG(process) +# include +#endif #include #include #include @@ -133,7 +135,7 @@ tst_QSharedMemory::~tst_QSharedMemory() void tst_QSharedMemory::initTestCase() { -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) QVERIFY2(!m_helperBinary.isEmpty(), "Could not find helper binary"); #endif } @@ -455,7 +457,7 @@ void tst_QSharedMemory::emptyMemory() #if !defined(Q_OS_WIN) void tst_QSharedMemory::readOnly() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else rememberKey("readonly_segfault"); @@ -736,7 +738,7 @@ void tst_QSharedMemory::simpleThreadedProducerConsumer() void tst_QSharedMemory::simpleProcessProducerConsumer_data() { -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) QTest::addColumn("processes"); int tries = 5; for (int i = 0; i < tries; ++i) { @@ -751,7 +753,7 @@ void tst_QSharedMemory::simpleProcessProducerConsumer_data() */ void tst_QSharedMemory::simpleProcessProducerConsumer() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else QFETCH(int, processes); diff --git a/tests/auto/corelib/kernel/qsystemsemaphore/test/tst_qsystemsemaphore.cpp b/tests/auto/corelib/kernel/qsystemsemaphore/test/tst_qsystemsemaphore.cpp index 641ea5fc9db..6ff1e149767 100644 --- a/tests/auto/corelib/kernel/qsystemsemaphore/test/tst_qsystemsemaphore.cpp +++ b/tests/auto/corelib/kernel/qsystemsemaphore/test/tst_qsystemsemaphore.cpp @@ -172,7 +172,7 @@ void tst_QSystemSemaphore::release() void tst_QSystemSemaphore::basicProcesses() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else QSystemSemaphore sem("store", 0, QSystemSemaphore::Create); @@ -208,7 +208,7 @@ void tst_QSystemSemaphore::processes_data() void tst_QSystemSemaphore::processes() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else QSystemSemaphore sem("store", 1, QSystemSemaphore::Create); @@ -237,7 +237,7 @@ void tst_QSystemSemaphore::processes() #if !defined(Q_OS_WIN) && !defined(QT_POSIX_IPC) void tst_QSystemSemaphore::undo() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else QSystemSemaphore sem("store", 1, QSystemSemaphore::Create); @@ -262,7 +262,7 @@ void tst_QSystemSemaphore::undo() void tst_QSystemSemaphore::initialValue() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else QSystemSemaphore sem("store", 1, QSystemSemaphore::Create); diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/tst_qmimedatabase-cache.cpp b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/tst_qmimedatabase-cache.cpp index 1ca730d0c77..529c8942b37 100644 --- a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/tst_qmimedatabase-cache.cpp +++ b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/tst_qmimedatabase-cache.cpp @@ -36,7 +36,7 @@ void tst_QMimeDatabase::initTestCaseInternal() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else const QString mimeDirName = m_globalXdgDir + QStringLiteral("/mime"); diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp index 2edb94d542b..02ba987ccda 100644 --- a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp +++ b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp @@ -858,7 +858,7 @@ void tst_QMimeDatabase::fromThreads() QVERIFY(tp.waitForDone(60000)); } -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) enum { UpdateMimeDatabaseTimeout = 120 * 1000 // 2min @@ -901,7 +901,7 @@ static bool waitAndRunUpdateMimeDatabase(const QString &path) } return runUpdateMimeDatabase(path); } -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) static void checkHasMimeType(const QString &mimeType) { @@ -936,7 +936,7 @@ void tst_QMimeDatabase::installNewGlobalMimeType() QSKIP("This test requires XDG_DATA_DIRS"); #endif -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("This test requires QProcess support"); #else qmime_secondsBetweenChecks = 0; @@ -989,12 +989,12 @@ void tst_QMimeDatabase::installNewGlobalMimeType() QCOMPARE(db.mimeTypeForFile(QLatin1String("foo.ymu"), QMimeDatabase::MatchExtension).name(), QString::fromLatin1("application/octet-stream")); QVERIFY(!db.mimeTypeForName(QLatin1String("text/x-suse-ymp")).isValid()); -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) } void tst_QMimeDatabase::installNewLocalMimeType() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("This test requires QProcess support"); #else qmime_secondsBetweenChecks = 0; @@ -1057,7 +1057,7 @@ void tst_QMimeDatabase::installNewLocalMimeType() QCOMPARE(db.mimeTypeForFile(QLatin1String("foo.ymu"), QMimeDatabase::MatchExtension).name(), QString::fromLatin1("application/octet-stream")); QVERIFY(!db.mimeTypeForName(QLatin1String("text/x-suse-ymp")).isValid()); -#endif +#endif // QT_CONFIG(process) } QTEST_GUILESS_MAIN(tst_QMimeDatabase) diff --git a/tests/auto/corelib/plugin/qfactoryloader/tst_qfactoryloader.cpp b/tests/auto/corelib/plugin/qfactoryloader/tst_qfactoryloader.cpp index fe6b1ca2993..34dc1036721 100644 --- a/tests/auto/corelib/plugin/qfactoryloader/tst_qfactoryloader.cpp +++ b/tests/auto/corelib/plugin/qfactoryloader/tst_qfactoryloader.cpp @@ -29,11 +29,12 @@ #include #include #include +#include #include #include "plugin1/plugininterface1.h" #include "plugin2/plugininterface2.h" -#ifdef QT_NO_LIBRARY +#if !QT_CONFIG(library) Q_IMPORT_PLUGIN(Plugin1) Q_IMPORT_PLUGIN(Plugin2) #endif @@ -54,7 +55,7 @@ void tst_QFactoryLoader::initTestCase() { const QString binFolder = QFINDTESTDATA(binFolderC); QVERIFY2(!binFolder.isEmpty(), "Unable to locate 'bin' folder"); -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) QCoreApplication::setLibraryPaths(QStringList(QFileInfo(binFolder).absolutePath())); #endif } diff --git a/tests/auto/corelib/plugin/quuid/tst_quuid.cpp b/tests/auto/corelib/plugin/quuid/tst_quuid.cpp index e2c137e25fb..cb45336d4cf 100644 --- a/tests/auto/corelib/plugin/quuid/tst_quuid.cpp +++ b/tests/auto/corelib/plugin/quuid/tst_quuid.cpp @@ -91,7 +91,7 @@ void tst_QUuid::initTestCase() //"{1ab6e93a-b1cb-4a87-ba47-ec7e99039a7b}"; uuidB = QUuid(0x1ab6e93a, 0xb1cb, 0x4a87, 0xba, 0x47, 0xec, 0x7e, 0x99, 0x03, 0x9a, 0x7b); -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) // chdir to the directory containing our testdata, then refer to it with relative paths QString testdata_dir = QFileInfo(QFINDTESTDATA("testProcessUniqueness")).absolutePath(); QVERIFY2(QDir::setCurrent(testdata_dir), qPrintable("Could not chdir to " + testdata_dir)); @@ -338,7 +338,7 @@ void tst_QUuid::threadUniqueness() void tst_QUuid::processUniqueness() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else QProcess process; diff --git a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp index b8841bb6a34..a546cad225b 100644 --- a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp +++ b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp @@ -43,6 +43,11 @@ # undef interface #endif +struct ResultStoreInt : QtPrivate::ResultStoreBase +{ + ~ResultStoreInt() { clear(); } +}; + class tst_QFuture: public QObject { Q_OBJECT @@ -78,7 +83,7 @@ void tst_QFuture::resultStore() int int2 = 2; { - QtPrivate::ResultStore store; + ResultStoreInt store; QCOMPARE(store.begin(), store.end()); QCOMPARE(store.resultAt(0), store.end()); QCOMPARE(store.resultAt(1), store.end()); @@ -86,9 +91,9 @@ void tst_QFuture::resultStore() { - QtPrivate::ResultStoreBase store; - store.addResult(-1, &int0); // note to self: adding a pointer to the stack here is ok since - store.addResult(1, &int1); // ResultStoreBase does not take ownership, only ResultStore<> does. + ResultStoreInt store; + store.addResult(-1, &int0); + store.addResult(1, &int1); QtPrivate::ResultIteratorBase it = store.begin(); QCOMPARE(it.resultIndex(), 0); QVERIFY(it == store.begin()); @@ -108,9 +113,9 @@ void tst_QFuture::resultStore() QVector vec1 = QVector() << 4 << 5; { - QtPrivate::ResultStoreBase store; - store.addResults(-1, &vec0, 2, 2); - store.addResults(-1, &vec1, 2, 2); + ResultStoreInt store; + store.addResults(-1, &vec0, 2); + store.addResults(-1, &vec1, 2); QtPrivate::ResultIteratorBase it = store.begin(); QCOMPARE(it.resultIndex(), 0); QCOMPARE(it, store.begin()); @@ -131,9 +136,9 @@ void tst_QFuture::resultStore() QCOMPARE(it, store.end()); } { - QtPrivate::ResultStoreBase store; + ResultStoreInt store; store.addResult(-1, &int0); - store.addResults(-1, &vec1, 2, 2); + store.addResults(-1, &vec1, 2); store.addResult(-1, &int1); QtPrivate::ResultIteratorBase it = store.begin(); @@ -162,7 +167,7 @@ void tst_QFuture::resultStore() QCOMPARE(store.resultAt(4), store.end()); } { - QtPrivate::ResultStore store; + ResultStoreInt store; store.addResult(-1, &int0); store.addResults(-1, &vec0); store.addResult(-1, &int1); @@ -186,36 +191,36 @@ void tst_QFuture::resultStore() ++it; QVERIFY(it == store.end()); - QCOMPARE(store.resultAt(0).value(), int0); - QCOMPARE(store.resultAt(1).value(), vec0[0]); - QCOMPARE(store.resultAt(2).value(), vec0[1]); - QCOMPARE(store.resultAt(3).value(), int1); + QCOMPARE(store.resultAt(0).value(), int0); + QCOMPARE(store.resultAt(1).value(), vec0[0]); + QCOMPARE(store.resultAt(2).value(), vec0[1]); + QCOMPARE(store.resultAt(3).value(), int1); } { - QtPrivate::ResultStore store; + ResultStoreInt store; store.addResult(-1, &int0); store.addResults(-1, &vec0); store.addResult(200, &int1); - QCOMPARE(store.resultAt(0).value(), int0); - QCOMPARE(store.resultAt(1).value(), vec0[0]); - QCOMPARE(store.resultAt(2).value(), vec0[1]); - QCOMPARE(store.resultAt(200).value(), int1); + QCOMPARE(store.resultAt(0).value(), int0); + QCOMPARE(store.resultAt(1).value(), vec0[0]); + QCOMPARE(store.resultAt(2).value(), vec0[1]); + QCOMPARE(store.resultAt(200).value(), int1); } { - QtPrivate::ResultStore store; + ResultStoreInt store; store.addResult(1, &int1); store.addResult(0, &int0); store.addResult(-1, &int2); - QCOMPARE(store.resultAt(0).value(), int0); - QCOMPARE(store.resultAt(1).value(), int1); - QCOMPARE(store.resultAt(2).value(), int2); + QCOMPARE(store.resultAt(0).value(), int0); + QCOMPARE(store.resultAt(1).value(), int1); + QCOMPARE(store.resultAt(2).value(), int2); } { - QtPrivate::ResultStore store; + ResultStoreInt store; QCOMPARE(store.contains(0), false); QCOMPARE(store.contains(1), false); QCOMPARE(store.contains(INT_MAX), false); @@ -223,7 +228,7 @@ void tst_QFuture::resultStore() { // Test filter mode, where "gaps" in the result array aren't allowed. - QtPrivate::ResultStore store; + ResultStoreInt store; store.setFilterMode(true); store.addResult(0, &int0); @@ -257,7 +262,7 @@ void tst_QFuture::resultStore() { // test canceled results - QtPrivate::ResultStore store; + ResultStoreInt store; store.setFilterMode(true); store.addResult(0, &int0); @@ -294,7 +299,7 @@ void tst_QFuture::resultStore() { // test addResult return value - QtPrivate::ResultStore store; + ResultStoreInt store; store.setFilterMode(true); store.addResult(0, &int0); @@ -340,7 +345,7 @@ void tst_QFuture::resultStore() { // test resultCount in non-filtered mode. It should always be possible // to iterate through the results 0 to resultCount. - QtPrivate::ResultStore store; + ResultStoreInt store; store.addResult(0, &int0); QCOMPARE(store.count(), 1); @@ -354,7 +359,7 @@ void tst_QFuture::resultStore() } { - QtPrivate::ResultStore store; + ResultStoreInt store; store.addResult(2, &int0); QCOMPARE(store.count(), 0); @@ -366,7 +371,7 @@ void tst_QFuture::resultStore() } { - QtPrivate::ResultStore store; + ResultStoreInt store; store.addResults(2, &vec1); QCOMPARE(store.count(), 0); @@ -378,7 +383,7 @@ void tst_QFuture::resultStore() } { - QtPrivate::ResultStore store; + ResultStoreInt store; store.addResults(2, &vec1); QCOMPARE(store.count(), 0); @@ -386,7 +391,7 @@ void tst_QFuture::resultStore() QCOMPARE(store.count(), 4); } { - QtPrivate::ResultStore store; + ResultStoreInt store; store.addResults(3, &vec1); QCOMPARE(store.count(), 0); @@ -398,7 +403,7 @@ void tst_QFuture::resultStore() } { - QtPrivate::ResultStore store; + ResultStoreInt store; store.setFilterMode(true); store.addResults(3, &vec1); QCOMPARE(store.count(), 0); @@ -411,22 +416,22 @@ void tst_QFuture::resultStore() } { - QtPrivate::ResultStore store; + ResultStoreInt store; store.setFilterMode(true); store.addResults(3, &vec1); QCOMPARE(store.count(), 0); - store.addCanceledResults(0, 3); + store.addCanceledResults(0, 3); QCOMPARE(store.count(), 2); } { - QtPrivate::ResultStore store; + ResultStoreInt store; store.setFilterMode(true); store.addResults(3, &vec1); QCOMPARE(store.count(), 0); - store.addCanceledResults(0, 3); + store.addCanceledResults(0, 3); QCOMPARE(store.count(), 2); // results at 3 and 4 become available at index 0, 1 store.addResult(5, &int0); @@ -434,7 +439,7 @@ void tst_QFuture::resultStore() } { - QtPrivate::ResultStore store; + ResultStoreInt store; store.addResult(1, &int0); store.addResult(3, &int0); store.addResults(6, &vec0); @@ -449,7 +454,7 @@ void tst_QFuture::resultStore() } { - QtPrivate::ResultStore store; + ResultStoreInt store; store.setFilterMode(true); store.addResult(1, &int0); store.addResult(3, &int0); @@ -465,7 +470,7 @@ void tst_QFuture::resultStore() store.addCanceledResult(0); store.addCanceledResult(2); - store.addCanceledResults(4, 2); + store.addCanceledResults(4, 2); QCOMPARE(store.contains(0), true); QCOMPARE(store.contains(1), true); @@ -477,7 +482,7 @@ void tst_QFuture::resultStore() QCOMPARE(store.contains(7), false); } { - QtPrivate::ResultStore store; + ResultStoreInt store; store.setFilterMode(true); store.addCanceledResult(0); QCOMPARE(store.contains(0), false); diff --git a/tests/auto/corelib/thread/qmutex/tst_qmutex.cpp b/tests/auto/corelib/thread/qmutex/tst_qmutex.cpp index e6c3a0cfd76..0962001741f 100644 --- a/tests/auto/corelib/thread/qmutex/tst_qmutex.cpp +++ b/tests/auto/corelib/thread/qmutex/tst_qmutex.cpp @@ -36,11 +36,6 @@ #include #include -#ifdef Q_OS_WIN -#include -#include -#endif - class tst_QMutex : public QObject { Q_OBJECT @@ -54,7 +49,6 @@ public: Q_ENUM(TimeUnit); private slots: - void initTestCase(); void convertToMilliseconds_data(); void convertToMilliseconds(); void tryLock_non_recursive(); @@ -70,8 +64,6 @@ private slots: void tryLockNegative_data(); void tryLockNegative(); void moreStress(); -private: - void initializeSystemTimersResolution(); }; static const int iterations = 100; @@ -81,57 +73,24 @@ QMutex normalMutex, recursiveMutex(QMutex::Recursive); QSemaphore testsTurn; QSemaphore threadsTurn; -enum { waitTime = 100 }; -uint systemTimersResolution = 1; - -#if QT_HAS_INCLUDE() -static Q_CONSTEXPR std::chrono::milliseconds waitTimeAsDuration(waitTime); -#endif - /* Depending on the OS, tryWaits may return early than expected because of the resolution of the underlying timer is too coarse. E.g.: on Windows WaitForSingleObjectEx does *not* use high resolution multimedia timers, and it's actually very coarse, about 16msec by default. - - Try to find out the timer resolution in here, so that the tryLock tests can - actually take into account early wakes. */ -void tst_QMutex::initializeSystemTimersResolution() -{ +enum { #ifdef Q_OS_WIN - // according to MSDN, Windows can default up to this - systemTimersResolution = 16; + systemTimersResolution = 16, +#else + systemTimersResolution = 1, +#endif + waitTime = 100 +}; - // private API. There's no way on Windows to otherwise know the - // actual resolution of the application's timers (you can only set it) - // cf. https://stackoverflow.com/questions/7685762/windows-7-timing-functions-how-to-use-getsystemtimeadjustment-correctly/11743614#11743614 - typedef NTSTATUS (NTAPI *NtQueryTimerResolutionType)(OUT PULONG MinimumResolution, - OUT PULONG MaximumResolution, - OUT PULONG ActualResolution); - - const NtQueryTimerResolutionType NtQueryTimerResolutionPtr = - reinterpret_cast(QSystemLibrary::resolve(QStringLiteral("ntdll"), "NtQueryTimerResolution")); - - if (!NtQueryTimerResolutionPtr) - return; - - ULONG minimumResolution; - ULONG maximumResolution; - ULONG actualResolution; - - if (!NtQueryTimerResolutionPtr(&minimumResolution, &maximumResolution, &actualResolution)) { - // the result is in 100ns units => adjust to msec - const double actualResolutionMsec = actualResolution / 10000.0; - systemTimersResolution = static_cast(std::ceil(actualResolutionMsec)); - } -#endif // Q_OS_WIN -} - -void tst_QMutex::initTestCase() -{ - initializeSystemTimersResolution(); -} +#if QT_HAS_INCLUDE() +static Q_CONSTEXPR std::chrono::milliseconds waitTimeAsDuration(waitTime); +#endif void tst_QMutex::convertToMilliseconds_data() { diff --git a/tests/auto/corelib/thread/qresultstore/tst_qresultstore.cpp b/tests/auto/corelib/thread/qresultstore/tst_qresultstore.cpp index 3626b8db337..fba617e34d3 100644 --- a/tests/auto/corelib/thread/qresultstore/tst_qresultstore.cpp +++ b/tests/auto/corelib/thread/qresultstore/tst_qresultstore.cpp @@ -32,6 +32,11 @@ using namespace QtPrivate; +struct ResultStoreInt : ResultStoreBase +{ + ~ResultStoreInt() { clear(); } +}; + class tst_QtConcurrentResultStore : public QObject { Q_OBJECT @@ -67,20 +72,20 @@ void tst_QtConcurrentResultStore::init() void tst_QtConcurrentResultStore::construction() { - ResultStore store; + ResultStoreBase store; QCOMPARE(store.count(), 0); } void tst_QtConcurrentResultStore::iterators() { { - ResultStore store; + ResultStoreBase store; QCOMPARE(store.begin(), store.end()); QCOMPARE(store.resultAt(0), store.end()); QCOMPARE(store.resultAt(1), store.end()); } { - ResultStoreBase storebase; + ResultStoreInt storebase; storebase.addResult(-1, &int0); // note to self: adding a pointer to the stack here is ok since storebase.addResult(1, &int1); // ResultStoreBase does not take ownership, only ResultStore<> does. ResultIteratorBase it = storebase.begin(); @@ -103,7 +108,7 @@ void tst_QtConcurrentResultStore::addResult() { { // test addResult return value - ResultStore store; + ResultStoreInt store; store.setFilterMode(true); QCOMPARE(store.addResult(0, &int0), 0); @@ -149,10 +154,9 @@ void tst_QtConcurrentResultStore::addResult() void tst_QtConcurrentResultStore::addResults() { - - ResultStoreBase store; - store.addResults(-1, &vec0, 2, 2); - store.addResults(-1, &vec1, 2, 2); + ResultStoreInt store; + store.addResults(-1, &vec0); + store.addResults(-1, &vec1); ResultIteratorBase it = store.begin(); QCOMPARE(it.resultIndex(), 0); QCOMPARE(it, store.begin()); @@ -175,7 +179,7 @@ void tst_QtConcurrentResultStore::addResults() void tst_QtConcurrentResultStore::resultIndex() { - ResultStore store; + ResultStoreInt store; store.addResult(-1, &int0); store.addResults(-1, &vec0); store.addResult(-1, &int1); @@ -199,41 +203,41 @@ void tst_QtConcurrentResultStore::resultIndex() ++it; QVERIFY(it == store.end()); - QCOMPARE(store.resultAt(0).value(), int0); - QCOMPARE(store.resultAt(1).value(), vec0[0]); - QCOMPARE(store.resultAt(2).value(), vec0[1]); - QCOMPARE(store.resultAt(3).value(), int1); + QCOMPARE(store.resultAt(0).value(), int0); + QCOMPARE(store.resultAt(1).value(), vec0[0]); + QCOMPARE(store.resultAt(2).value(), vec0[1]); + QCOMPARE(store.resultAt(3).value(), int1); } void tst_QtConcurrentResultStore::resultAt() { { - ResultStore store; + ResultStoreInt store; store.addResult(-1, &int0); store.addResults(-1, &vec0); store.addResult(200, &int1); - QCOMPARE(store.resultAt(0).value(), int0); - QCOMPARE(store.resultAt(1).value(), vec0[0]); - QCOMPARE(store.resultAt(2).value(), vec0[1]); - QCOMPARE(store.resultAt(200).value(), int1); + QCOMPARE(store.resultAt(0).value(), int0); + QCOMPARE(store.resultAt(1).value(), vec0[0]); + QCOMPARE(store.resultAt(2).value(), vec0[1]); + QCOMPARE(store.resultAt(200).value(), int1); } { - ResultStore store; + ResultStoreInt store; store.addResult(1, &int1); store.addResult(0, &int0); store.addResult(-1, &int2); - QCOMPARE(store.resultAt(0).value(), int0); - QCOMPARE(store.resultAt(1).value(), int1); - QCOMPARE(store.resultAt(2).value(), int2); + QCOMPARE(store.resultAt(0).value(), int0); + QCOMPARE(store.resultAt(1).value(), int1); + QCOMPARE(store.resultAt(2).value(), int2); } } void tst_QtConcurrentResultStore::contains() { { - ResultStore store; + ResultStoreInt store; QCOMPARE(store.contains(0), false); QCOMPARE(store.contains(1), false); QCOMPARE(store.contains(INT_MAX), false); @@ -245,7 +249,7 @@ void tst_QtConcurrentResultStore::contains() QVERIFY(store.contains(int2)); } { - ResultStore store; + ResultStoreInt store; store.addResult(1, &int0); store.addResult(3, &int0); store.addResults(6, &vec0); @@ -260,7 +264,7 @@ void tst_QtConcurrentResultStore::contains() } { - ResultStore store; + ResultStoreInt store; store.setFilterMode(true); store.addResult(1, &int0); store.addResult(3, &int0); @@ -276,7 +280,7 @@ void tst_QtConcurrentResultStore::contains() store.addCanceledResult(0); store.addCanceledResult(2); - store.addCanceledResults(4, 2); + store.addCanceledResults(4, 2); QCOMPARE(store.contains(0), true); QCOMPARE(store.contains(1), true); @@ -288,7 +292,7 @@ void tst_QtConcurrentResultStore::contains() QCOMPARE(store.contains(7), false); } { - ResultStore store; + ResultStoreInt store; store.setFilterMode(true); store.addCanceledResult(0); QCOMPARE(store.contains(0), false); @@ -302,7 +306,7 @@ void tst_QtConcurrentResultStore::contains() void tst_QtConcurrentResultStore::filterMode() { // Test filter mode, where "gaps" in the result array aren't allowed. - ResultStore store; + ResultStoreInt store; QCOMPARE(store.filterMode(), false); store.setFilterMode(true); QVERIFY(store.filterMode()); @@ -339,7 +343,7 @@ void tst_QtConcurrentResultStore::filterMode() void tst_QtConcurrentResultStore::addCanceledResult() { // test canceled results - ResultStore store; + ResultStoreInt store; store.setFilterMode(true); store.addResult(0, &int0); @@ -379,7 +383,7 @@ void tst_QtConcurrentResultStore::count() { // test resultCount in non-filtered mode. It should always be possible // to iterate through the results 0 to resultCount. - ResultStore store; + ResultStoreInt store; store.addResult(0, &int0); QCOMPARE(store.count(), 1); @@ -393,7 +397,7 @@ void tst_QtConcurrentResultStore::count() } { - ResultStore store; + ResultStoreInt store; store.addResult(2, &int0); QCOMPARE(store.count(), 0); @@ -405,7 +409,7 @@ void tst_QtConcurrentResultStore::count() } { - ResultStore store; + ResultStoreInt store; store.addResults(2, &vec1); QCOMPARE(store.count(), 0); @@ -417,7 +421,7 @@ void tst_QtConcurrentResultStore::count() } { - ResultStore store; + ResultStoreInt store; store.addResults(2, &vec1); QCOMPARE(store.count(), 0); @@ -425,7 +429,7 @@ void tst_QtConcurrentResultStore::count() QCOMPARE(store.count(), 4); } { - ResultStore store; + ResultStoreInt store; store.addResults(3, &vec1); QCOMPARE(store.count(), 0); @@ -437,7 +441,7 @@ void tst_QtConcurrentResultStore::count() } { - ResultStore store; + ResultStoreInt store; store.setFilterMode(true); store.addResults(3, &vec1); QCOMPARE(store.count(), 0); @@ -450,22 +454,22 @@ void tst_QtConcurrentResultStore::count() } { - ResultStore store; + ResultStoreInt store; store.setFilterMode(true); store.addResults(3, &vec1); QCOMPARE(store.count(), 0); - store.addCanceledResults(0, 3); + store.addCanceledResults(0, 3); QCOMPARE(store.count(), 2); } { - ResultStore store; + ResultStoreInt store; store.setFilterMode(true); store.addResults(3, &vec1); QCOMPARE(store.count(), 0); - store.addCanceledResults(0, 3); + store.addCanceledResults(0, 3); QCOMPARE(store.count(), 2); // results at 3 and 4 become available at index 0, 1 store.addResult(5, &int0); diff --git a/tests/auto/corelib/thread/qthreadstorage/tst_qthreadstorage.cpp b/tests/auto/corelib/thread/qthreadstorage/tst_qthreadstorage.cpp index 49a3b3e4db2..403e28b07b4 100644 --- a/tests/auto/corelib/thread/qthreadstorage/tst_qthreadstorage.cpp +++ b/tests/auto/corelib/thread/qthreadstorage/tst_qthreadstorage.cpp @@ -76,7 +76,7 @@ int Pointer::count = 0; void tst_QThreadStorage::initTestCase() { -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) const QString crashOnExitDir = QFINDTESTDATA("crashonexit"); QVERIFY2(!crashOnExitDir.isEmpty(), qPrintable(QString::fromLatin1("Could not find 'crashonexit' starting from '%1'") @@ -300,7 +300,7 @@ void tst_QThreadStorage::ensureCleanupOrder() QVERIFY(First::order < Second::order); } -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) static inline bool runCrashOnExit(const QString &binary, QString *errorMessage) { const int timeout = 60000; @@ -325,7 +325,7 @@ static inline bool runCrashOnExit(const QString &binary, QString *errorMessage) void tst_QThreadStorage::crashOnExit() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else QString errorMessage; diff --git a/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp b/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp index a54ad3d9c9c..10398f1a99e 100644 --- a/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp +++ b/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp @@ -509,7 +509,7 @@ void tst_QCommandLineParser::testCpp11StyleInitialization() void tst_QCommandLineParser::testVersionOption() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("This test requires QProcess support"); #else #if defined(Q_OS_ANDROID) @@ -526,7 +526,7 @@ void tst_QCommandLineParser::testVersionOption() output.replace(QStringLiteral("\r\n"), QStringLiteral("\n")); #endif QCOMPARE(output, QString("qcommandlineparser_test_helper 1.0\n")); -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) } static const char expectedOptionsHelp[] = @@ -575,7 +575,7 @@ void tst_QCommandLineParser::testHelpOption_data() void tst_QCommandLineParser::testHelpOption() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("This test requires QProcess support"); #else #if defined(Q_OS_ANDROID) @@ -618,12 +618,12 @@ void tst_QCommandLineParser::testHelpOption() expectedResizeHelp.replace("testhelper/", "testhelper\\"); #endif QCOMPARE(output, QString(expectedResizeHelp)); -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) } void tst_QCommandLineParser::testQuoteEscaping() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("This test requires QProcess support"); #elif defined(Q_OS_ANDROID) QSKIP("Deploying executable applications to file system on Android not supported."); @@ -644,7 +644,7 @@ void tst_QCommandLineParser::testQuoteEscaping() QVERIFY2(output.contains("KEY1=\"VALUE1\""), qPrintable(output)); QVERIFY2(output.contains("QTBUG-15379=C:\\path\\'file.ext"), qPrintable(output)); QVERIFY2(output.contains("QTBUG-30628=C:\\temp\\'file'.ext"), qPrintable(output)); -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) } QTEST_APPLESS_MAIN(tst_QCommandLineParser) diff --git a/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp b/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp index 5eec44dffd4..28ad2d193c0 100644 --- a/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp +++ b/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp @@ -119,6 +119,8 @@ private slots: void fromStringDateFormat(); void fromStringStringFormat_data(); void fromStringStringFormat(); + void fromStringStringFormatLocale_data(); + void fromStringStringFormatLocale(); #ifdef Q_OS_WIN void fromString_LOCALE_ILDATE(); #endif @@ -665,6 +667,29 @@ void tst_QDateTime::setMSecsSinceEpoch() QCOMPARE(dt.time(), utc.time()); QCOMPARE(dt.timeSpec(), Qt::UTC); + { + QDateTime dt1 = QDateTime::fromMSecsSinceEpoch(msecs, Qt::UTC); + QCOMPARE(dt1, utc); + QCOMPARE(dt1.date(), utc.date()); + QCOMPARE(dt1.time(), utc.time()); + QCOMPARE(dt1.timeSpec(), Qt::UTC); + } + { + QDateTime dt1(utc.date(), utc.time(), Qt::UTC); + QCOMPARE(dt1, utc); + QCOMPARE(dt1.date(), utc.date()); + QCOMPARE(dt1.time(), utc.time()); + QCOMPARE(dt1.timeSpec(), Qt::UTC); + } + { + // used to fail to clear the ShortData bit, causing corruption + QDateTime dt1 = dt.addDays(0); + QCOMPARE(dt1, utc); + QCOMPARE(dt1.date(), utc.date()); + QCOMPARE(dt1.time(), utc.time()); + QCOMPARE(dt1.timeSpec(), Qt::UTC); + } + if (zoneIsCET) { QCOMPARE(dt.toLocalTime(), cet); @@ -2377,6 +2402,54 @@ void tst_QDateTime::fromStringStringFormat() QCOMPARE(dt, expected); } +void tst_QDateTime::fromStringStringFormatLocale_data() +{ + QTest::addColumn("string"); + QTest::addColumn("format"); + QTest::addColumn("locale"); + QTest::addColumn("expected"); + + QLocale c = QLocale::c(); + QDateTime dt(QDate(2017, 02, 25), QTime(17, 21, 25)); + + // The formats correspond to the locale formats, with the timezone removed. + // We hardcode them in case an update to the locale DB changes them. + + QTest::newRow("C:long") << "Saturday, 25 February 2017 17:21:25" << "dddd, d MMMM yyyy HH:mm:ss" << c << dt; + QTest::newRow("C:short") << "25 Feb 2017 17:21:25" << "d MMM yyyy HH:mm:ss" << c << dt; + QTest::newRow("C:narrow") << "25 Feb 2017 17:21:25" << "d MMM yyyy HH:mm:ss" << c << dt; + + QLocale fr(QLocale::French); + QTest::newRow("fr:long") << "Samedi 25 février 2017 17:21:25" << "dddd d MMMM yyyy HH:mm:ss" << fr << dt; + QTest::newRow("fr:short") << "25/02/2017 17:21" << "dd/MM/yyyy HH:mm" << fr << dt.addSecs(-25); + + // In Turkish, the word for Friday ("Cuma") is a prefix for the word for + // Saturday ("Cumartesi") + QLocale tr(QLocale::Turkish); + QTest::newRow("tr:long") << "25 Şubat 2017 Cumartesi 17:21:25" << "d MMMM yyyy dddd HH:mm:ss" << tr << dt; + QTest::newRow("tr:long2") << "24 Şubat 2017 Cuma 17:21:25" << "d MMMM yyyy dddd HH:mm:ss" << tr << dt.addDays(-1); + QTest::newRow("tr:mashed") << "25 Şubat2017 Cumartesi17:21:25" << "d MMMMyyyy ddddHH:mm:ss" << tr << dt; + QTest::newRow("tr:mashed2") << "24 Şubat2017 Cuma17:21:25" << "d MMMMyyyy ddddHH:mm:ss" << tr << dt.addDays(-1); + QTest::newRow("tr:short") << "25.02.2017 17:21" << "d.MM.yyyy HH:mm" << tr << dt.addSecs(-25); +} + +void tst_QDateTime::fromStringStringFormatLocale() +{ + QFETCH(QString, string); + QFETCH(QString, format); + QFETCH(QLocale, locale); + QFETCH(QDateTime, expected); + + QDateTime parsed = locale.toDateTime(string, format); + QCOMPARE(parsed, expected); + + parsed = locale.toDateTime(string.toLower(), format); + QCOMPARE(parsed, expected); + + parsed = locale.toDateTime(string.toUpper(), format); + QCOMPARE(parsed, expected); +} + #ifdef Q_OS_WIN // Windows only void tst_QDateTime::fromString_LOCALE_ILDATE() diff --git a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp index 6f20e3db915..5d13d9e4549 100644 --- a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp +++ b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp @@ -35,7 +35,9 @@ #include #include #include -#include +#if QT_CONFIG(process) +# include +#endif #include #include @@ -78,6 +80,7 @@ private slots: void ctor(); void emptyCtor(); void legacyNames(); + void consistentC(); void unixLocaleName(); void matchingLocales(); void stringToDouble_data(); @@ -152,7 +155,7 @@ tst_QLocale::tst_QLocale() void tst_QLocale::initTestCase() { -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) const QString syslocaleapp_dir = QFINDTESTDATA("syslocaleapp"); QVERIFY2(!syslocaleapp_dir.isEmpty(), qPrintable(QStringLiteral("Cannot find 'syslocaleapp' starting from ") @@ -165,7 +168,7 @@ void tst_QLocale::initTestCase() QVERIFY2(fi.exists() && fi.isExecutable(), qPrintable(QDir::toNativeSeparators(m_sysapp) + QStringLiteral(" does not exist or is not executable."))); -#endif // QT_NO_PROCESS +#endif // QT_CONFIG(process) } void tst_QLocale::cleanupTestCase() @@ -420,7 +423,7 @@ void tst_QLocale::ctor() #undef TEST_CTOR } -#if !defined(QT_NO_PROCESS) +#if QT_CONFIG(process) static inline bool runSysApp(const QString &binary, const QStringList &env, QString *output, @@ -472,7 +475,7 @@ static inline bool runSysAppTest(const QString &binary, void tst_QLocale::emptyCtor() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else #define TEST_CTOR(req_lc, exp_str) \ @@ -577,6 +580,15 @@ void tst_QLocale::legacyNames() #undef TEST_CTOR } +void tst_QLocale::consistentC() +{ + const QLocale c(QLocale::C); + QCOMPARE(c, QLocale::c()); + QCOMPARE(c, QLocale(QLocale::C, QLocale::AnyScript, QLocale::AnyCountry)); + QVERIFY(QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, + QLocale::AnyCountry).contains(c)); +} + void tst_QLocale::matchingLocales() { const QLocale c(QLocale::C); diff --git a/tests/auto/corelib/tools/qsharedpointer/externaltests.cpp b/tests/auto/corelib/tools/qsharedpointer/externaltests.cpp index 7bebe5e9e00..e8f56fc1d3e 100644 --- a/tests/auto/corelib/tools/qsharedpointer/externaltests.cpp +++ b/tests/auto/corelib/tools/qsharedpointer/externaltests.cpp @@ -31,7 +31,9 @@ #include #include -#include +#if QT_CONFIG(process) +# include +#endif #include #include #include @@ -66,7 +68,7 @@ static QString makespec() QT_BEGIN_NAMESPACE namespace QTest { -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) class QExternalProcess: public QProcess { protected: @@ -87,7 +89,7 @@ namespace QTest { } #endif }; -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) class QExternalTestPrivate { @@ -554,7 +556,7 @@ namespace QTest { bool QExternalTestPrivate::runQmake() { -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) if (temporaryDirPath.isEmpty()) qWarning() << "Temporary directory is expected to be non-empty"; @@ -597,14 +599,14 @@ namespace QTest { } return ok && exitCode == 0; -#else // QT_NO_PROCESS +#else // QT_CONFIG(process) return false; -#endif // QT_NO_PROCESS +#endif // QT_CONFIG(process) } bool QExternalTestPrivate::runMake(Target target) { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) return false; #else if (temporaryDirPath.isEmpty()) @@ -663,7 +665,7 @@ namespace QTest { std_err += make.readAllStandardError(); return ok; -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) } bool QExternalTestPrivate::commonSetup(const QByteArray &body) diff --git a/tests/auto/corelib/tools/qtextboundaryfinder/tst_qtextboundaryfinder.cpp b/tests/auto/corelib/tools/qtextboundaryfinder/tst_qtextboundaryfinder.cpp index 4c9916cc527..5467d438a3e 100644 --- a/tests/auto/corelib/tools/qtextboundaryfinder/tst_qtextboundaryfinder.cpp +++ b/tests/auto/corelib/tools/qtextboundaryfinder/tst_qtextboundaryfinder.cpp @@ -751,7 +751,9 @@ void tst_QTextBoundaryFinder::isAtSoftHyphen() doTestData(testString, expectedSoftHyphenPositions, QTextBoundaryFinder::Line, QTextBoundaryFinder::SoftHyphen); } +#if QT_CONFIG(library) #include +#endif #define LIBTHAI_MAJOR 0 typedef int (*th_brk_def) (const unsigned char*, int*, size_t); @@ -759,7 +761,7 @@ static th_brk_def th_brk = 0; static bool init_libthai() { -#if !defined(QT_NO_LIBRARY) +#if QT_CONFIG(library) static bool triedResolve = false; if (!triedResolve) { th_brk = (th_brk_def) QLibrary::resolve("thai", (int)LIBTHAI_MAJOR, "th_brk"); diff --git a/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp b/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp index c37a15089ab..2e34e82388f 100644 --- a/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp +++ b/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp @@ -134,7 +134,7 @@ void tst_QVersionNumber::singleInstanceData() namespace UglyOperator { // ugh, but the alternative (operator <<) is even worse... -static inline QVector operator+(QVector v, int i) { v.push_back(i); return qMove(v); } +static inline QVector operator+(QVector v, int i) { v.push_back(i); return v; } } void tst_QVersionNumber::comparisonData() diff --git a/tests/auto/dbus/dbus.pro b/tests/auto/dbus/dbus.pro index 1769583fcaa..2c58d7e2354 100644 --- a/tests/auto/dbus/dbus.pro +++ b/tests/auto/dbus/dbus.pro @@ -29,3 +29,8 @@ SUBDIRS+=\ !qtConfig(private_tests): SUBDIRS -= \ qdbusmarshall \ +!qtConfig(process): SUBDIRS -= \ + qdbusabstractadaptor \ + qdbusabstractinterface \ + qdbusinterface \ + qdbusmarshall diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp index 95daa256b5f..d521c18cef1 100644 --- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp +++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp @@ -1410,7 +1410,7 @@ void tst_QDBusConnection::callVirtualObjectLocal() void tst_QDBusConnection::pendingCallWhenDisconnected() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("Test requires QProcess"); #else if (!QCoreApplication::instance()) diff --git a/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp b/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp index c5117228d3b..6b4ddeaba51 100644 --- a/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp +++ b/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp @@ -1084,7 +1084,7 @@ static bool canSendUnixFd(DBusConnection *connection) # if DBUS_VERSION-0 >= 0x010400 can_send_type = dbus_connection_can_send_type; # endif -#elif !defined(QT_NO_LIBRARY) +#elif QT_CONFIG(library) // run-time check if the next functions are available can_send_type = (can_send_type_t)qdbus_resolve_conditionally("dbus_connection_can_send_type"); #endif diff --git a/tests/auto/dbus/qdbustype/tst_qdbustype.cpp b/tests/auto/dbus/qdbustype/tst_qdbustype.cpp index d9a4a6c43f6..f475e87a2bb 100644 --- a/tests/auto/dbus/qdbustype/tst_qdbustype.cpp +++ b/tests/auto/dbus/qdbustype/tst_qdbustype.cpp @@ -90,7 +90,7 @@ static void addFixedTypes() // the library recognizes this as valid type first. // The following function was added for Unix FD support, so if it is // present, so is support for Unix FDs. -# ifndef QT_NO_LIBRARY +# if QT_CONFIG(library) bool supportsUnixFds = qdbus_resolve_conditionally("dbus_connection_can_send_type"); # else bool supportsUnixFds = false; diff --git a/tests/auto/gui/image/qicon/tst_qicon.cpp b/tests/auto/gui/image/qicon/tst_qicon.cpp index 4218d0751f0..d628fad7056 100644 --- a/tests/auto/gui/image/qicon/tst_qicon.cpp +++ b/tests/auto/gui/image/qicon/tst_qicon.cpp @@ -709,7 +709,7 @@ void tst_QIcon::fromThemeCache() QIcon::setThemeSearchPaths(QStringList()); QSKIP("gtk-update-icon-cache not run (binary not found)"); } -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) QProcess process; process.start(gtkUpdateIconCache, QStringList() << QStringLiteral("-f") << QStringLiteral("-t") << (dir.path() + QLatin1String("/testcache"))); @@ -719,7 +719,7 @@ void tst_QIcon::fromThemeCache() QVERIFY(process.waitForFinished()); QCOMPARE(process.exitStatus(), QProcess::NormalExit); QCOMPARE(process.exitCode(), 0); -#endif // QT_NO_PROCESS +#endif // QT_CONFIG(process) QVERIFY(QFileInfo(cacheName).lastModified() >= QFileInfo(dir.path() + QLatin1String("/testcache/16x16/actions")).lastModified()); QIcon::setThemeSearchPaths(QStringList() << dir.path()); // reload themes QVERIFY(!QIcon::fromTheme("button-open").isNull()); diff --git a/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp b/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp index 8dcf104035d..8a2a35f86cf 100644 --- a/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp +++ b/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp @@ -56,6 +56,7 @@ private slots: void pixmapKey(); void noLeak(); void strictCacheLimit(); + void noCrashOnLargeInsert(); }; static QPixmapCache::KeyData* getPrivate(QPixmapCache::Key &key) @@ -525,5 +526,15 @@ void tst_QPixmapCache::strictCacheLimit() QVERIFY(QPixmapCache::totalUsed() <= limit); } +void tst_QPixmapCache::noCrashOnLargeInsert() +{ + QPixmapCache::clear(); + QPixmapCache::setCacheLimit(100); + QPixmap pixmap(500, 500); + pixmap.fill(Qt::transparent); + QPixmapCache::insert("test", pixmap); + QVERIFY(true); // no crash +} + QTEST_MAIN(tst_QPixmapCache) #include "tst_qpixmapcache.moc" diff --git a/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp b/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp index b1ec94403aa..87fd5c0dc68 100644 --- a/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp +++ b/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp @@ -73,7 +73,7 @@ void tst_QClipboard::cleanupTestCase() void tst_QClipboard::init() { -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) const QString testdataDir = QFileInfo(QFINDTESTDATA("copier")).absolutePath(); QVERIFY2(QDir::setCurrent(testdataDir), qPrintable("Could not chdir to " + testdataDir)); #endif @@ -218,7 +218,7 @@ void tst_QClipboard::testSignals() #if defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(Q_OS_QNX) static bool runHelper(const QString &program, const QStringList &arguments, QByteArray *errorMessage) { -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) QProcess process; process.setReadChannelMode(QProcess::ForwardedChannels); process.start(program, arguments); @@ -254,19 +254,19 @@ static bool runHelper(const QString &program, const QStringList &arguments, QByt return false; } return true; -#else // QT_NO_PROCESS +#else // QT_CONFIG(process) Q_UNUSED(program) Q_UNUSED(arguments) Q_UNUSED(errorMessage) return false; -#endif // QT_NO_PROCESS +#endif // QT_CONFIG(process) } // Test that pasted text remains on the clipboard after a Qt application exits. // This test does not make sense on X11 and embedded, copied data disappears from the clipboard when the application exits void tst_QClipboard::copy_exit_paste() { -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) // ### It's still possible to test copy/paste - just keep the apps running if (!PlatformClipboard::isAvailable()) QSKIP("Native clipboard not working in this setup"); @@ -282,12 +282,12 @@ void tst_QClipboard::copy_exit_paste() QStringList() << QStringLiteral("--text") << stringArgument, &errorMessage), errorMessage.constData()); -#endif // QT_NO_PROCESS +#endif // QT_CONFIG(process) } void tst_QClipboard::copyImage() { -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) if (!PlatformClipboard::isAvailable()) QSKIP("Native clipboard not working in this setup"); QImage image(100, 100, QImage::Format_ARGB32); @@ -303,7 +303,7 @@ void tst_QClipboard::copyImage() QVERIFY2(runHelper(QStringLiteral("paster/paster"), QStringList(QStringLiteral("--image")), &errorMessage), errorMessage.constData()); -#endif // QT_NO_PROCESS +#endif // QT_CONFIG(process) } #endif // Q_OS_WIN || Q_OS_MAC || Q_OS_QNX diff --git a/tests/auto/gui/text/qfont/tst_qfont.cpp b/tests/auto/gui/text/qfont/tst_qfont.cpp index 2603206ab09..1f826c01cf0 100644 --- a/tests/auto/gui/text/qfont/tst_qfont.cpp +++ b/tests/auto/gui/text/qfont/tst_qfont.cpp @@ -486,7 +486,7 @@ void tst_QFont::styleName() QString getPlatformGenericFont(const char* genericName) { -#if defined(Q_OS_UNIX) && !defined(QT_NO_FONTCONFIG) +#if defined(Q_OS_UNIX) && !defined(QT_NO_FONTCONFIG) && QT_CONFIG(process) QProcess p; p.start(QLatin1String("fc-match"), (QStringList() << "-f%{family}" << genericName)); if (!p.waitForStarted()) diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index 4dcce8509c6..fbd8f5a780f 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -4297,14 +4297,14 @@ void tst_QNetworkReply::ioPutToFileFromLocalSocket() // Currently no stdin/out supported for Windows CE. void tst_QNetworkReply::ioPutToFileFromProcess_data() { -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) putToFile_data(); #endif } void tst_QNetworkReply::ioPutToFileFromProcess() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else @@ -4342,7 +4342,7 @@ void tst_QNetworkReply::ioPutToFileFromProcess() QByteArray contents = file.readAll(); QCOMPARE(contents, data); -#endif // QT_NO_PROCESS +#endif // QT_CONFIG(process) } void tst_QNetworkReply::ioPutToFtpFromFile_data() diff --git a/tests/auto/network/bearer/qnetworksession/test/tst_qnetworksession.cpp b/tests/auto/network/bearer/qnetworksession/test/tst_qnetworksession.cpp index 138a0859cd6..8d32ddf37c2 100644 --- a/tests/auto/network/bearer/qnetworksession/test/tst_qnetworksession.cpp +++ b/tests/auto/network/bearer/qnetworksession/test/tst_qnetworksession.cpp @@ -897,7 +897,7 @@ QDebug operator<<(QDebug debug, const QList &list) // at Discovered -state. void tst_QNetworkSession::outOfProcessSession() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else updateConfigurations(); diff --git a/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp b/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp index 41ed7d2b939..2671c253cb3 100644 --- a/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp +++ b/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp @@ -54,7 +54,6 @@ #endif #include -#include #if defined(Q_OS_WIN) #include #else diff --git a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp index 74bffef4f45..a74a056d91d 100644 --- a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp +++ b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp @@ -904,7 +904,7 @@ void tst_QLocalSocket::processConnection_data() QTest::newRow("30 clients") << 30; } -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) class ProcessOutputDumper { public: @@ -933,7 +933,7 @@ private: */ void tst_QLocalSocket::processConnection() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else #ifdef Q_OS_MAC diff --git a/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp b/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp index 4bbd0662e45..3b9ef577bdd 100644 --- a/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp +++ b/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp @@ -49,7 +49,9 @@ #include #include #include -#include +#if QT_CONFIG(process) +# include +#endif #include #include #include @@ -544,7 +546,7 @@ protected: void tst_QTcpServer::addressReusable() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else #ifdef Q_OS_LINUX diff --git a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp index 9fd5620cec8..7340817ade1 100644 --- a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp +++ b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp @@ -54,7 +54,9 @@ #include #include #include -#include +#if QT_CONFIG(process) +# include +#endif #include #include #include @@ -2403,7 +2405,7 @@ void tst_QTcpSocket::suddenRemoteDisconnect_data() void tst_QTcpSocket::suddenRemoteDisconnect() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("This test requires QProcess support"); #else QFETCH(QString, client); @@ -2459,7 +2461,7 @@ void tst_QTcpSocket::suddenRemoteDisconnect() #endif QCOMPARE(clientProcess.readAll().constData(), "SUCCESS\n"); QCOMPARE(serverProcess.readAll().constData(), "SUCCESS\n"); -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) } //---------------------------------------------------------------------------------- diff --git a/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp b/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp index aa013843508..1133a808207 100644 --- a/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp +++ b/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp @@ -956,7 +956,7 @@ void tst_QUdpSocket::writeToNonExistingPeer() void tst_QUdpSocket::outOfProcessConnectedClientServerTest() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else QProcess serverProcess; @@ -1017,7 +1017,7 @@ void tst_QUdpSocket::outOfProcessConnectedClientServerTest() void tst_QUdpSocket::outOfProcessUnconnectedClientServerTest() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No qprocess support", SkipAll); #else QProcess serverProcess; diff --git a/tests/auto/other/networkselftest/tst_networkselftest.cpp b/tests/auto/other/networkselftest/tst_networkselftest.cpp index 68473906b02..3b696604b5a 100644 --- a/tests/auto/other/networkselftest/tst_networkselftest.cpp +++ b/tests/auto/other/networkselftest/tst_networkselftest.cpp @@ -961,7 +961,7 @@ void tst_NetworkSelfTest::supportsSsl() #endif } -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) static const QByteArray msgProcessError(const QProcess &process, const char *what) { QString result; @@ -978,7 +978,7 @@ static void ensureTermination(QProcess &process) process.kill(); } } -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) void tst_NetworkSelfTest::smbServer() { @@ -996,7 +996,7 @@ void tst_NetworkSelfTest::smbServer() QCOMPARE(ret, strlen(contents)); QVERIFY(memcmp(buf, contents, strlen(contents)) == 0); #else -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) enum { sambaTimeOutSecs = 5 }; // try to use Samba const QString progname = "smbclient"; diff --git a/tests/auto/other/other.pro b/tests/auto/other/other.pro index a12f08488da..0e84b187faf 100644 --- a/tests/auto/other/other.pro +++ b/tests/auto/other/other.pro @@ -56,6 +56,8 @@ cross_compile: SUBDIRS -= \ !qtConfig(accessibility-atspi-bridge): SUBDIRS -= qaccessibilitylinux +!qtConfig(process): SUBDIRS -= qprocess_and_guieventloop + !mac: SUBDIRS -= \ macgui \ macnativeevents \ @@ -65,8 +67,5 @@ cross_compile: SUBDIRS -= \ !embedded: SUBDIRS -= \ qdirectpainter -winrt: SUBDIRS -= \ - qprocess_and_guieventloop - android: SUBDIRS += \ android diff --git a/tests/auto/other/qprocess_and_guieventloop/tst_qprocess_and_guieventloop.cpp b/tests/auto/other/qprocess_and_guieventloop/tst_qprocess_and_guieventloop.cpp index 1fcb77c51b9..5842d58fab2 100644 --- a/tests/auto/other/qprocess_and_guieventloop/tst_qprocess_and_guieventloop.cpp +++ b/tests/auto/other/qprocess_and_guieventloop/tst_qprocess_and_guieventloop.cpp @@ -40,9 +40,7 @@ private slots: void tst_QProcess_and_GuiEventLoop::waitForAndEventLoop() { -#if defined(QT_NO_PROCESS) - QSKIP("QProcess not supported"); -#elif defined(Q_OS_ANDROID) +#if defined(Q_OS_ANDROID) QSKIP("Not supported on Android"); #else diff --git a/tests/auto/testlib/selftests/tst_selftests.cpp b/tests/auto/testlib/selftests/tst_selftests.cpp index 35b759bcc28..0c078127b4c 100644 --- a/tests/auto/testlib/selftests/tst_selftests.cpp +++ b/tests/auto/testlib/selftests/tst_selftests.cpp @@ -536,7 +536,7 @@ void tst_Selftests::runSubTest_data() } } -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) static QProcessEnvironment processEnvironment() { @@ -820,11 +820,11 @@ void tst_Selftests::doRunSubTest(QString const& subdir, QStringList const& logge } } -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) void tst_Selftests::runSubTest() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("This test requires QProcess support"); #else QFETCH(QString, subdir); @@ -833,7 +833,7 @@ void tst_Selftests::runSubTest() QFETCH(bool, crashes); doRunSubTest(subdir, loggers, arguments, crashes); -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) } // attribute must contain =" diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp index 2d7ec2f0b59..5f1a0618abd 100644 --- a/tests/auto/tools/moc/tst_moc.cpp +++ b/tests/auto/tools/moc/tst_moc.cpp @@ -749,7 +749,7 @@ void tst_Moc::initTestCase() const QString testHeader = QFINDTESTDATA("backslash-newlines.h"); QVERIFY(!testHeader.isEmpty()); m_sourceDirectory = QFileInfo(testHeader).absolutePath(); -#if defined(Q_OS_UNIX) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_UNIX) && QT_CONFIG(process) QProcess proc; proc.start(qmake, QStringList() << "-query" << "QT_INSTALL_HEADERS"); QVERIFY(proc.waitForFinished()); @@ -793,7 +793,7 @@ void tst_Moc::oldStyleCasts() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled"); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && QT_CONFIG(process) QProcess proc; proc.start(m_moc, QStringList(m_sourceDirectory + QStringLiteral("/oldstyle-casts.h"))); QVERIFY(proc.waitForFinished()); @@ -823,7 +823,7 @@ void tst_Moc::warnOnExtraSignalSlotQualifiaction() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled"); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && QT_CONFIG(process) QProcess proc; const QString header = m_sourceDirectory + QStringLiteral("/extraqualification.h"); proc.start(m_moc, QStringList(header)); @@ -862,7 +862,7 @@ void tst_Moc::inputFileNameWithDotsButNoExtension() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled"); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && QT_CONFIG(process) QProcess proc; proc.setWorkingDirectory(m_sourceDirectory + QStringLiteral("/task71021")); proc.start(m_moc, QStringList("../Header")); @@ -1108,7 +1108,7 @@ void tst_Moc::warnOnMultipleInheritance() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled"); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && QT_CONFIG(process) QProcess proc; QStringList args; const QString header = m_sourceDirectory + QStringLiteral("/warn-on-multiple-qobject-subclasses.h"); @@ -1131,7 +1131,7 @@ void tst_Moc::ignoreOptionClashes() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled"); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && QT_CONFIG(process) QProcess proc; QStringList args; const QString header = m_sourceDirectory + QStringLiteral("/interface-from-include.h"); @@ -1172,7 +1172,7 @@ void tst_Moc::forgottenQInterface() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled"); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && QT_CONFIG(process) QProcess proc; QStringList args; const QString header = m_sourceDirectory + QStringLiteral("/forgotten-qinterface.h"); @@ -1254,7 +1254,7 @@ void tst_Moc::frameworkSearchPath() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled"); #endif -#if defined(Q_OS_UNIX) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_UNIX) && QT_CONFIG(process) QStringList args; args << "-F" << m_sourceDirectory + QStringLiteral("/.") << m_sourceDirectory + QStringLiteral("/interface-from-framework.h") @@ -1298,7 +1298,7 @@ void tst_Moc::templateGtGt() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled"); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && QT_CONFIG(process) QProcess proc; proc.start(m_moc, QStringList(m_sourceDirectory + QStringLiteral("/template-gtgt.h"))); QVERIFY(proc.waitForFinished()); @@ -1314,7 +1314,7 @@ void tst_Moc::templateGtGt() void tst_Moc::defineMacroViaCmdline() { -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && QT_CONFIG(process) QProcess proc; QStringList args; @@ -1334,7 +1334,7 @@ void tst_Moc::defineMacroViaCmdline() void tst_Moc::defineMacroViaForcedInclude() { -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && QT_CONFIG(process) QProcess proc; QStringList args; @@ -1354,7 +1354,7 @@ void tst_Moc::defineMacroViaForcedInclude() void tst_Moc::defineMacroViaForcedIncludeRelative() { -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && QT_CONFIG(process) QProcess proc; QStringList args; @@ -1375,7 +1375,7 @@ void tst_Moc::defineMacroViaForcedIncludeRelative() void tst_Moc::environmentIncludePaths_data() { -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && QT_CONFIG(process) QTest::addColumn("cmdline"); QTest::addColumn("varname"); @@ -1389,7 +1389,7 @@ void tst_Moc::environmentIncludePaths_data() void tst_Moc::environmentIncludePaths() { -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && QT_CONFIG(process) QFETCH(QString, cmdline); QFETCH(QString, varname); @@ -1582,7 +1582,7 @@ void tst_Moc::warnOnPropertyWithoutREAD() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled"); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && QT_CONFIG(process) QProcess proc; const QString header = m_sourceDirectory + QStringLiteral("/warn-on-property-without-read.h"); proc.start(m_moc, QStringList(header)); @@ -1693,7 +1693,7 @@ void tst_Moc::warnOnVirtualSignal() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled"); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && QT_CONFIG(process) QProcess proc; const QString header = m_sourceDirectory + QStringLiteral("/pure-virtual-signals.h"); proc.start(m_moc, QStringList(header)); @@ -1825,7 +1825,7 @@ void tst_Moc::notifyError() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled"); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && QT_CONFIG(process) QProcess proc; const QString header = m_sourceDirectory + QStringLiteral("/error-on-wrong-notify.h"); proc.start(m_moc, QStringList(header)); @@ -2187,6 +2187,7 @@ void tst_Moc::warnings() expectedStdErr.replace(lineNumberRe, "(\\1):"); #endif +#if QT_CONFIG(process) QProcess proc; QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); @@ -2209,6 +2210,9 @@ void tst_Moc::warnings() if (expectedStdOut != "IGNORE_ALL_STDOUT") QCOMPARE(QString::fromLocal8Bit(proc.readAllStandardOutput()).trimmed(), expectedStdOut); QCOMPARE(QString::fromLocal8Bit(proc.readAllStandardError()).trimmed().remove('\r'), expectedStdErr); +#else + QSKIP("Only tested if QProcess is available"); +#endif } class tst_Moc::PrivateClass : public QObject { @@ -3429,7 +3433,7 @@ void tst_Moc::preprocessorOnly() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled"); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && QT_CONFIG(process) QProcess proc; proc.start(m_moc, QStringList() << "-E" << m_sourceDirectory + QStringLiteral("/pp-dollar-signs.h")); QVERIFY(proc.waitForFinished()); @@ -3450,7 +3454,7 @@ void tst_Moc::unterminatedFunctionMacro() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled"); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && QT_CONFIG(process) QProcess proc; proc.start(m_moc, QStringList() << "-E" << m_sourceDirectory + QStringLiteral("/unterminated-function-macro.h")); QVERIFY(proc.waitForFinished()); @@ -3753,7 +3757,7 @@ void tst_Moc::optionsFileError() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled"); #endif -#if !defined(QT_NO_PROCESS) +#if QT_CONFIG(process) QFETCH(QString, optionsArgument); QProcess p; p.start(m_moc, QStringList(optionsArgument)); diff --git a/tests/auto/tools/rcc/data/images/images.expected b/tests/auto/tools/rcc/data/images/images.expected index eb5d9222c88..45e96dccd03 100644 --- a/tests/auto/tools/rcc/data/images/images.expected +++ b/tests/auto/tools/rcc/data/images/images.expected @@ -126,7 +126,7 @@ int QT_RCC_MANGLE_NAMESPACE(qInitResources)(); int QT_RCC_MANGLE_NAMESPACE(qInitResources)() { QT_RCC_PREPEND_NAMESPACE(qRegisterResourceData) - (0x02, qt_resource_struct, qt_resource_name, qt_resource_data); + (0x2, qt_resource_struct, qt_resource_name, qt_resource_data); return 1; } @@ -134,7 +134,7 @@ int QT_RCC_MANGLE_NAMESPACE(qCleanupResources)(); int QT_RCC_MANGLE_NAMESPACE(qCleanupResources)() { QT_RCC_PREPEND_NAMESPACE(qUnregisterResourceData) - (0x02, qt_resource_struct, qt_resource_name, qt_resource_data); + (0x2, qt_resource_struct, qt_resource_name, qt_resource_data); return 1; } diff --git a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp index d6f37286632..49095b9625b 100644 --- a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp +++ b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp @@ -35,7 +35,9 @@ #include #include #include -#include +#if QT_CONFIG(process) +# include +#endif #include #include @@ -119,7 +121,7 @@ private slots: void testDeleteLater(); void testDeleteLaterProcessEvents(); -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) void libraryPaths(); void libraryPaths_qt_plugin_path(); void libraryPaths_qt_plugin_path_2(); @@ -883,7 +885,7 @@ bool isPathListIncluded(const QStringList &l, const QStringList &r) return j == r.count(); } -#ifndef QT_NO_LIBRARY +#if QT_CONFIG(library) #define QT_TST_QAPP_DEBUG void tst_QApplication::libraryPaths() { @@ -1432,7 +1434,7 @@ void tst_QApplication::testDeleteLaterProcessEvents() */ void tst_QApplication::desktopSettingsAware() { -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) QString path; { // We need an application object for QFINDTESTDATA to work @@ -2121,7 +2123,7 @@ void tst_QApplication::qtbug_12673() QVERIFY2(!path.isEmpty(), "Cannot locate modal helper application"); path += "modal"; -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) QProcess testProcess; QStringList arguments; testProcess.start(path, arguments); @@ -2254,7 +2256,7 @@ void tst_QApplication::settableStyleHints() executed *after* the destruction of QApplication. */ Q_GLOBAL_STATIC(QLocale, tst_qapp_locale); -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) Q_GLOBAL_STATIC(QProcess, tst_qapp_process); #endif #ifndef QT_NO_FILESYSTEMWATCHER @@ -2279,7 +2281,7 @@ void tst_QApplication::globalStaticObjectDestruction() int argc = 1; QApplication app(argc, &argv0); QVERIFY(tst_qapp_locale()); -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) QVERIFY(tst_qapp_process()); #endif #ifndef QT_NO_FILESYSTEMWATCHER diff --git a/tests/auto/widgets/util/qundogroup/tst_qundogroup.cpp b/tests/auto/widgets/util/qundogroup/tst_qundogroup.cpp index 7641ea6b686..62c34694477 100644 --- a/tests/auto/widgets/util/qundogroup/tst_qundogroup.cpp +++ b/tests/auto/widgets/util/qundogroup/tst_qundogroup.cpp @@ -606,7 +606,7 @@ void tst_QUndoGroup::addStackAndDie() void tst_QUndoGroup::commandTextFormat() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No QProcess available"); #else QString binDir = QLibraryInfo::location(QLibraryInfo::BinariesPath); diff --git a/tests/auto/widgets/util/qundostack/tst_qundostack.cpp b/tests/auto/widgets/util/qundostack/tst_qundostack.cpp index 11a29b808c7..f3185086b88 100644 --- a/tests/auto/widgets/util/qundostack/tst_qundostack.cpp +++ b/tests/auto/widgets/util/qundostack/tst_qundostack.cpp @@ -3853,7 +3853,7 @@ void tst_QUndoStack::undoLimit() void tst_QUndoStack::commandTextFormat() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("No QProcess available"); #else QString binDir = QLibraryInfo::location(QLibraryInfo::BinariesPath); diff --git a/tests/auto/widgets/widgets/qdialogbuttonbox/tst_qdialogbuttonbox.cpp b/tests/auto/widgets/widgets/qdialogbuttonbox/tst_qdialogbuttonbox.cpp index a35ea8eb6e6..f127fd98f7f 100644 --- a/tests/auto/widgets/widgets/qdialogbuttonbox/tst_qdialogbuttonbox.cpp +++ b/tests/auto/widgets/widgets/qdialogbuttonbox/tst_qdialogbuttonbox.cpp @@ -97,6 +97,8 @@ private slots: void testDefaultButton(); void task191642_default(); + void testDeletedStandardButton(); + private: qint64 timeStamp; qint64 buttonClicked1TimeStamp; @@ -843,5 +845,22 @@ void tst_QDialogButtonBox::task191642_default() QCOMPARE(clicked.count(), 1); } +void tst_QDialogButtonBox::testDeletedStandardButton() +{ + QDialogButtonBox buttonBox; + delete buttonBox.addButton(QDialogButtonBox::Ok); + QPointer buttonC = buttonBox.addButton(QDialogButtonBox::Cancel); + delete buttonBox.addButton(QDialogButtonBox::Cancel); + QPointer buttonA = buttonBox.addButton(QDialogButtonBox::Apply); + delete buttonBox.addButton(QDialogButtonBox::Help); + // A few button have been deleted, they should automatically be removed + QCOMPARE(buttonBox.standardButtons(), QDialogButtonBox::Apply | QDialogButtonBox::Cancel); + + buttonBox.setStandardButtons(QDialogButtonBox::Reset | QDialogButtonBox::Cancel); + // setStanderdButton should delete previous buttons + QVERIFY(!buttonA); + QVERIFY(!buttonC); +} + QTEST_MAIN(tst_QDialogButtonBox) #include "tst_qdialogbuttonbox.moc" diff --git a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp index 3218b8ac68a..b037cc21411 100644 --- a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp +++ b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp @@ -42,6 +42,7 @@ #include #include +#include #include #include @@ -110,6 +111,9 @@ private slots: void QTBUG_37933_ampersands_data(); void QTBUG_37933_ampersands(); #endif + void QTBUG_56917_wideMenuSize(); + void QTBUG_56917_wideMenuScreenNumber(); + void QTBUG_56917_wideSubmenuScreenNumber(); protected slots: void onActivated(QAction*); void onHighlighted(QAction*); @@ -1311,5 +1315,63 @@ void tst_QMenu::QTBUG_37933_ampersands() } #endif +void tst_QMenu::QTBUG_56917_wideMenuSize() +{ + // menu shouldn't to take on full screen height when menu width is larger than screen width + QMenu menu; + QString longString; + longString.fill(QLatin1Char('Q'), 3000); + menu.addAction(longString); + QSize menuSizeHint = menu.sizeHint(); + menu.popup(QPoint()); + QTest::qWait(100); + QVERIFY(QTest::qWaitForWindowExposed(&menu)); + QVERIFY(menu.isVisible()); + QVERIFY(menu.height() <= menuSizeHint.height()); +} + +void tst_QMenu::QTBUG_56917_wideMenuScreenNumber() +{ + if (QApplication::styleHints()->showIsFullScreen()) + QSKIP("The platform defaults to windows being fullscreen."); + // menu must appear on the same screen where show action is triggered + QString longString; + longString.fill(QLatin1Char('Q'), 3000); + + for (int i = 0; i < QApplication::desktop()->screenCount(); i++) { + QMenu menu; + menu.addAction(longString); + menu.popup(QApplication::desktop()->screen(i)->geometry().center()); + QTest::qWait(100); + QVERIFY(QTest::qWaitForWindowExposed(&menu)); + QVERIFY(menu.isVisible()); + QCOMPARE(QApplication::desktop()->screenNumber(&menu), i); + } +} + +void tst_QMenu::QTBUG_56917_wideSubmenuScreenNumber() +{ + if (QApplication::styleHints()->showIsFullScreen()) + QSKIP("The platform defaults to windows being fullscreen."); + // submenu must appear on the same screen where its parent menu is shown + QString longString; + longString.fill(QLatin1Char('Q'), 3000); + + for (int i = 0; i < QApplication::desktop()->screenCount(); i++) { + QMenu menu; + QMenu submenu("Submenu"); + submenu.addAction(longString); + QAction *action = menu.addMenu(&submenu); + menu.popup(QApplication::desktop()->screen(i)->geometry().center()); + QVERIFY(QTest::qWaitForWindowExposed(&menu)); + QVERIFY(menu.isVisible()); + QTest::mouseClick(&menu, Qt::LeftButton, 0, menu.actionGeometry(action).center()); + QTest::qWait(100); + QVERIFY(QTest::qWaitForWindowExposed(&submenu)); + QVERIFY(submenu.isVisible()); + QCOMPARE(QApplication::desktop()->screenNumber(&submenu), i); + } +} + QTEST_MAIN(tst_QMenu) #include "tst_qmenu.moc" diff --git a/tests/baselineserver/shared/baselineprotocol.cpp b/tests/baselineserver/shared/baselineprotocol.cpp index be060ef7451..1e4d8846c83 100644 --- a/tests/baselineserver/shared/baselineprotocol.cpp +++ b/tests/baselineserver/shared/baselineprotocol.cpp @@ -31,7 +31,9 @@ #include #include #include -#include +#if QT_CONFIG(process) +# include +#endif #include #include #include @@ -88,7 +90,7 @@ PlatformInfo PlatformInfo::localHostInfo() #if QT_VERSION >= 0x050000 pi.insert(PI_QtBuildMode, QLibraryInfo::isDebugBuild() ? QLS("QtDebug") : QLS("QtRelease")); #endif -#if defined(Q_OS_LINUX) +#if defined(Q_OS_LINUX) && QT_CONFIG(process) pi.insert(PI_OSName, QLS("Linux")); #elif defined(Q_OS_WIN) pi.insert(PI_OSName, QLS("Windows")); @@ -99,7 +101,7 @@ PlatformInfo PlatformInfo::localHostInfo() #endif pi.insert(PI_OSVersion, QSysInfo::kernelVersion()); -#ifndef QT_NO_PROCESS +#if QT_CONFIG(process) QProcess git; QString cmd; QStringList args; @@ -135,7 +137,7 @@ PlatformInfo PlatformInfo::localHostInfo() pi.insert(PI_PulseGitBranch, QString::fromLatin1(gb)); } } -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) return pi; } diff --git a/tests/baselineserver/shared/qbaselinetest.cpp b/tests/baselineserver/shared/qbaselinetest.cpp index 7e913c12330..ef38e21edb6 100644 --- a/tests/baselineserver/shared/qbaselinetest.cpp +++ b/tests/baselineserver/shared/qbaselinetest.cpp @@ -28,7 +28,9 @@ #include "qbaselinetest.h" #include "baselineprotocol.h" -#include +#if QT_CONFIG(process) +# include +#endif #include #define MAXCMDLINEARGS 128 @@ -126,7 +128,7 @@ void addClientProperty(const QString& key, const QString& value) */ void fetchCustomClientProperties() { -#ifdef QT_NO_PROCESS +#if !QT_CONFIG(process) QSKIP("This test requires QProcess support"); #else QString script = "hostinfo.sh"; //### TBD: Windows implementation (hostinfo.bat) @@ -151,7 +153,7 @@ void fetchCustomClientProperties() else qDebug() << "Unparseable script output ignored:" << line; } -#endif // !QT_NO_PROCESS +#endif // QT_CONFIG(process) } diff --git a/tests/benchmarks/corelib/io/io.pro b/tests/benchmarks/corelib/io/io.pro index 38a1f6b15b4..23f9c190aac 100644 --- a/tests/benchmarks/corelib/io/io.pro +++ b/tests/benchmarks/corelib/io/io.pro @@ -5,7 +5,7 @@ SUBDIRS = \ qfile \ qfileinfo \ qiodevice \ - qprocess \ qtemporaryfile \ qtextstream +qtConfig(process): SUBDIRS += qprocess diff --git a/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp b/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp index 782cad94a1f..5bd4bc5520c 100644 --- a/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp +++ b/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp @@ -33,15 +33,11 @@ class tst_QProcess : public QObject { Q_OBJECT -#if !defined(QT_NO_PROCESS) private slots: void echoTest_performance(); - -#endif // QT_NO_PROCESS }; -#if !defined(QT_NO_PROCESS) void tst_QProcess::echoTest_performance() { QProcess process; @@ -87,7 +83,5 @@ void tst_QProcess::echoTest_performance() QVERIFY(process.waitForFinished()); } -#endif // QT_NO_PROCESS - QTEST_MAIN(tst_QProcess) #include "tst_bench_qprocess.moc"