From 75071b1464ea02afbd7ace553d5b2740a7d8b13c Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 21 Feb 2023 16:17:17 +0100 Subject: [PATCH] Qnx: Improve reading installed configuration for remote build devices Simplify the code in the process. In fact, looks like this was not doing much except setting the name and version number, which are not even really needed for building. Change-Id: Iafa65f0e2a0708888d1fc4ca19c932560ee4af68 Reviewed-by: Christian Stenger --- src/plugins/qnx/qnxconfiguration.cpp | 52 +++++++++++++------ src/plugins/qnx/qnxconfigurationmanager.cpp | 1 - src/plugins/qnx/qnxsettingspage.cpp | 3 +- src/plugins/qnx/qnxutils.cpp | 56 --------------------- src/plugins/qnx/qnxutils.h | 20 +------- 5 files changed, 39 insertions(+), 93 deletions(-) diff --git a/src/plugins/qnx/qnxconfiguration.cpp b/src/plugins/qnx/qnxconfiguration.cpp index 57bac90106b..8e8751ceb1d 100644 --- a/src/plugins/qnx/qnxconfiguration.cpp +++ b/src/plugins/qnx/qnxconfiguration.cpp @@ -27,13 +27,11 @@ #include #include -#include #include #include -#include +#include #include -#include using namespace ProjectExplorer; using namespace QtSupport; @@ -194,7 +192,7 @@ FilePath QnxConfiguration::sdpPath() const QnxQtVersion *QnxConfiguration::qnxQtVersion(const Target &target) const { - const QtVersions versions = QtVersionManager::instance()->versions( + const QtVersions versions = QtVersionManager::versions( Utils::equal(&QtVersion::type, QString::fromLatin1(Constants::QNX_QNX_QT))); for (QtVersion *version : versions) { auto qnxQt = dynamic_cast(version); @@ -336,19 +334,43 @@ void QnxConfiguration::setVersion(const QnxVersionNumber &version) void QnxConfiguration::readInformation() { - const QString qConfigPath = m_qnxConfiguration.pathAppended("qconfig").toString(); - const QList installInfoList = QnxUtils::installedConfigs(qConfigPath); - if (installInfoList.isEmpty()) + const FilePath configPath = m_qnxConfiguration / "qconfig"; + if (!configPath.isDir()) return; - for (const ConfigInstallInformation &info : installInfoList) { - if (m_qnxHost == FilePath::fromString(info.host).canonicalPath() - && m_qnxTarget == FilePath::fromString(info.target).canonicalPath()) { - m_configName = info.name; - setVersion(QnxVersionNumber(info.version)); - break; - } - } + configPath.iterateDirectory([this, configPath](const FilePath &sdpFile) { + QFile xmlFile(sdpFile.toFSPathString()); + if (!xmlFile.open(QIODevice::ReadOnly)) + return IterationPolicy::Continue; + + QDomDocument doc; + if (!doc.setContent(&xmlFile)) // Skip error message + return IterationPolicy::Continue; + + QDomElement docElt = doc.documentElement(); + if (docElt.tagName() != QLatin1String("qnxSystemDefinition")) + return IterationPolicy::Continue; + + QDomElement childElt = docElt.firstChildElement(QLatin1String("installation")); + // The file contains only one installation node + if (childElt.isNull()) // The file contains only one base node + return IterationPolicy::Continue; + + FilePath host = configPath.withNewPath( + childElt.firstChildElement(QLatin1String("host")).text()).canonicalPath(); + if (m_qnxHost != host) + return IterationPolicy::Continue; + + FilePath target = configPath.withNewPath( + childElt.firstChildElement(QLatin1String("target")).text()).canonicalPath(); + if (m_qnxTarget != target) + return IterationPolicy::Continue; + + m_configName = childElt.firstChildElement(QLatin1String("name")).text(); + QString version = childElt.firstChildElement(QLatin1String("version")).text(); + setVersion(QnxVersionNumber(version)); + return IterationPolicy::Stop; + }, {{"*.xml"}, QDir::Files}); } void QnxConfiguration::setDefaultConfiguration(const FilePath &envScript) diff --git a/src/plugins/qnx/qnxconfigurationmanager.cpp b/src/plugins/qnx/qnxconfigurationmanager.cpp index 7f8ed764b10..f947d4a6e25 100644 --- a/src/plugins/qnx/qnxconfigurationmanager.cpp +++ b/src/plugins/qnx/qnxconfigurationmanager.cpp @@ -99,7 +99,6 @@ void QnxConfigurationManager::saveConfigs() ++count; } - data.insert(QLatin1String(QNXConfigCountKey), count); m_writer->save(data, Core::ICore::dialogParent()); } diff --git a/src/plugins/qnx/qnxsettingspage.cpp b/src/plugins/qnx/qnxsettingspage.cpp index daaa03b6f90..e809ca876f7 100644 --- a/src/plugins/qnx/qnxsettingspage.cpp +++ b/src/plugins/qnx/qnxsettingspage.cpp @@ -130,8 +130,7 @@ void QnxSettingsWidget::addConfiguration() return; QnxConfiguration *config = new QnxConfiguration(envFile); - if (m_qnxConfigManager->configurations().contains(config) - || !config->isValid()) { + if (m_qnxConfigManager->configurations().contains(config) || !config->isValid()) { QMessageBox::warning(Core::ICore::dialogParent(), Tr::tr("Warning"), Tr::tr("Configuration already exists or is invalid.")); diff --git a/src/plugins/qnx/qnxutils.cpp b/src/plugins/qnx/qnxutils.cpp index 3e0f5106cec..d38fb976d89 100644 --- a/src/plugins/qnx/qnxutils.cpp +++ b/src/plugins/qnx/qnxutils.cpp @@ -10,9 +10,6 @@ #include #include -#include -#include -#include #include #include @@ -139,59 +136,6 @@ FilePath QnxUtils::envFilePath(const FilePath &sdpPath) return {}; } -QString QnxUtils::defaultTargetVersion(const QString &sdpPath) -{ - const QList configs = installedConfigs(); - for (const ConfigInstallInformation &sdpInfo : configs) { - if (!sdpInfo.path.compare(sdpPath, HostOsInfo::fileNameCaseSensitivity())) - return sdpInfo.version; - } - - return QString(); -} - -QList QnxUtils::installedConfigs(const QString &configPath) -{ - QList sdpList; - QString sdpConfigPath = configPath; - - if (!QDir(sdpConfigPath).exists()) - return sdpList; - - const QFileInfoList sdpfileList - = QDir(sdpConfigPath).entryInfoList(QStringList{"*.xml"}, QDir::Files, QDir::Time); - for (const QFileInfo &sdpFile : sdpfileList) { - QFile xmlFile(sdpFile.absoluteFilePath()); - if (!xmlFile.open(QIODevice::ReadOnly)) - continue; - - QDomDocument doc; - if (!doc.setContent(&xmlFile)) // Skip error message - continue; - - QDomElement docElt = doc.documentElement(); - if (docElt.tagName() != QLatin1String("qnxSystemDefinition")) - continue; - - QDomElement childElt = docElt.firstChildElement(QLatin1String("installation")); - // The file contains only one installation node - if (!childElt.isNull()) { - // The file contains only one base node - ConfigInstallInformation sdpInfo; - sdpInfo.path = childElt.firstChildElement(QLatin1String("base")).text(); - sdpInfo.name = childElt.firstChildElement(QLatin1String("name")).text(); - sdpInfo.host = childElt.firstChildElement(QLatin1String("host")).text(); - sdpInfo.target = childElt.firstChildElement(QLatin1String("target")).text(); - sdpInfo.version = childElt.firstChildElement(QLatin1String("version")).text(); - sdpInfo.installationXmlFilePath = sdpFile.absoluteFilePath(); - - sdpList.append(sdpInfo); - } - } - - return sdpList; -} - EnvironmentItems QnxUtils::qnxEnvironment(const FilePath &sdpPath) { return qnxEnvironmentFromEnvFile(envFilePath(sdpPath)); diff --git a/src/plugins/qnx/qnxutils.h b/src/plugins/qnx/qnxutils.h index ab108f72051..152d1d96ade 100644 --- a/src/plugins/qnx/qnxutils.h +++ b/src/plugins/qnx/qnxutils.h @@ -3,30 +3,14 @@ #pragma once -#include "qnxconstants.h" - #include #include #include -#include +#include namespace Qnx::Internal { -class ConfigInstallInformation -{ -public: - QString path; - QString name; - QString host; - QString target; - QString version; - QString installationXmlFilePath; - - bool isValid() { return !path.isEmpty() && !name.isEmpty() && !host.isEmpty() - && !target.isEmpty() && !version.isEmpty() && !installationXmlFilePath.isEmpty(); } -}; - class QnxTarget { public: @@ -45,8 +29,6 @@ public: static QString cpuDirShortDescription(const QString &cpuDir); static Utils::EnvironmentItems qnxEnvironmentFromEnvFile(const Utils::FilePath &filePath); static Utils::FilePath envFilePath(const Utils::FilePath &sdpPath); - static QString defaultTargetVersion(const QString &sdpPath); - static QList installedConfigs(const QString &configPath = QString()); static Utils::EnvironmentItems qnxEnvironment(const Utils::FilePath &sdpPath); static QList findTargets(const Utils::FilePath &basePath); static ProjectExplorer::Abi convertAbi(const ProjectExplorer::Abi &abi);