Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qglobal_p.h
Go to the documentation of this file.
1// Copyright (C) 2017 The Qt Company Ltd.
2// Copyright (C) 2015 Intel Corporation.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4// Qt-Security score:significant reason:default
5
6#ifndef QGLOBAL_P_H
7#define QGLOBAL_P_H
8
9//
10// W A R N I N G
11// -------------
12//
13// This file is not part of the Qt API. It exists purely as an
14// implementation detail. This header file may change from version to
15// version without notice, or even be removed.
16//
17// We mean it.
18//
19
20#include "qglobal.h"
21#include "qglobal_p.h" // include self to avoid syncqt warning - no-op
22
23#ifndef QT_BOOTSTRAPPED
24#include <QtCore/private/qtcoreglobal_p.h>
25#endif
26
27#if defined(Q_CC_MSVC)
28// By default, dynamic initialization uses subsection "$XCU", which is
29// equivalent to #pragma init_seg(user). Additionally, #pragma
30// init_seg(compiler) and init_seg(lib) use "$XCC" and "$XCL" respectively. So
31// place us between "compiler" and "lib".
32# define QT_SUPPORTS_INIT_PRIORITY 1
33
34// warning C4075: initializers put in unrecognized initialization area
35# define Q_DECL_INIT_PRIORITY(nn)
36 __pragma(warning(disable: 4075))
37 __pragma(init_seg(".CRT$XCK" QT_STRINGIFY(nn))) Q_DECL_UNUSED
38#elif defined(Q_OS_QNX)
39// init_priority fails on QNX and we didn't bother investigating why
40# define QT_SUPPORTS_INIT_PRIORITY 0
41#elif defined(Q_OS_WIN) || defined(Q_OF_ELF)
42# define QT_SUPPORTS_INIT_PRIORITY 1
43// priorities 0 to 1000 are reserved to the runtime;
44// we use above 2000 in case someone REALLY needs to go before us
45# define Q_DECL_INIT_PRIORITY(nn) __attribute__((init_priority(2000 + nn), used))
46#elif defined(QT_SHARED)
47// it doesn't support this exactly, but we can work around it
48# define QT_SUPPORTS_INIT_PRIORITY -1
49# define Q_DECL_INIT_PRIORITY(nn) Q_DECL_UNUSED
50#else
51# define QT_SUPPORTS_INIT_PRIORITY 0
52#endif
53
54#if defined(__cplusplus)
55QT_BEGIN_NAMESPACE
56
57Q_NORETURN Q_CORE_EXPORT void qAbort();
58
59QT_END_NAMESPACE
60
61#if !__has_builtin(__builtin_available)
62#include <initializer_list>
63#include <QtCore/qoperatingsystemversion.h>
64#include <QtCore/qversionnumber.h>
65
66QT_BEGIN_NAMESPACE
67
68struct qt_clang_builtin_available_os_version_data {
69 QOperatingSystemVersion::OSType type;
70 const char *version;
71};
72
73static inline bool qt_clang_builtin_available(
74 const std::initializer_list<qt_clang_builtin_available_os_version_data> &versions)
75{
76 for (auto it = versions.begin(); it != versions.end(); ++it) {
77 if (QOperatingSystemVersion::currentType() == it->type) {
78 const auto current = QOperatingSystemVersion::current();
79 return QVersionNumber(
80 current.majorVersion(),
81 current.minorVersion(),
82 current.microVersion()) >= QVersionNumber::fromString(
83 QString::fromLatin1(it->version));
84 }
85 }
86
87 // Result is true if the platform is not any of the checked ones; this matches behavior of
88 // LLVM __builtin_available and @available constructs
89 return true;
90}
91
92QT_END_NAMESPACE
93
94#define QT_AVAILABLE_OS_VER(os, ver)
95 QT_PREPEND_NAMESPACE(qt_clang_builtin_available_os_version_data){
96 QT_PREPEND_NAMESPACE(QOperatingSystemVersion)::os, #ver}
97#define QT_AVAILABLE_CAT(L, R) QT_AVAILABLE_CAT_(L, R)
98#define QT_AVAILABLE_CAT_(L, R) L ## R
99#define QT_AVAILABLE_EXPAND(...) QT_AVAILABLE_OS_VER(__VA_ARGS__)
100#define QT_AVAILABLE_SPLIT(os_ver) QT_AVAILABLE_EXPAND(QT_AVAILABLE_CAT(QT_AVAILABLE_SPLIT_, os_ver))
101#define QT_AVAILABLE_SPLIT_macOS MacOS,
102#define QT_AVAILABLE_SPLIT_iOS IOS,
103#define QT_AVAILABLE_SPLIT_tvOS TvOS,
104#define QT_AVAILABLE_SPLIT_watchOS WatchOS,
105#define QT_BUILTIN_AVAILABLE0(e)
106 QT_PREPEND_NAMESPACE(qt_clang_builtin_available)({})
107#define QT_BUILTIN_AVAILABLE1(a, e)
108 QT_PREPEND_NAMESPACE(qt_clang_builtin_available)({QT_AVAILABLE_SPLIT(a)})
109#define QT_BUILTIN_AVAILABLE2(a, b, e)
110 QT_PREPEND_NAMESPACE(qt_clang_builtin_available)({QT_AVAILABLE_SPLIT(a),
111 QT_AVAILABLE_SPLIT(b)})
112#define QT_BUILTIN_AVAILABLE3(a, b, c, e)
113 QT_PREPEND_NAMESPACE(qt_clang_builtin_available)({QT_AVAILABLE_SPLIT(a),
114 QT_AVAILABLE_SPLIT(b),
115 QT_AVAILABLE_SPLIT(c)})
116#define QT_BUILTIN_AVAILABLE4(a, b, c, d, e)
117 QT_PREPEND_NAMESPACE(qt_clang_builtin_available)({QT_AVAILABLE_SPLIT(a),
118 QT_AVAILABLE_SPLIT(b),
119 QT_AVAILABLE_SPLIT(c),
120 QT_AVAILABLE_SPLIT(d)})
121#define QT_BUILTIN_AVAILABLE_ARG(arg0, arg1, arg2, arg3, arg4, arg5, ...) arg5
122#define QT_BUILTIN_AVAILABLE_CHOOSER(...) QT_BUILTIN_AVAILABLE_ARG(__VA_ARGS__,
123 QT_BUILTIN_AVAILABLE4,
124 QT_BUILTIN_AVAILABLE3,
125 QT_BUILTIN_AVAILABLE2,
126 QT_BUILTIN_AVAILABLE1,
127 QT_BUILTIN_AVAILABLE0, )
128#define __builtin_available(...) QT_BUILTIN_AVAILABLE_CHOOSER(__VA_ARGS__)(__VA_ARGS__)
129#endif // !__has_builtin(__builtin_available)
130#endif // defined(__cplusplus)
131
132#endif // QGLOBAL_P_H
QByteArray & operator*() noexcept
Definition qbytearray.h:803
QByteArray::Base64DecodingStatus decodingStatus
Definition qbytearray.h:788
friend bool operator==(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
Returns true if lhs and rhs are equal, otherwise returns false.
Definition qbytearray.h:807
void swap(QByteArray::FromBase64Result &other) noexcept
Definition qbytearray.h:790
operator bool() const noexcept
\variable QByteArray::FromBase64Result::decoded
Definition qbytearray.h:796
const QByteArray & operator*() const noexcept
Returns the decoded byte array.
Definition qbytearray.h:804
friend bool operator!=(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
Returns true if lhs and rhs are different, otherwise returns false.
Definition qbytearray.h:818
\inmodule QtCore
Definition qbytearray.h:58
\inmodule QtCore\reentrant
Definition qdatastream.h:50
int initFrom(const QMessageLogContext &logContext)
void populateBacktrace(int frameCount)
QInternalMessageLogContext(const QMessageLogContext &logContext, const QLoggingCategory &categoryOverride)
Definition qlogging_p.h:66
std::optional< BacktraceStorage > backtrace
Definition qlogging_p.h:58
static constexpr int DefaultBacktraceDepth
Definition qlogging_p.h:48
Definition qlist.h:81
\inmodule QtCore
Definition qlogging.h:44
constexpr QMessageLogContext(const char *fileName, int lineNumber, const char *functionName, const char *categoryName) noexcept
Definition qlogging.h:49
const char * category
Definition qlogging.h:56
constexpr QMessageLogContext() noexcept=default
const char * function
Definition qlogging.h:55
const char * file
Definition qlogging.h:54
\inmodule QtCore
Definition qlogging.h:74
QDebug debug(CategoryFunction catFunc) const
QDebug debug(const QLoggingCategory &cat) const
Logs a debug message into category cat using a QDebug stream.
Definition qlogging.cpp:526
void void void void Q_DECL_COLD_FUNCTION void Q_DECL_COLD_FUNCTION void Q_DECL_COLD_FUNCTION void Q_DECL_COLD_FUNCTION void QT_MESSAGE_LOGGER_NORETURN Q_DECL_COLD_FUNCTION void QT_MESSAGE_LOGGER_NORETURN Q_DECL_COLD_FUNCTION void QDebug debug() const
Logs a debug message using a QDebug stream.
Definition qlogging.cpp:512
QDebug info(const QLoggingCategory &cat) const
Logs an informational message into the category cat using a QDebug stream.
Definition qlogging.cpp:615
QDebug info() const
Logs an informational message using a QDebug stream.
Definition qlogging.cpp:601
QNoDebug noDebug(...) const noexcept
QDebug info(CategoryFunction catFunc) const
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:177
static const char ifCriticalTokenC[]
static bool grabMessageHandler()
void qt_message_output(QtMsgType msgType, const QMessageLogContext &context, const QString &message)
static const char emptyTokenC[]
static Q_NEVER_INLINE void qt_message(QtMsgType msgType, const QMessageLogContext &context, const char *msg, va_list ap)
Definition qlogging.cpp:409
static void preformattedMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &formattedMessage)
static bool systemHasStderr()
Returns true if writing to stderr is supported.
Definition qlogging.cpp:263
static const char endifTokenC[]
static bool isDefaultCategory(const char *category)
Definition qlogging.cpp:955
static const char messageTokenC[]
static bool qt_append_thread_name_to(QString &message)
Definition qlogging.cpp:248
static constexpr SystemMessageSink systemMessageSink
static void qt_maybe_message_fatal(QtMsgType, const QMessageLogContext &context, String &&message)
\inmodule QtCore \title Qt Logging Types
#define HANDLE_IF_TOKEN(LEVEL)
Q_DECLARE_TYPEINFO(QMessagePattern::BacktraceParams, Q_RELOCATABLE_TYPE)
static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &buf)
static const char timeTokenC[]
static bool isFatalCountDown(const char *varname, QBasicAtomicInt &n)
Definition qlogging.cpp:153
void qErrnoWarning(int code, const char *msg,...)
static const char qthreadptrTokenC[]
static const char fileTokenC[]
static const char ifDebugTokenC[]
static const char ifFatalTokenC[]
static const char categoryTokenC[]
static void stderr_message_handler(QtMsgType type, const QMessageLogContext &context, const QString &formattedMessage)
static const char lineTokenC[]
static const char typeTokenC[]
static void ungrabMessageHandler()
static void copyInternalContext(QInternalMessageLogContext *self, const QMessageLogContext &logContext) noexcept
static const char ifCategoryTokenC[]
static int checked_var_value(const char *varname)
Definition qlogging.cpp:139
static const char threadnameTokenC[]
static const char pidTokenC[]
Q_TRACE_POINT(qtcore, qt_message_print, int type, const char *category, const char *function, const char *file, int line, const QString &message)
static const char threadidTokenC[]
static QString formatLogMessage(QtMsgType type, const QMessageLogContext &context, const QString &str)
static Q_CONSTINIT bool msgHandlerGrabbed
static const char backtraceTokenC[]
void qErrnoWarning(const char *msg,...)
static const char functionTokenC[]
#define IF_TOKEN(LEVEL)
static const char ifWarningTokenC[]
static const char appnameTokenC[]
static bool isFatal(QtMsgType msgType)
Definition qlogging.cpp:187
static const char ifInfoTokenC[]
QtMessageHandler qInstallMessageHandler(QtMessageHandler h)
static void qt_message_print(QtMsgType, const QMessageLogContext &context, const QString &message)
static bool stderrHasConsoleAttached()
Returns true if writing to stderr will end up in a console/terminal visible to the user.
Definition qlogging.cpp:288
void qSetMessagePattern(const QString &pattern)
Combined button and popup list for selecting options.
QDebug printAssociativeContainer(QDebug debug, const char *which, const AssociativeContainer &c)
Definition qdebug.h:385
bool shouldLogToStderr()
Returns true if logging stderr should be ensured.
Definition qlogging.cpp:341
QDebug printSequentialContainer(QDebug debug, const char *which, const SequentialContainer &c)
Definition qdebug.h:367
QByteArray operator""_ba(const char *str, size_t size) noexcept
Definition qbytearray.h:853
Definition qcompare.h:111
QT_BEGIN_NAMESPACE Q_NORETURN void qAbort()
Definition qassert.cpp:25
QByteArray operator+(const QByteArray &a1, const char *a2)
Definition qbytearray.h:709
QByteArray qUncompress(const QByteArray &data)
Definition qbytearray.h:778
QByteArray operator+(char a1, const QByteArray &a2)
Definition qbytearray.h:719
QByteArray operator+(QByteArray &&lhs, char rhs)
Definition qbytearray.h:715
QByteArray operator+(const QByteArray &a1, char a2)
Definition qbytearray.h:713
QByteArray operator+(const char *a1, const QByteArray &a2)
Definition qbytearray.h:717
QByteArray operator+(QByteArray &&lhs, const QByteArray &rhs)
Definition qbytearray.h:707
qsizetype erase_if(QByteArray &ba, Predicate pred)
Definition qbytearray.h:836
QByteArray operator+(const QByteArray &a1, const QByteArray &a2)
Definition qbytearray.h:705
QByteArray qCompress(const QByteArray &data, int compressionLevel=-1)
Definition qbytearray.h:776
#define QT5_NULL_STRINGS
Definition qbytearray.h:26
qsizetype erase(QByteArray &ba, const T &t)
Definition qbytearray.h:830
QByteArray operator+(QByteArray &&lhs, const char *rhs)
Definition qbytearray.h:711
#define __has_builtin(x)
#define __has_include(x)
void qt_QMetaEnum_flagDebugOperator(QDebug &debug, size_t sizeofT, Int value)
Definition qdebug.h:614
Q_CORE_EXPORT void qt_QMetaEnum_flagDebugOperator(QDebug &debug, size_t sizeofT, quint64 value)
Definition qdebug.cpp:1444
Q_CORE_EXPORT void qt_QMetaEnum_flagDebugOperator(QDebug &debug, size_t sizeofT, uint value)
Definition qdebug.cpp:1435
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition qdir.cpp:2582
#define QT_MESSAGELOG_FUNC
Definition qlogging.h:162
#define QT_MESSAGELOG_FILE
Definition qlogging.h:160
#define QT_MESSAGE_LOGGER_NORETURN
Definition qlogging.h:70
#define QT_MESSAGELOG_LINE
Definition qlogging.h:161
Q_CORE_EXPORT void qSetMessagePattern(const QString &messagePattern)
#define QT_MESSAGELOGCONTEXT
Definition qlogging.h:155
QtMsgType
Definition qlogging.h:30
@ QtCriticalMsg
Definition qlogging.h:34
@ QtFatalMsg
Definition qlogging.h:35
@ QtDebugMsg
Definition qlogging.h:31
Q_CORE_EXPORT void qt_message_output(QtMsgType, const QMessageLogContext &context, const QString &message)
void(* QtMessageHandler)(QtMsgType, const QMessageLogContext &, const QString &)
Definition qlogging.h:197
QMutex QBasicMutex
Definition qmutex.h:360
void setPattern(const QString &pattern)
std::unique_ptr< std::unique_ptr< const char[]>[]> literals
std::chrono::steady_clock::time_point appStartTime
std::unique_ptr< const char *[]> tokens
QList< QString > timeArgs
static QBasicMutex mutex
void setDefaultPattern()
static constexpr bool Value
Definition qdebug.h:679
static constexpr bool Value
Definition qdebug.h:675