summaryrefslogtreecommitdiffstats
path: root/src/tools
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/moc/generator.cpp48
-rw-r--r--src/tools/moc/generator.h1
-rw-r--r--src/tools/moc/keywords.cpp320
-rw-r--r--src/tools/moc/moc.cpp52
-rw-r--r--src/tools/moc/moc.h10
-rw-r--r--src/tools/moc/token.h1
-rw-r--r--src/tools/moc/util/generate_keywords.cpp1
7 files changed, 283 insertions, 150 deletions
diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp
index b4f3d23f4e..e2055e44e8 100644
--- a/src/tools/moc/generator.cpp
+++ b/src/tools/moc/generator.cpp
@@ -43,6 +43,11 @@
#include "outputrevision.h"
#include "utils.h"
#include <QtCore/qmetatype.h>
+#include <QtCore/qjsondocument.h>
+#include <QtCore/qjsonobject.h>
+#include <QtCore/qjsonvalue.h>
+#include <QtCore/qjsonarray.h>
+#include <QtCore/qplugin.h>
#include <stdio.h>
#include <private/qmetaobject_p.h> //for the flags.
@@ -421,6 +426,11 @@ void Generator::generateCode()
//
for (int signalindex = 0; signalindex < cdef->signalList.size(); ++signalindex)
generateSignal(&cdef->signalList[signalindex], signalindex);
+
+//
+// Generate plugin meta data
+//
+ generatePluginMetaData();
}
@@ -1051,4 +1061,42 @@ void Generator::generateSignal(FunctionDef *def,int index)
fprintf(out, "}\n");
}
+void Generator::generatePluginMetaData()
+{
+ if (cdef->pluginData.iid.isEmpty())
+ return;
+
+ QJsonObject data;
+ data.insert(QLatin1String("IID"), QLatin1String(cdef->pluginData.iid.constData()));
+ data.insert(QLatin1String("className"), QLatin1String(cdef->classname.constData()));
+ data.insert(QLatin1String("version"), (int)QT_VERSION);
+ data.insert(QLatin1String("debug"),
+#ifdef QT_NO_DEBUG
+ false
+#else
+ true
+#endif
+ );
+ data.insert(QLatin1String("MetaData"), cdef->pluginData.metaData.object());
+ QJsonDocument doc(data);
+
+ fprintf(out, "\nQT_PLUGIN_METADATA_SECTION const uint qt_section_alignment_dummy = 42;\n");
+ fprintf(out,
+ "\nQT_PLUGIN_METADATA_SECTION\n"
+ "static const unsigned char qt_pluginMetaData[] = {\n"
+ " 'Q', 'T', 'M', 'E', 'T', 'A', 'D', 'A', 'T', 'A', ' ', ' ',\n ");
+#if 0
+ fprintf(out, "\"%s\";\n", doc.toJson().constData());
+#else
+ QByteArray binary = doc.toBinaryData();
+ for (int i = 0; i < binary.size() - 1; ++i) {
+ fprintf(out, " 0x%02x,", (uchar)binary.at(i));
+ if (!((i + 1) % 8))
+ fprintf(out, "\n ");
+ }
+ fprintf(out, " 0x%02x\n};\n", (uchar)binary.at(binary.size() - 1));
+#endif
+ fprintf(out, "QT_MOC_EXPORT_PLUGIN(%s)\n\n", cdef->classname.constData());
+}
+
QT_END_NAMESPACE
diff --git a/src/tools/moc/generator.h b/src/tools/moc/generator.h
index a3dc3d0041..6682e1a36a 100644
--- a/src/tools/moc/generator.h
+++ b/src/tools/moc/generator.h
@@ -63,6 +63,7 @@ private:
void generateMetacall();
void generateStaticMetacall();
void generateSignal(FunctionDef *def, int index);
+ void generatePluginMetaData();
int strreg(const char *); // registers a string and returns its id
QList<QByteArray> strings;
diff --git a/src/tools/moc/keywords.cpp b/src/tools/moc/keywords.cpp
index 7a6b44074b..f6151bdbf5 100644
--- a/src/tools/moc/keywords.cpp
+++ b/src/tools/moc/keywords.cpp
@@ -43,12 +43,12 @@
// DO NOT EDIT.
static const short keyword_trans[][128] = {
- {0,0,0,0,0,0,0,0,0,532,529,0,0,0,0,0,
+ {0,0,0,0,0,0,0,0,0,546,543,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 532,252,530,533,0,38,239,531,25,26,236,234,30,235,27,237,
+ 546,252,544,547,0,38,239,545,25,26,236,234,30,235,27,237,
22,22,22,22,22,22,22,22,22,22,34,41,23,39,24,43,
0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
- 8,21,8,8,8,8,8,8,8,8,8,31,534,32,238,8,
+ 8,21,8,8,8,8,8,8,8,8,8,31,548,32,238,8,
0,1,2,3,4,5,6,7,8,9,8,8,10,11,12,13,
14,8,15,16,17,18,19,20,8,8,8,36,245,37,248,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -129,7 +129,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,290,222,0,0,461,0,0,0,
+ 0,0,0,0,0,0,0,0,290,222,0,0,475,0,0,0,
0,0,0,0,55,0,0,330,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -168,7 +168,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,485,0,0,0,0,0,0,0,0,0,0,357,
+ 0,0,0,0,499,0,0,0,0,0,0,0,0,0,0,357,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -190,7 +190,7 @@ static const short keyword_trans[][128] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,42,0,0,0,28,0,
- 537,537,537,537,537,537,537,537,537,537,0,0,0,0,0,0,
+ 551,551,551,551,551,551,551,551,551,551,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -349,7 +349,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,536,0,0,0,0,535,
+ 0,0,0,0,0,0,0,0,0,0,550,0,0,0,0,549,
0,0,0,0,0,0,0,0,0,0,0,0,0,258,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -385,21 +385,29 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,458,0,0,0,300,0,0,0,0,0,0,0,0,0,0,
+ 0,472,0,0,0,300,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,439,388,378,383,364,0,448,0,0,0,0,0,358,
- 370,0,521,436,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,453,402,392,397,364,0,462,0,0,0,0,0,358,
+ 370,0,535,450,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,475,0,0,0,0,0,372,
+ 0,0,0,0,0,0,0,0,0,0,0,0,378,0,0,0,
+ 0,0,371,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,489,0,0,0,0,0,372,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
@@ -407,7 +415,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,418,396,0,0,401,0,0,0,410,0,0,
+ 0,0,0,0,0,432,410,0,0,415,0,0,0,424,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
@@ -415,7 +423,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,504,0,437,0,0,0,465,0,0,471,0,0,0,
+ 0,0,0,518,0,451,0,0,0,479,0,0,485,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
@@ -424,7 +432,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,450,0,497,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,464,0,511,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -432,7 +440,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 513,0,0,481,0,0,0,0,0,0,0,0,0,0,0,0,
+ 527,0,0,495,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
@@ -815,164 +823,178 @@ static const struct
{CHARACTER, 0, 69, 368, CHARACTER},
{CHARACTER, 0, 84, 369, CHARACTER},
{Q_GADGET_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 82, 371, CHARACTER},
{CHARACTER, 44, 0, 0, CHARACTER},
+ {CHARACTER, 45, 0, 0, CHARACTER},
{CHARACTER, 0, 80, 373, CHARACTER},
{CHARACTER, 0, 69, 374, CHARACTER},
{CHARACTER, 0, 82, 375, CHARACTER},
{CHARACTER, 0, 84, 376, CHARACTER},
{CHARACTER, 0, 89, 377, CHARACTER},
{Q_PROPERTY_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 78, 379, CHARACTER},
- {CHARACTER, 0, 85, 380, CHARACTER},
- {CHARACTER, 0, 77, 381, CHARACTER},
- {CHARACTER, 0, 83, 382, CHARACTER},
+ {CHARACTER, 0, 85, 379, CHARACTER},
+ {CHARACTER, 0, 71, 380, CHARACTER},
+ {CHARACTER, 0, 73, 381, CHARACTER},
+ {CHARACTER, 0, 78, 382, CHARACTER},
+ {CHARACTER, 0, 95, 383, CHARACTER},
+ {CHARACTER, 0, 77, 384, CHARACTER},
+ {CHARACTER, 0, 69, 385, CHARACTER},
+ {CHARACTER, 0, 84, 386, CHARACTER},
+ {CHARACTER, 0, 65, 387, CHARACTER},
+ {CHARACTER, 0, 68, 388, CHARACTER},
+ {CHARACTER, 0, 65, 389, CHARACTER},
+ {CHARACTER, 0, 84, 390, CHARACTER},
+ {CHARACTER, 0, 65, 391, CHARACTER},
+ {Q_PLUGIN_METADATA_TOKEN, 0, 0, 0, CHARACTER},
+ {CHARACTER, 0, 78, 393, CHARACTER},
+ {CHARACTER, 0, 85, 394, CHARACTER},
+ {CHARACTER, 0, 77, 395, CHARACTER},
+ {CHARACTER, 0, 83, 396, CHARACTER},
{Q_ENUMS_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 76, 384, CHARACTER},
- {CHARACTER, 0, 65, 385, CHARACTER},
- {CHARACTER, 0, 71, 386, CHARACTER},
- {CHARACTER, 0, 83, 387, CHARACTER},
+ {CHARACTER, 0, 76, 398, CHARACTER},
+ {CHARACTER, 0, 65, 399, CHARACTER},
+ {CHARACTER, 0, 71, 400, CHARACTER},
+ {CHARACTER, 0, 83, 401, CHARACTER},
{Q_FLAGS_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 69, 389, CHARACTER},
- {CHARACTER, 0, 67, 390, CHARACTER},
- {CHARACTER, 0, 76, 391, CHARACTER},
- {CHARACTER, 0, 65, 392, CHARACTER},
- {CHARACTER, 0, 82, 393, CHARACTER},
- {CHARACTER, 0, 69, 394, CHARACTER},
- {CHARACTER, 0, 95, 395, CHARACTER},
- {CHARACTER, 45, 0, 0, CHARACTER},
- {CHARACTER, 0, 76, 397, CHARACTER},
- {CHARACTER, 0, 65, 398, CHARACTER},
- {CHARACTER, 0, 71, 399, CHARACTER},
- {CHARACTER, 0, 83, 400, CHARACTER},
+ {CHARACTER, 0, 69, 403, CHARACTER},
+ {CHARACTER, 0, 67, 404, CHARACTER},
+ {CHARACTER, 0, 76, 405, CHARACTER},
+ {CHARACTER, 0, 65, 406, CHARACTER},
+ {CHARACTER, 0, 82, 407, CHARACTER},
+ {CHARACTER, 0, 69, 408, CHARACTER},
+ {CHARACTER, 0, 95, 409, CHARACTER},
+ {CHARACTER, 46, 0, 0, CHARACTER},
+ {CHARACTER, 0, 76, 411, CHARACTER},
+ {CHARACTER, 0, 65, 412, CHARACTER},
+ {CHARACTER, 0, 71, 413, CHARACTER},
+ {CHARACTER, 0, 83, 414, CHARACTER},
{Q_DECLARE_FLAGS_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 78, 402, CHARACTER},
- {CHARACTER, 0, 84, 403, CHARACTER},
- {CHARACTER, 0, 69, 404, CHARACTER},
- {CHARACTER, 0, 82, 405, CHARACTER},
- {CHARACTER, 0, 70, 406, CHARACTER},
- {CHARACTER, 0, 65, 407, CHARACTER},
- {CHARACTER, 0, 67, 408, CHARACTER},
- {CHARACTER, 0, 69, 409, CHARACTER},
+ {CHARACTER, 0, 78, 416, CHARACTER},
+ {CHARACTER, 0, 84, 417, CHARACTER},
+ {CHARACTER, 0, 69, 418, CHARACTER},
+ {CHARACTER, 0, 82, 419, CHARACTER},
+ {CHARACTER, 0, 70, 420, CHARACTER},
+ {CHARACTER, 0, 65, 421, CHARACTER},
+ {CHARACTER, 0, 67, 422, CHARACTER},
+ {CHARACTER, 0, 69, 423, CHARACTER},
{Q_DECLARE_INTERFACE_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 69, 411, CHARACTER},
- {CHARACTER, 0, 84, 412, CHARACTER},
- {CHARACTER, 0, 65, 413, CHARACTER},
- {CHARACTER, 0, 84, 414, CHARACTER},
- {CHARACTER, 0, 89, 415, CHARACTER},
- {CHARACTER, 0, 80, 416, CHARACTER},
- {CHARACTER, 0, 69, 417, CHARACTER},
- {Q_DECLARE_METATYPE_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 88, 419, CHARACTER},
- {CHARACTER, 0, 84, 420, CHARACTER},
- {CHARACTER, 0, 69, 421, CHARACTER},
- {CHARACTER, 0, 78, 422, CHARACTER},
- {CHARACTER, 0, 83, 423, CHARACTER},
- {CHARACTER, 0, 73, 424, CHARACTER},
- {CHARACTER, 0, 79, 425, CHARACTER},
- {CHARACTER, 0, 78, 426, CHARACTER},
- {CHARACTER, 0, 95, 427, CHARACTER},
- {CHARACTER, 0, 73, 428, CHARACTER},
- {CHARACTER, 0, 78, 429, CHARACTER},
- {CHARACTER, 0, 84, 430, CHARACTER},
+ {CHARACTER, 0, 69, 425, CHARACTER},
+ {CHARACTER, 0, 84, 426, CHARACTER},
+ {CHARACTER, 0, 65, 427, CHARACTER},
+ {CHARACTER, 0, 84, 428, CHARACTER},
+ {CHARACTER, 0, 89, 429, CHARACTER},
+ {CHARACTER, 0, 80, 430, CHARACTER},
{CHARACTER, 0, 69, 431, CHARACTER},
- {CHARACTER, 0, 82, 432, CHARACTER},
- {CHARACTER, 0, 70, 433, CHARACTER},
- {CHARACTER, 0, 65, 434, CHARACTER},
- {CHARACTER, 0, 67, 435, CHARACTER},
- {CHARACTER, 0, 69, 409, CHARACTER},
- {CHARACTER, 46, 0, 0, CHARACTER},
- {CHARACTER, 0, 84, 438, CHARACTER},
- {CHARACTER, 0, 83, 387, CHARACTER},
- {CHARACTER, 0, 76, 440, CHARACTER},
- {CHARACTER, 0, 65, 441, CHARACTER},
- {CHARACTER, 0, 83, 442, CHARACTER},
- {CHARACTER, 0, 83, 443, CHARACTER},
- {CHARACTER, 0, 73, 444, CHARACTER},
- {CHARACTER, 0, 78, 445, CHARACTER},
- {CHARACTER, 0, 70, 446, CHARACTER},
- {CHARACTER, 0, 79, 447, CHARACTER},
- {Q_CLASSINFO_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 78, 449, CHARACTER},
+ {Q_DECLARE_METATYPE_TOKEN, 0, 0, 0, CHARACTER},
+ {CHARACTER, 0, 88, 433, CHARACTER},
+ {CHARACTER, 0, 84, 434, CHARACTER},
+ {CHARACTER, 0, 69, 435, CHARACTER},
+ {CHARACTER, 0, 78, 436, CHARACTER},
+ {CHARACTER, 0, 83, 437, CHARACTER},
+ {CHARACTER, 0, 73, 438, CHARACTER},
+ {CHARACTER, 0, 79, 439, CHARACTER},
+ {CHARACTER, 0, 78, 440, CHARACTER},
+ {CHARACTER, 0, 95, 441, CHARACTER},
+ {CHARACTER, 0, 73, 442, CHARACTER},
+ {CHARACTER, 0, 78, 443, CHARACTER},
+ {CHARACTER, 0, 84, 444, CHARACTER},
+ {CHARACTER, 0, 69, 445, CHARACTER},
+ {CHARACTER, 0, 82, 446, CHARACTER},
+ {CHARACTER, 0, 70, 447, CHARACTER},
+ {CHARACTER, 0, 65, 448, CHARACTER},
+ {CHARACTER, 0, 67, 449, CHARACTER},
+ {CHARACTER, 0, 69, 423, CHARACTER},
{CHARACTER, 47, 0, 0, CHARACTER},
- {CHARACTER, 0, 69, 451, CHARACTER},
- {CHARACTER, 0, 82, 452, CHARACTER},
- {CHARACTER, 0, 70, 453, CHARACTER},
- {CHARACTER, 0, 65, 454, CHARACTER},
- {CHARACTER, 0, 67, 455, CHARACTER},
- {CHARACTER, 0, 69, 456, CHARACTER},
+ {CHARACTER, 0, 84, 452, CHARACTER},
+ {CHARACTER, 0, 83, 401, CHARACTER},
+ {CHARACTER, 0, 76, 454, CHARACTER},
+ {CHARACTER, 0, 65, 455, CHARACTER},
+ {CHARACTER, 0, 83, 456, CHARACTER},
{CHARACTER, 0, 83, 457, CHARACTER},
+ {CHARACTER, 0, 73, 458, CHARACTER},
+ {CHARACTER, 0, 78, 459, CHARACTER},
+ {CHARACTER, 0, 70, 460, CHARACTER},
+ {CHARACTER, 0, 79, 461, CHARACTER},
+ {Q_CLASSINFO_TOKEN, 0, 0, 0, CHARACTER},
+ {CHARACTER, 0, 78, 463, CHARACTER},
+ {CHARACTER, 48, 0, 0, CHARACTER},
+ {CHARACTER, 0, 69, 465, CHARACTER},
+ {CHARACTER, 0, 82, 466, CHARACTER},
+ {CHARACTER, 0, 70, 467, CHARACTER},
+ {CHARACTER, 0, 65, 468, CHARACTER},
+ {CHARACTER, 0, 67, 469, CHARACTER},
+ {CHARACTER, 0, 69, 470, CHARACTER},
+ {CHARACTER, 0, 83, 471, CHARACTER},
{Q_INTERFACES_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 108, 459, CHARACTER},
- {CHARACTER, 0, 115, 460, CHARACTER},
+ {CHARACTER, 0, 108, 473, CHARACTER},
+ {CHARACTER, 0, 115, 474, CHARACTER},
{SIGNALS, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 111, 462, CHARACTER},
- {CHARACTER, 0, 116, 463, CHARACTER},
- {CHARACTER, 0, 115, 464, CHARACTER},
+ {CHARACTER, 0, 111, 476, CHARACTER},
+ {CHARACTER, 0, 116, 477, CHARACTER},
+ {CHARACTER, 0, 115, 478, CHARACTER},
{SLOTS, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 71, 466, CHARACTER},
- {CHARACTER, 0, 78, 467, CHARACTER},
- {CHARACTER, 0, 65, 468, CHARACTER},
- {CHARACTER, 0, 76, 469, CHARACTER},
- {Q_SIGNAL_TOKEN, 0, 83, 470, CHARACTER},
+ {CHARACTER, 0, 71, 480, CHARACTER},
+ {CHARACTER, 0, 78, 481, CHARACTER},
+ {CHARACTER, 0, 65, 482, CHARACTER},
+ {CHARACTER, 0, 76, 483, CHARACTER},
+ {Q_SIGNAL_TOKEN, 0, 83, 484, CHARACTER},
{Q_SIGNALS_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 79, 472, CHARACTER},
- {CHARACTER, 0, 84, 473, CHARACTER},
- {Q_SLOT_TOKEN, 0, 83, 474, CHARACTER},
+ {CHARACTER, 0, 79, 486, CHARACTER},
+ {CHARACTER, 0, 84, 487, CHARACTER},
+ {Q_SLOT_TOKEN, 0, 83, 488, CHARACTER},
{Q_SLOTS_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 86, 476, CHARACTER},
- {CHARACTER, 0, 65, 477, CHARACTER},
- {CHARACTER, 0, 84, 478, CHARACTER},
- {CHARACTER, 0, 69, 479, CHARACTER},
- {CHARACTER, 0, 95, 480, CHARACTER},
- {CHARACTER, 48, 0, 0, CHARACTER},
- {CHARACTER, 0, 76, 482, CHARACTER},
- {CHARACTER, 0, 79, 483, CHARACTER},
- {CHARACTER, 0, 84, 484, CHARACTER},
+ {CHARACTER, 0, 86, 490, CHARACTER},
+ {CHARACTER, 0, 65, 491, CHARACTER},
+ {CHARACTER, 0, 84, 492, CHARACTER},
+ {CHARACTER, 0, 69, 493, CHARACTER},
+ {CHARACTER, 0, 95, 494, CHARACTER},
+ {CHARACTER, 49, 0, 0, CHARACTER},
+ {CHARACTER, 0, 76, 496, CHARACTER},
+ {CHARACTER, 0, 79, 497, CHARACTER},
+ {CHARACTER, 0, 84, 498, CHARACTER},
{Q_PRIVATE_SLOT_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 95, 486, CHARACTER},
- {CHARACTER, 0, 77, 487, CHARACTER},
- {CHARACTER, 0, 79, 488, CHARACTER},
- {CHARACTER, 0, 67, 489, CHARACTER},
- {CHARACTER, 0, 95, 490, CHARACTER},
- {CHARACTER, 0, 67, 491, CHARACTER},
- {CHARACTER, 0, 79, 492, CHARACTER},
- {CHARACTER, 0, 77, 493, CHARACTER},
- {CHARACTER, 0, 80, 494, CHARACTER},
- {CHARACTER, 0, 65, 495, CHARACTER},
- {CHARACTER, 0, 84, 496, CHARACTER},
+ {CHARACTER, 0, 95, 500, CHARACTER},
+ {CHARACTER, 0, 77, 501, CHARACTER},
+ {CHARACTER, 0, 79, 502, CHARACTER},
+ {CHARACTER, 0, 67, 503, CHARACTER},
+ {CHARACTER, 0, 95, 504, CHARACTER},
+ {CHARACTER, 0, 67, 505, CHARACTER},
+ {CHARACTER, 0, 79, 506, CHARACTER},
+ {CHARACTER, 0, 77, 507, CHARACTER},
+ {CHARACTER, 0, 80, 508, CHARACTER},
+ {CHARACTER, 0, 65, 509, CHARACTER},
+ {CHARACTER, 0, 84, 510, CHARACTER},
{Q_MOC_COMPAT_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 79, 498, CHARACTER},
- {CHARACTER, 0, 75, 499, CHARACTER},
- {CHARACTER, 0, 65, 500, CHARACTER},
- {CHARACTER, 0, 66, 501, CHARACTER},
- {CHARACTER, 0, 76, 502, CHARACTER},
- {CHARACTER, 0, 69, 503, CHARACTER},
+ {CHARACTER, 0, 79, 512, CHARACTER},
+ {CHARACTER, 0, 75, 513, CHARACTER},
+ {CHARACTER, 0, 65, 514, CHARACTER},
+ {CHARACTER, 0, 66, 515, CHARACTER},
+ {CHARACTER, 0, 76, 516, CHARACTER},
+ {CHARACTER, 0, 69, 517, CHARACTER},
{Q_INVOKABLE_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 82, 505, CHARACTER},
- {CHARACTER, 0, 73, 506, CHARACTER},
- {CHARACTER, 0, 80, 507, CHARACTER},
- {CHARACTER, 0, 84, 508, CHARACTER},
- {CHARACTER, 0, 65, 509, CHARACTER},
- {CHARACTER, 0, 66, 510, CHARACTER},
- {CHARACTER, 0, 76, 511, CHARACTER},
- {CHARACTER, 0, 69, 512, CHARACTER},
+ {CHARACTER, 0, 82, 519, CHARACTER},
+ {CHARACTER, 0, 73, 520, CHARACTER},
+ {CHARACTER, 0, 80, 521, CHARACTER},
+ {CHARACTER, 0, 84, 522, CHARACTER},
+ {CHARACTER, 0, 65, 523, CHARACTER},
+ {CHARACTER, 0, 66, 524, CHARACTER},
+ {CHARACTER, 0, 76, 525, CHARACTER},
+ {CHARACTER, 0, 69, 526, CHARACTER},
{Q_SCRIPTABLE_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 82, 514, CHARACTER},
- {CHARACTER, 0, 79, 515, CHARACTER},
- {CHARACTER, 0, 80, 516, CHARACTER},
- {CHARACTER, 0, 69, 517, CHARACTER},
- {CHARACTER, 0, 82, 518, CHARACTER},
- {CHARACTER, 0, 84, 519, CHARACTER},
- {CHARACTER, 0, 89, 520, CHARACTER},
+ {CHARACTER, 0, 82, 528, CHARACTER},
+ {CHARACTER, 0, 79, 529, CHARACTER},
+ {CHARACTER, 0, 80, 530, CHARACTER},
+ {CHARACTER, 0, 69, 531, CHARACTER},
+ {CHARACTER, 0, 82, 532, CHARACTER},
+ {CHARACTER, 0, 84, 533, CHARACTER},
+ {CHARACTER, 0, 89, 534, CHARACTER},
{Q_PRIVATE_PROPERTY_TOKEN, 0, 0, 0, CHARACTER},
- {CHARACTER, 0, 69, 522, CHARACTER},
- {CHARACTER, 0, 86, 523, CHARACTER},
- {CHARACTER, 0, 73, 524, CHARACTER},
- {CHARACTER, 0, 83, 525, CHARACTER},
- {CHARACTER, 0, 73, 526, CHARACTER},
- {CHARACTER, 0, 79, 527, CHARACTER},
- {CHARACTER, 0, 78, 528, CHARACTER},
+ {CHARACTER, 0, 69, 536, CHARACTER},
+ {CHARACTER, 0, 86, 537, CHARACTER},
+ {CHARACTER, 0, 73, 538, CHARACTER},
+ {CHARACTER, 0, 83, 539, CHARACTER},
+ {CHARACTER, 0, 73, 540, CHARACTER},
+ {CHARACTER, 0, 79, 541, CHARACTER},
+ {CHARACTER, 0, 78, 542, CHARACTER},
{Q_REVISION_TOKEN, 0, 0, 0, CHARACTER},
{NEWLINE, 0, 0, 0, NOTOKEN},
{QUOTE, 0, 0, 0, NOTOKEN},
diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp
index 5c9e1ee838..97316eedde 100644
--- a/src/tools/moc/moc.cpp
+++ b/src/tools/moc/moc.cpp
@@ -44,6 +44,9 @@
#include "qdatetime.h"
#include "utils.h"
#include "outputrevision.h"
+#include <QtCore/qfile.h>
+#include <QtCore/qfileinfo.h>
+#include <QtCore/qdir.h>
// for normalizeTypeInternal
#include <private/qmetaobject_moc_p.h>
@@ -673,6 +676,9 @@ void Moc::parse()
case Q_PROPERTY_TOKEN:
parseProperty(&def);
break;
+ case Q_PLUGIN_METADATA_TOKEN:
+ parsePluginData(&def);
+ break;
case Q_ENUMS_TOKEN:
parseEnumOrFlag(&def, false);
break;
@@ -813,6 +819,8 @@ void Moc::generate(FILE *out)
if (mustIncludeQMetaTypeH)
fprintf(out, "#include <QtCore/qmetatype.h>\n");
+ if (mustIncludeQPluginH)
+ fprintf(out, "#include <QtCore/qplugin.h>\n");
fprintf(out, "#if !defined(Q_MOC_OUTPUT_REVISION)\n"
"#error \"The header file '%s' doesn't include <QObject>.\"\n", (const char *)fn);
@@ -1080,6 +1088,50 @@ void Moc::parseProperty(ClassDef *def)
def->propertyList += propDef;
}
+void Moc::parsePluginData(ClassDef *def)
+{
+ next(LPAREN);
+ QByteArray metaData;
+ while (test(IDENTIFIER)) {
+ QByteArray l = lexem();
+ if (l == "IID") {
+ next(STRING_LITERAL);
+ def->pluginData.iid = unquotedLexem();
+ } else if (l == "FILE") {
+ next(STRING_LITERAL);
+ QByteArray metaDataFile = unquotedLexem();
+ QFileInfo fi(QFileInfo(QString::fromLocal8Bit(currentFilenames.top())).dir(), QString::fromLocal8Bit(metaDataFile));
+ if (!fi.exists()) {
+ QByteArray msg;
+ msg += "Plugin Metadata file ";
+ msg += lexem();
+ msg += " does not exist. Declaration will be ignored";
+ warning(msg.constData());
+ return;
+ }
+ QFile file(fi.canonicalFilePath());
+ file.open(QFile::ReadOnly);
+ metaData = file.readAll();
+ }
+ }
+
+ if (!metaData.isEmpty()) {
+ def->pluginData.metaData = QJsonDocument::fromJson(metaData);
+ if (!def->pluginData.metaData.isObject()) {
+ QByteArray msg;
+ msg += "Plugin Metadata file ";
+ msg += lexem();
+ msg += " does not contain a valid JSON object. Declaration will be ignored";
+ warning(msg.constData());
+ def->pluginData.iid = QByteArray();
+ return;
+ }
+ }
+
+ mustIncludeQPluginH = true;
+ next(RPAREN);
+}
+
void Moc::parsePrivateProperty(ClassDef *def)
{
next(LPAREN);
diff --git a/src/tools/moc/moc.h b/src/tools/moc/moc.h
index b780272dff..aedb97b234 100644
--- a/src/tools/moc/moc.h
+++ b/src/tools/moc/moc.h
@@ -46,6 +46,7 @@
#include <QStringList>
#include <QMap>
#include <QPair>
+#include <QJsonDocument>
#include <stdio.h>
#include <ctype.h>
@@ -167,6 +168,11 @@ struct ClassDef {
bool hasQObject;
bool hasQGadget;
+ struct PluginData {
+ QByteArray iid;
+ QJsonDocument metaData;
+ } pluginData;
+
QList<FunctionDef> constructorList;
QList<FunctionDef> signalList, slotList, methodList, publicList;
int notifyableProperties;
@@ -192,7 +198,7 @@ class Moc : public Parser
{
public:
Moc()
- : noInclude(false), generatedCode(false), mustIncludeQMetaTypeH(false)
+ : noInclude(false), generatedCode(false), mustIncludeQMetaTypeH(false), mustIncludeQPluginH(false)
{}
QByteArray filename;
@@ -200,6 +206,7 @@ public:
bool noInclude;
bool generatedCode;
bool mustIncludeQMetaTypeH;
+ bool mustIncludeQPluginH;
QByteArray includePath;
QList<QByteArray> includeFiles;
QList<ClassDef> classList;
@@ -229,6 +236,7 @@ public:
void parseSlots(ClassDef *def, FunctionDef::Access access);
void parseSignals(ClassDef *def);
void parseProperty(ClassDef *def);
+ void parsePluginData(ClassDef *def);
void createPropertyDef(PropertyDef &def);
void parseEnumOrFlag(ClassDef *def, bool isFlag);
void parseFlag(ClassDef *def);
diff --git a/src/tools/moc/token.h b/src/tools/moc/token.h
index a694ff4eb2..a9f028f20a 100644
--- a/src/tools/moc/token.h
+++ b/src/tools/moc/token.h
@@ -169,6 +169,7 @@ enum Token {
Q_OBJECT_TOKEN = Q_META_TOKEN_BEGIN,
Q_GADGET_TOKEN,
Q_PROPERTY_TOKEN,
+ Q_PLUGIN_METADATA_TOKEN,
Q_ENUMS_TOKEN,
Q_FLAGS_TOKEN,
Q_DECLARE_FLAGS_TOKEN,
diff --git a/src/tools/moc/util/generate_keywords.cpp b/src/tools/moc/util/generate_keywords.cpp
index eb06315fed..4560944a47 100644
--- a/src/tools/moc/util/generate_keywords.cpp
+++ b/src/tools/moc/util/generate_keywords.cpp
@@ -228,6 +228,7 @@ static const Keyword keywords[] = {
{ "Q_OBJECT", "Q_OBJECT_TOKEN" },
{ "Q_GADGET", "Q_GADGET_TOKEN" },
{ "Q_PROPERTY", "Q_PROPERTY_TOKEN" },
+ { "Q_PLUGIN_METADATA", "Q_PLUGIN_METADATA_TOKEN" },
{ "Q_ENUMS", "Q_ENUMS_TOKEN" },
{ "Q_FLAGS", "Q_FLAGS_TOKEN" },
{ "Q_DECLARE_FLAGS", "Q_DECLARE_FLAGS_TOKEN" },