9#pragma qt_class(QtPlugin)
12#include <QtCore/qobject.h>
13#include <QtCore/qpointer.h>
14#include <QtCore/qjsonobject.h>
16#include <QtCore/q20algorithm.h>
36typedef QObject *(*QtPluginInstanceFunction)();
41 'Q',
'T',
'M',
'E',
'T',
'A',
'D',
'A',
'T',
'A',
' ',
'!'
44 template <
size_t OSize,
typename OO,
size_t ISize,
typename II>
45 static constexpr void copy(OO (&
out)[OSize], II (&
in)[ISize])
47 static_assert(OSize <= ISize,
"Output would not be fully initialized");
54#if defined(__AVX512F__)
56#elif defined(__AVX__) || defined(__BMI__) || defined(__BMI2__) || defined(__MOVBE__)
58#elif defined(__SSE3__)
60#elif defined(__SSE__) || defined(__MMX___)
75 static_assert(
alignof(
Header) == 1,
"Alignment of header incorrect with this compiler");
82 static_assert(
alignof(MagicHeader) == 1,
"Alignment of header incorrect with this compiler");
86 static constexpr char NoteName[] =
"qt-project!";
100 static_assert(
alignof(ElfNoteHeader) ==
alignof(
void*),
"Alignment of header incorrect with this compiler");
101 static_assert((
sizeof(
ElfNoteHeader::name) % 4) == 0,
"ELF note name length not a multiple of 4");
113 : instance(
i), rawMetaDataSize(
m().
size), rawMetaData(
m().
data)
120 const void *rawMetaData;
127#if defined(Q_OF_ELF) || (defined(Q_OS_WIN) && (defined (Q_CC_GNU) || defined(Q_CC_CLANG)))
128# define QT_PLUGIN_METADATA_SECTION \
129 __attribute__ ((section (".qtmetadata"))) __attribute__((used))
130#elif defined(Q_OS_DARWIN)
131# define QT_PLUGIN_METADATA_SECTION \
132 __attribute__ ((section ("__TEXT,qtmetadata"))) __attribute__((used))
133#elif defined(Q_CC_MSVC)
135#pragma section(".qtmetadata",read,shared)
136# define QT_PLUGIN_METADATA_SECTION \
137 __declspec(allocate(".qtmetadata"))
139# define QT_PLUGIN_METADATA_SECTION
147 quint8 payload[
sizeof(PluginMetaData)] = {};
148 constexpr ElfNotePayload() :
ElfNoteHeader(
sizeof(PluginMetaData))
154 quint8 payload[
sizeof(PluginMetaData)] = {};
158 struct StaticPayload {
159 static constexpr size_t HeaderOffset = 0;
161 quint8 payload[
sizeof(PluginMetaData)] = {};
165#if defined(QT_STATICPLUGIN)
166# define QT_PLUGIN_METADATAV2_SECTION
167 using Payload = StaticPayload;
168#elif defined(Q_OF_ELF)
170# define QT_PLUGIN_METADATAV2_SECTION \
171 __attribute__((section(".note.qt.metadata"), used, aligned(alignof(void *)), \
172 no_sanitize("address")))
174# define QT_PLUGIN_METADATAV2_SECTION \
175 __attribute__((section(".note.qt.metadata"), used, aligned(alignof(void *))))
177 using Payload = ElfNotePayload;
179# define QT_PLUGIN_METADATAV2_SECTION QT_PLUGIN_METADATA_SECTION
180 using Payload = RegularPayload;
183 Payload payload = {};
188 Q_ASSERT(
reinterpret_cast<const char *
>(&payload) + Payload::HeaderOffset ==
189 reinterpret_cast<const char *
>(&payload.header));
190 return { &payload.header,
sizeof(payload) - Payload::HeaderOffset };
194#define Q_IMPORT_PLUGIN(PLUGIN) \
195 extern const QT_PREPEND_NAMESPACE(QStaticPlugin) qt_static_plugin_##PLUGIN(); \
196 class Static##PLUGIN##PluginInstance{ \
198 Static##PLUGIN##PluginInstance() { \
199 qRegisterStaticPluginFunction(qt_static_plugin_##PLUGIN()); \
202 static Static##PLUGIN##PluginInstance static##PLUGIN##Instance;
204#if defined(QT_PLUGIN_RESOURCE_INIT_FUNCTION)
205# define QT_PLUGIN_RESOURCE_INIT \
206 extern void QT_PLUGIN_RESOURCE_INIT_FUNCTION(); \
207 QT_PLUGIN_RESOURCE_INIT_FUNCTION();
209# define QT_PLUGIN_RESOURCE_INIT
212#define Q_PLUGIN_INSTANCE(IMPLEMENTATION) \
214 static QT_PREPEND_NAMESPACE(QPointer)<QT_PREPEND_NAMESPACE(QObject)> _instance; \
216 QT_PLUGIN_RESOURCE_INIT \
217 _instance = new IMPLEMENTATION; \
222#if defined(QT_STATICPLUGIN)
223# define QT_MOC_EXPORT_PLUGIN_COMMON(PLUGINCLASS, MANGLEDNAME) \
224 static QT_PREPEND_NAMESPACE(QObject) *qt_plugin_instance_##MANGLEDNAME() \
225 Q_PLUGIN_INSTANCE(PLUGINCLASS) \
226 const QT_PREPEND_NAMESPACE(QStaticPlugin) qt_static_plugin_##MANGLEDNAME() \
227 { return { qt_plugin_instance_##MANGLEDNAME, qt_plugin_query_metadata_##MANGLEDNAME}; } \
230# define QT_MOC_EXPORT_PLUGIN(PLUGINCLASS, PLUGINCLASSNAME) \
231 static QPluginMetaData qt_plugin_query_metadata_##PLUGINCLASSNAME() \
232 { return { qt_pluginMetaData_##PLUGINCLASSNAME, sizeof qt_pluginMetaData_##PLUGINCLASSNAME }; } \
233 QT_MOC_EXPORT_PLUGIN_COMMON(PLUGINCLASS, PLUGINCLASSNAME)
235# define QT_MOC_EXPORT_PLUGIN_V2(PLUGINCLASS, MANGLEDNAME, MD) \
236 static QT_PREPEND_NAMESPACE(QPluginMetaData) qt_plugin_query_metadata_##MANGLEDNAME() \
237 { static constexpr QPluginMetaDataV2<MD> md{}; return md; } \
238 QT_MOC_EXPORT_PLUGIN_COMMON(PLUGINCLASS, MANGLEDNAME)
240# define QT_MOC_EXPORT_PLUGIN_COMMON(PLUGINCLASS, MANGLEDNAME) \
241 extern "C" Q_DECL_EXPORT QT_PREPEND_NAMESPACE(QObject) *qt_plugin_instance() \
242 Q_PLUGIN_INSTANCE(PLUGINCLASS) \
245# define QT_MOC_EXPORT_PLUGIN(PLUGINCLASS, PLUGINCLASSNAME) \
246 extern "C" Q_DECL_EXPORT \
247 QPluginMetaData qt_plugin_query_metadata() \
248 { return { qt_pluginMetaData_##PLUGINCLASSNAME, sizeof qt_pluginMetaData_##PLUGINCLASSNAME }; } \
249 QT_MOC_EXPORT_PLUGIN_COMMON(PLUGINCLASS, PLUGINCLASSNAME)
251# define QT_MOC_EXPORT_PLUGIN_V2(PLUGINCLASS, MANGLEDNAME, MD) \
252 extern "C" Q_DECL_EXPORT QT_PREPEND_NAMESPACE(QPluginMetaData) qt_plugin_query_metadata_v2()\
253 { static constexpr QT_PLUGIN_METADATAV2_SECTION QPluginMetaDataV2<MD> md{}; return md; } \
254 QT_MOC_EXPORT_PLUGIN_COMMON(PLUGINCLASS, MANGLEDNAME)
257#define Q_EXPORT_PLUGIN(PLUGIN) \
258 Q_EXPORT_PLUGIN2(PLUGIN, PLUGIN)
259# define Q_EXPORT_PLUGIN2(PLUGIN, PLUGINCLASS) \
260 static_assert(false, "Old plugin system used")
262# define Q_EXPORT_STATIC_PLUGIN2(PLUGIN, PLUGINCLASS) \
263 static_assert(false, "Old plugin system used")
\inmodule QtCore\reentrant
Combined button and popup list for selecting options.
constexpr OutputIterator copy_n(InputIterator first, Size n, OutputIterator dest)
GLsizei const GLfloat * v
[13]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
void Q_CORE_EXPORT qRegisterStaticPluginFunction(QStaticPlugin staticPlugin)
QT_BEGIN_NAMESPACE constexpr unsigned char qPluginArchRequirements()
QPluginMetaData(* QtPluginMetaDataFunction)()
QObject *(* QtPluginInstanceFunction)()
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
QTextStream out(stdout)
[7]
constexpr QStaticPlugin(QtPluginInstanceFunction i, QtPluginMetaDataFunction m)
QtPluginInstanceFunction instance