summaryrefslogtreecommitdiffstats
path: root/src/tools/moc/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/moc/main.cpp')
-rw-r--r--src/tools/moc/main.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/tools/moc/main.cpp b/src/tools/moc/main.cpp
index 999cae0e60..98472792f8 100644
--- a/src/tools/moc/main.cpp
+++ b/src/tools/moc/main.cpp
@@ -242,6 +242,11 @@ int runMoc(int argc, char **argv)
undefineOption.setValueName(QStringLiteral("macro"));
parser.addOption(undefineOption);
+ QCommandLineOption metadataOption(QStringLiteral("M"));
+ metadataOption.setDescription(QStringLiteral("Add key/value pair to plugin meta data"));
+ metadataOption.setValueName(QStringLiteral("key=value"));
+ parser.addOption(metadataOption);
+
QCommandLineOption noIncludeOption(QStringLiteral("i"));
noIncludeOption.setDescription(QStringLiteral("Do not generate an #include statement."));
parser.addOption(noIncludeOption);
@@ -385,6 +390,24 @@ int runMoc(int argc, char **argv)
moc.filename = filename.toLocal8Bit();
}
+ foreach (const QString &md, parser.values(metadataOption)) {
+ int split = md.indexOf(QLatin1Char('='));
+ QString key = md.left(split);
+ QString value = md.mid(split + 1);
+
+ if (split == -1 || key.isEmpty() || value.isEmpty()) {
+ error("missing key or value for option '-M'");
+ } else if (key.indexOf(QLatin1Char('.')) != -1) {
+ // Don't allow keys with '.' for now, since we might need this
+ // format later for more advanced meta data API
+ error("A key cannot contain the letter '.' for option '-M'");
+ } else {
+ QJsonArray array = moc.metaArgs.value(key);
+ array.append(value);
+ moc.metaArgs.insert(key, array);
+ }
+ }
+
moc.currentFilenames.push(filename.toLocal8Bit());
moc.includes = pp.includes;