aboutsummaryrefslogtreecommitdiffstats
path: root/tools/qmlcachegen/generateloader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/qmlcachegen/generateloader.cpp')
-rw-r--r--tools/qmlcachegen/generateloader.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/tools/qmlcachegen/generateloader.cpp b/tools/qmlcachegen/generateloader.cpp
index 68aacf78ce..5b8fc34455 100644
--- a/tools/qmlcachegen/generateloader.cpp
+++ b/tools/qmlcachegen/generateloader.cpp
@@ -26,6 +26,7 @@
**
****************************************************************************/
#include <QByteArray>
+#include <QRegExp>
#include <QString>
#include <QStringList>
#include <QTextStream>
@@ -35,6 +36,8 @@
#include <QFileInfo>
#include <QSaveFile>
+#include <algorithm>
+
/*!
* \internal
* Mangles \a str to be a unique C++ identifier. Characters that are invalid for C++ identifiers
@@ -260,7 +263,8 @@ private:
}
};
-static QByteArray generateResourceDirectoryTree(QTextStream &code, const QStringList &qrcFiles)
+static QByteArray generateResourceDirectoryTree(QTextStream &code, const QStringList &qrcFiles,
+ const QStringList &sortedRetainedFiles)
{
QByteArray call;
if (qrcFiles.isEmpty())
@@ -269,14 +273,15 @@ static QByteArray generateResourceDirectoryTree(QTextStream &code, const QString
VirtualDirectoryEntry resourceDirs;
resourceDirs.name = QStringLiteral("/");
- foreach (const QString &entry, qrcFiles) {
+ for (const QString &entry : qrcFiles) {
const QStringList segments = entry.split(QLatin1Char('/'), QString::SkipEmptyParts);
VirtualDirectoryEntry *dirEntry = &resourceDirs;
for (int i = 0; i < segments.count() - 1; ++i)
dirEntry = dirEntry->append(segments.at(i));
- dirEntry->appendEmptyFile(segments.last());
+ if (!std::binary_search(sortedRetainedFiles.begin(), sortedRetainedFiles.end(), entry))
+ dirEntry->appendEmptyFile(segments.last());
}
if (resourceDirs.isEmpty())
@@ -327,7 +332,9 @@ static QString qtResourceNameForFile(const QString &fileName)
return name;
}
-bool generateLoader(const QStringList &compiledFiles, const QString &outputFileName, const QStringList &resourceFileMappings, QString *errorString)
+bool generateLoader(const QStringList &compiledFiles, const QStringList &sortedRetainedFiles,
+ const QString &outputFileName, const QStringList &resourceFileMappings,
+ QString *errorString)
{
QByteArray generatedLoaderCode;
@@ -338,13 +345,14 @@ bool generateLoader(const QStringList &compiledFiles, const QString &outputFileN
stream << "#include <QtCore/qurl.h>\n";
stream << "\n";
- QByteArray resourceRegisterCall = generateResourceDirectoryTree(stream, compiledFiles);
+ QByteArray resourceRegisterCall = generateResourceDirectoryTree(stream, compiledFiles,
+ sortedRetainedFiles);
stream << "namespace QmlCacheGeneratedCode {\n";
for (int i = 0; i < compiledFiles.count(); ++i) {
const QString compiledFile = compiledFiles.at(i);
const QString ns = symbolNamespaceForPath(compiledFile);
- stream << "namespace " << symbolNamespaceForPath(compiledFile) << " { \n";
+ stream << "namespace " << ns << " { \n";
stream << " extern const unsigned char qmlData[];\n";
stream << " const QQmlPrivate::CachedQmlUnit unit = {\n";
stream << " reinterpret_cast<const QV4::CompiledData::Unit*>(&qmlData), nullptr, nullptr\n";