From 93a07e1c6ed31420c19f73c7e1ca4bacf1134a2a Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 30 Sep 2021 18:30:02 +0200 Subject: [PATCH] Mcu: Proliferate FilePath use in McuSupport Change-Id: I0ae8bf1454d1715f251d88065b52e3bb6a242402 Reviewed-by: Christiaan Janssen Reviewed-by: Alessandro Portale --- src/plugins/mcusupport/mcusupportoptions.cpp | 104 +++++++------- src/plugins/mcusupport/mcusupportoptions.h | 14 +- .../mcusupport/mcusupportoptionspage.cpp | 2 +- src/plugins/mcusupport/mcusupportsdk.cpp | 129 +++++++++--------- 4 files changed, 120 insertions(+), 129 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 6fa37d5a83b..ba6107d6fc6 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -72,15 +72,15 @@ namespace Internal { static const int KIT_VERSION = 8; // Bumps up whenever details in Kit creation change -static QString packagePathFromSettings(const QString &settingsKey, - QSettings::Scope scope = QSettings::UserScope, - const QString &defaultPath = {}) +static FilePath packagePathFromSettings(const QString &settingsKey, + QSettings::Scope scope = QSettings::UserScope, + const FilePath &defaultPath = {}) { QSettings *settings = Core::ICore::settings(scope); const QString key = QLatin1String(Constants::SETTINGS_GROUP) + '/' + QLatin1String(Constants::SETTINGS_KEY_PACKAGE_PREFIX) + settingsKey; - const QString path = settings->value(key, defaultPath).toString(); - return FilePath::fromUserInput(path).toString(); + const QString path = settings->value(key, defaultPath.toString()).toString(); + return FilePath::fromUserInput(path); } static bool automaticKitCreationFromSettings(QSettings::Scope scope = QSettings::UserScope) @@ -99,7 +99,7 @@ static bool kitNeedsQtVersion() return !HostOsInfo::isWindowsHost(); } -McuPackage::McuPackage(const QString &label, const QString &defaultPath, +McuPackage::McuPackage(const QString &label, const FilePath &defaultPath, const QString &detectionPath, const QString &settingsKey, const McuPackageVersionDetector *versionDetector) : m_label(label) @@ -112,14 +112,14 @@ McuPackage::McuPackage(const QString &label, const QString &defaultPath, m_automaticKitCreation = automaticKitCreationFromSettings(QSettings::UserScope); } -QString McuPackage::basePath() const +FilePath McuPackage::basePath() const { - return m_fileChooser != nullptr ? m_fileChooser->filePath().toString() : m_path; + return m_fileChooser != nullptr ? m_fileChooser->filePath() : m_path; } -QString McuPackage::path() const +FilePath McuPackage::path() const { - return QFileInfo(basePath() + m_relativePathModifier).absoluteFilePath(); + return basePath().resolvePath(m_relativePathModifier).absoluteFilePath(); } QString McuPackage::label() const @@ -127,7 +127,7 @@ QString McuPackage::label() const return m_label; } -QString McuPackage::defaultPath() const +FilePath McuPackage::defaultPath() const { return m_defaultPath; } @@ -148,7 +148,7 @@ QWidget *McuPackage::widget() Icons::RESET.icon()); m_fileChooser->lineEdit()->setButtonVisible(FancyLineEdit::Right, true); connect(m_fileChooser->lineEdit(), &FancyLineEdit::rightButtonClicked, this, [&] { - m_fileChooser->setPath(m_defaultPath); + m_fileChooser->setFilePath(m_defaultPath); }); auto layout = new QGridLayout(m_widget); @@ -168,7 +168,7 @@ QWidget *McuPackage::widget() layout->addWidget(m_fileChooser, 0, 0, 1, 2); layout->addWidget(m_infoLabel, 1, 0, 1, -1); - m_fileChooser->setPath(m_path); + m_fileChooser->setFilePath(m_path); QObject::connect(this, &McuPackage::statusChanged, this, [this] { updateStatusUi(); @@ -228,7 +228,7 @@ void McuPackage::writeGeneralSettings() const bool McuPackage::writeToSettings() const { - const QString savedPath = packagePathFromSettings(m_settingsKey, QSettings::UserScope, m_defaultPath); + const FilePath savedPath = packagePathFromSettings(m_settingsKey, QSettings::UserScope, m_defaultPath); const QString key = QLatin1String(Constants::SETTINGS_GROUP) + '/' + QLatin1String(Constants::SETTINGS_KEY_PACKAGE_PREFIX) + m_settingsKey; Core::ICore::settings()->setValueWithDefault(key, m_path, m_defaultPath); @@ -258,17 +258,18 @@ void McuPackage::setAutomaticKitCreationEnabled(const bool enabled) void McuPackage::updatePath() { - m_path = m_fileChooser->rawPath(); + m_path = m_fileChooser->rawFilePath(); m_fileChooser->lineEdit()->button(FancyLineEdit::Right)->setEnabled(m_path != m_defaultPath); updateStatus(); } void McuPackage::updateStatus() { - bool validPath = !m_path.isEmpty() && FilePath::fromString(m_path).exists(); - const FilePath detectionPath = FilePath::fromString(basePath() + "/" + m_detectionPath); + bool validPath = !m_path.isEmpty() && m_path.exists(); + const FilePath detectionPath = basePath() / m_detectionPath; const bool validPackage = m_detectionPath.isEmpty() || detectionPath.exists(); - m_detectedVersion = validPath && validPackage && m_versionDetector ? m_versionDetector->parseVersion(basePath()) : QString(); + m_detectedVersion = validPath && validPackage && m_versionDetector + ? m_versionDetector->parseVersion(basePath().toString()) : QString(); const bool validVersion = m_detectedVersion.isEmpty() || m_versions.isEmpty() || m_versions.contains(m_detectedVersion); @@ -293,7 +294,7 @@ void McuPackage::updateStatusUi() QString McuPackage::statusText() const { - const QString displayPackagePath = FilePath::fromString(m_path).toUserOutput(); + const QString displayPackagePath = m_path.toUserOutput(); const QString displayVersions = QStringList(m_versions.toList()).join(" or "); const QString displayRequiredPath = QString("%1 %2").arg( FilePath::fromString(m_detectionPath).toUserOutput(), @@ -339,7 +340,7 @@ QString McuPackage::statusText() const } McuToolChainPackage::McuToolChainPackage(const QString &label, - const QString &defaultPath, + const FilePath &defaultPath, const QString &detectionPath, const QString &settingsKey, McuToolChainPackage::Type type, @@ -447,11 +448,9 @@ ToolChain *McuToolChainPackage::toolChain(Id language) const else { const QLatin1String compilerName( language == ProjectExplorer::Constants::C_LANGUAGE_ID ? "gcc" : "g++"); - const FilePath compiler = FilePath::fromUserInput( - HostOsInfo::withExecutableSuffix( - path() + ( - m_type == TypeArmGcc - ? "/bin/arm-none-eabi-%1" : "/bar/foo-keil-%1")).arg(compilerName)); + const QString comp = QLatin1String(m_type == TypeArmGcc ? "/bin/arm-none-eabi-%1" : "/bar/foo-keil-%1") + .arg(compilerName); + const FilePath compiler = path().pathAppended(comp).withExecutableSuffix(); tc = armGccToolChain(compiler, language); } @@ -479,11 +478,10 @@ QVariant McuToolChainPackage::debuggerId() const { using namespace Debugger; - const FilePath command = FilePath::fromUserInput( - HostOsInfo::withExecutableSuffix(path() + ( - m_type == TypeArmGcc - ? "/bin/arm-none-eabi-gdb-py" : m_type == TypeIAR - ? "../common/bin/CSpyBat" : "/bar/foo-keil-gdb"))); + QString sub = QString::fromLatin1(m_type == TypeArmGcc ? "bin/arm-none-eabi-gdb-py" + : m_type == TypeIAR ? "../common/bin/CSpyBat" : "bar/foo-keil-gdb"); + + const FilePath command = path().pathAppended(sub).withExecutableSuffix(); const DebuggerItem *debugger = DebuggerItemManager::findByCommand(command); QVariant debuggerId; if (!debugger) { @@ -591,7 +589,7 @@ McuSupportOptions::~McuSupportOptions() void McuSupportOptions::populatePackagesAndTargets() { - setQulDir(FilePath::fromUserInput(qtForMCUsSdkPackage->path())); + setQulDir(qtForMCUsSdkPackage->path()); } static FilePath qulDocsDir() @@ -665,13 +663,12 @@ void McuSupportOptions::setQulDir(const FilePath &dir) FilePath McuSupportOptions::qulDirFromSettings() { - return FilePath::fromUserInput( - packagePathFromSettings(Constants::SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK, - QSettings::UserScope)); + return packagePathFromSettings(Constants::SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK, + QSettings::UserScope); } static void setKitProperties(const QString &kitName, Kit *k, const McuTarget *mcuTarget, - const QString &sdkPath) + const FilePath &sdkPath) { using namespace Constants; @@ -688,7 +685,7 @@ static void setKitProperties(const QString &kitName, Kit *k, const McuTarget *mc if (mcuTarget->toolChainPackage()->isDesktopToolchain()) k->setDeviceTypeForIcon(DEVICE_TYPE); k->setValue(QtSupport::SuppliesQtQuickImportPath::id(), true); - k->setValue(QtSupport::KitQmlImportPath::id(), QVariant(sdkPath + "/include/qul")); + k->setValue(QtSupport::KitQmlImportPath::id(), sdkPath.pathAppended("include/qul").toVariant()); k->setValue(QtSupport::KitHasMergedHeaderPathsWithQmlImportPaths::id(), true); QSet irrelevant = { SysRootKitAspect::id(), @@ -750,14 +747,13 @@ static void setKitEnvironment(Kit *k, const McuTarget *mcuTarget, // feature of the run configuration. Otherwise, we just prepend the path, here. if (mcuTarget->toolChainPackage()->isDesktopToolchain() && !CMakeProjectManager::CMakeToolManager::defaultCMakeTool()->hasFileApi()) - pathAdditions.append(QDir::toNativeSeparators(qtForMCUsSdkPackage->path() + "/bin")); + pathAdditions.append(qtForMCUsSdkPackage->path().pathAppended("bin").toUserOutput()); auto processPackage = [&pathAdditions, &changes](const McuPackage *package) { if (package->addToPath()) - pathAdditions.append(QDir::toNativeSeparators(package->path())); + pathAdditions.append(package->path().toUserOutput()); if (!package->environmentVariableName().isEmpty()) - changes.append({package->environmentVariableName(), - QDir::toNativeSeparators(package->path())}); + changes.append({package->environmentVariableName(), package->path().toUserOutput()}); }; for (auto package : mcuTarget->packages()) processPackage(package); @@ -808,7 +804,7 @@ static void updateKitEnvironment(Kit *k, const McuTarget *mcuTarget) return item.name == varName; }); const EnvironmentItem item = {package->environmentVariableName(), - QDir::toNativeSeparators(package->path())}; + package->path().toUserOutput()}; if (index != -1) changes.replace(index, item); else @@ -819,7 +815,7 @@ static void updateKitEnvironment(Kit *k, const McuTarget *mcuTarget) EnvironmentKitAspect::setEnvironmentChanges(k, changes); } -static void setKitCMakeOptions(Kit *k, const McuTarget* mcuTarget, const QString &qulDir) +static void setKitCMakeOptions(Kit *k, const McuTarget* mcuTarget, const FilePath &qulDir) { using namespace CMakeProjectManager; @@ -832,7 +828,7 @@ static void setKitCMakeOptions(Kit *k, const McuTarget* mcuTarget, const QString } if (!mcuTarget->toolChainPackage()->isDesktopToolchain()) { - const FilePath cMakeToolchainFile = FilePath::fromString(qulDir + "/lib/cmake/Qul/toolchain/" + const FilePath cMakeToolchainFile = qulDir.pathAppended("lib/cmake/Qul/toolchain/" + mcuTarget->toolChainPackage()->cmakeToolChainFileName()); config.append(CMakeConfigItem( @@ -844,7 +840,7 @@ static void setKitCMakeOptions(Kit *k, const McuTarget* mcuTarget, const QString } } - const FilePath generatorsPath = FilePath::fromString(qulDir + "/lib/cmake/Qul/QulGenerators.cmake"); + const FilePath generatorsPath = qulDir.pathAppended("/lib/cmake/Qul/QulGenerators.cmake"); config.append(CMakeConfigItem("QUL_GENERATORS", generatorsPath.toString().toUtf8())); if (!generatorsPath.exists()) { @@ -947,7 +943,7 @@ QList McuSupportOptions::kitsWithMismatchedDependencies(const McuTarget * EnvironmentKitAspect::environmentChanges(kit))); return Utils::anyOf(mcuTarget->packages(), [&environment](const McuPackage *package) { return !package->environmentVariableName().isEmpty() && - environment.value(package->environmentVariableName()) != QDir::toNativeSeparators(package->path()); + environment.value(package->environmentVariableName()) != package->path().toUserOutput(); }); }); } @@ -1003,13 +999,13 @@ QVersionNumber McuSupportOptions::kitQulVersion(const Kit *kit) .toString()); } -QString kitDependencyPath(const Kit *kit, const QString &variableName) +static FilePath kitDependencyPath(const Kit *kit, const QString &variableName) { for (const NameValueItem &nameValueItem : EnvironmentKitAspect::environmentChanges(kit)) { if (nameValueItem.name == variableName) - return nameValueItem.value; + return FilePath::fromUserInput(nameValueItem.value); } - return QString(); + return FilePath(); } bool McuSupportOptions::kitUpToDate(const Kit *kit, const McuTarget *mcuTarget, @@ -1052,13 +1048,13 @@ void McuSupportOptions::createAutomaticKits() const QString displayPath = FilePath::fromString(qtForMCUsPackage->detectionPath()) .toUserOutput(); printMessage(tr("Path %1 exists, but does not contain %2.") - .arg(qtForMCUsPackage->path(), displayPath), + .arg(qtForMCUsPackage->path().toUserOutput(), displayPath), true); break; } case McuPackage::InvalidPath: { printMessage(tr("Path %1 does not exist. Add the path in Tools > Options > Devices > MCU.") - .arg(qtForMCUsPackage->path()), + .arg(qtForMCUsPackage->path().toUserOutput()), true); break; } @@ -1079,7 +1075,7 @@ void McuSupportOptions::createAutomaticKits() return; } - auto dir = FilePath::fromUserInput(qtForMCUsPackage->path()); + FilePath dir = qtForMCUsPackage->path(); QVector packages; QVector mcuTargets; Sdk::targetsAndPackages(dir, &packages, &mcuTargets); @@ -1131,7 +1127,7 @@ void McuSupportOptions::upgradeKits(UpgradeOption upgradeOption) auto qtForMCUsPackage = Sdk::createQtForMCUsPackage(); - auto dir = FilePath::fromUserInput(qtForMCUsPackage->path()); + auto dir = qtForMCUsPackage->path(); QVector packages; QVector mcuTargets; Sdk::targetsAndPackages(dir, &packages, &mcuTargets); @@ -1169,7 +1165,7 @@ void McuSupportOptions::fixKitsDependencies() { auto qtForMCUsPackage = Sdk::createQtForMCUsPackage(); - auto dir = FilePath::fromUserInput(qtForMCUsPackage->path()); + FilePath dir = qtForMCUsPackage->path(); QVector packages; QVector mcuTargets; Sdk::targetsAndPackages(dir, &packages, &mcuTargets); @@ -1245,7 +1241,7 @@ void McuSupportOptions::fixExistingKits() auto qtForMCUsPackage = Sdk::createQtForMCUsPackage(); qtForMCUsPackage->updateStatus(); if (qtForMCUsPackage->validStatus()) { - auto dir = FilePath::fromUserInput(qtForMCUsPackage->path()); + FilePath dir = qtForMCUsPackage->path(); QVector packages; QVector mcuTargets; Sdk::targetsAndPackages(dir, &packages, &mcuTargets); diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h index f70722412d7..346c2b9de50 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -66,15 +66,15 @@ public: ValidPackage }; - McuPackage(const QString &label, const QString &defaultPath, + McuPackage(const QString &label, const Utils::FilePath &defaultPath, const QString &detectionPath, const QString &settingsKey, const McuPackageVersionDetector *versionDetector = nullptr); virtual ~McuPackage() = default; - QString basePath() const; - QString path() const; + Utils::FilePath basePath() const; + Utils::FilePath path() const; QString label() const; - QString defaultPath() const; + Utils::FilePath defaultPath() const; QString detectionPath() const; QString statusText() const; void updateStatus(); @@ -110,12 +110,12 @@ private: Utils::InfoLabel *m_infoLabel = nullptr; const QString m_label; - const QString m_defaultPath; + const Utils::FilePath m_defaultPath; const QString m_detectionPath; const QString m_settingsKey; const McuPackageVersionDetector *m_versionDetector; - QString m_path; + Utils::FilePath m_path; QString m_relativePathModifier; // relative path to m_path to be returned by path() QString m_detectedVersion; QVector m_versions; @@ -142,7 +142,7 @@ public: }; McuToolChainPackage(const QString &label, - const QString &defaultPath, + const Utils::FilePath &defaultPath, const QString &detectionPath, const QString &settingsKey, Type type, diff --git a/src/plugins/mcusupport/mcusupportoptionspage.cpp b/src/plugins/mcusupport/mcusupportoptionspage.cpp index 9ccffd63e01..71eff41c246 100644 --- a/src/plugins/mcusupport/mcusupportoptionspage.cpp +++ b/src/plugins/mcusupport/mcusupportoptionspage.cpp @@ -193,7 +193,7 @@ void McuSupportOptionsWidget::updateStatus() m_mcuTargetsInfoLabel->setVisible(valid && m_options.mcuTargets.isEmpty()); if (m_mcuTargetsInfoLabel->isVisible()) { m_mcuTargetsInfoLabel->setType(Utils::InfoLabel::NotOk); - const auto sdkPath = Utils::FilePath::fromString(m_options.qtForMCUsSdkPackage->basePath()); + const Utils::FilePath sdkPath = m_options.qtForMCUsSdkPackage->basePath(); QString deprecationMessage; if (Sdk::checkDeprecatedSdkError(sdkPath, deprecationMessage)) m_mcuTargetsInfoLabel->setText(deprecationMessage); diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index b805b4a91ae..291f0647b29 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -49,15 +49,14 @@ namespace McuSupport { namespace Internal { namespace Sdk { -static QString findInProgramFiles(const QString &folder) +static FilePath findInProgramFiles(const QString &folder) { for (auto envVar : {"ProgramFiles", "ProgramFiles(x86)", "ProgramW6432"}) { if (!qEnvironmentVariableIsSet(envVar)) continue; - const Utils::FilePath dir = - Utils::FilePath::fromUserInput(qEnvironmentVariable(envVar) + "/" + folder); + const FilePath dir = FilePath::fromUserInput(qEnvironmentVariable(envVar)) / folder; if (dir.exists()) - return dir.toString(); + return dir; } return {}; } @@ -66,7 +65,7 @@ McuPackage *createQtForMCUsPackage() { auto result = new McuPackage( McuPackage::tr("Qt for MCUs SDK"), - QDir::homePath(), + FileUtils::homePath(), FilePath("bin/qmltocpp").withExecutableSuffix().toString(), Constants::SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK); result->setEnvironmentVariableName("Qul_DIR"); @@ -92,22 +91,21 @@ static McuToolChainPackage *createArmGccPackage() { const char envVar[] = "ARMGCC_DIR"; - QString defaultPath; + FilePath defaultPath; if (qEnvironmentVariableIsSet(envVar)) - defaultPath = qEnvironmentVariable(envVar); - if (defaultPath.isEmpty() && Utils::HostOsInfo::isWindowsHost()) { - const QDir installDir(findInProgramFiles("/GNU Tools ARM Embedded/")); + defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar)); + if (defaultPath.isEmpty() && HostOsInfo::isWindowsHost()) { + const FilePath installDir = findInProgramFiles("GNU Tools ARM Embedded"); if (installDir.exists()) { // If GNU Tools installation dir has only one sub dir, // select the sub dir, otherwise the installation dir. - const QFileInfoList subDirs = - installDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot); + const FilePaths subDirs = installDir.dirEntries(QDir::Dirs | QDir::NoDotAndDotDot); if (subDirs.count() == 1) - defaultPath = subDirs.first().filePath() + '/'; + defaultPath = subDirs.first(); } } if (defaultPath.isEmpty()) - defaultPath = QDir::homePath(); + defaultPath = FileUtils::homePath(); const QString detectionPath = Utils::HostOsInfo::withExecutableSuffix("bin/arm-none-eabi-g++"); const auto versionDetector = new McuPackageExecutableVersionDetector( @@ -131,8 +129,8 @@ static McuToolChainPackage *createGhsToolchainPackage() { const char envVar[] = "GHS_COMPILER_DIR"; - const QString defaultPath = - qEnvironmentVariableIsSet(envVar) ? qEnvironmentVariable(envVar) : QDir::homePath(); + const FilePath defaultPath = qEnvironmentVariableIsSet(envVar) + ? FilePath::fromUserInput(qEnvironmentVariable(envVar)) : FileUtils::homePath(); const auto versionDetector = new McuPackageExecutableVersionDetector( Utils::HostOsInfo::withExecutableSuffix("as850"), @@ -155,8 +153,8 @@ static McuToolChainPackage *createGhsArmToolchainPackage() { const char envVar[] = "GHS_ARM_COMPILER_DIR"; - const QString defaultPath = - qEnvironmentVariableIsSet(envVar) ? qEnvironmentVariable(envVar) : QDir::homePath(); + const FilePath defaultPath = qEnvironmentVariableIsSet(envVar) + ? FilePath::fromUserInput(qEnvironmentVariable(envVar)) : FileUtils::homePath(); const auto versionDetector = new McuPackageExecutableVersionDetector( Utils::HostOsInfo::withExecutableSuffix("asarm"), @@ -179,20 +177,20 @@ static McuToolChainPackage *createIarToolChainPackage() { const char envVar[] = "IAR_ARM_COMPILER_DIR"; - QString defaultPath; + FilePath defaultPath; if (qEnvironmentVariableIsSet(envVar)) - defaultPath = qEnvironmentVariable(envVar); + defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar)); else { const ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainManager::toolChain([](const ProjectExplorer::ToolChain *t) { return t->typeId() == BareMetal::Constants::IAREW_TOOLCHAIN_TYPEID; }); if (tc) { - const Utils::FilePath compilerExecPath = tc->compilerCommand(); - defaultPath = compilerExecPath.parentDir().parentDir().toString(); + const FilePath compilerExecPath = tc->compilerCommand(); + defaultPath = compilerExecPath.parentDir().parentDir(); } else - defaultPath = QDir::homePath(); + defaultPath = FileUtils::homePath(); } const QString detectionPath = Utils::HostOsInfo::withExecutableSuffix("bin/iccarm"); @@ -217,17 +215,17 @@ static McuPackage *createRGLPackage() { const char envVar[] = "RGL_DIR"; - QString defaultPath; + FilePath defaultPath; if (qEnvironmentVariableIsSet(envVar)) { - defaultPath = qEnvironmentVariable(envVar); + defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar)); } else if (Utils::HostOsInfo::isWindowsHost()) { - defaultPath = QDir::rootPath() + "Renesas_Electronics/D1x_RGL"; - if (QFileInfo::exists(defaultPath)) { - const QFileInfoList subDirs = - QDir(defaultPath).entryInfoList({QLatin1String("rgl_ghs_D1Mx_*")}, + defaultPath = FilePath::fromUserInput(QDir::rootPath() + "Renesas_Electronics/D1x_RGL"); + if (defaultPath.exists()) { + const FilePaths subDirs = + defaultPath.dirEntries({QLatin1String("rgl_ghs_D1Mx_*")}, QDir::Dirs | QDir::NoDotAndDotDot); if (subDirs.count() == 1) - defaultPath = subDirs.first().filePath() + '/'; + defaultPath = subDirs.first(); } } @@ -242,15 +240,15 @@ static McuPackage *createRGLPackage() static McuPackage *createStm32CubeProgrammerPackage() { - QString defaultPath = QDir::homePath(); - const QString cubePath = "/STMicroelectronics/STM32Cube/STM32CubeProgrammer/"; - if (Utils::HostOsInfo::isWindowsHost()) { - const QString programPath = findInProgramFiles(cubePath); + FilePath defaultPath = FileUtils::homePath(); + const QString cubePath = "STMicroelectronics/STM32Cube/STM32CubeProgrammer"; + if (HostOsInfo::isWindowsHost()) { + const FilePath programPath = findInProgramFiles(cubePath); if (!programPath.isEmpty()) defaultPath = programPath; } else { - const QString programPath = QDir::homePath() + cubePath; - if (QFileInfo::exists(programPath)) + const FilePath programPath = FileUtils::homePath() / cubePath; + if (programPath.exists()) defaultPath = programPath; } auto result = new McuPackage( @@ -270,18 +268,18 @@ static McuPackage *createMcuXpressoIdePackage() { const char envVar[] = "MCUXpressoIDE_PATH"; - QString defaultPath; + FilePath defaultPath; if (qEnvironmentVariableIsSet(envVar)) { - defaultPath = qEnvironmentVariable(envVar); - } else if (Utils::HostOsInfo::isWindowsHost()) { - defaultPath = QDir::rootPath() + "nxp"; - if (QFileInfo::exists(defaultPath)) { + defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar)); + } else if (HostOsInfo::isWindowsHost()) { + defaultPath = FilePath::fromString(QDir::rootPath() + "nxp"); + if (defaultPath.exists()) { // If default dir has exactly one sub dir that could be the IDE path, pre-select that. - const QFileInfoList subDirs = - QDir(defaultPath).entryInfoList({QLatin1String("MCUXpressoIDE*")}, + const FilePaths subDirs = + defaultPath.dirEntries({QLatin1String("MCUXpressoIDE*")}, QDir::Dirs | QDir::NoDotAndDotDot); if (subDirs.count() == 1) - defaultPath = subDirs.first().filePath() + '/'; + defaultPath = subDirs.first(); } } else { defaultPath = "/usr/local/mcuxpressoide/"; @@ -301,21 +299,20 @@ static McuPackage *createCypressProgrammerPackage() { const char envVar[] = "CYPRESS_AUTO_FLASH_UTILITY_DIR"; - QString defaultPath; + FilePath defaultPath; if (qEnvironmentVariableIsSet(envVar)) { - defaultPath = qEnvironmentVariable(envVar); - } else if (Utils::HostOsInfo::isWindowsHost()) { - auto candidate = findInProgramFiles(QLatin1String("/Cypress/Cypress Auto Flash Utility 1.0/")); - if (QFileInfo::exists(candidate)) { + defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar)); + } else if (HostOsInfo::isWindowsHost()) { + FilePath candidate = findInProgramFiles("Cypress/Cypress Auto Flash Utility 1.0"); + if (candidate.exists()) { defaultPath = candidate; } } else { - defaultPath = QLatin1String("/usr"); + defaultPath = "/usr"; } - if (defaultPath.isEmpty()) { - defaultPath = QDir::homePath(); - } + if (defaultPath.isEmpty()) + defaultPath = FileUtils::homePath(); auto result = new McuPackage( "Cypress Auto Flash Utility", @@ -378,18 +375,16 @@ static McuPackage *createBoardSdkPackage(const McuTargetDescription& desc) }; const QString sdkName = desc.boardSdkName.isEmpty() ? generateSdkName(desc.boardSdkEnvVar) : desc.boardSdkName; - const QString defaultPath = [&] { + const FilePath defaultPath = [&] { const auto envVar = desc.boardSdkEnvVar.toLatin1(); - if (qEnvironmentVariableIsSet(envVar)) { - return qEnvironmentVariable(envVar); - } + if (qEnvironmentVariableIsSet(envVar)) + return FilePath::fromUserInput(qEnvironmentVariable(envVar)); if (!desc.boardSdkDefaultPath.isEmpty()) { - QString defaultPath = QDir::rootPath() + desc.boardSdkDefaultPath; - if (QFileInfo::exists(defaultPath)) { + FilePath defaultPath = FilePath::fromUserInput(QDir::rootPath() + desc.boardSdkDefaultPath); + if (defaultPath.exists()) return defaultPath; - } } - return QDir::homePath(); + return FileUtils::homePath(); }(); const auto versionDetector = generatePackageVersionDetector(desc.boardSdkEnvVar); @@ -404,18 +399,18 @@ static McuPackage *createBoardSdkPackage(const McuTargetDescription& desc) return result; } -static McuPackage *createFreeRTOSSourcesPackage(const QString &envVar, const QString &boardSdkDir, +static McuPackage *createFreeRTOSSourcesPackage(const QString &envVar, const FilePath &boardSdkDir, const QString &freeRTOSBoardSdkSubDir) { const QString envVarPrefix = envVar.chopped(int(strlen("_FREERTOS_DIR"))); - QString defaultPath; + FilePath defaultPath; if (qEnvironmentVariableIsSet(envVar.toLatin1())) - defaultPath = qEnvironmentVariable(envVar.toLatin1()); + defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar.toLatin1())); else if (!boardSdkDir.isEmpty() && !freeRTOSBoardSdkSubDir.isEmpty()) - defaultPath = boardSdkDir + "/" + freeRTOSBoardSdkSubDir; + defaultPath = boardSdkDir / freeRTOSBoardSdkSubDir; else - defaultPath = QDir::homePath(); + defaultPath = FileUtils::homePath(); auto result = new McuPackage( QString::fromLatin1("FreeRTOS Sources (%1)").arg(envVarPrefix), @@ -473,7 +468,7 @@ protected: if (vendorPkgs.contains(desc.platformVendor)) required3rdPartyPkgs.push_back(vendorPkgs.value(desc.platformVendor)); - QString boardSdkDefaultPath; + FilePath boardSdkDefaultPath; if (!desc.boardSdkEnvVar.isEmpty()) { if (!boardSdkPkgs.contains(desc.boardSdkEnvVar)) { auto boardSdkPkg = desc.boardSdkEnvVar != "RGL_DIR" @@ -551,7 +546,7 @@ protected: required3rdPartyPkgs.push_back(vendorPkgs.value(desc.platformVendor)); // Board SDK specific settings - QString boardSdkDefaultPath; + FilePath boardSdkDefaultPath; if (!desc.boardSdkEnvVar.isEmpty()) { if (!boardSdkPkgs.contains(desc.boardSdkEnvVar)) { auto boardSdkPkg = createBoardSdkPackage(desc);