aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-04-27 15:52:46 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2017-04-28 10:03:57 +0000
commit9503948fd9195f0d07456e66e4dbf7c781f82ef8 (patch)
tree3bca8828a44ab9c6bcc6bfc5c2ef72638033ab5f
parent5ef48dc2396257056fedca94fa359b1d392c33cd (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>
-rw-r--r--src/lib/corelib/buildgraph/qtmocscanner.cpp5
-rw-r--r--src/plugins/scanner/cpp/cppscanner.cpp6
-rw-r--r--tests/auto/blackbox/testdata/plugin-meta-data/app.cpp6
-rw-r--r--tests/auto/blackbox/testdata/plugin-meta-data/metadata.json3
-rw-r--r--tests/auto/blackbox/testdata/plugin-meta-data/plugin-meta-data.qbs6
-rw-r--r--tests/auto/blackbox/testdata/plugin-meta-data/theplugin.cpp2
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp4
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()