17#include <private/qdbusconnection_p.h>
23 "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\" "
24 "\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n";
26#define ANNOTATION_NO_WAIT "org.freedesktop.DBus.Method.NoReply"
27#define QCLASSINFO_DBUS_INTERFACE "D-Bus Interface"
28#define QCLASSINFO_DBUS_INTROSPECTION "D-Bus Introspection"
31#include <private/qdbusmetatype_p.h>
32#include <private/qdbusutil_p.h>
38#define PROGRAMNAME "qdbuscpp2xml"
39#define PROGRAMVERSION "0.2"
40#define PROGRAMCOPYRIGHT QT_COPYRIGHT
47 "Parses the C++ source or header file containing a QObject-derived class and\n"
48 "produces the D-Bus Introspection XML."
51 " -p|-s|-m Only parse scriptable Properties, Signals and Methods (slots)\n"
52 " -P|-S|-M Parse all Properties, Signals and Methods (slots)\n"
53 " -a Output all scriptable contents (equivalent to -psm)\n"
54 " -A Output all contents (equivalent to -PSM)\n"
55 " -t <type>=<dbustype> Output <type> (ex: MyStruct) as <dbustype> (ex: {ss})\n"
56 " -o <filename> Write the output to file <filename>\n"
57 " -h Show this information\n"
58 " -V Show the program version and quit.\n"
67 parameterTypes.
append(
arg.normalizedType);
86 if (typeId != QMetaType::Void) {
109 if (inputCount == -1) {
113 if (isSignal && inputCount + 1 !=
types.size())
127 if (!
names.at(
j - 1).name.isEmpty())
130 bool isOutput = isSignal ||
j > inputCount;
136 isOutput ?
"out"_L1 :
"in"_L1);
142 .
arg(isOutput ?
"Out"_L1 :
"In"_L1)
143 .
arg(isOutput && !isSignal ?
j - inputCount :
j - 1)
155 if ((
flags & wantedMask) != wantedMask)
176 static const char *accessvalues[] = {
nullptr,
"read",
"write",
"readwrite"};
183 if (!mp.read.isEmpty())
185 if (!mp.write.isEmpty())
190 fprintf(stderr,
PROGRAMNAME ": unregistered type: '%s', ignoring\n",
191 mp.type.constData());
204 retval +=
QString::fromLatin1(
">\n <annotation name=\"org.qtproject.QtDBus.QtTypeName\" value=\"%3\"/>\n </property>\n")
254 interface.prepend(
"org.qtproject.QtDBus."_L1);
258 interface.prepend(
"local.org.qtproject.Qt."_L1);
275 QString interface = qDBusInterfaceFromClassDef(cdef);
294 printf(
"D-Bus QObject-to-XML converter\n");
339 if (
arg ==
"--help"_L1)
342 if (!
arg.startsWith(u
'-'))
345 char c =
arg.size() == 2 ?
arg.at(1).toLatin1() : char(0);
377 printf(
"-t expects a type=dbustype argument\n");
383 if (separator == -1) {
384 printf(
"-t expects a type=dbustype argument, but no '=' was found\n");
398 printf(
"-o expects a filename\n");
428 for (
int n = 1;
n < argc; ++
n)
434 for (
const auto &
arg: std::as_const(
args)) {
435 if (
arg.startsWith(u
'-'))
440 fprintf(stderr,
PROGRAMNAME ": could not open '%s': %s\n",
452 moc.filename = filename;
453 moc.currentFilenames.push(filename);
460 classes =
moc.classList;
471 fprintf(stderr,
PROGRAMNAME ": could not open output file '%s': %s",
479 for (
const ClassDef &cdef : std::as_const(classes)) {
483 output.write(
"</node>\n");
QMetaType metaType() const
CustomType(const QByteArray &typeName)
Symbols preprocessed(const QByteArray &filename, QFile *device)
const char * constData() const noexcept
Returns a pointer to the const data stored in the byte array.
bool isEmpty() const noexcept
Returns true if the byte array has size 0; otherwise returns false.
@ ExportNonScriptableContents
@ ExportNonScriptableSignals
@ ExportScriptableSignals
@ ExportNonScriptableSlots
@ ExportNonScriptableProperties
@ ExportScriptableContents
@ ExportScriptableProperties
qsizetype size() const noexcept
const_reference at(qsizetype i) const noexcept
void reserve(qsizetype size)
void append(parameter_type t)
\macro QT_RESTRICTED_CAST_FROM_ASCII
static QString fromLatin1(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
static QString fromLocal8Bit(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QString arg(qlonglong a, int fieldwidth=0, int base=10, QChar fillChar=u' ') const
bool isEmpty() const
Returns true if the string has no characters; otherwise returns false.
static QString static QString asprintf(const char *format,...) Q_ATTRIBUTE_FORMAT_PRINTF(1
QString toHtmlEscaped() const
QList< QVariant > arguments
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char * interface
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char * method
Q_DBUS_EXPORT bool qDBusCheckAsyncTag(const char *tag)
static QString outputFile
int qDBusParametersForMethod(const FunctionDef &mm, QList< QMetaType > &metaTypes, QString &errorMsg)
#define QCLASSINFO_DBUS_INTERFACE
static QString addFunction(const FunctionDef &mm, bool isSignal=false)
static std::deque< CustomType > s_customTypes
QString qDBusGenerateClassDefXml(const ClassDef *cdef)
#define QCLASSINFO_DBUS_INTROSPECTION
static void showVersion()
static const char docTypeHeader[]
static void parseCmdLine(QStringList &arguments)
#define ANNOTATION_NO_WAIT
QString qDBusInterfaceFromClassDef(const ClassDef *mo)
static QString typeNameToXml(const char *typeName)
static QString generateInterfaceXml(const ClassDef *mo)
static QString moc(const QString &name)
static QString generateInterfaceXml(const QMetaObject *mo, int flags, int methodOffset, int propOffset)
GLsizei GLenum GLenum * types
#define qPrintable(string)
static char * toLocal8Bit(char *out, QStringView in, QStringConverter::State *state)
QT_BEGIN_NAMESPACE typedef uchar * output
QList< ClassInfoDef > classInfoList
QByteArray normalizedType
QList< ArgumentDef > arguments