From 7184456f9a26a9c07a689c15b415ddf82eb000b7 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Mon, 6 Feb 2012 23:36:17 +0100 Subject: Implement new plugin mechanism MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit moc can now embed meta information about the plugin inside the plugin itself. This information can be queried by Qt without having to load the plugin. Source compatibility with the old plugin loading mechanism is still there, but will be removed before Qt 5.0. Change-Id: I03e4196ddfed07d0fe94acca40d5de8a6ce7f920 Reviewed-by: João Abecasis Reviewed-by: Thiago Macieira --- src/tools/moc/generator.cpp | 48 +++++ src/tools/moc/generator.h | 1 + src/tools/moc/keywords.cpp | 320 +++++++++++++++++-------------- src/tools/moc/moc.cpp | 52 +++++ src/tools/moc/moc.h | 10 +- src/tools/moc/token.h | 1 + src/tools/moc/util/generate_keywords.cpp | 1 + 7 files changed, 283 insertions(+), 150 deletions(-) (limited to 'src/tools/moc') 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 +#include +#include +#include +#include +#include #include #include //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 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 +#include +#include // for normalizeTypeInternal #include @@ -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 \n"); + if (mustIncludeQPluginH) + fprintf(out, "#include \n"); fprintf(out, "#if !defined(Q_MOC_OUTPUT_REVISION)\n" "#error \"The header file '%s' doesn't include .\"\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 #include #include +#include #include #include @@ -167,6 +168,11 @@ struct ClassDef { bool hasQObject; bool hasQGadget; + struct PluginData { + QByteArray iid; + QJsonDocument metaData; + } pluginData; + QList constructorList; QList 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 includeFiles; QList 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" }, -- cgit v1.2.3