struct Options {
Options() : plugins(true), libraries(true), quickImports(true), translations(true), systemD3dCompiler(true)
, platform(Windows), additionalLibraries(0), disabledLibraries(0)
- , updateFileFlags(0), json(0) {}
+ , updateFileFlags(0), json(0), list(ListNone) {}
bool plugins;
bool libraries;
QString libraryDirectory;
QString binary;
JsonOutput *json;
+ ListOption list;
};
// Return binary from folder
QStringLiteral("Print to stdout in JSON format."));
parser->addOption(jsonOption);
+ QCommandLineOption listOption(QStringLiteral("list"),
+ QLatin1String("Print only the names of the files copied.\n"
+ "Available options:\n"
+ " source: absolute path of the source files\n"
+ " target: absolute path of the target files\n"
+ " relative: paths of the target files, relative\n"
+ " to the target directory"),
+ QStringLiteral("option"));
+ parser->addOption(listOption);
+
QCommandLineOption verboseOption(QStringLiteral("verbose"),
QStringLiteral("Verbose level."),
QStringLiteral("level"));
if (options->additionalLibraries & QtDesignerComponents)
options->additionalLibraries |= QtDesignerModule;
- if (parser->isSet(jsonOption)) {
+ if (parser->isSet(listOption)) {
+ const QString value = parser->value(listOption);
+ if (value == QStringLiteral("source")) {
+ options->list = ListSource;
+ } else if (value == QStringLiteral("target")) {
+ options->list = ListTarget;
+ } else if (value == QStringLiteral("relative")) {
+ options->list = ListRelative;
+ } else {
+ *errorMessage = QStringLiteral("Please specify a valid option for -list (source, target, relative).");
+ return CommandLineParseError;
+ }
+ }
+
+ if (parser->isSet(jsonOption) || options->list) {
optVerboseLevel = 0;
options->json = new JsonOutput;
} else {
}
if (options.json) {
- std::fputs(options.json->toJson().constData(), stdout);
+ if (options.list)
+ std::fputs(options.json->toList(options.list, options.directory).constData(), stdout);
+ else
+ std::fputs(options.json->toJson().constData(), stdout);
delete options.json;
options.json = 0;
}
UnknownPlatform
};
+enum ListOption {
+ ListNone = 0,
+ ListSource,
+ ListTarget,
+ ListRelative
+};
+
// Container class for JSON output
class JsonOutput
{
document.insert(QStringLiteral("files"), m_files);
return QJsonDocument(document).toJson();
}
+ QByteArray toList(ListOption option, const QDir &base) const
+ {
+ QByteArray list;
+ foreach (const QJsonValue &file, m_files) {
+ const QString source = file.toObject().value(QStringLiteral("source")).toString();
+ const QString fileName = QFileInfo(source).fileName();
+ const QString target = file.toObject().value(QStringLiteral("target")).toString() + QDir::separator() + fileName;
+ switch (option) {
+ case ListNone:
+ break;
+ case ListSource:
+ list += source.toUtf8() + '\n';
+ break;
+ case ListTarget:
+ list += target.toUtf8() + '\n';
+ break;
+ case ListRelative:
+ list += QDir::toNativeSeparators(base.relativeFilePath(target)).toUtf8() + '\n';
+ break;
+ }
+ }
+ return list;
+ }
private:
QJsonArray m_files;
};