From 8b4a2fbeec302f035274de1b6c262358e97a1f83 Mon Sep 17 00:00:00 2001 From: Andrew Knight <andrew.knight@digia.com> Date: Sat, 19 Oct 2013 17:26:02 +0300 Subject: [PATCH] Move JSON handling into utils This allows for every copied file to get added to the JSON output. Change-Id: I588c173056d359d514e2c1715837b5ce4bf71cb0 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> --- src/windeployqt/main.cpp | 40 +++++---------------------------------- src/windeployqt/utils.cpp | 8 ++++++-- src/windeployqt/utils.h | 39 +++++++++++++++++++++++++++++++++----- 3 files changed, 45 insertions(+), 42 deletions(-) diff --git a/src/windeployqt/main.cpp b/src/windeployqt/main.cpp index c9dc44618..1b28cd59c 100644 --- a/src/windeployqt/main.cpp +++ b/src/windeployqt/main.cpp @@ -152,26 +152,6 @@ static Platform platformFromMkSpec(const QString &xSpec) bool optHelp = false; int optWebKit2 = 0; -// Container class for JSON output -class JsonOutput { -public: - void addFile(const QString &source, const QString &target) - { - QJsonObject object; - object.insert(QStringLiteral("source"), QDir::toNativeSeparators(source)); - object.insert(QStringLiteral("target"), QDir::toNativeSeparators(target)); - m_files.append(object); - } - QByteArray toJson() const - { - QJsonObject document; - document.insert(QStringLiteral("files"), m_files); - return QJsonDocument(document).toJson(); - } -private: - QJsonArray m_files; -}; - struct Options { Options() : plugins(true), libraries(true), quickImports(true), translations(true) , platform(Windows), additionalLibraries(0), disabledLibraries(0) @@ -764,10 +744,8 @@ static DeployResult deploy(const Options &options, const QString targetPath = options.libraryDirectory.isEmpty() ? options.directory : options.libraryDirectory; foreach (const QString &qtLib, deployedQtLibraries) { - if (!updateFile(qtLib, targetPath, options.updateFileFlags, errorMessage)) + if (!updateFile(qtLib, targetPath, options.updateFileFlags, options.json, errorMessage)) return result; - if (options.json) - options.json->addFile(qtLib, targetPath); } } // optLibraries @@ -786,10 +764,8 @@ static DeployResult deploy(const Options &options, } } const QString targetPath = options.directory + slash + targetDirName; - if (!updateFile(plugin, targetPath, options.updateFileFlags, errorMessage)) + if (!updateFile(plugin, targetPath, options.updateFileFlags, options.json, errorMessage)) return result; - if (options.json) - options.json->addFile(plugin, targetPath); } } // optPlugins @@ -813,10 +789,8 @@ static DeployResult deploy(const Options &options, quick2Imports << QStringLiteral("QtWebKit"); foreach (const QString &quick2Import, quick2Imports) { const QString sourceFile = quick2ImportPath + slash + quick2Import; - if (!updateFile(sourceFile, qmlFileEntryFunction, options.directory, options.updateFileFlags, errorMessage)) + if (!updateFile(sourceFile, qmlFileEntryFunction, options.directory, options.updateFileFlags, options.json, errorMessage)) return result; - if (options.json) - options.json->addFile(sourceFile, options.directory); } } // Quick 2 if (usesQuick1) { @@ -826,10 +800,8 @@ static DeployResult deploy(const Options &options, quick1Imports << QStringLiteral("QtWebKit"); foreach (const QString &quick1Import, quick1Imports) { const QString sourceFile = quick1ImportPath + slash + quick1Import; - if (!updateFile(sourceFile, qmlFileEntryFunction, options.directory, options.updateFileFlags, errorMessage)) + if (!updateFile(sourceFile, qmlFileEntryFunction, options.directory, options.updateFileFlags, options.json, errorMessage)) return result; - if (options.json) - options.json->addFile(sourceFile, options.directory); } } // Quick 1 } // optQuickImports @@ -851,10 +823,8 @@ static bool deployWebKit2(const QMap<QString, QString> &qmakeVariables, const QString webProcess = webProcessBinary(sourceOptions.platform); const QString webProcessSource = qmakeVariables.value(QStringLiteral("QT_INSTALL_LIBEXECS")) + QLatin1Char('/') + webProcess; - if (!updateFile(webProcessSource, sourceOptions.directory, sourceOptions.updateFileFlags, errorMessage)) + if (!updateFile(webProcessSource, sourceOptions.directory, sourceOptions.updateFileFlags, sourceOptions.json, errorMessage)) return false; - if (sourceOptions.json) - sourceOptions.json->addFile(webProcessSource, sourceOptions.directory); Options options(sourceOptions); options.binary = options.directory + QLatin1Char('/') + webProcess; options.quickImports = false; diff --git a/src/windeployqt/utils.cpp b/src/windeployqt/utils.cpp index 2b045ad45..aa187856e 100644 --- a/src/windeployqt/utils.cpp +++ b/src/windeployqt/utils.cpp @@ -476,7 +476,7 @@ QString queryQMake(const QString &variable, QString *errorMessage) // Update a file or directory. bool updateFile(const QString &sourceFileName, const QStringList &nameFilters, - const QString &targetDirectory, QString *errorMessage) + const QString &targetDirectory, JsonOutput *json, QString *errorMessage) { const QFileInfo sourceFileInfo(sourceFileName); const QString targetFileName = targetDirectory + QLatin1Char('/') + sourceFileInfo.fileName(); @@ -517,7 +517,7 @@ bool updateFile(const QString &sourceFileName, const QStringList &nameFilters, QDir dir(sourceFileName); const QStringList allEntries = dir.entryList(nameFilters, QDir::Files) + dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); foreach (const QString &entry, allEntries) - if (!updateFile(sourceFileName + QLatin1Char('/') + entry, nameFilters, targetFileName, errorMessage)) + if (!updateFile(sourceFileName + QLatin1Char('/') + entry, nameFilters, targetFileName, json, errorMessage)) return false; return true; } // Source is directory. @@ -526,6 +526,8 @@ bool updateFile(const QString &sourceFileName, const QStringList &nameFilters, if (targetFileInfo.lastModified() >= sourceFileInfo.lastModified()) { if (optVerboseLevel) std::printf("%s is up to date.\n", qPrintable(sourceFileInfo.fileName())); + if (json) + json->addFile(sourceFileName, targetDirectory); return true; } QFile targetFile(targetFileName); @@ -545,6 +547,8 @@ bool updateFile(const QString &sourceFileName, const QStringList &nameFilters, file.errorString()); return false; } + if (json) + json->addFile(sourceFileName, targetDirectory); return true; } diff --git a/src/windeployqt/utils.h b/src/windeployqt/utils.h index 8ebf7d6ea..a24dacb3d 100644 --- a/src/windeployqt/utils.h +++ b/src/windeployqt/utils.h @@ -47,6 +47,9 @@ #include <QtCore/QFile> #include <QtCore/QDir> #include <QtCore/QDateTime> +#include <QtCore/QJsonArray> +#include <QtCore/QJsonObject> +#include <QtCore/QJsonDocument> #include <cstdio> @@ -69,6 +72,27 @@ enum Platform { UnknownPlatform }; +// Container class for JSON output +class JsonOutput +{ +public: + void addFile(const QString &source, const QString &target) + { + QJsonObject object; + object.insert(QStringLiteral("source"), QDir::toNativeSeparators(source)); + object.insert(QStringLiteral("target"), QDir::toNativeSeparators(target)); + m_files.append(object); + } + QByteArray toJson() const + { + QJsonObject document; + document.insert(QStringLiteral("files"), m_files); + return QJsonDocument(document).toJson(); + } +private: + QJsonArray m_files; +}; + #ifdef Q_OS_WIN QString normalizeFileName(const QString &name); QString winErrorMessage(unsigned long error); @@ -85,7 +109,7 @@ QString queryQMake(const QString &variable, QString *errorMessage); QStringList findDependentLibs(const QString &binary, QString *errorMessage); bool updateFile(const QString &sourceFileName, const QStringList &nameFilters, - const QString &targetDirectory, QString *errorMessage); + const QString &targetDirectory, JsonOutput *json, QString *errorMessage); bool runProcess(const QString &binary, const QStringList &args, const QString &workingDirectory = QString(), unsigned long *exitCode = 0, QByteArray *stdOut = 0, QByteArray *stdErr = 0, @@ -131,6 +155,7 @@ bool updateFile(const QString &sourceFileName, DirectoryFileEntryFunction directoryFileEntryFunction, const QString &targetDirectory, unsigned flags, + JsonOutput *json, QString *errorMessage) { const QFileInfo sourceFileInfo(sourceFileName); @@ -155,7 +180,7 @@ bool updateFile(const QString &sourceFileName, } // Update the linked-to file - if (!updateFile(sourcePath, directoryFileEntryFunction, targetDirectory, flags, errorMessage)) + if (!updateFile(sourcePath, directoryFileEntryFunction, targetDirectory, flags, json, errorMessage)) return false; if (targetFileInfo.exists()) { @@ -199,7 +224,7 @@ bool updateFile(const QString &sourceFileName, const QStringList allEntries = directoryFileEntryFunction(dir) + dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); foreach (const QString &entry, allEntries) - if (!updateFile(sourceFileName + QLatin1Char('/') + entry, directoryFileEntryFunction, targetFileName, flags, errorMessage)) + if (!updateFile(sourceFileName + QLatin1Char('/') + entry, directoryFileEntryFunction, targetFileName, flags, json, errorMessage)) return false; return true; } // Source is directory. @@ -209,6 +234,8 @@ bool updateFile(const QString &sourceFileName, && targetFileInfo.lastModified() >= sourceFileInfo.lastModified()) { if (optVerboseLevel) std::printf("%s is up to date.\n", qPrintable(sourceFileInfo.fileName())); + if (json) + json->addFile(sourceFileName, targetDirectory); return true; } QFile targetFile(targetFileName); @@ -228,6 +255,8 @@ bool updateFile(const QString &sourceFileName, file.errorString()); return false; } + if (json) + json->addFile(sourceFileName, targetDirectory); return true; } @@ -242,9 +271,9 @@ private: }; // Convenience for all files. -inline bool updateFile(const QString &sourceFileName, const QString &targetDirectory, unsigned flags, QString *errorMessage) +inline bool updateFile(const QString &sourceFileName, const QString &targetDirectory, unsigned flags, JsonOutput *json, QString *errorMessage) { - return updateFile(sourceFileName, NameFilterFileEntryFunction(QStringList()), targetDirectory, flags, errorMessage); + return updateFile(sourceFileName, NameFilterFileEntryFunction(QStringList()), targetDirectory, flags, json, errorMessage); } QT_END_NAMESPACE -- GitLab