CMake: Allow autodetected tools to associate themselves with kits

Change-Id: I5b48ddf36ba1b9c4eb6476017be63c4d43b60627
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2021-06-22 14:08:20 +02:00
parent a10728639a
commit 6d26f4f5b0
5 changed files with 22 additions and 5 deletions

View File

@@ -272,8 +272,19 @@ Tasks CMakeKitAspect::validate(const Kit *k) const
void CMakeKitAspect::setup(Kit *k)
{
CMakeTool *tool = CMakeKitAspect::cmakeTool(k);
if (!tool)
setCMakeTool(k, defaultCMakeToolId());
if (tool)
return;
// Look for a suitable auto-detected one:
const QString id = k->autoDetectionSource();
for (CMakeTool *tool : CMakeToolManager::cmakeTools()) {
if (tool->detectionSource() == id) {
setCMakeTool(k, tool->id());
return;
}
}
setCMakeTool(k, defaultCMakeToolId());
}
void CMakeKitAspect::fix(Kit *k)

View File

@@ -109,6 +109,9 @@ public:
static Utils::FilePath searchQchFile(const Utils::FilePath &executable);
QString detectionSource() const { return m_detectionSource; }
void setDetectionSource(const QString &source) { m_detectionSource = source; }
private:
void readInformation() const;
@@ -126,6 +129,7 @@ private:
bool m_isAutoRun = true;
bool m_isAutoDetected = false;
QString m_detectionSource;
bool m_autoCreateBuildDirectory = false;
Utils::optional<ReaderType> m_readerType;

View File

@@ -177,7 +177,7 @@ void CMakeToolManager::updateDocumentation()
Core::HelpManager::registerDocumentation(docs);
}
void CMakeToolManager::registerCMakeByPath(const FilePath &cmakePath)
void CMakeToolManager::registerCMakeByPath(const FilePath &cmakePath, const QString &detectionSource)
{
const Id id = Id::fromString(cmakePath.toUserOutput());
@@ -188,6 +188,7 @@ void CMakeToolManager::registerCMakeByPath(const FilePath &cmakePath)
auto newTool = std::make_unique<CMakeTool>(CMakeTool::ManualDetection, id);
newTool->setFilePath(cmakePath);
newTool->setDisplayName(cmakePath.toUserOutput());
newTool->setDetectionSource(detectionSource);
registerCMakeTool(std::move(newTool));
}

View File

@@ -63,7 +63,7 @@ public:
static void updateDocumentation();
public slots:
void registerCMakeByPath(const Utils::FilePath &cmakePath);
void registerCMakeByPath(const Utils::FilePath &cmakePath, const QString &detectionSource);
signals:
void cmakeAdded (const Utils::Id &id);

View File

@@ -491,7 +491,8 @@ void DockerDevicePrivate::autoDetectCMake(QTextBrowser *log)
log->append(tr("Found CMake binary: %1").arg(cmake.toUserOutput()));
const bool res = QMetaObject::invokeMethod(cmakeManager,
"registerCMakeByPath",
Q_ARG(Utils::FilePath, cmake));
Q_ARG(Utils::FilePath, cmake),
Q_ARG(QString, m_data.id()));
QTC_CHECK(res);
}
}