aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorAndy Shaw <andy.shaw@qt.io>2019-10-22 16:53:26 +0200
committerAndy Shaw <andy.shaw@qt.io>2019-10-24 10:14:43 +0200
commitfbc463e84d5cc6012953140c93f6b18f78e66bf8 (patch)
tree881817e51e1a9c9d826198e75b4989f2b2271b4e /tools
parent45652a0491aa32ecdf1d05c236501f78bcea71f8 (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 <simon.hausmann@qt.io> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tools')
-rw-r--r--tools/qmlcachegen/qmlcachegen.pro8
-rw-r--r--tools/qmlimportscanner/main.cpp11
-rw-r--r--tools/qmlimportscanner/qmlimportscanner.pro1
-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.pri3
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