diff options
Diffstat (limited to 'src/corelib/global')
-rw-r--r-- | src/corelib/global/qcompilerdetection.h | 23 | ||||
-rw-r--r-- | src/corelib/global/qglobal.h | 3 | ||||
-rw-r--r-- | src/corelib/global/qlogging.cpp | 36 |
3 files changed, 48 insertions, 14 deletions
diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h index b62ae30fc5..bb892cf751 100644 --- a/src/corelib/global/qcompilerdetection.h +++ b/src/corelib/global/qcompilerdetection.h @@ -844,21 +844,28 @@ #endif /* Q_CC_MSVC */ #ifdef __cplusplus +# include <utility> # if defined(Q_OS_QNX) -# include <utility> # if defined(_YVALS) || defined(_LIBCPP_VER) // QNX: libcpp (Dinkumware-based) doesn't have the <initializer_list> // header, so the feature is useless, even if the compiler supports // it. Disable. -# ifdef Q_COMPILER_INITIALIZER_LISTS -# undef Q_COMPILER_INITIALIZER_LISTS -# endif -# ifdef Q_COMPILER_RVALUE_REFS -# undef Q_COMPILER_RVALUE_REFS -# endif +# undef Q_COMPILER_INITIALIZER_LISTS +// That libcpp doesn't have std::move either, so disable everything +// related to rvalue refs. +# undef Q_COMPILER_RVALUE_REFS +# undef Q_COMPILER_REF_QUALIFIERS # endif +# endif // Q_OS_QNX +# if (defined(Q_CC_CLANG) || defined(Q_CC_INTEL)) && defined(Q_OS_MAC) && defined(__GNUC_LIBSTD__) \ + && ((__GNUC_LIBSTD__-0) * 100 + __GNUC_LIBSTD_MINOR__-0 <= 402) +// Mac OS X: Apple has not updated libstdc++ since 2007, which means it does not have +// <initializer_list> or std::move. Let's disable these features +# undef Q_COMPILER_INITIALIZER_LISTS +# undef Q_COMPILER_RVALUE_REFS +# undef Q_COMPILER_REF_QUALIFIERS # endif -#endif // Q_OS_QNX +#endif /* * C++11 keywords and expressions diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 3832e70c94..a9621e744c 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -58,7 +58,10 @@ #if !defined(QT_BUILD_QMAKE) && !defined(QT_BUILD_CONFIGURE) #include <QtCore/qconfig.h> #include <QtCore/qfeatures.h> +#endif #define QT_SUPPORTS(FEATURE) (!defined(QT_NO_##FEATURE)) +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) +# define QT_NO_UNSHARABLE_CONTAINERS #endif /* These two macros makes it possible to turn the builtin line expander into a diff --git a/src/corelib/global/qlogging.cpp b/src/corelib/global/qlogging.cpp index da26490d18..4a602e4b2b 100644 --- a/src/corelib/global/qlogging.cpp +++ b/src/corelib/global/qlogging.cpp @@ -1207,6 +1207,23 @@ static void android_default_message_handler(QtMsgType type, static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &buf) { + // to determine logging destination and marking logging environment variable as deprecated + // ### remove when deprecated + struct LogDestination { + LogDestination(const char *deprecated, bool forceConsole) { + const char* replacement = "QT_LOGGING_TO_CONSOLE"; + bool newEnv = qEnvironmentVariableIsSet(replacement); + bool oldEnv = qEnvironmentVariableIsSet(deprecated); + if (oldEnv && !newEnv && !forceConsole) { + fprintf(stderr, "Warning: Environment variable %s is deprecated, " + "use %s instead.\n", deprecated, replacement); + fflush(stderr); + } + toConsole = newEnv || oldEnv || forceConsole; + } + bool toConsole; + }; + QString logMessage = qMessageFormatString(type, context, buf); #if defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB) @@ -1217,12 +1234,19 @@ static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &con #endif // Q_OS_WIN #if defined(QT_USE_SLOG2) - slog2_default_handler(type, logMessage.toLocal8Bit().constData()); + static const bool logToConsole = qEnvironmentVariableIsSet("QT_LOGGING_TO_CONSOLE"); + if (!logToConsole) { + slog2_default_handler(type, logMessage.toLocal8Bit().constData()); + } else { + fprintf(stderr, "%s", logMessage.toLocal8Bit().constData()); + fflush(stderr); + } #elif defined(QT_USE_JOURNALD) && !defined(QT_BOOTSTRAPPED) // We use isatty to catch the obvious case of someone running something interactively. - // We also support an environment variable for Qt Creator use, or more complicated cases like subprocesses. - static bool logToConsole = isatty(fileno(stdin)) || !qEnvironmentVariableIsEmpty("QT_NO_JOURNALD_LOG"); - if (Q_LIKELY(!logToConsole)) { + // We also support environment variables for Qt Creator use, or more complicated cases + // like subprocesses. + static const LogDestination logdest("QT_NO_JOURNALD_LOG", isatty(fileno(stdin))); + if (Q_LIKELY(!logdest.toConsole)) { // remove trailing \n, systemd appears to want them newline-less logMessage.chop(1); systemd_default_message_handler(type, context, logMessage); @@ -1231,8 +1255,8 @@ static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &con fflush(stderr); } #elif defined(Q_OS_ANDROID) - static bool logToAndroid = qEnvironmentVariableIsEmpty("QT_ANDROID_PLAIN_LOG"); - if (logToAndroid) { + static const LogDestination logdest("QT_ANDROID_PLAIN_LOG", false); + if (!logdest.toConsole) { android_default_message_handler(type, context, logMessage); } else { fprintf(stderr, "%s", logMessage.toLocal8Bit().constData()); |