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);