diff options
Diffstat (limited to 'src/corelib/io/qloggingregistry_p.h')
-rw-r--r-- | src/corelib/io/qloggingregistry_p.h | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/src/corelib/io/qloggingregistry_p.h b/src/corelib/io/qloggingregistry_p.h index 4f18f6adf4..1102e53324 100644 --- a/src/corelib/io/qloggingregistry_p.h +++ b/src/corelib/io/qloggingregistry_p.h @@ -19,16 +19,17 @@ #include <QtCore/qloggingcategory.h> #include <QtCore/qlist.h> #include <QtCore/qhash.h> -#include <QtCore/qmap.h> #include <QtCore/qmutex.h> #include <QtCore/qstring.h> #include <QtCore/qtextstream.h> +#include <map> + class tst_QLoggingRegistry; QT_BEGIN_NAMESPACE -#define Q_LOGGING_CATEGORY_WITH_ENV_OVERRIDE(name, env, categoryName) \ +#define Q_LOGGING_CATEGORY_WITH_ENV_OVERRIDE_IMPL(name, env, categoryName) \ const QLoggingCategory &name() \ { \ static constexpr char cname[] = categoryName; \ @@ -38,6 +39,28 @@ QT_BEGIN_NAMESPACE return category; \ } +#if defined(Q_CC_GNU_ONLY) && Q_CC_GNU < 1000 +// GCC <10 thinks the "using" declaration from QT_DECLARE_EXPORTED_QT_LOGGING_CATEGORY +// or Q_DECLARE_LOGGING_CATEGORY conflicts with any weak overload created as part of the definition. +// So let's make it happy and repeat the "using" instead. +#define Q_LOGGING_CATEGORY_WITH_ENV_OVERRIDE(name, env, categoryName) \ + namespace QtPrivateLogging { \ + Q_LOGGING_CATEGORY_WITH_ENV_OVERRIDE_IMPL(name, env, categoryName) \ + } \ + using QtPrivateLogging::name; +#else +#define Q_LOGGING_CATEGORY_WITH_ENV_OVERRIDE(name, env, categoryName) \ + namespace QtPrivateLogging { \ + Q_LOGGING_CATEGORY_WITH_ENV_OVERRIDE_IMPL(name, env, categoryName) \ + } \ + Q_WEAK_OVERLOAD \ + Q_DECL_DEPRECATED_X("Logging categories should either be static or declared in a header") \ + const QLoggingCategory &name() { return QtPrivateLogging::name(); } +#endif + +#define Q_STATIC_LOGGING_CATEGORY_WITH_ENV_OVERRIDE(name, env, categoryName) \ + static Q_LOGGING_CATEGORY_WITH_ENV_OVERRIDE_IMPL(name, env, categoryName) + class Q_AUTOTEST_EXPORT QLoggingRule { public: @@ -54,9 +77,9 @@ public: Q_DECLARE_FLAGS(PatternFlags, PatternFlag) QString category; - int messageType; + int messageType = -1; PatternFlags flags; - bool enabled; + bool enabled = false; private: void parse(QStringView pattern); @@ -85,6 +108,7 @@ private: class Q_AUTOTEST_EXPORT QLoggingRegistry { + Q_DISABLE_COPY_MOVE(QLoggingRegistry) public: QLoggingRegistry(); @@ -96,7 +120,7 @@ public: #ifndef QT_BUILD_INTERNAL Q_CORE_EXPORT // always export from QtCore #endif - void registerEnvironmentOverrideForCategory(QByteArrayView categoryName, QByteArrayView environment); + void registerEnvironmentOverrideForCategory(const char *categoryName, const char *environment); void setApiRules(const QString &content); @@ -126,7 +150,7 @@ private: QList<QLoggingRule> ruleSets[NumRuleSets]; QHash<QLoggingCategory *, QtMsgType> categories; QLoggingCategory::CategoryFilter categoryFilter; - QMap<QByteArrayView, QByteArrayView> qtCategoryEnvironmentOverrides; + std::map<QByteArrayView, const char *> qtCategoryEnvironmentOverrides; friend class ::tst_QLoggingRegistry; }; @@ -139,12 +163,12 @@ public: {} private: - static const char *registerOverride(QByteArrayView categoryName, QByteArrayView environment) + static const char *registerOverride(const char *categoryName, const char *environment) { QLoggingRegistry *c = QLoggingRegistry::instance(); if (c) c->registerEnvironmentOverrideForCategory(categoryName, environment); - return categoryName.data(); + return categoryName; } }; |