forked from qt-creator/qt-creator
McuSupport: fix manual creation of kits
Kits are marked as 'manual', so that user has individual control of each one. 'Remove' button replaced with 'Update' button for manual update. Task-number: QTCREATORBUG-25259 Change-Id: Iadf5f2da3ef7bee7fb051516ffda7fcefe8b56d8 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
committed by
christiaan.janssen
parent
af24cad00f
commit
d6cc05f0ea
@@ -680,7 +680,7 @@ static void setKitProperties(const QString &kitName, Kit *k, const McuTarget *mc
|
|||||||
k->setValue(KIT_MCUTARGET_KITVERSION_KEY, KIT_VERSION);
|
k->setValue(KIT_MCUTARGET_KITVERSION_KEY, KIT_VERSION);
|
||||||
k->setValue(KIT_MCUTARGET_OS_KEY, static_cast<int>(mcuTarget->os()));
|
k->setValue(KIT_MCUTARGET_OS_KEY, static_cast<int>(mcuTarget->os()));
|
||||||
k->setValue(KIT_MCUTARGET_TOOCHAIN_KEY, mcuTarget->toolChainPackage()->toolChainName());
|
k->setValue(KIT_MCUTARGET_TOOCHAIN_KEY, mcuTarget->toolChainPackage()->toolChainName());
|
||||||
k->setAutoDetected(true);
|
k->setAutoDetected(false);
|
||||||
k->makeSticky();
|
k->makeSticky();
|
||||||
if (mcuTarget->toolChainPackage()->isDesktopToolchain())
|
if (mcuTarget->toolChainPackage()->isDesktopToolchain())
|
||||||
k->setDeviceTypeForIcon(DEVICE_TYPE);
|
k->setDeviceTypeForIcon(DEVICE_TYPE);
|
||||||
@@ -893,12 +893,11 @@ QString McuSupportOptions::kitName(const McuTarget *mcuTarget)
|
|||||||
compilerName);
|
compilerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<Kit *> McuSupportOptions::existingKits(const McuTarget *mcuTarget, bool autoDetectedOnly)
|
QList<Kit *> McuSupportOptions::existingKits(const McuTarget *mcuTarget)
|
||||||
{
|
{
|
||||||
using namespace Constants;
|
using namespace Constants;
|
||||||
return Utils::filtered(KitManager::kits(), [mcuTarget, autoDetectedOnly](Kit *kit) {
|
return Utils::filtered(KitManager::kits(), [mcuTarget](Kit *kit) {
|
||||||
return (!autoDetectedOnly || kit->isAutoDetected())
|
return kit->value(KIT_MCUTARGET_KITVERSION_KEY) == KIT_VERSION
|
||||||
&& kit->value(KIT_MCUTARGET_KITVERSION_KEY) == KIT_VERSION
|
|
||||||
&& (!mcuTarget || (
|
&& (!mcuTarget || (
|
||||||
kit->value(KIT_MCUTARGET_VENDOR_KEY) == mcuTarget->platform().vendor
|
kit->value(KIT_MCUTARGET_VENDOR_KEY) == mcuTarget->platform().vendor
|
||||||
&& kit->value(KIT_MCUTARGET_MODEL_KEY) == mcuTarget->platform().name
|
&& kit->value(KIT_MCUTARGET_MODEL_KEY) == mcuTarget->platform().name
|
||||||
@@ -911,9 +910,23 @@ QList<Kit *> McuSupportOptions::existingKits(const McuTarget *mcuTarget, bool au
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<Kit *> McuSupportOptions::matchingKits(const McuTarget *mcuTarget, const McuPackage *qtForMCUsSdkPackage)
|
||||||
|
{
|
||||||
|
return Utils::filtered(existingKits(mcuTarget), [mcuTarget, qtForMCUsSdkPackage](Kit *kit) {
|
||||||
|
return kitUpToDate(kit, mcuTarget, qtForMCUsSdkPackage);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<Kit *> McuSupportOptions::upgradeableKits(const McuTarget *mcuTarget, const McuPackage *qtForMCUsSdkPackage)
|
||||||
|
{
|
||||||
|
return Utils::filtered(existingKits(mcuTarget), [mcuTarget, qtForMCUsSdkPackage](Kit *kit) {
|
||||||
|
return !kitUpToDate(kit, mcuTarget, qtForMCUsSdkPackage);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
QList<Kit *> McuSupportOptions::kitsWithMismatchedDependencies(const McuTarget *mcuTarget)
|
QList<Kit *> McuSupportOptions::kitsWithMismatchedDependencies(const McuTarget *mcuTarget)
|
||||||
{
|
{
|
||||||
return Utils::filtered(existingKits(mcuTarget, false), [mcuTarget](Kit *kit) {
|
return Utils::filtered(existingKits(mcuTarget), [mcuTarget](Kit *kit) {
|
||||||
const auto environment = Utils::NameValueDictionary(
|
const auto environment = Utils::NameValueDictionary(
|
||||||
Utils::NameValueItem::toStringList(
|
Utils::NameValueItem::toStringList(
|
||||||
EnvironmentKitAspect::environmentChanges(kit)));
|
EnvironmentKitAspect::environmentChanges(kit)));
|
||||||
@@ -927,8 +940,7 @@ QList<Kit *> McuSupportOptions::kitsWithMismatchedDependencies(const McuTarget *
|
|||||||
QList<Kit *> McuSupportOptions::outdatedKits()
|
QList<Kit *> McuSupportOptions::outdatedKits()
|
||||||
{
|
{
|
||||||
return Utils::filtered(KitManager::kits(), [](Kit *kit) {
|
return Utils::filtered(KitManager::kits(), [](Kit *kit) {
|
||||||
return kit->isAutoDetected()
|
return !kit->value(Constants::KIT_MCUTARGET_VENDOR_KEY).isNull()
|
||||||
&& !kit->value(Constants::KIT_MCUTARGET_VENDOR_KEY).isNull()
|
|
||||||
&& kit->value(Constants::KIT_MCUTARGET_KITVERSION_KEY) != KIT_VERSION;
|
&& kit->value(Constants::KIT_MCUTARGET_KITVERSION_KEY) != KIT_VERSION;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -969,7 +981,7 @@ void printMessage(const QString &message, bool important)
|
|||||||
Core::MessageManager::writeSilently(displayMessage);
|
Core::MessageManager::writeSilently(displayMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
QVersionNumber kitQulVersion(const Kit *kit)
|
QVersionNumber McuSupportOptions::kitQulVersion(const Kit *kit)
|
||||||
{
|
{
|
||||||
return QVersionNumber::fromString(
|
return QVersionNumber::fromString(
|
||||||
kit->value(McuSupport::Constants::KIT_MCUTARGET_SDKVERSION_KEY)
|
kit->value(McuSupport::Constants::KIT_MCUTARGET_SDKVERSION_KEY)
|
||||||
@@ -985,6 +997,13 @@ QString kitDependencyPath(const Kit *kit, const QString &variableName)
|
|||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool McuSupportOptions::kitUpToDate(const Kit *kit, const McuTarget *mcuTarget,
|
||||||
|
const McuPackage *qtForMCUsSdkPackage)
|
||||||
|
{
|
||||||
|
return kitQulVersion(kit) == mcuTarget->qulVersion() &&
|
||||||
|
kitDependencyPath(kit, qtForMCUsSdkPackage->environmentVariableName()) == qtForMCUsSdkPackage->path();
|
||||||
|
}
|
||||||
|
|
||||||
McuSupportOptions::UpgradeOption McuSupportOptions::askForKitUpgrades()
|
McuSupportOptions::UpgradeOption McuSupportOptions::askForKitUpgrades()
|
||||||
{
|
{
|
||||||
QMessageBox upgradePopup(Core::ICore::dialogParent());
|
QMessageBox upgradePopup(Core::ICore::dialogParent());
|
||||||
@@ -1052,15 +1071,10 @@ void McuSupportOptions::createAutomaticKits()
|
|||||||
|
|
||||||
bool needsUpgrade = false;
|
bool needsUpgrade = false;
|
||||||
for (auto target: qAsConst(mcuTargets)) {
|
for (auto target: qAsConst(mcuTargets)) {
|
||||||
const auto kitsForTarget = existingKits(target, false);
|
|
||||||
if (Utils::anyOf(kitsForTarget, [&target, &qtForMCUsPackage](const Kit *kit) {
|
|
||||||
return kitQulVersion(kit) == target->qulVersion() &&
|
|
||||||
kitDependencyPath(kit, qtForMCUsPackage->environmentVariableName()) == qtForMCUsPackage->path();
|
|
||||||
})) {
|
|
||||||
// if kit already exists, skip
|
// if kit already exists, skip
|
||||||
|
if (!matchingKits(target, qtForMCUsPackage).empty())
|
||||||
continue;
|
continue;
|
||||||
}
|
if (!upgradeableKits(target, qtForMCUsPackage).empty()) {
|
||||||
if (!kitsForTarget.empty()) {
|
|
||||||
// if kit exists but wrong version/path
|
// if kit exists but wrong version/path
|
||||||
needsUpgrade = true;
|
needsUpgrade = true;
|
||||||
} else {
|
} else {
|
||||||
@@ -1088,22 +1102,10 @@ void McuSupportOptions::checkUpgradeableKits()
|
|||||||
if (!qtForMCUsSdkPackage->validStatus() || mcuTargets.length() == 0)
|
if (!qtForMCUsSdkPackage->validStatus() || mcuTargets.length() == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto performCheck = [this]() {
|
if (Utils::anyOf(mcuTargets, [this](const McuTarget *target) {
|
||||||
const QString envVar = qtForMCUsSdkPackage->environmentVariableName();
|
return !upgradeableKits(target, this->qtForMCUsSdkPackage).empty() &&
|
||||||
const QString path = qtForMCUsSdkPackage->path();
|
matchingKits(target, this->qtForMCUsSdkPackage).empty();
|
||||||
for (auto target: qAsConst(this->mcuTargets)) {
|
|
||||||
const auto kitsForTarget = existingKits(target, false);
|
|
||||||
if (!kitsForTarget.empty() &&
|
|
||||||
Utils::allOf(kitsForTarget, [&target, &envVar, &path](const Kit *kit) {
|
|
||||||
return kitQulVersion(kit) != target->qulVersion() ||
|
|
||||||
kitDependencyPath(kit,envVar) != path;
|
|
||||||
}))
|
}))
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (performCheck())
|
|
||||||
upgradeKits(askForKitUpgrades());
|
upgradeKits(askForKitUpgrades());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1119,29 +1121,16 @@ void McuSupportOptions::upgradeKits(UpgradeOption upgradeOption)
|
|||||||
QVector<McuTarget*> mcuTargets;
|
QVector<McuTarget*> mcuTargets;
|
||||||
Sdk::targetsAndPackages(dir, &packages, &mcuTargets);
|
Sdk::targetsAndPackages(dir, &packages, &mcuTargets);
|
||||||
|
|
||||||
const QString envVar = qtForMCUsPackage->environmentVariableName();
|
|
||||||
const QString path = qtForMCUsPackage->path();
|
|
||||||
|
|
||||||
for (auto target: qAsConst(mcuTargets)) {
|
for (auto target: qAsConst(mcuTargets)) {
|
||||||
const auto kitsForTarget = existingKits(target, false);
|
if (!matchingKits(target, qtForMCUsPackage).empty())
|
||||||
if (Utils::anyOf(kitsForTarget, [&target, &envVar, &path](const Kit *kit) {
|
|
||||||
return kitQulVersion(kit) == target->qulVersion() && kitDependencyPath(kit, envVar) == path;
|
|
||||||
})) {
|
|
||||||
// already up-to-date
|
// already up-to-date
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if (!kitsForTarget.empty()) {
|
const auto kits = upgradeableKits(target, qtForMCUsPackage);
|
||||||
for (auto existingKit : kitsForTarget) {
|
if (!kits.empty()) {
|
||||||
switch (upgradeOption) {
|
if (upgradeOption == Replace)
|
||||||
case Keep:
|
for (auto existingKit : kits)
|
||||||
existingKit->setAutoDetected(false);
|
|
||||||
break;
|
|
||||||
case Replace:
|
|
||||||
KitManager::deregisterKit(existingKit);
|
KitManager::deregisterKit(existingKit);
|
||||||
break;
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (target->isValid())
|
if (target->isValid())
|
||||||
newKit(target, qtForMCUsPackage);
|
newKit(target, qtForMCUsPackage);
|
||||||
@@ -1154,6 +1143,13 @@ void McuSupportOptions::upgradeKits(UpgradeOption upgradeOption)
|
|||||||
delete qtForMCUsPackage;
|
delete qtForMCUsPackage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void McuSupportOptions::upgradeKitInPlace(ProjectExplorer::Kit *kit, const McuTarget *mcuTarget, const McuPackage *qtForMCUsSdk)
|
||||||
|
{
|
||||||
|
setKitProperties(kitName(mcuTarget), kit, mcuTarget, qtForMCUsSdk->path());
|
||||||
|
setKitEnvironment(kit, mcuTarget, qtForMCUsSdk);
|
||||||
|
setKitDependencies(kit, mcuTarget, qtForMCUsSdk);
|
||||||
|
}
|
||||||
|
|
||||||
void McuSupportOptions::fixKitsDependencies()
|
void McuSupportOptions::fixKitsDependencies()
|
||||||
{
|
{
|
||||||
auto qtForMCUsPackage = Sdk::createQtForMCUsPackage();
|
auto qtForMCUsPackage = Sdk::createQtForMCUsPackage();
|
||||||
@@ -1184,6 +1180,10 @@ void McuSupportOptions::fixExistingKits()
|
|||||||
if (!kit->hasValue(Constants::KIT_MCUTARGET_KITVERSION_KEY) )
|
if (!kit->hasValue(Constants::KIT_MCUTARGET_KITVERSION_KEY) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (kit->isAutoDetected()) {
|
||||||
|
kit->setAutoDetected(false);
|
||||||
|
}
|
||||||
|
|
||||||
// Check if the MCU kits are flagged as supplying a QtQuick import path, in order
|
// Check if the MCU kits are flagged as supplying a QtQuick import path, in order
|
||||||
// to tell the QMLJS code-model that it won't need to add a fall-back import
|
// to tell the QMLJS code-model that it won't need to add a fall-back import
|
||||||
// path.
|
// path.
|
||||||
|
@@ -222,7 +222,9 @@ public:
|
|||||||
|
|
||||||
static QString kitName(const McuTarget* mcuTarget);
|
static QString kitName(const McuTarget* mcuTarget);
|
||||||
|
|
||||||
static QList<ProjectExplorer::Kit *> existingKits(const McuTarget *mcuTarget, bool autoDetectedOnly = true);
|
static QList<ProjectExplorer::Kit *> existingKits(const McuTarget *mcuTarget);
|
||||||
|
static QList<ProjectExplorer::Kit *> matchingKits(const McuTarget *mcuTarget, const McuPackage *qtForMCUsSdkPackage);
|
||||||
|
static QList<ProjectExplorer::Kit *> upgradeableKits(const McuTarget *mcuTarget, const McuPackage *qtForMCUsSdkPackage);
|
||||||
static QList<ProjectExplorer::Kit *> kitsWithMismatchedDependencies(const McuTarget *mcuTarget);
|
static QList<ProjectExplorer::Kit *> kitsWithMismatchedDependencies(const McuTarget *mcuTarget);
|
||||||
static QList<ProjectExplorer::Kit *> outdatedKits();
|
static QList<ProjectExplorer::Kit *> outdatedKits();
|
||||||
static void removeOutdatedKits();
|
static void removeOutdatedKits();
|
||||||
@@ -230,6 +232,7 @@ public:
|
|||||||
static void createAutomaticKits();
|
static void createAutomaticKits();
|
||||||
static UpgradeOption askForKitUpgrades();
|
static UpgradeOption askForKitUpgrades();
|
||||||
static void upgradeKits(UpgradeOption upgradeOption);
|
static void upgradeKits(UpgradeOption upgradeOption);
|
||||||
|
static void upgradeKitInPlace(ProjectExplorer::Kit *kit, const McuTarget *mcuTarget, const McuPackage *qtForMCUsSdk);
|
||||||
static void fixKitsDependencies();
|
static void fixKitsDependencies();
|
||||||
void checkUpgradeableKits();
|
void checkUpgradeableKits();
|
||||||
static void fixExistingKits();
|
static void fixExistingKits();
|
||||||
@@ -239,6 +242,8 @@ public:
|
|||||||
|
|
||||||
static const QVersionNumber &minimalQulVersion();
|
static const QVersionNumber &minimalQulVersion();
|
||||||
|
|
||||||
|
static QVersionNumber kitQulVersion(const ProjectExplorer::Kit *kit);
|
||||||
|
static bool kitUpToDate(const ProjectExplorer::Kit *kit, const McuTarget *mcuTarget, const McuPackage *qtForMCUsSdkPackage);
|
||||||
private:
|
private:
|
||||||
void deletePackagesAndTargets();
|
void deletePackagesAndTargets();
|
||||||
|
|
||||||
|
@@ -83,7 +83,7 @@ private:
|
|||||||
Utils::InfoLabel *m_statusInfoLabel = nullptr;
|
Utils::InfoLabel *m_statusInfoLabel = nullptr;
|
||||||
Utils::InfoLabel *m_mcuTargetsInfoLabel = nullptr;
|
Utils::InfoLabel *m_mcuTargetsInfoLabel = nullptr;
|
||||||
QPushButton *m_kitCreationPushButton = nullptr;
|
QPushButton *m_kitCreationPushButton = nullptr;
|
||||||
QPushButton *m_kitRemovalPushButton = nullptr;
|
QPushButton *m_kitUpdatePushButton = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
McuSupportOptionsWidget::McuSupportOptionsWidget()
|
McuSupportOptionsWidget::McuSupportOptionsWidget()
|
||||||
@@ -157,15 +157,15 @@ McuSupportOptionsWidget::McuSupportOptionsWidget()
|
|||||||
McuSupportOptions::registerQchFiles();
|
McuSupportOptions::registerQchFiles();
|
||||||
updateStatus();
|
updateStatus();
|
||||||
});
|
});
|
||||||
m_kitRemovalPushButton = new QPushButton(tr("Remove Kit"));
|
m_kitUpdatePushButton = new QPushButton(tr("Update Kit"));
|
||||||
m_kitRemovalPushButton->setSizePolicy(m_kitCreationPushButton->sizePolicy());
|
m_kitUpdatePushButton->setSizePolicy(m_kitCreationPushButton->sizePolicy());
|
||||||
connect(m_kitRemovalPushButton, &QPushButton::clicked, this, [this] {
|
connect(m_kitUpdatePushButton, &QPushButton::clicked, this, [this] {
|
||||||
for (auto existingKit : McuSupportOptions::existingKits(currentMcuTarget()))
|
for (auto kit: McuSupportOptions::upgradeableKits(currentMcuTarget(), m_options.qtForMCUsSdkPackage))
|
||||||
ProjectExplorer::KitManager::deregisterKit(existingKit);
|
m_options.upgradeKitInPlace(kit, currentMcuTarget(), m_options.qtForMCUsSdkPackage);
|
||||||
updateStatus();
|
updateStatus();
|
||||||
});
|
});
|
||||||
vLayout->addWidget(m_kitCreationPushButton);
|
vLayout->addWidget(m_kitCreationPushButton);
|
||||||
vLayout->addWidget(m_kitRemovalPushButton);
|
vLayout->addWidget(m_kitUpdatePushButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
mainLayout->addStretch();
|
mainLayout->addStretch();
|
||||||
@@ -207,17 +207,27 @@ void McuSupportOptionsWidget::updateStatus()
|
|||||||
if (mcuTarget) {
|
if (mcuTarget) {
|
||||||
const bool mcuTargetValid = mcuTarget->isValid();
|
const bool mcuTargetValid = mcuTarget->isValid();
|
||||||
m_kitCreationPushButton->setVisible(mcuTargetValid);
|
m_kitCreationPushButton->setVisible(mcuTargetValid);
|
||||||
m_kitRemovalPushButton->setVisible(mcuTargetValid);
|
m_kitUpdatePushButton->setVisible(mcuTargetValid);
|
||||||
if (mcuTargetValid) {
|
if (mcuTargetValid) {
|
||||||
const bool mcuTargetKitExists = !McuSupportOptions::existingKits(mcuTarget).isEmpty();
|
const bool hasMatchingKits = !McuSupportOptions::matchingKits(
|
||||||
m_kitCreationInfoLabel->setType(mcuTargetKitExists
|
mcuTarget, m_options.qtForMCUsSdkPackage).isEmpty();
|
||||||
|
const bool hasUpgradeableKits = !hasMatchingKits &&
|
||||||
|
!McuSupportOptions::upgradeableKits(
|
||||||
|
mcuTarget, m_options.qtForMCUsSdkPackage).isEmpty();
|
||||||
|
|
||||||
|
m_kitCreationPushButton->setEnabled(!hasMatchingKits);
|
||||||
|
m_kitUpdatePushButton->setEnabled(hasUpgradeableKits);
|
||||||
|
|
||||||
|
m_kitCreationInfoLabel->setType(!hasMatchingKits
|
||||||
? Utils::InfoLabel::Information
|
? Utils::InfoLabel::Information
|
||||||
: Utils::InfoLabel::Ok);
|
: Utils::InfoLabel::Ok);
|
||||||
m_kitCreationInfoLabel->setText(mcuTargetKitExists
|
|
||||||
? tr("A kit for the selected target exists.")
|
m_kitCreationInfoLabel->setText(
|
||||||
|
hasMatchingKits ?
|
||||||
|
tr("A kit for the selected target and SDK version already exists.")
|
||||||
|
: hasUpgradeableKits ?
|
||||||
|
tr("Kits for a different SDK version exist.")
|
||||||
: tr("A kit for the selected target can be created."));
|
: tr("A kit for the selected target can be created."));
|
||||||
m_kitCreationPushButton->setEnabled(!mcuTargetKitExists);
|
|
||||||
m_kitRemovalPushButton->setEnabled(mcuTargetKitExists);
|
|
||||||
} else {
|
} else {
|
||||||
m_kitCreationInfoLabel->setType(Utils::InfoLabel::NotOk);
|
m_kitCreationInfoLabel->setType(Utils::InfoLabel::NotOk);
|
||||||
m_kitCreationInfoLabel->setText("Provide the package paths in order to create a kit "
|
m_kitCreationInfoLabel->setText("Provide the package paths in order to create a kit "
|
||||||
|
Reference in New Issue
Block a user