From 9dd528f52d4c28bb9b523886e5414f1aab1a5142 Mon Sep 17 00:00:00 2001 From: EndrII Date: Fri, 28 Oct 2022 23:49:10 +0300 Subject: [PATCH 1/2] ref #712 the dynamic detection qt version and qt platform propertyes --- src/Deploy/src/configparser.cpp | 36 ++++++++------------------------- src/Deploy/src/qtdir.cpp | 34 ++++++++++++++++++++++--------- src/Deploy/src/qtdir.h | 6 ++---- 3 files changed, 35 insertions(+), 41 deletions(-) diff --git a/src/Deploy/src/configparser.cpp b/src/Deploy/src/configparser.cpp index 6b3b119..3bfc443 100644 --- a/src/Deploy/src/configparser.cpp +++ b/src/Deploy/src/configparser.cpp @@ -1265,19 +1265,9 @@ bool ConfigParser::setQmake(const QString &value) { _config.qtDir.setTranslations(getPathFrmoQmakeLine(value)); } else if (value.contains("QT_INSTALL_DATA")) { _config.qtDir.setResources(getPathFrmoQmakeLine(value) + "/resources"); - } else if (value.contains("QMAKE_XSPEC")) { - auto val = value.split(':').value(1); - - if (val.contains("win32")) { - _config.qtDir.setQtPlatform(Platform::Win); - } else { - _config.qtDir.setQtPlatform(Platform::Unix); - } } } - _config.qtDir.setQtVersion(_config.isNeededQt()); - _config.envirement.addEnv(_config.qtDir.getLibs()); _config.envirement.addEnv(_config.qtDir.getBins()); @@ -1312,16 +1302,15 @@ bool ConfigParser::setQtDir(const QString &value) { _config.qtDir.setPlugins(info.absoluteFilePath() + ("/plugins")); } -#ifdef Q_OS_UNIX - if (!QFile::exists(info.absoluteFilePath() + ("/libexec"))) { - QuasarAppUtils::Params::log("get qt libexec failed!", QuasarAppUtils::Debug); - } else { - _config.qtDir.setLibexecs(info.absoluteFilePath() + ("/libexec")); + if (_config.qtDir.getQtPlatform() & Unix) { + if (!QFile::exists(info.absoluteFilePath() + ("/libexec"))) { + QuasarAppUtils::Params::log("get qt libexec failed!", QuasarAppUtils::Debug); + } else { + _config.qtDir.setLibexecs(info.absoluteFilePath() + ("/libexec")); + } + } else if (_config.qtDir.getQtPlatform() & Win) { + _config.qtDir.setLibexecs(info.absoluteFilePath() + ("/bin")); } -#endif -#ifdef Q_OS_WIN - _config.qtDir.setLibexecs(info.absoluteFilePath() + ("/bin")); -#endif if (!QFile::exists(info.absoluteFilePath() + ("/translations"))) { QuasarAppUtils::Params::log("get qt translations failed!", QuasarAppUtils::Debug); @@ -1335,15 +1324,6 @@ bool ConfigParser::setQtDir(const QString &value) { _config.qtDir.setResources(info.absoluteFilePath() + ("/resources")); } -#ifdef Q_OS_UNIX - _config.qtDir.setQtPlatform(Platform::Unix); -#endif -#ifdef Q_OS_WIN - _config.qtDir.setQtPlatform(Platform::Win); -#endif - - _config.qtDir.setQtVersion(_config.isNeededQt()); - _config.envirement.addEnv(_config.qtDir.getLibs()); _config.envirement.addEnv(_config.qtDir.getBins()); diff --git a/src/Deploy/src/qtdir.cpp b/src/Deploy/src/qtdir.cpp index 174ab02..1d07e69 100644 --- a/src/Deploy/src/qtdir.cpp +++ b/src/Deploy/src/qtdir.cpp @@ -12,16 +12,24 @@ QtMajorVersion QtDir::getQtVersion() const { return _qtVersion; } -void QtDir::setQtVersion(const QtMajorVersion &qtVersion) { - _qtVersion = qtVersion; -} - QString QtDir::getLibs() const { return libs; } void QtDir::setLibs(const QString &value) { libs = PathUtils::fixPath(value); + + auto qtLibs = QDir(libs).entryList(QDir::Files); + if (qtLibs.contains("libQt4Core.so")) { + _qtVersion = QtMajorVersion::Qt4; + _platform = Unix; + } else if (qtLibs.contains("libQt5Core.so")) { + _qtVersion = QtMajorVersion::Qt5; + _platform = Unix; + } else if (qtLibs.contains("libQt6Core.so")) { + _qtVersion = QtMajorVersion::Qt6; + _platform = Unix; + } } QString QtDir::getBins() const { @@ -30,6 +38,18 @@ QString QtDir::getBins() const { void QtDir::setBins(const QString &value) { bins = PathUtils::fixPath(value); + + auto qtLibs = QDir(bins).entryList(QDir::Files); + if (qtLibs.contains("Qt4Core.dll")) { + _qtVersion = QtMajorVersion::Qt4; + _platform = Win; + } else if (qtLibs.contains("Qt5Core.dll")) { + _qtVersion = QtMajorVersion::Qt5; + _platform = Win; + } else if (qtLibs.contains("Qt6Core.dll")) { + _qtVersion = QtMajorVersion::Qt6; + _platform = Win; + } } QString QtDir::getLibexecs() const { @@ -74,11 +94,7 @@ void QtDir::setResources(const QString &value) { } Platform QtDir::getQtPlatform() const { - return qtPlatform; -} - -void QtDir::setQtPlatform(const Platform &value) { - qtPlatform = value; + return _platform; } bool QtDir::isQt(QString path) const { diff --git a/src/Deploy/src/qtdir.h b/src/Deploy/src/qtdir.h index 8566ace..d7c4a16 100644 --- a/src/Deploy/src/qtdir.h +++ b/src/Deploy/src/qtdir.h @@ -21,9 +21,9 @@ class DEPLOYSHARED_EXPORT QtDir { QString translations; QString resources; - Platform qtPlatform = UnknownPlatform; + Platform _platform = UnknownPlatform; - QtMajorVersion _qtVersion; + QtMajorVersion _qtVersion = NoQt; public: QString getLibs() const; void setLibs(const QString &value); @@ -40,7 +40,6 @@ public: QString getResources() const; void setResources(const QString &value); Platform getQtPlatform() const; - void setQtPlatform(const Platform &value); /** * @brief isQt - This method check a path for belonging to QtDirs. @@ -54,7 +53,6 @@ public: * @return the masjor version of qt */ QtMajorVersion getQtVersion() const; - void setQtVersion(const QtMajorVersion &qtVersion); }; #endif // QTDIR_H From 9de74c7496604ae631924abbbfc7d036cb8fbd46 Mon Sep 17 00:00:00 2001 From: Andrei Yankovich Date: Sat, 29 Oct 2022 18:23:56 +0300 Subject: [PATCH 2/2] Apply suggestions from code review --- src/Deploy/src/qtdir.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Deploy/src/qtdir.cpp b/src/Deploy/src/qtdir.cpp index 1d07e69..2ada807 100644 --- a/src/Deploy/src/qtdir.cpp +++ b/src/Deploy/src/qtdir.cpp @@ -40,13 +40,13 @@ void QtDir::setBins(const QString &value) { bins = PathUtils::fixPath(value); auto qtLibs = QDir(bins).entryList(QDir::Files); - if (qtLibs.contains("Qt4Core.dll")) { + if (qtLibs.contains("Qt4Core.dll", Qt::CaseInsensitive)) { _qtVersion = QtMajorVersion::Qt4; _platform = Win; - } else if (qtLibs.contains("Qt5Core.dll")) { + } else if (qtLibs.contains("Qt5Core.dll", Qt::CaseInsensitive)) { _qtVersion = QtMajorVersion::Qt5; _platform = Win; - } else if (qtLibs.contains("Qt6Core.dll")) { + } else if (qtLibs.contains("Qt6Core.dll", Qt::CaseInsensitive)) { _qtVersion = QtMajorVersion::Qt6; _platform = Win; }