From: Andrew Knight Date: Mon, 30 Dec 2013 10:58:11 +0000 (+0200) Subject: windeployqt: Add output options for simple lists X-Git-Tag: upstream/5.2.90+alpha~67 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e78c05750218cb45e6536eec1c4983810d7908fa;p=platform%2Fupstream%2Fqttools.git windeployqt: Add output options for simple lists Some tools, such as MSBuild, can't parse JSON easily. This change adds a "list" option, which changes the output to list the deployed files, one per line. The user can view the source, target, or relative target files by passing -line to windeployqt. Task-number: QTBUG-35328 Change-Id: I8181ea4f230e7e2b146a5019934ae5fbe768bcec Reviewed-by: Friedemann Kleint --- diff --git a/src/windeployqt/main.cpp b/src/windeployqt/main.cpp index a5e5a92..2aeec1f 100644 --- a/src/windeployqt/main.cpp +++ b/src/windeployqt/main.cpp @@ -184,7 +184,7 @@ int optWebKit2 = 0; 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; @@ -200,6 +200,7 @@ struct Options { QString libraryDirectory; QString binary; JsonOutput *json; + ListOption list; }; // Return binary from folder @@ -283,6 +284,16 @@ static inline int parseArguments(const QStringList &arguments, QCommandLineParse 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")); @@ -341,7 +352,21 @@ static inline int parseArguments(const QStringList &arguments, QCommandLineParse 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 { @@ -998,7 +1023,10 @@ int main(int argc, char **argv) } 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; } diff --git a/src/windeployqt/utils.h b/src/windeployqt/utils.h index 4519e9d..56d6dbd 100644 --- a/src/windeployqt/utils.h +++ b/src/windeployqt/utils.h @@ -72,6 +72,13 @@ enum Platform { UnknownPlatform }; +enum ListOption { + ListNone = 0, + ListSource, + ListTarget, + ListRelative +}; + // Container class for JSON output class JsonOutput { @@ -89,6 +96,29 @@ public: 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; };