From 4fad7ae76a0ea834a35737e9b79c3ac3818a8713 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 21 Feb 2012 11:46:33 +0100 Subject: moc: Fix loading of plugins in release mode. Generate the plugin meta data with "debug" set to false/true in two code sections #ifdefed QT_NO_DEBUG. Do not use the value of QT_NO_DEBUG set at moc compile time which does not work in release mode/Windows. Change-Id: I0252795ed063bebb2c3b3784f880e64845b5b7e7 Reviewed-by: Thiago Macieira Reviewed-by: Bradley T. Hughes --- src/tools/moc/generator.cpp | 66 +++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 26 deletions(-) (limited to 'src/tools') diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp index 3362a1abc1..c7c7d96487 100644 --- a/src/tools/moc/generator.cpp +++ b/src/tools/moc/generator.cpp @@ -1057,41 +1057,55 @@ void Generator::generateSignal(FunctionDef *def,int index) fprintf(out, "}\n"); } -void Generator::generatePluginMetaData() +static void writePluginMetaData(FILE *out, const QJsonObject &data) { - if (cdef->pluginData.iid.isEmpty()) - return; + const QJsonDocument doc(data); - 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 "); + fputs("\nQT_PLUGIN_METADATA_SECTION\n" + "static const unsigned char qt_pluginMetaData[] = {\n" + " 'Q', 'T', 'M', 'E', 'T', 'A', 'D', 'A', 'T', 'A', ' ', ' ',\n ", out); #if 0 fprintf(out, "\"%s\";\n", doc.toJson().constData()); #else - QByteArray binary = doc.toBinaryData(); - for (int i = 0; i < binary.size() - 1; ++i) { + const QByteArray binary = doc.toBinaryData(); + const int last = binary.size() - 1; + for (int i = 0; i < last; ++i) { fprintf(out, " 0x%02x,", (uchar)binary.at(i)); if (!((i + 1) % 8)) - fprintf(out, "\n "); + fputs("\n ", out); } - fprintf(out, " 0x%02x\n};\n", (uchar)binary.at(binary.size() - 1)); + fprintf(out, " 0x%02x\n};\n", (uchar)binary.at(last)); #endif +} + +void Generator::generatePluginMetaData() +{ + if (cdef->pluginData.iid.isEmpty()) + return; + + // Write plugin meta data #ifdefed QT_NO_DEBUG with debug=false, + // true, respectively. + + QJsonObject data; + const QString debugKey = QStringLiteral("debug"); + data.insert(QStringLiteral("IID"), QLatin1String(cdef->pluginData.iid.constData())); + data.insert(QStringLiteral("className"), QLatin1String(cdef->classname.constData())); + data.insert(QStringLiteral("version"), (int)QT_VERSION); + data.insert(debugKey, QJsonValue(false)); + data.insert(QStringLiteral("MetaData"), cdef->pluginData.metaData.object()); + + fputs("\nQT_PLUGIN_METADATA_SECTION const uint qt_section_alignment_dummy = 42;\n\n" + "#ifdef QT_NO_DEBUG\n", out); + writePluginMetaData(out, data); + + fputs("\n#else // QT_NO_DEBUG\n", out); + + data.remove(debugKey); + data.insert(debugKey, QJsonValue(true)); + writePluginMetaData(out, data); + + fputs("#endif // QT_NO_DEBUG\n\n", out); + // 'Use' all namespaces. int pos = cdef->qualified.indexOf("::"); for ( ; pos != -1 ; pos = cdef->qualified.indexOf("::", pos + 2) ) -- cgit v1.2.3