17#include <private/qdbusconnection_p.h>
18#include <private/qdbusmetatype_p.h>
24 "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\" "
25 "\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n";
27#define ANNOTATION_NO_WAIT "org.freedesktop.DBus.Method.NoReply"
28#define QCLASSINFO_DBUS_INTERFACE "D-Bus Interface"
29#define QCLASSINFO_DBUS_INTROSPECTION "D-Bus Introspection"
32#include <private/qdbusmetatype_p.h>
33#include <private/qdbusutil_p.h>
39#define PROGRAMNAME "qdbuscpp2xml"
40#define PROGRAMVERSION "0.2"
41#define PROGRAMCOPYRIGHT QT_COPYRIGHT
48 "Parses the C++ source or header file containing a QObject-derived class and\n"
49 "produces the D-Bus Introspection XML."
52 " -p|-s|-m Only parse scriptable Properties, Signals and Methods (slots)\n"
53 " -P|-S|-M Parse all Properties, Signals and Methods (slots)\n"
54 " -a Output all scriptable contents (equivalent to -psm)\n"
55 " -A Output all contents (equivalent to -PSM)\n"
56 " -t <type>=<dbustype> Output <type> (ex: MyStruct) as <dbustype> (ex: {ss})\n"
57 " -o <filename> Write the output to file <filename>\n"
58 " -h Show this information\n"
59 " -V Show the program version and quit.\n"
64 QList<QByteArray> parameterTypes;
68 parameterTypes.append(
arg.normalizedType);
77 return plain.toHtmlEscaped();
87 if (typeId != QMetaType::Void) {
107 QList<QMetaType>
types;
110 if (inputCount == -1) {
114 if (isSignal && inputCount + 1 !=
types.size())
128 if (!
names.at(
j - 1).name.isEmpty())
131 bool isOutput = isSignal ||
j > inputCount;
137 isOutput ?
"out"_L1 :
"in"_L1);
143 .arg(isOutput ?
"Out"_L1 :
"In"_L1)
144 .
arg(isOutput && !isSignal ?
j - inputCount :
j - 1)
156 if ((
flags & wantedMask) != wantedMask)
177 static const char *accessvalues[] = {
nullptr,
"read",
"write",
"readwrite"};
184 if (!mp.read.isEmpty())
186 if (!mp.write.isEmpty())
188 if (!mp.member.isEmpty())
193 fprintf(stderr,
PROGRAMNAME ": unregistered type: '%s', ignoring\n",
194 mp.type.constData());
207 retval +=
QString::fromLatin1(
">\n <annotation name=\"org.qtproject.QtDBus.QtTypeName\" value=\"%3\"/>\n </property>\n")
257 interface.prepend(
"org.qtproject.QtDBus."_L1);
261 interface.prepend(
"local.org.qtproject.Qt."_L1);
278 QString interface = qDBusInterfaceFromClassDef(cdef);
297 printf(
"D-Bus QObject-to-XML converter\n");
342 if (
arg ==
"--help"_L1)
345 if (!
arg.startsWith(u
'-'))
348 char c =
arg.size() == 2 ?
arg.at(1).toLatin1() : char(0);
380 printf(
"-t expects a type=dbustype argument\n");
386 if (separator == -1) {
387 printf(
"-t expects a type=dbustype argument, but no '=' was found\n");
401 printf(
"-o expects a filename\n");
431 for (
int n = 1;
n < argc; ++
n)
437 QList<ClassDef> classes;
441 for (
const auto &
arg: std::as_const(
args)) {
442 if (
arg.startsWith(u
'-') &&
arg.size() > 1)
457 fprintf(stderr,
PROGRAMNAME ": could not open '%s': %s\n",
464 pp.macros[
"Q_MOC_RUN"];
465 pp.macros[
"__cplusplus"];
469 moc.filename = filename;
470 moc.currentFilenames.push(filename);
472 moc.symbols = pp.preprocessed(
moc.filename, &
f);
475 if (
moc.classList.isEmpty())
477 classes =
moc.classList;
485 fprintf(stderr,
PROGRAMNAME ": could not open standard output: %s\n",
492 fprintf(stderr,
PROGRAMNAME ": could not open output file '%s': %s\n",
500 for (
const ClassDef &cdef : std::as_const(classes)) {
504 output.write(
"</node>\n");
QMetaType metaType() const
CustomType(const QByteArray &typeName)
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
bool isEmpty() 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...
static QString static QString asprintf(const char *format,...) Q_ATTRIBUTE_FORMAT_PRINTF(1
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