diff options
author | Andy Shaw <[email protected]> | 2019-10-22 16:53:26 +0200 |
---|---|---|
committer | Andy Shaw <[email protected]> | 2019-10-24 10:14:43 +0200 |
commit | fbc463e84d5cc6012953140c93f6b18f78e66bf8 (patch) | |
tree | 881817e51e1a9c9d826198e75b4989f2b2271b4e | |
parent | 45652a0491aa32ecdf1d05c236501f78bcea71f8 (diff) |
Add support for scanning qrc files in qmlimportscanner
This reuses the ResourceFileMapper and extends it slightly to return
full paths on request. Subsequently, this is moved into a shared
directory inside tools.
Fixes: QTBUG-55259
Change-Id: Ice5fc68d03b767a4185742e182556ab4290bd28d
Reviewed-by: Simon Hausmann <[email protected]>
Reviewed-by: Fabian Kosmale <[email protected]>
-rw-r--r-- | tools/qmlcachegen/qmlcachegen.pro | 8 | ||||
-rw-r--r-- | tools/qmlimportscanner/main.cpp | 11 | ||||
-rw-r--r-- | tools/qmlimportscanner/qmlimportscanner.pro | 1 | ||||
-rw-r--r-- | tools/shared/resourcefilemapper.cpp (renamed from tools/qmlcachegen/resourcefilemapper.cpp) | 7 | ||||
-rw-r--r-- | tools/shared/resourcefilemapper.h (renamed from tools/qmlcachegen/resourcefilemapper.h) | 6 | ||||
-rw-r--r-- | tools/shared/shared.pri | 3 |
6 files changed, 28 insertions, 8 deletions
diff --git a/tools/qmlcachegen/qmlcachegen.pro b/tools/qmlcachegen/qmlcachegen.pro index bee0b9a37e..ec65cdb5e6 100644 --- a/tools/qmlcachegen/qmlcachegen.pro +++ b/tools/qmlcachegen/qmlcachegen.pro @@ -5,8 +5,10 @@ DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII SOURCES = qmlcachegen.cpp \ resourcefilter.cpp \ - generateloader.cpp \ - resourcefilemapper.cpp + generateloader.cpp + +include(../shared/shared.pri) + TARGET = qmlcachegen build_integration.files = qmlcache.prf qtquickcompiler.prf @@ -38,5 +40,3 @@ QMAKE_TARGET_DESCRIPTION = QML Cache Generator load(qt_tool) -HEADERS += \ - resourcefilemapper.h diff --git a/tools/qmlimportscanner/main.cpp b/tools/qmlimportscanner/main.cpp index 6d48f6203d..c37910bdaf 100644 --- a/tools/qmlimportscanner/main.cpp +++ b/tools/qmlimportscanner/main.cpp @@ -49,6 +49,8 @@ #include <QtCore/QJsonDocument> #include <QtCore/QLibraryInfo> +#include <resourcefilemapper.h> + #include <iostream> #include <algorithm> @@ -80,7 +82,8 @@ void printUsage(const QString &appNameIn) #endif std::wcerr << "Usage: " << appName << " -rootPath path/to/app/qml/directory -importPath path/to/qt/qml/directory\n" - " " << appName << " -qmlFiles file1 file2 -importPath path/to/qt/qml/directory\n\n" + " " << appName << " -qmlFiles file1 file2 -importPath path/to/qt/qml/directory\n" + " " << appName << " -qrcFiles file1.qrc file2.qrc -importPath path/to/qt/qml/directory\n\n" "Example: " << appName << " -rootPath . -importPath " << QDir::toNativeSeparators(qmlPath).toStdWString() << '\n'; @@ -542,6 +545,7 @@ int main(int argc, char *argv[]) QStringList qmlRootPaths; QStringList scanFiles; QStringList qmlImportPaths; + QStringList qrcFiles; bool generateCmakeContent = false; int i = 1; @@ -569,6 +573,8 @@ int main(int argc, char *argv[]) argReceiver = &qmlImportPaths; } else if (arg == QLatin1String("-cmake-output")) { generateCmakeContent = true; + } else if (arg == QLatin1String("-qrcFiles")) { + argReceiver = &qrcFiles; } else { std::cerr << qPrintable(appName) << ": Invalid argument: \"" << qPrintable(arg) << "\"\n"; @@ -590,6 +596,9 @@ int main(int argc, char *argv[]) } } + if (!qrcFiles.isEmpty()) + scanFiles << ResourceFileMapper(qrcFiles).qmlCompilerFiles(ResourceFileMapper::FileOutput::AbsoluteFilePath); + g_qmlImportPaths = qmlImportPaths; // Find the imports! diff --git a/tools/qmlimportscanner/qmlimportscanner.pro b/tools/qmlimportscanner/qmlimportscanner.pro index a29b582274..d69f1a3b0b 100644 --- a/tools/qmlimportscanner/qmlimportscanner.pro +++ b/tools/qmlimportscanner/qmlimportscanner.pro @@ -4,6 +4,7 @@ QT = core qmldevtools-private DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII SOURCES += main.cpp +include(../shared/shared.pri) load(cmake_functions) diff --git a/tools/qmlcachegen/resourcefilemapper.cpp b/tools/shared/resourcefilemapper.cpp index 244874717f..b9cf463575 100644 --- a/tools/qmlcachegen/resourcefilemapper.cpp +++ b/tools/shared/resourcefilemapper.cpp @@ -58,7 +58,7 @@ QStringList ResourceFileMapper::resourcePaths(const QString &fileName) return resourcePaths; } -QStringList ResourceFileMapper::qmlCompilerFiles() const +QStringList ResourceFileMapper::qmlCompilerFiles(FileOutput fo) const { QStringList files; for (auto it = qrcPathToFileSystemPath.constBegin(), end = qrcPathToFileSystemPath.constEnd(); @@ -67,7 +67,10 @@ QStringList ResourceFileMapper::qmlCompilerFiles() const const QString suffix = QFileInfo(qrcPath).suffix(); if (suffix != QStringLiteral("qml") && suffix != QStringLiteral("js") && suffix != QStringLiteral("mjs")) continue; - files << qrcPath; + if (fo == FileOutput::AbsoluteFilePath) + files << it.value(); + else + files << qrcPath; } return files; } diff --git a/tools/qmlcachegen/resourcefilemapper.h b/tools/shared/resourcefilemapper.h index 2e0ab45171..ed3e486149 100644 --- a/tools/qmlcachegen/resourcefilemapper.h +++ b/tools/shared/resourcefilemapper.h @@ -34,12 +34,16 @@ struct ResourceFileMapper { + enum class FileOutput { + RelativeFilePath, + AbsoluteFilePath + }; ResourceFileMapper(const QStringList &resourceFiles); bool isEmpty() const; QStringList resourcePaths(const QString &fileName); - QStringList qmlCompilerFiles() const; + QStringList qmlCompilerFiles(FileOutput fo = FileOutput::RelativeFilePath) const; private: void populateFromQrcFile(QFile &file); diff --git a/tools/shared/shared.pri b/tools/shared/shared.pri new file mode 100644 index 0000000000..c094b51d5f --- /dev/null +++ b/tools/shared/shared.pri @@ -0,0 +1,3 @@ +INCLUDEPATH += $$PWD +SOURCES += $$PWD/resourcefilemapper.cpp +HEADERS += $$PWD/resourcefilemapper.h |