mirror of
https://github.com/QuasarApp/CQtDeployer.git
synced 2025-05-05 14:09:35 +00:00
ref #549 "added qmldir scanner"
This commit is contained in:
parent
150e5c7f0b
commit
bb5d66e573
@ -13,7 +13,27 @@
|
|||||||
#include "deploycore.h"
|
#include "deploycore.h"
|
||||||
#include "deployconfig.h"
|
#include "deployconfig.h"
|
||||||
|
|
||||||
QStringList QML::extractImportsFromFile(const QString &filepath) {
|
QStringList QML::extractImportLine(const QString& line) const {
|
||||||
|
QStringList result;
|
||||||
|
QStringList list = line.split(" ", QString::SkipEmptyParts);
|
||||||
|
|
||||||
|
if (list.count() == 3 || (list.count() == 5 && list[3] == "as")) {
|
||||||
|
if (list[2] == "auto") {
|
||||||
|
// qt6
|
||||||
|
result << (list[1].replace(".", "/"));
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
// qt5
|
||||||
|
result << (list[2][0] + "#" + list[1].replace(".", "/"));
|
||||||
|
} else if (list.count() == 2 || (list.count() == 4 && list[2] == "as")) {
|
||||||
|
// qt6
|
||||||
|
result << (list[1].replace(".", "/"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList QML::extractImportsFromFile(const QString &filepath) const {
|
||||||
QStringList imports;
|
QStringList imports;
|
||||||
QFile F(filepath);
|
QFile F(filepath);
|
||||||
if (!F.open(QIODevice::ReadOnly)) return QStringList();
|
if (!F.open(QIODevice::ReadOnly)) return QStringList();
|
||||||
@ -29,20 +49,7 @@ QStringList QML::extractImportsFromFile(const QString &filepath) {
|
|||||||
if (word.startsWith("//")) continue;
|
if (word.startsWith("//")) continue;
|
||||||
if (!word.startsWith("import")) continue;
|
if (!word.startsWith("import")) continue;
|
||||||
|
|
||||||
QStringList list = word.split(" ", QString::SkipEmptyParts);
|
imports += extractImportLine(word);
|
||||||
|
|
||||||
if (list.count() == 3 || (list.count() == 5 && list[3] == "as")) {
|
|
||||||
if (list[2] == "auto") {
|
|
||||||
// qt6
|
|
||||||
imports << (list[1].replace(".", "/"));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// qt5
|
|
||||||
imports << (list[2][0] + "#" + list[1].replace(".", "/"));
|
|
||||||
} else if (list.count() == 2 || (list.count() == 4 && list[2] == "as")) {
|
|
||||||
// qt6
|
|
||||||
imports << (list[1].replace(".", "/"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return imports;
|
return imports;
|
||||||
@ -56,6 +63,8 @@ bool QML::extractImportsFromDir(const QString &path, bool recursive) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto files = dir.entryInfoList(QStringList() << "*.qml" << "*.QML", QDir::Files);
|
auto files = dir.entryInfoList(QStringList() << "*.qml" << "*.QML", QDir::Files);
|
||||||
|
auto qmlmodule = dir.entryInfoList(QStringList() << "qmldir", QDir::Files);
|
||||||
|
|
||||||
auto dirs = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs);
|
auto dirs = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs);
|
||||||
|
|
||||||
for (const auto &info: files) {
|
for (const auto &info: files) {
|
||||||
@ -68,6 +77,17 @@ bool QML::extractImportsFromDir(const QString &path, bool recursive) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (const auto& module: qAsConst(qmlmodule)) {
|
||||||
|
QStringList imports = extractImportsFromQmlModule(module.absoluteFilePath());
|
||||||
|
|
||||||
|
for (auto import : imports) {
|
||||||
|
if (!_imports.contains(import)) {
|
||||||
|
_imports.insert(import);
|
||||||
|
extractImportsFromDir(getPathFromImport(import), recursive);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (recursive) {
|
if (recursive) {
|
||||||
for (const auto &info: dirs) {
|
for (const auto &info: dirs) {
|
||||||
extractImportsFromDir(info.absoluteFilePath(), recursive);
|
extractImportsFromDir(info.absoluteFilePath(), recursive);
|
||||||
@ -156,8 +176,23 @@ bool QML::scanQmlTree(const QString &qmlTree) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QML::addImport() {
|
QStringList QML::extractImportsFromQmlModule(const QString &module) const {
|
||||||
|
QStringList imports;
|
||||||
|
QFile F(module);
|
||||||
|
if (!F.open(QIODevice::ReadOnly)) return QStringList();
|
||||||
|
|
||||||
|
QString content = F.readAll();
|
||||||
|
|
||||||
|
for (QString line : content.split("\n")) {
|
||||||
|
line = line.simplified();
|
||||||
|
if (line.startsWith("//") || line.startsWith("#")) continue;
|
||||||
|
if (!line.startsWith("depends")) continue;
|
||||||
|
|
||||||
|
QStringList list = line.split(" ", QString::SkipEmptyParts);
|
||||||
|
imports += extractImportLine(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
return imports;
|
||||||
}
|
}
|
||||||
|
|
||||||
QML::QML(const QString &qmlRoot) {
|
QML::QML(const QString &qmlRoot) {
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
class DEPLOYSHARED_EXPORT QML {
|
class DEPLOYSHARED_EXPORT QML {
|
||||||
private:
|
private:
|
||||||
|
|
||||||
QStringList extractImportsFromFile(const QString &filepath);
|
QStringList extractImportsFromFile(const QString &filepath) const;
|
||||||
|
|
||||||
bool extractImportsFromDir(const QString &path, bool recursive = false);
|
bool extractImportsFromDir(const QString &path, bool recursive = false);
|
||||||
|
|
||||||
@ -23,11 +23,13 @@ private:
|
|||||||
|
|
||||||
bool deployPath( const QString& path, QStringList& res);
|
bool deployPath( const QString& path, QStringList& res);
|
||||||
bool scanQmlTree(const QString& qmlTree);
|
bool scanQmlTree(const QString& qmlTree);
|
||||||
void addImport();
|
QStringList extractImportsFromQmlModule(const QString& module) const;
|
||||||
QString _qmlRoot = "";
|
QString _qmlRoot = "";
|
||||||
QSet<QString> _imports;
|
QSet<QString> _imports;
|
||||||
QSet<QString> secondVersions;
|
QSet<QString> secondVersions;
|
||||||
|
|
||||||
|
QStringList extractImportLine(const QString &line) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QML(const QString& qmlRoot);
|
QML(const QString& qmlRoot);
|
||||||
|
|
||||||
|
@ -1305,7 +1305,10 @@ QSet<QString> ModulesQt513::qmlVirtualKeyBoadrLibs(const QString &distDir) const
|
|||||||
"./" + distDir + "/qml/QtQuick/VirtualKeyboard/Styles/qmldir",
|
"./" + distDir + "/qml/QtQuick/VirtualKeyboard/Styles/qmldir",
|
||||||
"./" + distDir + "/qml/QtQuick/VirtualKeyboard/libqtquickvirtualkeyboardplugin.so",
|
"./" + distDir + "/qml/QtQuick/VirtualKeyboard/libqtquickvirtualkeyboardplugin.so",
|
||||||
"./" + distDir + "/qml/QtQuick/VirtualKeyboard/plugins.qmltypes",
|
"./" + distDir + "/qml/QtQuick/VirtualKeyboard/plugins.qmltypes",
|
||||||
"./" + distDir + "/qml/QtQuick/VirtualKeyboard/qmldir"
|
"./" + distDir + "/qml/QtQuick/VirtualKeyboard/qmldir",
|
||||||
|
"./" + distDir + "/qml/Qt/labs/folderlistmodel/libqmlfolderlistmodelplugin.so",
|
||||||
|
"./" + distDir + "/qml/Qt/labs/folderlistmodel/plugins.qmltypes",
|
||||||
|
"./" + distDir + "/qml/Qt/labs/folderlistmodel/qmldir"
|
||||||
});
|
});
|
||||||
#else
|
#else
|
||||||
Tree += utils.createTree({
|
Tree += utils.createTree({
|
||||||
@ -1343,6 +1346,9 @@ QSet<QString> ModulesQt513::qmlVirtualKeyBoadrLibs(const QString &distDir) const
|
|||||||
"./" + distDir + "/qml/QtQuick/VirtualKeyboard/plugins.qmltypes",
|
"./" + distDir + "/qml/QtQuick/VirtualKeyboard/plugins.qmltypes",
|
||||||
"./" + distDir + "/qml/QtQuick/VirtualKeyboard/qmldir",
|
"./" + distDir + "/qml/QtQuick/VirtualKeyboard/qmldir",
|
||||||
"./" + distDir + "/qml/QtQuick/VirtualKeyboard/qtquickvirtualkeyboardplugin.dll"
|
"./" + distDir + "/qml/QtQuick/VirtualKeyboard/qtquickvirtualkeyboardplugin.dll"
|
||||||
|
"./" + distDir + "/qml/Qt/labs/folderlistmodel/qmlfolderlistmodelplugin.dll",
|
||||||
|
"./" + distDir + "/qml/Qt/labs/folderlistmodel/plugins.qmltypes",
|
||||||
|
"./" + distDir + "/qml/Qt/labs/folderlistmodel/qmldir"
|
||||||
});
|
});
|
||||||
#endif
|
#endif
|
||||||
return Tree;
|
return Tree;
|
||||||
|
@ -692,7 +692,7 @@ void deploytest::testQmlScaner() {
|
|||||||
|
|
||||||
QVERIFY(results.size() == imports.size());
|
QVERIFY(results.size() == imports.size());
|
||||||
|
|
||||||
for (auto import: imports) {
|
for (auto import: qAsConst(imports)) {
|
||||||
auto path = scaner->getPathFromImport(import);
|
auto path = scaner->getPathFromImport(import);
|
||||||
QVERIFY(results.contains(path));
|
QVERIFY(results.contains(path));
|
||||||
}
|
}
|
||||||
@ -730,7 +730,7 @@ void deploytest::testVirtualKeyBoard() {
|
|||||||
#endif
|
#endif
|
||||||
auto comapareTree = TestModule.qmlVirtualKeyBoadrLibs();
|
auto comapareTree = TestModule.qmlVirtualKeyBoadrLibs();
|
||||||
|
|
||||||
runTestParams({"-bin", bin, "clear" ,
|
runTestParams({"-bin", bin, "clear" , "noStrip",
|
||||||
"-qmake", qmake,
|
"-qmake", qmake,
|
||||||
"-qmlDir", TestBinDir + "/../virtualkeyboard"}, &comapareTree);
|
"-qmlDir", TestBinDir + "/../virtualkeyboard"}, &comapareTree);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user