diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2017-04-27 15:52:46 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2017-04-28 10:03:57 +0000 |
commit | 9503948fd9195f0d07456e66e4dbf7c781f82ef8 (patch) | |
tree | 3bca8828a44ab9c6bcc6bfc5c2ef72638033ab5f | |
parent | 5ef48dc2396257056fedca94fa359b1d392c33cd (diff) |
Qt support: Scan also cpp files for Q_PLUGIN_METADATA
For some reason, that was only done for headers.
Change-Id: Ia5d57cb68efdda0e1288fea3bd285e656b24b94b
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
7 files changed, 28 insertions, 4 deletions
diff --git a/src/lib/corelib/buildgraph/qtmocscanner.cpp b/src/lib/corelib/buildgraph/qtmocscanner.cpp index 12ec66436..ccb959a0f 100644 --- a/src/lib/corelib/buildgraph/qtmocscanner.cpp +++ b/src/lib/corelib/buildgraph/qtmocscanner.cpp @@ -63,6 +63,7 @@ struct CommonFileTags const FileTag cpp = "cpp"; const FileTag hpp = "hpp"; const FileTag moc_cpp = "moc_cpp"; + const FileTag moc_cpp_plugin = "moc_cpp_plugin"; const FileTag moc_hpp_plugin = "moc_hpp_plugin"; const FileTag moc_hpp = "moc_hpp"; const FileTag objcpp = "objcpp"; @@ -255,6 +256,10 @@ QScriptValue QtMocScanner::apply(QScriptEngine *engine, const Artifact *artifact } else { if (scanResult.additionalFileTags.contains(m_tags.moc_cpp)) hasQObjectMacro = true; + if (scanResult.additionalFileTags.contains(m_tags.moc_cpp_plugin)) { + hasQObjectMacro = true; + hasPluginMetaDataMacro = true; + } } } diff --git a/src/plugins/scanner/cpp/cppscanner.cpp b/src/plugins/scanner/cpp/cppscanner.cpp index 9d9268d30..46d16e2f1 100644 --- a/src/plugins/scanner/cpp/cppscanner.cpp +++ b/src/plugins/scanner/cpp/cppscanner.cpp @@ -180,8 +180,7 @@ static void scanCppFile(void *opaq, CPlusPlus::Lexer &yylex, bool scanForFileTag tc.equals(tk, qnamespaceLiteral)) { opaque->hasQObjectMacro = true; - } else if (opaque->fileType == Opaq::FT_HPP - && tc.equals(tk, pluginMetaDataLiteral)) + } else if (tc.equals(tk, pluginMetaDataLiteral)) { opaque->hasPluginMetaDataMacro = true; } @@ -277,6 +276,7 @@ static const char **additionalFileTags(void *opaq, int *size) static const char *thMocCpp[] = { "moc_cpp" }; static const char *thMocHpp[] = { "moc_hpp" }; static const char *thMocPluginHpp[] = { "moc_hpp_plugin" }; + static const char *thMocPluginCpp[] = { "moc_cpp_plugin" }; Opaq *opaque = static_cast<Opaq*>(opaq); if (opaque->hasQObjectMacro) { @@ -284,7 +284,7 @@ static const char **additionalFileTags(void *opaq, int *size) switch (opaque->fileType) { case Opaq::FT_CPP: case Opaq::FT_OBJCPP: - return thMocCpp; + return opaque->hasPluginMetaDataMacro ? thMocPluginCpp : thMocCpp; case Opaq::FT_HPP: return opaque->hasPluginMetaDataMacro ? thMocPluginHpp : thMocHpp; default: diff --git a/tests/auto/blackbox/testdata/plugin-meta-data/app.cpp b/tests/auto/blackbox/testdata/plugin-meta-data/app.cpp index 187e57e26..8912e27c3 100644 --- a/tests/auto/blackbox/testdata/plugin-meta-data/app.cpp +++ b/tests/auto/blackbox/testdata/plugin-meta-data/app.cpp @@ -47,5 +47,11 @@ int main(int argc, char *argv[]) qDebug() << "value is" << v; return 1; } + const QJsonValue v2 = loader.metaData().value(QLatin1String("MetaData")).toObject() + .value(QLatin1String("theOtherKey")); + if (v2.toString() != QLatin1String("theOtherValue")) { + qDebug() << "metadata:" << loader.metaData(); + return 1; + } return 0; } diff --git a/tests/auto/blackbox/testdata/plugin-meta-data/metadata.json b/tests/auto/blackbox/testdata/plugin-meta-data/metadata.json new file mode 100644 index 000000000..1377879e2 --- /dev/null +++ b/tests/auto/blackbox/testdata/plugin-meta-data/metadata.json @@ -0,0 +1,3 @@ +{ + "theOtherKey" : "theOtherValue" +} diff --git a/tests/auto/blackbox/testdata/plugin-meta-data/plugin-meta-data.qbs b/tests/auto/blackbox/testdata/plugin-meta-data/plugin-meta-data.qbs index c64a6be9a..6023aabaa 100644 --- a/tests/auto/blackbox/testdata/plugin-meta-data/plugin-meta-data.qbs +++ b/tests/auto/blackbox/testdata/plugin-meta-data/plugin-meta-data.qbs @@ -27,6 +27,7 @@ Project { cpp.defines: ["QT_PLUGIN"] cpp.cxxLanguageVersion: "c++11" cpp.sonamePrefix: qbs.targetOS.contains("darwin") ? "@rpath" : undefined + cpp.includePaths: ["."] Qt.core.pluginMetaData: ["theKey=theValue"] Group { @@ -35,5 +36,10 @@ Project { } files: ["theplugin.cpp"] + + Group { + files: ["metadata.json"] + fileTags: ["qt_plugin_metadata"] + } } } diff --git a/tests/auto/blackbox/testdata/plugin-meta-data/theplugin.cpp b/tests/auto/blackbox/testdata/plugin-meta-data/theplugin.cpp index 75a0e8936..90ce230e2 100644 --- a/tests/auto/blackbox/testdata/plugin-meta-data/theplugin.cpp +++ b/tests/auto/blackbox/testdata/plugin-meta-data/theplugin.cpp @@ -32,7 +32,7 @@ class ThePlugin : public QObject { Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.qbs.ThePlugin") + Q_PLUGIN_METADATA(IID "org.qt-project.qbs.ThePlugin" FILE "metadata.json") }; #include <theplugin.moc> diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 444dcfd38..e541bacc8 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -2130,6 +2130,10 @@ void TestBlackbox::pluginMetaData() QVERIFY(app.waitForStarted()); QVERIFY(app.waitForFinished()); QVERIFY2(app.exitCode() == 0, app.readAllStandardError().constData()); + WAIT_FOR_NEW_TIMESTAMP(); + touch("metadata.json"); + QCOMPARE(runQbs(), 0); + QVERIFY2(m_qbsStdout.contains("moc"), m_qbsStdout.constData()); } void TestBlackbox::probeChangeTracking() |