Mcu: Proliferate FilePath use in McuSupport

Change-Id: I0ae8bf1454d1715f251d88065b52e3bb6a242402
Reviewed-by: Christiaan Janssen <christiaan.janssen@qt.io>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
hjk
2021-09-30 18:30:02 +02:00
parent 8d68e05d05
commit 93a07e1c6e
4 changed files with 120 additions and 129 deletions

View File

@@ -72,15 +72,15 @@ namespace Internal {
static const int KIT_VERSION = 8; // Bumps up whenever details in Kit creation change static const int KIT_VERSION = 8; // Bumps up whenever details in Kit creation change
static QString packagePathFromSettings(const QString &settingsKey, static FilePath packagePathFromSettings(const QString &settingsKey,
QSettings::Scope scope = QSettings::UserScope, QSettings::Scope scope = QSettings::UserScope,
const QString &defaultPath = {}) const FilePath &defaultPath = {})
{ {
QSettings *settings = Core::ICore::settings(scope); QSettings *settings = Core::ICore::settings(scope);
const QString key = QLatin1String(Constants::SETTINGS_GROUP) + '/' + const QString key = QLatin1String(Constants::SETTINGS_GROUP) + '/' +
QLatin1String(Constants::SETTINGS_KEY_PACKAGE_PREFIX) + settingsKey; QLatin1String(Constants::SETTINGS_KEY_PACKAGE_PREFIX) + settingsKey;
const QString path = settings->value(key, defaultPath).toString(); const QString path = settings->value(key, defaultPath.toString()).toString();
return FilePath::fromUserInput(path).toString(); return FilePath::fromUserInput(path);
} }
static bool automaticKitCreationFromSettings(QSettings::Scope scope = QSettings::UserScope) static bool automaticKitCreationFromSettings(QSettings::Scope scope = QSettings::UserScope)
@@ -99,7 +99,7 @@ static bool kitNeedsQtVersion()
return !HostOsInfo::isWindowsHost(); 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 QString &detectionPath, const QString &settingsKey,
const McuPackageVersionDetector *versionDetector) const McuPackageVersionDetector *versionDetector)
: m_label(label) : m_label(label)
@@ -112,14 +112,14 @@ McuPackage::McuPackage(const QString &label, const QString &defaultPath,
m_automaticKitCreation = automaticKitCreationFromSettings(QSettings::UserScope); 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 QString McuPackage::label() const
@@ -127,7 +127,7 @@ QString McuPackage::label() const
return m_label; return m_label;
} }
QString McuPackage::defaultPath() const FilePath McuPackage::defaultPath() const
{ {
return m_defaultPath; return m_defaultPath;
} }
@@ -148,7 +148,7 @@ QWidget *McuPackage::widget()
Icons::RESET.icon()); Icons::RESET.icon());
m_fileChooser->lineEdit()->setButtonVisible(FancyLineEdit::Right, true); m_fileChooser->lineEdit()->setButtonVisible(FancyLineEdit::Right, true);
connect(m_fileChooser->lineEdit(), &FancyLineEdit::rightButtonClicked, this, [&] { connect(m_fileChooser->lineEdit(), &FancyLineEdit::rightButtonClicked, this, [&] {
m_fileChooser->setPath(m_defaultPath); m_fileChooser->setFilePath(m_defaultPath);
}); });
auto layout = new QGridLayout(m_widget); auto layout = new QGridLayout(m_widget);
@@ -168,7 +168,7 @@ QWidget *McuPackage::widget()
layout->addWidget(m_fileChooser, 0, 0, 1, 2); layout->addWidget(m_fileChooser, 0, 0, 1, 2);
layout->addWidget(m_infoLabel, 1, 0, 1, -1); 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] { QObject::connect(this, &McuPackage::statusChanged, this, [this] {
updateStatusUi(); updateStatusUi();
@@ -228,7 +228,7 @@ void McuPackage::writeGeneralSettings() const
bool McuPackage::writeToSettings() 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) + '/' + const QString key = QLatin1String(Constants::SETTINGS_GROUP) + '/' +
QLatin1String(Constants::SETTINGS_KEY_PACKAGE_PREFIX) + m_settingsKey; QLatin1String(Constants::SETTINGS_KEY_PACKAGE_PREFIX) + m_settingsKey;
Core::ICore::settings()->setValueWithDefault(key, m_path, m_defaultPath); Core::ICore::settings()->setValueWithDefault(key, m_path, m_defaultPath);
@@ -258,17 +258,18 @@ void McuPackage::setAutomaticKitCreationEnabled(const bool enabled)
void McuPackage::updatePath() void McuPackage::updatePath()
{ {
m_path = m_fileChooser->rawPath(); m_path = m_fileChooser->rawFilePath();
m_fileChooser->lineEdit()->button(FancyLineEdit::Right)->setEnabled(m_path != m_defaultPath); m_fileChooser->lineEdit()->button(FancyLineEdit::Right)->setEnabled(m_path != m_defaultPath);
updateStatus(); updateStatus();
} }
void McuPackage::updateStatus() void McuPackage::updateStatus()
{ {
bool validPath = !m_path.isEmpty() && FilePath::fromString(m_path).exists(); bool validPath = !m_path.isEmpty() && m_path.exists();
const FilePath detectionPath = FilePath::fromString(basePath() + "/" + m_detectionPath); const FilePath detectionPath = basePath() / m_detectionPath;
const bool validPackage = m_detectionPath.isEmpty() || detectionPath.exists(); 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() || const bool validVersion = m_detectedVersion.isEmpty() ||
m_versions.isEmpty() || m_versions.contains(m_detectedVersion); m_versions.isEmpty() || m_versions.contains(m_detectedVersion);
@@ -293,7 +294,7 @@ void McuPackage::updateStatusUi()
QString McuPackage::statusText() const 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 displayVersions = QStringList(m_versions.toList()).join(" or ");
const QString displayRequiredPath = QString("%1 %2").arg( const QString displayRequiredPath = QString("%1 %2").arg(
FilePath::fromString(m_detectionPath).toUserOutput(), FilePath::fromString(m_detectionPath).toUserOutput(),
@@ -339,7 +340,7 @@ QString McuPackage::statusText() const
} }
McuToolChainPackage::McuToolChainPackage(const QString &label, McuToolChainPackage::McuToolChainPackage(const QString &label,
const QString &defaultPath, const FilePath &defaultPath,
const QString &detectionPath, const QString &detectionPath,
const QString &settingsKey, const QString &settingsKey,
McuToolChainPackage::Type type, McuToolChainPackage::Type type,
@@ -447,11 +448,9 @@ ToolChain *McuToolChainPackage::toolChain(Id language) const
else { else {
const QLatin1String compilerName( const QLatin1String compilerName(
language == ProjectExplorer::Constants::C_LANGUAGE_ID ? "gcc" : "g++"); language == ProjectExplorer::Constants::C_LANGUAGE_ID ? "gcc" : "g++");
const FilePath compiler = FilePath::fromUserInput( const QString comp = QLatin1String(m_type == TypeArmGcc ? "/bin/arm-none-eabi-%1" : "/bar/foo-keil-%1")
HostOsInfo::withExecutableSuffix( .arg(compilerName);
path() + ( const FilePath compiler = path().pathAppended(comp).withExecutableSuffix();
m_type == TypeArmGcc
? "/bin/arm-none-eabi-%1" : "/bar/foo-keil-%1")).arg(compilerName));
tc = armGccToolChain(compiler, language); tc = armGccToolChain(compiler, language);
} }
@@ -479,11 +478,10 @@ QVariant McuToolChainPackage::debuggerId() const
{ {
using namespace Debugger; using namespace Debugger;
const FilePath command = FilePath::fromUserInput( QString sub = QString::fromLatin1(m_type == TypeArmGcc ? "bin/arm-none-eabi-gdb-py"
HostOsInfo::withExecutableSuffix(path() + ( : m_type == TypeIAR ? "../common/bin/CSpyBat" : "bar/foo-keil-gdb");
m_type == TypeArmGcc
? "/bin/arm-none-eabi-gdb-py" : m_type == TypeIAR const FilePath command = path().pathAppended(sub).withExecutableSuffix();
? "../common/bin/CSpyBat" : "/bar/foo-keil-gdb")));
const DebuggerItem *debugger = DebuggerItemManager::findByCommand(command); const DebuggerItem *debugger = DebuggerItemManager::findByCommand(command);
QVariant debuggerId; QVariant debuggerId;
if (!debugger) { if (!debugger) {
@@ -591,7 +589,7 @@ McuSupportOptions::~McuSupportOptions()
void McuSupportOptions::populatePackagesAndTargets() void McuSupportOptions::populatePackagesAndTargets()
{ {
setQulDir(FilePath::fromUserInput(qtForMCUsSdkPackage->path())); setQulDir(qtForMCUsSdkPackage->path());
} }
static FilePath qulDocsDir() static FilePath qulDocsDir()
@@ -665,13 +663,12 @@ void McuSupportOptions::setQulDir(const FilePath &dir)
FilePath McuSupportOptions::qulDirFromSettings() FilePath McuSupportOptions::qulDirFromSettings()
{ {
return FilePath::fromUserInput( return packagePathFromSettings(Constants::SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK,
packagePathFromSettings(Constants::SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK, QSettings::UserScope);
QSettings::UserScope));
} }
static void setKitProperties(const QString &kitName, Kit *k, const McuTarget *mcuTarget, static void setKitProperties(const QString &kitName, Kit *k, const McuTarget *mcuTarget,
const QString &sdkPath) const FilePath &sdkPath)
{ {
using namespace Constants; using namespace Constants;
@@ -688,7 +685,7 @@ static void setKitProperties(const QString &kitName, Kit *k, const McuTarget *mc
if (mcuTarget->toolChainPackage()->isDesktopToolchain()) if (mcuTarget->toolChainPackage()->isDesktopToolchain())
k->setDeviceTypeForIcon(DEVICE_TYPE); k->setDeviceTypeForIcon(DEVICE_TYPE);
k->setValue(QtSupport::SuppliesQtQuickImportPath::id(), true); 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); k->setValue(QtSupport::KitHasMergedHeaderPathsWithQmlImportPaths::id(), true);
QSet<Id> irrelevant = { QSet<Id> irrelevant = {
SysRootKitAspect::id(), 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. // feature of the run configuration. Otherwise, we just prepend the path, here.
if (mcuTarget->toolChainPackage()->isDesktopToolchain() if (mcuTarget->toolChainPackage()->isDesktopToolchain()
&& !CMakeProjectManager::CMakeToolManager::defaultCMakeTool()->hasFileApi()) && !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) { auto processPackage = [&pathAdditions, &changes](const McuPackage *package) {
if (package->addToPath()) if (package->addToPath())
pathAdditions.append(QDir::toNativeSeparators(package->path())); pathAdditions.append(package->path().toUserOutput());
if (!package->environmentVariableName().isEmpty()) if (!package->environmentVariableName().isEmpty())
changes.append({package->environmentVariableName(), changes.append({package->environmentVariableName(), package->path().toUserOutput()});
QDir::toNativeSeparators(package->path())});
}; };
for (auto package : mcuTarget->packages()) for (auto package : mcuTarget->packages())
processPackage(package); processPackage(package);
@@ -808,7 +804,7 @@ static void updateKitEnvironment(Kit *k, const McuTarget *mcuTarget)
return item.name == varName; return item.name == varName;
}); });
const EnvironmentItem item = {package->environmentVariableName(), const EnvironmentItem item = {package->environmentVariableName(),
QDir::toNativeSeparators(package->path())}; package->path().toUserOutput()};
if (index != -1) if (index != -1)
changes.replace(index, item); changes.replace(index, item);
else else
@@ -819,7 +815,7 @@ static void updateKitEnvironment(Kit *k, const McuTarget *mcuTarget)
EnvironmentKitAspect::setEnvironmentChanges(k, changes); 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; using namespace CMakeProjectManager;
@@ -832,7 +828,7 @@ static void setKitCMakeOptions(Kit *k, const McuTarget* mcuTarget, const QString
} }
if (!mcuTarget->toolChainPackage()->isDesktopToolchain()) { 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()); + mcuTarget->toolChainPackage()->cmakeToolChainFileName());
config.append(CMakeConfigItem( 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", config.append(CMakeConfigItem("QUL_GENERATORS",
generatorsPath.toString().toUtf8())); generatorsPath.toString().toUtf8()));
if (!generatorsPath.exists()) { if (!generatorsPath.exists()) {
@@ -947,7 +943,7 @@ QList<Kit *> McuSupportOptions::kitsWithMismatchedDependencies(const McuTarget *
EnvironmentKitAspect::environmentChanges(kit))); EnvironmentKitAspect::environmentChanges(kit)));
return Utils::anyOf(mcuTarget->packages(), [&environment](const McuPackage *package) { return Utils::anyOf(mcuTarget->packages(), [&environment](const McuPackage *package) {
return !package->environmentVariableName().isEmpty() && 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()); .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)) { for (const NameValueItem &nameValueItem : EnvironmentKitAspect::environmentChanges(kit)) {
if (nameValueItem.name == variableName) 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, bool McuSupportOptions::kitUpToDate(const Kit *kit, const McuTarget *mcuTarget,
@@ -1052,13 +1048,13 @@ void McuSupportOptions::createAutomaticKits()
const QString displayPath = FilePath::fromString(qtForMCUsPackage->detectionPath()) const QString displayPath = FilePath::fromString(qtForMCUsPackage->detectionPath())
.toUserOutput(); .toUserOutput();
printMessage(tr("Path %1 exists, but does not contain %2.") printMessage(tr("Path %1 exists, but does not contain %2.")
.arg(qtForMCUsPackage->path(), displayPath), .arg(qtForMCUsPackage->path().toUserOutput(), displayPath),
true); true);
break; break;
} }
case McuPackage::InvalidPath: { case McuPackage::InvalidPath: {
printMessage(tr("Path %1 does not exist. Add the path in Tools > Options > Devices > MCU.") printMessage(tr("Path %1 does not exist. Add the path in Tools > Options > Devices > MCU.")
.arg(qtForMCUsPackage->path()), .arg(qtForMCUsPackage->path().toUserOutput()),
true); true);
break; break;
} }
@@ -1079,7 +1075,7 @@ void McuSupportOptions::createAutomaticKits()
return; return;
} }
auto dir = FilePath::fromUserInput(qtForMCUsPackage->path()); FilePath dir = qtForMCUsPackage->path();
QVector<McuPackage*> packages; QVector<McuPackage*> packages;
QVector<McuTarget*> mcuTargets; QVector<McuTarget*> mcuTargets;
Sdk::targetsAndPackages(dir, &packages, &mcuTargets); Sdk::targetsAndPackages(dir, &packages, &mcuTargets);
@@ -1131,7 +1127,7 @@ void McuSupportOptions::upgradeKits(UpgradeOption upgradeOption)
auto qtForMCUsPackage = Sdk::createQtForMCUsPackage(); auto qtForMCUsPackage = Sdk::createQtForMCUsPackage();
auto dir = FilePath::fromUserInput(qtForMCUsPackage->path()); auto dir = qtForMCUsPackage->path();
QVector<McuPackage*> packages; QVector<McuPackage*> packages;
QVector<McuTarget*> mcuTargets; QVector<McuTarget*> mcuTargets;
Sdk::targetsAndPackages(dir, &packages, &mcuTargets); Sdk::targetsAndPackages(dir, &packages, &mcuTargets);
@@ -1169,7 +1165,7 @@ void McuSupportOptions::fixKitsDependencies()
{ {
auto qtForMCUsPackage = Sdk::createQtForMCUsPackage(); auto qtForMCUsPackage = Sdk::createQtForMCUsPackage();
auto dir = FilePath::fromUserInput(qtForMCUsPackage->path()); FilePath dir = qtForMCUsPackage->path();
QVector<McuPackage*> packages; QVector<McuPackage*> packages;
QVector<McuTarget*> mcuTargets; QVector<McuTarget*> mcuTargets;
Sdk::targetsAndPackages(dir, &packages, &mcuTargets); Sdk::targetsAndPackages(dir, &packages, &mcuTargets);
@@ -1245,7 +1241,7 @@ void McuSupportOptions::fixExistingKits()
auto qtForMCUsPackage = Sdk::createQtForMCUsPackage(); auto qtForMCUsPackage = Sdk::createQtForMCUsPackage();
qtForMCUsPackage->updateStatus(); qtForMCUsPackage->updateStatus();
if (qtForMCUsPackage->validStatus()) { if (qtForMCUsPackage->validStatus()) {
auto dir = FilePath::fromUserInput(qtForMCUsPackage->path()); FilePath dir = qtForMCUsPackage->path();
QVector<McuPackage*> packages; QVector<McuPackage*> packages;
QVector<McuTarget*> mcuTargets; QVector<McuTarget*> mcuTargets;
Sdk::targetsAndPackages(dir, &packages, &mcuTargets); Sdk::targetsAndPackages(dir, &packages, &mcuTargets);

View File

@@ -66,15 +66,15 @@ public:
ValidPackage ValidPackage
}; };
McuPackage(const QString &label, const QString &defaultPath, McuPackage(const QString &label, const Utils::FilePath &defaultPath,
const QString &detectionPath, const QString &settingsKey, const QString &detectionPath, const QString &settingsKey,
const McuPackageVersionDetector *versionDetector = nullptr); const McuPackageVersionDetector *versionDetector = nullptr);
virtual ~McuPackage() = default; virtual ~McuPackage() = default;
QString basePath() const; Utils::FilePath basePath() const;
QString path() const; Utils::FilePath path() const;
QString label() const; QString label() const;
QString defaultPath() const; Utils::FilePath defaultPath() const;
QString detectionPath() const; QString detectionPath() const;
QString statusText() const; QString statusText() const;
void updateStatus(); void updateStatus();
@@ -110,12 +110,12 @@ private:
Utils::InfoLabel *m_infoLabel = nullptr; Utils::InfoLabel *m_infoLabel = nullptr;
const QString m_label; const QString m_label;
const QString m_defaultPath; const Utils::FilePath m_defaultPath;
const QString m_detectionPath; const QString m_detectionPath;
const QString m_settingsKey; const QString m_settingsKey;
const McuPackageVersionDetector *m_versionDetector; 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_relativePathModifier; // relative path to m_path to be returned by path()
QString m_detectedVersion; QString m_detectedVersion;
QVector<QString> m_versions; QVector<QString> m_versions;
@@ -142,7 +142,7 @@ public:
}; };
McuToolChainPackage(const QString &label, McuToolChainPackage(const QString &label,
const QString &defaultPath, const Utils::FilePath &defaultPath,
const QString &detectionPath, const QString &detectionPath,
const QString &settingsKey, const QString &settingsKey,
Type type, Type type,

View File

@@ -193,7 +193,7 @@ void McuSupportOptionsWidget::updateStatus()
m_mcuTargetsInfoLabel->setVisible(valid && m_options.mcuTargets.isEmpty()); m_mcuTargetsInfoLabel->setVisible(valid && m_options.mcuTargets.isEmpty());
if (m_mcuTargetsInfoLabel->isVisible()) { if (m_mcuTargetsInfoLabel->isVisible()) {
m_mcuTargetsInfoLabel->setType(Utils::InfoLabel::NotOk); 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; QString deprecationMessage;
if (Sdk::checkDeprecatedSdkError(sdkPath, deprecationMessage)) if (Sdk::checkDeprecatedSdkError(sdkPath, deprecationMessage))
m_mcuTargetsInfoLabel->setText(deprecationMessage); m_mcuTargetsInfoLabel->setText(deprecationMessage);

View File

@@ -49,15 +49,14 @@ namespace McuSupport {
namespace Internal { namespace Internal {
namespace Sdk { namespace Sdk {
static QString findInProgramFiles(const QString &folder) static FilePath findInProgramFiles(const QString &folder)
{ {
for (auto envVar : {"ProgramFiles", "ProgramFiles(x86)", "ProgramW6432"}) { for (auto envVar : {"ProgramFiles", "ProgramFiles(x86)", "ProgramW6432"}) {
if (!qEnvironmentVariableIsSet(envVar)) if (!qEnvironmentVariableIsSet(envVar))
continue; continue;
const Utils::FilePath dir = const FilePath dir = FilePath::fromUserInput(qEnvironmentVariable(envVar)) / folder;
Utils::FilePath::fromUserInput(qEnvironmentVariable(envVar) + "/" + folder);
if (dir.exists()) if (dir.exists())
return dir.toString(); return dir;
} }
return {}; return {};
} }
@@ -66,7 +65,7 @@ McuPackage *createQtForMCUsPackage()
{ {
auto result = new McuPackage( auto result = new McuPackage(
McuPackage::tr("Qt for MCUs SDK"), McuPackage::tr("Qt for MCUs SDK"),
QDir::homePath(), FileUtils::homePath(),
FilePath("bin/qmltocpp").withExecutableSuffix().toString(), FilePath("bin/qmltocpp").withExecutableSuffix().toString(),
Constants::SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK); Constants::SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK);
result->setEnvironmentVariableName("Qul_DIR"); result->setEnvironmentVariableName("Qul_DIR");
@@ -92,22 +91,21 @@ static McuToolChainPackage *createArmGccPackage()
{ {
const char envVar[] = "ARMGCC_DIR"; const char envVar[] = "ARMGCC_DIR";
QString defaultPath; FilePath defaultPath;
if (qEnvironmentVariableIsSet(envVar)) if (qEnvironmentVariableIsSet(envVar))
defaultPath = qEnvironmentVariable(envVar); defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar));
if (defaultPath.isEmpty() && Utils::HostOsInfo::isWindowsHost()) { if (defaultPath.isEmpty() && HostOsInfo::isWindowsHost()) {
const QDir installDir(findInProgramFiles("/GNU Tools ARM Embedded/")); const FilePath installDir = findInProgramFiles("GNU Tools ARM Embedded");
if (installDir.exists()) { if (installDir.exists()) {
// If GNU Tools installation dir has only one sub dir, // If GNU Tools installation dir has only one sub dir,
// select the sub dir, otherwise the installation dir. // select the sub dir, otherwise the installation dir.
const QFileInfoList subDirs = const FilePaths subDirs = installDir.dirEntries(QDir::Dirs | QDir::NoDotAndDotDot);
installDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
if (subDirs.count() == 1) if (subDirs.count() == 1)
defaultPath = subDirs.first().filePath() + '/'; defaultPath = subDirs.first();
} }
} }
if (defaultPath.isEmpty()) if (defaultPath.isEmpty())
defaultPath = QDir::homePath(); defaultPath = FileUtils::homePath();
const QString detectionPath = Utils::HostOsInfo::withExecutableSuffix("bin/arm-none-eabi-g++"); const QString detectionPath = Utils::HostOsInfo::withExecutableSuffix("bin/arm-none-eabi-g++");
const auto versionDetector = new McuPackageExecutableVersionDetector( const auto versionDetector = new McuPackageExecutableVersionDetector(
@@ -131,8 +129,8 @@ static McuToolChainPackage *createGhsToolchainPackage()
{ {
const char envVar[] = "GHS_COMPILER_DIR"; const char envVar[] = "GHS_COMPILER_DIR";
const QString defaultPath = const FilePath defaultPath = qEnvironmentVariableIsSet(envVar)
qEnvironmentVariableIsSet(envVar) ? qEnvironmentVariable(envVar) : QDir::homePath(); ? FilePath::fromUserInput(qEnvironmentVariable(envVar)) : FileUtils::homePath();
const auto versionDetector = new McuPackageExecutableVersionDetector( const auto versionDetector = new McuPackageExecutableVersionDetector(
Utils::HostOsInfo::withExecutableSuffix("as850"), Utils::HostOsInfo::withExecutableSuffix("as850"),
@@ -155,8 +153,8 @@ static McuToolChainPackage *createGhsArmToolchainPackage()
{ {
const char envVar[] = "GHS_ARM_COMPILER_DIR"; const char envVar[] = "GHS_ARM_COMPILER_DIR";
const QString defaultPath = const FilePath defaultPath = qEnvironmentVariableIsSet(envVar)
qEnvironmentVariableIsSet(envVar) ? qEnvironmentVariable(envVar) : QDir::homePath(); ? FilePath::fromUserInput(qEnvironmentVariable(envVar)) : FileUtils::homePath();
const auto versionDetector = new McuPackageExecutableVersionDetector( const auto versionDetector = new McuPackageExecutableVersionDetector(
Utils::HostOsInfo::withExecutableSuffix("asarm"), Utils::HostOsInfo::withExecutableSuffix("asarm"),
@@ -179,20 +177,20 @@ static McuToolChainPackage *createIarToolChainPackage()
{ {
const char envVar[] = "IAR_ARM_COMPILER_DIR"; const char envVar[] = "IAR_ARM_COMPILER_DIR";
QString defaultPath; FilePath defaultPath;
if (qEnvironmentVariableIsSet(envVar)) if (qEnvironmentVariableIsSet(envVar))
defaultPath = qEnvironmentVariable(envVar); defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar));
else { else {
const ProjectExplorer::ToolChain *tc = const ProjectExplorer::ToolChain *tc =
ProjectExplorer::ToolChainManager::toolChain([](const ProjectExplorer::ToolChain *t) { ProjectExplorer::ToolChainManager::toolChain([](const ProjectExplorer::ToolChain *t) {
return t->typeId() == BareMetal::Constants::IAREW_TOOLCHAIN_TYPEID; return t->typeId() == BareMetal::Constants::IAREW_TOOLCHAIN_TYPEID;
}); });
if (tc) { if (tc) {
const Utils::FilePath compilerExecPath = tc->compilerCommand(); const FilePath compilerExecPath = tc->compilerCommand();
defaultPath = compilerExecPath.parentDir().parentDir().toString(); defaultPath = compilerExecPath.parentDir().parentDir();
} }
else else
defaultPath = QDir::homePath(); defaultPath = FileUtils::homePath();
} }
const QString detectionPath = Utils::HostOsInfo::withExecutableSuffix("bin/iccarm"); const QString detectionPath = Utils::HostOsInfo::withExecutableSuffix("bin/iccarm");
@@ -217,17 +215,17 @@ static McuPackage *createRGLPackage()
{ {
const char envVar[] = "RGL_DIR"; const char envVar[] = "RGL_DIR";
QString defaultPath; FilePath defaultPath;
if (qEnvironmentVariableIsSet(envVar)) { if (qEnvironmentVariableIsSet(envVar)) {
defaultPath = qEnvironmentVariable(envVar); defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar));
} else if (Utils::HostOsInfo::isWindowsHost()) { } else if (Utils::HostOsInfo::isWindowsHost()) {
defaultPath = QDir::rootPath() + "Renesas_Electronics/D1x_RGL"; defaultPath = FilePath::fromUserInput(QDir::rootPath() + "Renesas_Electronics/D1x_RGL");
if (QFileInfo::exists(defaultPath)) { if (defaultPath.exists()) {
const QFileInfoList subDirs = const FilePaths subDirs =
QDir(defaultPath).entryInfoList({QLatin1String("rgl_ghs_D1Mx_*")}, defaultPath.dirEntries({QLatin1String("rgl_ghs_D1Mx_*")},
QDir::Dirs | QDir::NoDotAndDotDot); QDir::Dirs | QDir::NoDotAndDotDot);
if (subDirs.count() == 1) if (subDirs.count() == 1)
defaultPath = subDirs.first().filePath() + '/'; defaultPath = subDirs.first();
} }
} }
@@ -242,15 +240,15 @@ static McuPackage *createRGLPackage()
static McuPackage *createStm32CubeProgrammerPackage() static McuPackage *createStm32CubeProgrammerPackage()
{ {
QString defaultPath = QDir::homePath(); FilePath defaultPath = FileUtils::homePath();
const QString cubePath = "/STMicroelectronics/STM32Cube/STM32CubeProgrammer/"; const QString cubePath = "STMicroelectronics/STM32Cube/STM32CubeProgrammer";
if (Utils::HostOsInfo::isWindowsHost()) { if (HostOsInfo::isWindowsHost()) {
const QString programPath = findInProgramFiles(cubePath); const FilePath programPath = findInProgramFiles(cubePath);
if (!programPath.isEmpty()) if (!programPath.isEmpty())
defaultPath = programPath; defaultPath = programPath;
} else { } else {
const QString programPath = QDir::homePath() + cubePath; const FilePath programPath = FileUtils::homePath() / cubePath;
if (QFileInfo::exists(programPath)) if (programPath.exists())
defaultPath = programPath; defaultPath = programPath;
} }
auto result = new McuPackage( auto result = new McuPackage(
@@ -270,18 +268,18 @@ static McuPackage *createMcuXpressoIdePackage()
{ {
const char envVar[] = "MCUXpressoIDE_PATH"; const char envVar[] = "MCUXpressoIDE_PATH";
QString defaultPath; FilePath defaultPath;
if (qEnvironmentVariableIsSet(envVar)) { if (qEnvironmentVariableIsSet(envVar)) {
defaultPath = qEnvironmentVariable(envVar); defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar));
} else if (Utils::HostOsInfo::isWindowsHost()) { } else if (HostOsInfo::isWindowsHost()) {
defaultPath = QDir::rootPath() + "nxp"; defaultPath = FilePath::fromString(QDir::rootPath() + "nxp");
if (QFileInfo::exists(defaultPath)) { if (defaultPath.exists()) {
// If default dir has exactly one sub dir that could be the IDE path, pre-select that. // If default dir has exactly one sub dir that could be the IDE path, pre-select that.
const QFileInfoList subDirs = const FilePaths subDirs =
QDir(defaultPath).entryInfoList({QLatin1String("MCUXpressoIDE*")}, defaultPath.dirEntries({QLatin1String("MCUXpressoIDE*")},
QDir::Dirs | QDir::NoDotAndDotDot); QDir::Dirs | QDir::NoDotAndDotDot);
if (subDirs.count() == 1) if (subDirs.count() == 1)
defaultPath = subDirs.first().filePath() + '/'; defaultPath = subDirs.first();
} }
} else { } else {
defaultPath = "/usr/local/mcuxpressoide/"; defaultPath = "/usr/local/mcuxpressoide/";
@@ -301,21 +299,20 @@ static McuPackage *createCypressProgrammerPackage()
{ {
const char envVar[] = "CYPRESS_AUTO_FLASH_UTILITY_DIR"; const char envVar[] = "CYPRESS_AUTO_FLASH_UTILITY_DIR";
QString defaultPath; FilePath defaultPath;
if (qEnvironmentVariableIsSet(envVar)) { if (qEnvironmentVariableIsSet(envVar)) {
defaultPath = qEnvironmentVariable(envVar); defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar));
} else if (Utils::HostOsInfo::isWindowsHost()) { } else if (HostOsInfo::isWindowsHost()) {
auto candidate = findInProgramFiles(QLatin1String("/Cypress/Cypress Auto Flash Utility 1.0/")); FilePath candidate = findInProgramFiles("Cypress/Cypress Auto Flash Utility 1.0");
if (QFileInfo::exists(candidate)) { if (candidate.exists()) {
defaultPath = candidate; defaultPath = candidate;
} }
} else { } else {
defaultPath = QLatin1String("/usr"); defaultPath = "/usr";
} }
if (defaultPath.isEmpty()) { if (defaultPath.isEmpty())
defaultPath = QDir::homePath(); defaultPath = FileUtils::homePath();
}
auto result = new McuPackage( auto result = new McuPackage(
"Cypress Auto Flash Utility", "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 sdkName = desc.boardSdkName.isEmpty() ? generateSdkName(desc.boardSdkEnvVar) : desc.boardSdkName;
const QString defaultPath = [&] { const FilePath defaultPath = [&] {
const auto envVar = desc.boardSdkEnvVar.toLatin1(); const auto envVar = desc.boardSdkEnvVar.toLatin1();
if (qEnvironmentVariableIsSet(envVar)) { if (qEnvironmentVariableIsSet(envVar))
return qEnvironmentVariable(envVar); return FilePath::fromUserInput(qEnvironmentVariable(envVar));
}
if (!desc.boardSdkDefaultPath.isEmpty()) { if (!desc.boardSdkDefaultPath.isEmpty()) {
QString defaultPath = QDir::rootPath() + desc.boardSdkDefaultPath; FilePath defaultPath = FilePath::fromUserInput(QDir::rootPath() + desc.boardSdkDefaultPath);
if (QFileInfo::exists(defaultPath)) { if (defaultPath.exists())
return defaultPath; return defaultPath;
}
} }
return QDir::homePath(); return FileUtils::homePath();
}(); }();
const auto versionDetector = generatePackageVersionDetector(desc.boardSdkEnvVar); const auto versionDetector = generatePackageVersionDetector(desc.boardSdkEnvVar);
@@ -404,18 +399,18 @@ static McuPackage *createBoardSdkPackage(const McuTargetDescription& desc)
return result; 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 &freeRTOSBoardSdkSubDir)
{ {
const QString envVarPrefix = envVar.chopped(int(strlen("_FREERTOS_DIR"))); const QString envVarPrefix = envVar.chopped(int(strlen("_FREERTOS_DIR")));
QString defaultPath; FilePath defaultPath;
if (qEnvironmentVariableIsSet(envVar.toLatin1())) if (qEnvironmentVariableIsSet(envVar.toLatin1()))
defaultPath = qEnvironmentVariable(envVar.toLatin1()); defaultPath = FilePath::fromUserInput(qEnvironmentVariable(envVar.toLatin1()));
else if (!boardSdkDir.isEmpty() && !freeRTOSBoardSdkSubDir.isEmpty()) else if (!boardSdkDir.isEmpty() && !freeRTOSBoardSdkSubDir.isEmpty())
defaultPath = boardSdkDir + "/" + freeRTOSBoardSdkSubDir; defaultPath = boardSdkDir / freeRTOSBoardSdkSubDir;
else else
defaultPath = QDir::homePath(); defaultPath = FileUtils::homePath();
auto result = new McuPackage( auto result = new McuPackage(
QString::fromLatin1("FreeRTOS Sources (%1)").arg(envVarPrefix), QString::fromLatin1("FreeRTOS Sources (%1)").arg(envVarPrefix),
@@ -473,7 +468,7 @@ protected:
if (vendorPkgs.contains(desc.platformVendor)) if (vendorPkgs.contains(desc.platformVendor))
required3rdPartyPkgs.push_back(vendorPkgs.value(desc.platformVendor)); required3rdPartyPkgs.push_back(vendorPkgs.value(desc.platformVendor));
QString boardSdkDefaultPath; FilePath boardSdkDefaultPath;
if (!desc.boardSdkEnvVar.isEmpty()) { if (!desc.boardSdkEnvVar.isEmpty()) {
if (!boardSdkPkgs.contains(desc.boardSdkEnvVar)) { if (!boardSdkPkgs.contains(desc.boardSdkEnvVar)) {
auto boardSdkPkg = desc.boardSdkEnvVar != "RGL_DIR" auto boardSdkPkg = desc.boardSdkEnvVar != "RGL_DIR"
@@ -551,7 +546,7 @@ protected:
required3rdPartyPkgs.push_back(vendorPkgs.value(desc.platformVendor)); required3rdPartyPkgs.push_back(vendorPkgs.value(desc.platformVendor));
// Board SDK specific settings // Board SDK specific settings
QString boardSdkDefaultPath; FilePath boardSdkDefaultPath;
if (!desc.boardSdkEnvVar.isEmpty()) { if (!desc.boardSdkEnvVar.isEmpty()) {
if (!boardSdkPkgs.contains(desc.boardSdkEnvVar)) { if (!boardSdkPkgs.contains(desc.boardSdkEnvVar)) {
auto boardSdkPkg = createBoardSdkPackage(desc); auto boardSdkPkg = createBoardSdkPackage(desc);