4
1
mirror of https://github.com/QuasarApp/CQtDeployer.git synced 2025-05-02 12:39:35 +00:00

Merge pull request from QuasarApp/task_549

ref  "added qmldir scanner"
This commit is contained in:
Andrei Yankovich 2021-03-27 17:33:39 +03:00 committed by GitHub
commit b88dfaa657
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 376 additions and 46 deletions

@ -617,18 +617,6 @@ QSet<QString> ConfigParser::getQtPathesFromTargets() {
return res; return res;
} }
QtMajorVersion ConfigParser::isNeededQt() const {
auto Qt = QtMajorVersion::NoQt;
for (const auto &i: _config.targets()) {
if (i.isValid()) {
Qt = Qt | i.isDependetOfQt();
}
}
return Qt;
}
void ConfigParser::setTargetDir(const QString &target) { void ConfigParser::setTargetDir(const QString &target) {
if (QuasarAppUtils::Params::isEndable("targetDir")) { if (QuasarAppUtils::Params::isEndable("targetDir")) {
@ -921,7 +909,7 @@ bool ConfigParser::initQmakePrivate(const QString &qmake) {
bool ConfigParser::initQmake() { bool ConfigParser::initQmake() {
if (!isNeededQt()) { if (!_config.isNeededQt()) {
QuasarAppUtils::Params::log("deploy only C/C++ libraryes because a qmake is not needed" QuasarAppUtils::Params::log("deploy only C/C++ libraryes because a qmake is not needed"
" for the distribution", " for the distribution",
QuasarAppUtils::Info); QuasarAppUtils::Info);
@ -1029,7 +1017,7 @@ bool ConfigParser::setQmake(const QString &value) {
} }
} }
_config.qtDir.setQtVersion(isNeededQt()); _config.qtDir.setQtVersion(_config.isNeededQt());
_config.envirement.addEnv(_config.qtDir.getLibs()); _config.envirement.addEnv(_config.qtDir.getLibs());
_config.envirement.addEnv(_config.qtDir.getBins()); _config.envirement.addEnv(_config.qtDir.getBins());
@ -1095,7 +1083,7 @@ bool ConfigParser::setQtDir(const QString &value) {
_config.qtDir.setQtPlatform(Platform::Win); _config.qtDir.setQtPlatform(Platform::Win);
#endif #endif
_config.qtDir.setQtVersion(isNeededQt()); _config.qtDir.setQtVersion(_config.isNeededQt());
_config.envirement.addEnv(_config.qtDir.getLibs()); _config.envirement.addEnv(_config.qtDir.getLibs());
_config.envirement.addEnv(_config.qtDir.getBins()); _config.envirement.addEnv(_config.qtDir.getBins());
@ -1164,7 +1152,7 @@ void ConfigParser::initExtraNames() {
* We need to add to extra names libraries without which qt will not work, * We need to add to extra names libraries without which qt will not work,
* *
*/ */
if (isNeededQt()) { if (_config.isNeededQt()) {
auto libs = DeployCore::Qt3rdpartyLibs( _config.getPlatformOfAll()); auto libs = DeployCore::Qt3rdpartyLibs( _config.getPlatformOfAll());
deployExtraNames(libs); deployExtraNames(libs);
} }

@ -106,7 +106,6 @@ private:
iDistribution* getDistribution(); iDistribution* getDistribution();
QtMajorVersion isNeededQt() const;
}; };
#endif // CQT_H #endif // CQT_H

@ -80,6 +80,32 @@ Platform DeployConfig::getPlatformOfAll() const {
return result; return result;
} }
QtMajorVersion DeployConfig::isNeededQt() const {
auto Qt = QtMajorVersion::NoQt;
for (const auto &i: targets()) {
if (i.isValid()) {
Qt = Qt | i.isDependetOfQt();
}
}
return Qt;
}
QtMajorVersion DeployConfig::isNeededQt(const QString &pacakge) const {
const auto targetsKeys = packages().value(pacakge).targets();
auto Qt = QtMajorVersion::NoQt;
for (const auto &i: targetsKeys) {
auto target = targets().value(i);
if (target.isValid()) {
Qt = Qt | target.isDependetOfQt();
}
}
return Qt;
}
const QHash<QString, TargetInfo> &DeployConfig::targets() const { const QHash<QString, TargetInfo> &DeployConfig::targets() const {
return _targets; return _targets;
} }

@ -105,6 +105,20 @@ public:
*/ */
Platform getPlatformOfAll() const; Platform getPlatformOfAll() const;
/**
* @brief isNeededQt This method return all needed qt major version for all targets.
* @return qt major version
*/
QtMajorVersion isNeededQt() const;
/**
* @brief isNeededQt This method return all needed qt major versions for the @a pacakge.
* @param pacakge This is validation pacakge.
* @return qt major version
*/
QtMajorVersion isNeededQt(const QString& pacakge) const;
private: private:
/** /**

@ -416,7 +416,7 @@ bool Extracter::extractQmlFromSource() {
continue; continue;
} }
QML ownQmlScaner(cnf->qtDir.getQmls()); QML ownQmlScaner(cnf->qtDir.getQmls(), cnf->isNeededQt(i.key()));
if (!ownQmlScaner.scan(plugins, info.absoluteFilePath())) { if (!ownQmlScaner.scan(plugins, info.absoluteFilePath())) {
QuasarAppUtils::Params::log("qml scaner run failed!", QuasarAppUtils::Params::log("qml scaner run failed!",

@ -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" || (_qtVersion & QtMajorVersion::Qt6)) {
// qt6
result << (list[1].replace(".", "/"));
return result;
}
// 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,12 +176,32 @@ 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) { void QML::setQtVersion(const QtMajorVersion &qtVersion) {
_qtVersion = qtVersion;
}
QML::QML(const QString &qmlRoot, QtMajorVersion qtVersion) {
_qmlRoot = qmlRoot; _qmlRoot = qmlRoot;
setQtVersion(qtVersion);
} }

@ -11,11 +11,12 @@
#include <QSet> #include <QSet>
#include <QStringList> #include <QStringList>
#include "deploy_global.h" #include "deploy_global.h"
#include "deploycore.h"
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,15 +24,19 @@ 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;
QtMajorVersion _qtVersion = QtMajorVersion::Qt5;
QStringList extractImportLine(const QString &line) const;
public: public:
QML(const QString& qmlRoot); QML(const QString& qmlRoot, QtMajorVersion isQt6);
bool scan(QStringList &res, const QString &_qmlProjectDir); bool scan(QStringList &res, const QString &_qmlProjectDir);
void setQtVersion(const QtMajorVersion &qtVersion);
friend class deploytest; friend class deploytest;
}; };

@ -36,6 +36,7 @@ SOURCES += tst_deploytest.cpp \
modulesqt513.cpp \ modulesqt513.cpp \
modulesqt514.cpp \ modulesqt514.cpp \
modulesqt515.cpp \ modulesqt515.cpp \
modulesqt5152.cpp \
qmlcreator.cpp \ qmlcreator.cpp \
testutils.cpp testutils.cpp
@ -49,6 +50,7 @@ HEADERS += \
modulesqt513.h \ modulesqt513.h \
modulesqt514.h \ modulesqt514.h \
modulesqt515.h \ modulesqt515.h \
modulesqt5152.h \
qmlcreator.h \ qmlcreator.h \
testutils.h testutils.h

@ -12,7 +12,11 @@
#include <configparser.h> #include <configparser.h>
#include <QSet> #include <QSet>
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 2)
#include "modulesqt5152.h"
class Modules : public ModulesQt5152
#elif QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
#include "modulesqt515.h" #include "modulesqt515.h"
class Modules : public ModulesQt515 class Modules : public ModulesQt515

@ -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({
@ -1342,7 +1345,10 @@ QSet<QString> ModulesQt513::qmlVirtualKeyBoadrLibs(const QString &distDir) const
"./" + distDir + "/qml/QtQuick/VirtualKeyboard/Styles/qtquickvirtualkeyboardstylesplugin.dll", "./" + distDir + "/qml/QtQuick/VirtualKeyboard/Styles/qtquickvirtualkeyboardstylesplugin.dll",
"./" + 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;

@ -210,6 +210,7 @@ QSet<QString> ModulesQt515::testOutLibs(const QString &distDir) const {
"./" + distDir + "/lolTr/qtdeclarative_tr.qm", "./" + distDir + "/lolTr/qtdeclarative_tr.qm",
"./" + distDir + "/lolTr/qtbase_tr.qm", "./" + distDir + "/lolTr/qtbase_tr.qm",
}); });
#else #else
res += utils.createTree({ res += utils.createTree({
@ -235,6 +236,7 @@ QSet<QString> ModulesQt515::testOutLibs(const QString &distDir) const {
"./" + distDir + "/q/QtQuick/Controls.2/designer/InsetSection.qml", "./" + distDir + "/q/QtQuick/Controls.2/designer/InsetSection.qml",
"./" + distDir + "/lolTr/qtdeclarative_tr.qm", "./" + distDir + "/lolTr/qtdeclarative_tr.qm",
"./" + distDir + "/lolTr/qtbase_tr.qm", "./" + distDir + "/lolTr/qtbase_tr.qm",
}); });
res -= utils.createTree({ res -= utils.createTree({

162
UnitTests/modulesqt5152.cpp Normal file

@ -0,0 +1,162 @@
#include "modulesqt5152.h"
ModulesQt5152::ModulesQt5152()
{
}
QSet<QString> ModulesQt5152::qmlLibs(const QString &distDir) const {
TestUtils utils;
auto res = ModulesQt515::qmlLibs(distDir);
#ifdef Q_OS_WIN
res += utils.createTree({
"./" + distDir + "/qml/QtQml/WorkerScript.2/qmldir",
"./" + distDir + "/qml/QtQml/qmldir",
"./" + distDir + "/qml/QtQml/qmlplugin.dll",
"./" + distDir + "/qml/QtQml/RemoteObjects/plugins.qmltypes",
"./" + distDir + "/qml/QtQml/RemoteObjects/qtqmlremoteobjects.dll",
"./" + distDir + "/qml/QtQml/StateMachine/qtqmlstatemachine.dll",
"./" + distDir + "/qml/QtQml/Models.2/modelsplugin.dll",
"./" + distDir + "/lib/Qt5RemoteObjects.dll",
"./" + distDir + "/qml/QtQml/Models.2/qmldir",
"./" + distDir + "/qml/QtQml/WorkerScript.2/plugins.qmltypes",
"./" + distDir + "/qml/QtQml/RemoteObjects/qmldir",
"./" + distDir + "/qml/QtQml/Models.2/plugins.qmltypes",
"./" + distDir + "/qml/QtQml/plugins.qmltypes",
"./" + distDir + "/qml/QtQml/StateMachine/plugins.qmltypes",
"./" + distDir + "/qml/QtQml/WorkerScript.2/workerscriptplugin.dll",
"./" + distDir + "/qml/QtQml/StateMachine/qmldir",
});
#else
res += utils.createTree({
"./" + distDir + "/qml/QtQml/WorkerScript.2/qmldir",
"./" + distDir + "/qml/QtQml/qmldir",
"./" + distDir + "/qml/QtQml/libqmlplugin.so",
"./" + distDir + "/qml/QtQml/RemoteObjects/plugins.qmltypes",
"./" + distDir + "/qml/QtQml/RemoteObjects/libqtqmlremoteobjects.so",
"./" + distDir + "/qml/QtQml/StateMachine/libqtqmlstatemachine.so",
"./" + distDir + "/qml/QtQml/Models.2/libmodelsplugin.so",
"./" + distDir + "/lib/libQt5RemoteObjects.so",
"./" + distDir + "/qml/QtQml/Models.2/qmldir",
"./" + distDir + "/qml/QtQml/WorkerScript.2/plugins.qmltypes",
"./" + distDir + "/qml/QtQml/RemoteObjects/qmldir",
"./" + distDir + "/qml/QtQml/Models.2/plugins.qmltypes",
"./" + distDir + "/qml/QtQml/plugins.qmltypes",
"./" + distDir + "/qml/QtQml/StateMachine/plugins.qmltypes",
"./" + distDir + "/qml/QtQml/WorkerScript.2/libworkerscriptplugin.so",
"./" + distDir + "/qml/QtQml/StateMachine/qmldir",
});
#endif
return res;
}
QSet<QString> ModulesQt5152::testDistroLibs(const QString &distDir) const {
TestUtils utils;
auto res = ModulesQt515::testDistroLibs(distDir);
#ifdef Q_OS_WIN
res += utils.createTree({
"./" + distDir + "/package2/ZzZ/Qt5RemoteObjects.dll",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/Models.2/modelsplugin.dll",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/Models.2/plugins.qmltypes",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/Models.2/qmldir",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/RemoteObjects/qtqmlremoteobjects.dll",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/RemoteObjects/plugins.qmltypes",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/RemoteObjects/qmldir",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/StateMachine/qtqmlstatemachine.dll",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/StateMachine/plugins.qmltypes",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/StateMachine/qmldir",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/WorkerScript.2/workerscriptplugin.dll",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/WorkerScript.2/plugins.qmltypes",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/WorkerScript.2/qmldir",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/qmlplugin.dll",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/plugins.qmltypes",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/qmldir",
});
#else
res += utils.createTree({
"./" + distDir + "/package2/ZzZ/lib/libQt5RemoteObjects.so",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/Models.2/libmodelsplugin.so",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/Models.2/plugins.qmltypes",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/Models.2/qmldir",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/RemoteObjects/libqtqmlremoteobjects.so",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/RemoteObjects/plugins.qmltypes",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/RemoteObjects/qmldir",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/StateMachine/libqtqmlstatemachine.so",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/StateMachine/plugins.qmltypes",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/StateMachine/qmldir",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/WorkerScript.2/libworkerscriptplugin.so",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/WorkerScript.2/plugins.qmltypes",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/WorkerScript.2/qmldir",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/libqmlplugin.so",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/plugins.qmltypes",
"./" + distDir + "/package2/ZzZ/q/and/q/QtQml/qmldir",
});
#endif
return res;
}
QSet<QString> ModulesQt5152::testOutLibs(const QString &distDir) const {
TestUtils utils;
auto res = ModulesQt515::testOutLibs(distDir);
#ifdef Q_OS_WIN
res += utils.createTree({
"./" + distDir + "/lolLib/Qt5RemoteObjects.dll",
"./" + distDir + "/q/QtQml/Models.2/modelsplugin.dll",
"./" + distDir + "/q/QtQml/Models.2/plugins.qmltypes",
"./" + distDir + "/q/QtQml/Models.2/qmldir",
"./" + distDir + "/q/QtQml/RemoteObjects/qtqmlremoteobjects.dll",
"./" + distDir + "/q/QtQml/RemoteObjects/plugins.qmltypes",
"./" + distDir + "/q/QtQml/RemoteObjects/qmldir",
"./" + distDir + "/q/QtQml/StateMachine/qtqmlstatemachine.dll",
"./" + distDir + "/q/QtQml/StateMachine/plugins.qmltypes",
"./" + distDir + "/q/QtQml/StateMachine/qmldir",
"./" + distDir + "/q/QtQml/WorkerScript.2/workerscriptplugin.dll",
"./" + distDir + "/q/QtQml/WorkerScript.2/plugins.qmltypes",
"./" + distDir + "/q/QtQml/WorkerScript.2/qmldir",
"./" + distDir + "/q/QtQml/qmlplugin.dll",
"./" + distDir + "/q/QtQml/plugins.qmltypes",
"./" + distDir + "/q/QtQml/qmldir",
});
#else
res += utils.createTree({
"./" + distDir + "/lolLib/libQt5RemoteObjects.so",
"./" + distDir + "/q/QtQml/Models.2/libmodelsplugin.so",
"./" + distDir + "/q/QtQml/Models.2/plugins.qmltypes",
"./" + distDir + "/q/QtQml/Models.2/qmldir",
"./" + distDir + "/q/QtQml/RemoteObjects/libqtqmlremoteobjects.so",
"./" + distDir + "/q/QtQml/RemoteObjects/plugins.qmltypes",
"./" + distDir + "/q/QtQml/RemoteObjects/qmldir",
"./" + distDir + "/q/QtQml/StateMachine/libqtqmlstatemachine.so",
"./" + distDir + "/q/QtQml/StateMachine/plugins.qmltypes",
"./" + distDir + "/q/QtQml/StateMachine/qmldir",
"./" + distDir + "/q/QtQml/WorkerScript.2/libworkerscriptplugin.so",
"./" + distDir + "/q/QtQml/WorkerScript.2/plugins.qmltypes",
"./" + distDir + "/q/QtQml/WorkerScript.2/qmldir",
"./" + distDir + "/q/QtQml/libqmlplugin.so",
"./" + distDir + "/q/QtQml/plugins.qmltypes",
"./" + distDir + "/q/QtQml/qmldir",
});
#endif
return res;
}

18
UnitTests/modulesqt5152.h Normal file

@ -0,0 +1,18 @@
#ifndef MODULESQT5152_H
#define MODULESQT5152_H
#include "modulesqt515.h"
class ModulesQt5152: public ModulesQt515
{
public:
ModulesQt5152();
// ModulesQt513 interface
public:
QSet<QString> qmlLibs(const QString &distDir = DISTRO_DIR) const override;
QSet<QString> testDistroLibs(const QString &distDir = DISTRO_DIR) const override;
QSet<QString> testOutLibs(const QString &distDir = DISTRO_DIR) const override;
};
#endif // MODULESQT5152_H

@ -13,6 +13,7 @@
<file alias="win64msvc.dll">testRes/win64/msvc/lib.dll</file> <file alias="win64msvc.dll">testRes/win64/msvc/lib.dll</file>
<file alias="qmlFile.qml">testRes/qml/Scene</file> <file alias="qmlFile.qml">testRes/qml/Scene</file>
<file alias="qmlFileQt6.qml">testRes/qml/SceneQt6</file> <file alias="qmlFileQt6.qml">testRes/qml/SceneQt6</file>
<file alias="qmlDir">testRes/qml/qmldir</file>
</qresource> </qresource>
<qresource prefix="/testResurces"> <qresource prefix="/testResurces">
<file>testRes/TestQMLWidgets.sh</file> <file>testRes/TestQMLWidgets.sh</file>

@ -0,0 +1,10 @@
module QtQuick.VirtualKeyboard
plugin qtquickvirtualkeyboardplugin
classname QtQuickVirtualKeyboardPlugin
typeinfo plugins.qmltypes
depends QtQuick 2.0
depends QtQuick.Window 2.2
depends QtQuick.Layouts 1.0
depends Qt.labs.folderlistmodel 2.1
depends QtQuick.VirtualKeyboard.Settings 2.2
depends QtQuick.VirtualKeyboard.Styles 2.2

@ -678,7 +678,7 @@ void deploytest::testQmlScaner() {
// qt5 // qt5
auto qmlRoot = QFileInfo(TestQtDir + "/qml").absoluteFilePath(); auto qmlRoot = QFileInfo(TestQtDir + "/qml").absoluteFilePath();
QML *scaner = new QML(qmlRoot); QML *scaner = new QML(qmlRoot, QtMajorVersion::Qt5);
auto imports = scaner->extractImportsFromFile(":/qmlFile.qml"); auto imports = scaner->extractImportsFromFile(":/qmlFile.qml");
scaner->scanQmlTree(qmlRoot); scaner->scanQmlTree(qmlRoot);
@ -692,12 +692,14 @@ void deploytest::testQmlScaner() {
QVERIFY(results.size() == imports.size()); QVERIFY(results.size() == imports.size());
for (auto import: imports) { for (const auto &import: qAsConst(imports)) {
auto path = scaner->getPathFromImport(import); auto path = scaner->getPathFromImport(import);
QVERIFY(results.contains(path)); QVERIFY(results.contains(path));
} }
scaner->setQtVersion(QtMajorVersion::Qt6);
// qt6 // qt6
results = { results = {
@ -711,7 +713,58 @@ void deploytest::testQmlScaner() {
QVERIFY(results.size() == imports.size()); QVERIFY(results.size() == imports.size());
for (auto import: imports) { for (const auto &import: qAsConst(imports)) {
auto path = scaner->getPathFromImport(import);
QVERIFY(results.contains(path));
}
imports = scaner->extractImportsFromFile(":/qmlFile.qml");
QVERIFY(results.size() == imports.size());
for (const auto & import: qAsConst(imports)) {
auto path = scaner->getPathFromImport(import);
QVERIFY(results.contains(path));
}
// qt5
scaner->setQtVersion(QtMajorVersion::Qt5);
results = {
{qmlRoot + "/QtQuick.2/"},
{qmlRoot + "/QtQuick/Window.2/"},
{qmlRoot + "/QtQuick/Layouts/"},
{qmlRoot + "/Qt/labs/folderlistmodel/"},
{qmlRoot + "/QtQuick/VirtualKeyboard/Settings/"},
{qmlRoot + "/QtQuick/VirtualKeyboard/Styles/"},
};
imports = scaner->extractImportsFromQmlModule(":/qmlDir");
QVERIFY(results.size() == imports.size());
for (const auto &import: qAsConst(imports)) {
auto path = scaner->getPathFromImport(import);
QVERIFY(results.contains(path));
}
// qt6
scaner->setQtVersion(QtMajorVersion::Qt6);
results = {
{qmlRoot + "/QtQuick"},
{qmlRoot + "/QtQuick/Window"},
{qmlRoot + "/QtQuick/Layouts"},
{qmlRoot + "/Qt/labs/folderlistmodel"},
{qmlRoot + "/QtQuick/VirtualKeyboard/Settings"},
{qmlRoot + "/QtQuick/VirtualKeyboard/Styles"},
};
imports = scaner->extractImportsFromQmlModule(":/qmlDir");
QVERIFY(results.size() == imports.size());
for (const auto &import: qAsConst(imports)) {
auto path = scaner->getPathFromImport(import); auto path = scaner->getPathFromImport(import);
QVERIFY(results.contains(path)); QVERIFY(results.contains(path));
} }
@ -730,7 +783,7 @@ void deploytest::testVirtualKeyBoard() {
#endif #endif
auto comapareTree = TestModule.qmlVirtualKeyBoadrLibs(); auto comapareTree = TestModule.qmlVirtualKeyBoadrLibs();
runTestParams({"-bin", bin, "clear" , runTestParams({"-bin", bin, "clear",
"-qmake", qmake, "-qmake", qmake,
"-qmlDir", TestBinDir + "/../virtualkeyboard"}, &comapareTree); "-qmlDir", TestBinDir + "/../virtualkeyboard"}, &comapareTree);
} }
@ -742,7 +795,7 @@ void deploytest::testQmlExtrct() {
auto qmlFiles = creator.getCopyedQml(); auto qmlFiles = creator.getCopyedQml();
QML scaner("./"); QML scaner("./", QtMajorVersion::Qt5);
for (const auto &file : qmlFiles) { for (const auto &file : qmlFiles) {