summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib')
-rw-r--r--src/corelib/Qt5CTestMacros.cmake3
-rw-r--r--src/corelib/global/qlogging.cpp69
-rw-r--r--src/corelib/io/qprocess_unix.cpp2
-rw-r--r--src/corelib/kernel/qmetatype.h2
4 files changed, 54 insertions, 22 deletions
diff --git a/src/corelib/Qt5CTestMacros.cmake b/src/corelib/Qt5CTestMacros.cmake
index 40106fe919..962d49d6b2 100644
--- a/src/corelib/Qt5CTestMacros.cmake
+++ b/src/corelib/Qt5CTestMacros.cmake
@@ -39,6 +39,9 @@ if (CMAKE_VERBOSE_MAKEFILE)
list(APPEND BUILD_OPTIONS_LIST "-DCMAKE_VERBOSE_MAKEFILE=1")
endif()
+if (NO_GUI)
+ list(APPEND BUILD_OPTIONS_LIST "-DNO_GUI=True")
+endif()
if (NO_WIDGETS)
list(APPEND BUILD_OPTIONS_LIST "-DNO_WIDGETS=True")
endif()
diff --git a/src/corelib/global/qlogging.cpp b/src/corelib/global/qlogging.cpp
index 8cd1190e32..de37731b1a 100644
--- a/src/corelib/global/qlogging.cpp
+++ b/src/corelib/global/qlogging.cpp
@@ -982,13 +982,16 @@ struct QMessagePattern {
// 0 terminated arrays of literal tokens / literal or placeholder tokens
const char **literals;
const char **tokens;
- QString timeFormat;
+ QList<QString> timeArgs; // timeFormats in sequence of %{time
#ifndef QT_BOOTSTRAPPED
QElapsedTimer timer;
#endif
#ifdef QLOGGING_HAVE_BACKTRACE
- QString backtraceSeparator;
- int backtraceDepth;
+ struct BacktraceParams {
+ QString backtraceSeparator;
+ int backtraceDepth;
+ };
+ QList<BacktraceParams> backtraceArgs; // backtrace argumens in sequence of %{backtrace
#endif
bool fromEnvironment;
@@ -1000,10 +1003,6 @@ QBasicMutex QMessagePattern::mutex;
QMessagePattern::QMessagePattern()
: literals(0)
, tokens(0)
-#ifdef QLOGGING_HAVE_BACKTRACE
- , backtraceSeparator(QLatin1Char('|'))
- , backtraceDepth(5)
-#endif
, fromEnvironment(false)
{
#ifndef QT_BOOTSTRAPPED
@@ -1106,10 +1105,14 @@ void QMessagePattern::setPattern(const QString &pattern)
tokens[i] = timeTokenC;
int spaceIdx = lexeme.indexOf(QChar::fromLatin1(' '));
if (spaceIdx > 0)
- timeFormat = lexeme.mid(spaceIdx + 1, lexeme.length() - spaceIdx - 2);
+ timeArgs.append(lexeme.mid(spaceIdx + 1, lexeme.length() - spaceIdx - 2));
+ else
+ timeArgs.append(QString());
} else if (lexeme.startsWith(QLatin1String(backtraceTokenC))) {
#ifdef QLOGGING_HAVE_BACKTRACE
tokens[i] = backtraceTokenC;
+ QString backtraceSeparator = QStringLiteral("|");
+ int backtraceDepth = 5;
QRegularExpression depthRx(QStringLiteral(" depth=(?|\"([^\"]*)\"|([^ }]*))"));
QRegularExpression separatorRx(QStringLiteral(" separator=(?|\"([^\"]*)\"|([^ }]*))"));
QRegularExpressionMatch m = depthRx.match(lexeme);
@@ -1123,6 +1126,10 @@ void QMessagePattern::setPattern(const QString &pattern)
m = separatorRx.match(lexeme);
if (m.hasMatch())
backtraceSeparator = m.captured(1);
+ BacktraceParams backtraceParams;
+ backtraceParams.backtraceDepth = backtraceDepth;
+ backtraceParams.backtraceSeparator = backtraceSeparator;
+ backtraceArgs.append(backtraceParams);
#else
error += QStringLiteral("QT_MESSAGE_PATTERN: %{backtrace} is not supported by this Qt build\n");
#endif
@@ -1265,13 +1272,29 @@ QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, con
bool skip = false;
+#ifndef QT_BOOTSTRAPPED
+ int timeArgsIdx = 0;
+#ifdef QLOGGING_HAVE_BACKTRACE
+ int backtraceArgsIdx = 0;
+#endif
+#endif
+
// we do not convert file, function, line literals to local encoding due to overhead
for (int i = 0; pattern->tokens[i] != 0; ++i) {
const char *token = pattern->tokens[i];
if (token == endifTokenC) {
skip = false;
} else if (skip) {
- // do nothing
+ // we skip adding messages, but we have to iterate over
+ // timeArgsIdx and backtraceArgsIdx anyway
+#ifndef QT_BOOTSTRAPPED
+ if (token == timeTokenC)
+ timeArgsIdx++;
+#ifdef QLOGGING_HAVE_BACKTRACE
+ else if (token == backtraceTokenC)
+ backtraceArgsIdx++;
+#endif
+#endif
} else if (token == messageTokenC) {
message.append(str);
} else if (token == categoryTokenC) {
@@ -1309,11 +1332,15 @@ QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, con
message.append(QString::number(qlonglong(QThread::currentThread()->currentThread()), 16));
#ifdef QLOGGING_HAVE_BACKTRACE
} else if (token == backtraceTokenC) {
- QVarLengthArray<void*, 32> buffer(7 + pattern->backtraceDepth);
+ QMessagePattern::BacktraceParams backtraceParams = pattern->backtraceArgs.at(backtraceArgsIdx);
+ QString backtraceSeparator = backtraceParams.backtraceSeparator;
+ int backtraceDepth = backtraceParams.backtraceDepth;
+ backtraceArgsIdx++;
+ QVarLengthArray<void*, 32> buffer(7 + backtraceDepth);
int n = backtrace(buffer.data(), buffer.size());
if (n > 0) {
int numberPrinted = 0;
- for (int i = 0; i < n && numberPrinted < pattern->backtraceDepth; ++i) {
+ for (int i = 0; i < n && numberPrinted < backtraceDepth; ++i) {
QScopedPointer<char*, QScopedPointerPodDeleter> strings(backtrace_symbols(buffer.data() + i, 1));
QString trace = QString::fromLatin1(strings.data()[0]);
// The results of backtrace_symbols looks like this:
@@ -1343,7 +1370,7 @@ QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, con
}
if (numberPrinted > 0)
- message.append(pattern->backtraceSeparator);
+ message.append(backtraceSeparator);
if (function.isEmpty()) {
if (numberPrinted == 0 && context.function)
@@ -1357,27 +1384,29 @@ QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, con
} else {
if (numberPrinted == 0)
continue;
- message += pattern->backtraceSeparator + QLatin1String("???");
+ message += backtraceSeparator + QLatin1String("???");
}
numberPrinted++;
}
}
#endif
} else if (token == timeTokenC) {
- if (pattern->timeFormat == QLatin1String("process")) {
- quint64 ms = pattern->timer.elapsed();
- message.append(QString::asprintf("%6d.%03d", uint(ms / 1000), uint(ms % 1000)));
- } else if (pattern->timeFormat == QLatin1String("boot")) {
+ QString timeFormat = pattern->timeArgs.at(timeArgsIdx);
+ timeArgsIdx++;
+ if (timeFormat == QLatin1String("process")) {
+ quint64 ms = pattern->timer.elapsed();
+ message.append(QString::asprintf("%6d.%03d", uint(ms / 1000), uint(ms % 1000)));
+ } else if (timeFormat == QLatin1String("boot")) {
// just print the milliseconds since the elapsed timer reference
// like the Linux kernel does
QElapsedTimer now;
now.start();
uint ms = now.msecsSinceReference();
message.append(QString::asprintf("%6d.%03d", uint(ms / 1000), uint(ms % 1000)));
- } else if (pattern->timeFormat.isEmpty()) {
- message.append(QDateTime::currentDateTime().toString(Qt::ISODate));
+ } else if (timeFormat.isEmpty()) {
+ message.append(QDateTime::currentDateTime().toString(Qt::ISODate));
} else {
- message.append(QDateTime::currentDateTime().toString(pattern->timeFormat));
+ message.append(QDateTime::currentDateTime().toString(timeFormat));
}
#endif
} else if (token == ifCategoryTokenC) {
diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp
index 93807e13eb..a5b7692fc9 100644
--- a/src/corelib/io/qprocess_unix.cpp
+++ b/src/corelib/io/qprocess_unix.cpp
@@ -701,7 +701,7 @@ qint64 QProcessPrivate::writeToStdin(const char *data, qint64 maxlen)
void QProcessPrivate::terminateProcess()
{
#if defined (QPROCESS_DEBUG)
- qDebug("QProcessPrivate::killProcess()");
+ qDebug("QProcessPrivate::terminateProcess()");
#endif
if (pid)
::kill(pid_t(pid), SIGTERM);
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index e6a66dbc86..ebe118dce4 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -1232,7 +1232,7 @@ public:
inline void destroyIter() { _destroyIter(&_iterator); }
- inline VariantData getCurrentKey() const { return _getKey(&_iterator, _metaType_id_key, _metaType_flags_value); }
+ inline VariantData getCurrentKey() const { return _getKey(&_iterator, _metaType_id_key, _metaType_flags_key); }
inline VariantData getCurrentValue() const { return _getValue(&_iterator, _metaType_id_value, _metaType_flags_value); }
inline void find(const VariantData &key)