Add qtplugininfo, a tool to dump plugin meta data.
authorVolker Krause <volker.krause@kdab.com>
Fri, 9 Jan 2015 18:56:04 +0000 (19:56 +0100)
committerVolker Krause <volker.krause@kdab.com>
Mon, 12 Jan 2015 15:21:27 +0000 (16:21 +0100)
This is useful when debugging plugin loading issues, especially also when
adding additional custom meta data as it's done by e.g. KDE and GammaRay.

Change-Id: Ib1d5d1f663f1330a263fc3758b98245b388b31f6
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
src/qtplugininfo/qtplugininfo.cpp [new file with mode: 0644]
src/qtplugininfo/qtplugininfo.pro [new file with mode: 0644]
src/src.pro

diff --git a/src/qtplugininfo/qtplugininfo.cpp b/src/qtplugininfo/qtplugininfo.cpp
new file mode 100644 (file)
index 0000000..cdd5894
--- /dev/null
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Volker Krause <volker.krause@kdab.com>
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the tools applications of the Qt Toolkit
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QCommandLineParser>
+#include <QCoreApplication>
+#include <QFile>
+#include <QJsonDocument>
+#include <QLibrary>
+#include <QPluginLoader>
+
+#include <iostream>
+
+int main(int argc, char** argv)
+{
+    QCoreApplication app(argc, argv);
+    QCoreApplication::setApplicationName(QStringLiteral("qplugininfo"));
+    QCoreApplication::setApplicationVersion(QStringLiteral(QT_VERSION_STR));
+
+    QCommandLineParser parser;
+    parser.setApplicationDescription(QStringLiteral("Qt5 plugin meta-data dumper"));
+    parser.addHelpOption();
+    parser.addVersionOption();
+    parser.addPositionalArgument(QStringLiteral("plugin"), QStringLiteral("Plug-in of which to read the meta data."), QStringLiteral("<plugin>"));
+    parser.process(app);
+
+    if (parser.positionalArguments().isEmpty())
+        parser.showHelp(1);
+
+    foreach (const QString &plugin, parser.positionalArguments()) {
+        if (!QFile::exists(plugin)) {
+            std::cerr << "File " << qPrintable(plugin) << " does not exist." << std::endl;
+            return 1;
+        }
+        if (!QLibrary::isLibrary(plugin)) {
+            std::cerr << "File " << qPrintable(plugin) << " is not a plug-in." << std::endl;
+            return 1;
+        }
+        QPluginLoader loader(plugin);
+        if (loader.metaData().isEmpty()) {
+            std::cerr << "No plug-in meta-data found: " << qPrintable(loader.errorString()) << std::endl;
+            return 1;
+        }
+        const QJsonDocument doc(loader.metaData());
+        std::cout << doc.toJson().constData();
+    }
+
+    return 0;
+}
diff --git a/src/qtplugininfo/qtplugininfo.pro b/src/qtplugininfo/qtplugininfo.pro
new file mode 100644 (file)
index 0000000..98feeb9
--- /dev/null
@@ -0,0 +1,5 @@
+SOURCES = qtplugininfo.cpp
+QT = core
+CONFIG += console
+
+load(qt_app)
index 89bdd45..494898f 100644 (file)
@@ -13,7 +13,8 @@ qtHaveModule(widgets) {
     }
 }
 
-SUBDIRS += linguist
+SUBDIRS += linguist \
+    qtplugininfo
 if(!android|android_app):!ios: SUBDIRS += qtpaths
 
 mac {