1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
/*
* BluezQt - Asynchronous BlueZ wrapper library
*
* SPDX-FileCopyrightText: 2019 Manuel Weichselbaumer <mincequi@web.de>
*
* SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
#include <QCommandLineParser>
#include <QCoreApplication>
#include <QDebug>
#include <QFile>
#include <QFileInfo>
#include <QTextStream>
#include "BluezApiParser.h"
#include "CppGenerator.h"
#include "XmlGenerator.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QCoreApplication::setApplicationName(QStringLiteral("bluezapi2qt"));
QCoreApplication::setApplicationVersion(QStringLiteral("0.1"));
// Add command line parsing
QCommandLineParser parser;
parser.setApplicationDescription(
QStringLiteral("Generates D-BUS object introspection XML files out of BlueZ D-Bus API\n"
"description files (*-api.txt)."));
parser.addHelpOption();
parser.addVersionOption();
parser.addPositionalArgument(QStringLiteral("<bluez>-api.txt"), QStringLiteral("BlueZ D-Bus API description file to use."));
QCommandLineOption deprecatedOption(QStringList() << QStringLiteral("d") << QStringLiteral("deprecated"),
QStringLiteral("Generate deprecated methods/properties"));
parser.addOption(deprecatedOption);
QCommandLineOption experimentalOption(QStringList() << QStringLiteral("e") << QStringLiteral("experimental"),
QStringLiteral("Generate experimental methods/properties"));
parser.addOption(experimentalOption);
QCommandLineOption optionalOption(QStringList() << QStringLiteral("o") << QStringLiteral("optional"),
QStringLiteral("Generate optional methods/properties"));
parser.addOption(optionalOption);
QCommandLineOption xmlOption(QStringList() << QStringLiteral("x") << QStringLiteral("xml"),
QStringLiteral("Generate D-Bus object introspection XML files"));
parser.addOption(xmlOption);
QCommandLineOption cppOption(QStringList() << QStringLiteral("c") << QStringLiteral("cpp"), QStringLiteral("Generate D-Bus interface adaptor C++ files"));
parser.addOption(cppOption);
QCommandLineOption authorOption(QStringList() << QStringLiteral("a") << QStringLiteral("author"),
QStringLiteral("Author for copyright header in C++ files"),
QStringLiteral("author"));
parser.addOption(authorOption);
QCommandLineOption yearOption(QStringList() << QStringLiteral("y") << QStringLiteral("year"),
QStringLiteral("Year for copyright header in C++ files"),
QStringLiteral("year"));
parser.addOption(yearOption);
parser.process(a);
// Open file
auto positionalArgs = parser.positionalArguments();
if (positionalArgs.isEmpty()) {
fputs(qPrintable(parser.helpText()), stderr);
return 1;
}
auto fileName = positionalArgs.takeFirst();
QFileInfo inputInfo(fileName);
if (!inputInfo.exists() || !inputInfo.isFile() || !inputInfo.isReadable()) {
qCritical() << "Cannot open file" << fileName;
return 1;
}
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qCritical() << "Cannot open file" << file.fileName();
return 1;
}
QTextStream stream(&file);
// Parse file
BluezApiParser bluezParser;
if (!bluezParser.parse(stream)) {
qCritical() << "Error parsing file" << file.fileName();
return 1;
}
if (!bluezParser.finalize()) {
qCritical() << "Error parsing file" << file.fileName();
return 1;
}
if (parser.isSet(xmlOption)) {
XmlGenerator::Config xmlConfig;
xmlConfig.useOptional = parser.isSet(optionalOption);
xmlConfig.useDeprecated = parser.isSet(deprecatedOption);
xmlConfig.useExperimental = parser.isSet(experimentalOption);
XmlGenerator xmlGenerator(xmlConfig);
if (!xmlGenerator.generate(bluezParser)) {
qCritical() << "Error generating xml";
return 1;
}
}
if (parser.isSet(cppOption)) {
CppGenerator::Config cppConfig;
cppConfig.author = parser.value(authorOption);
cppConfig.year = parser.value(yearOption);
CppGenerator cppGenerator(cppConfig);
if (!cppGenerator.generate(bluezParser)) {
qCritical() << "Error generating C++ files";
return 1;
}
}
return 0;
}
|