From ec4d96a14b227c0e2d809e20ef28d7d4675b85af Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Sun, 23 Oct 2022 16:11:52 +0200 Subject: [PATCH] CMakePM: Accept broken kits for CMakePresets For CMakePresets if a preset is broken we should not create a preset kit for every build type. Instead reuse the broken kit created by the first build type. Task-number: QTCREATORBUG-28295 Change-Id: I038fbb23817834f59ac73ccd2f9953f1a412b656 Reviewed-by: Alexandru Croitor Reviewed-by: --- .../cmakeprojectimporter.cpp | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp index e82491953d8..c8415a51111 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp @@ -652,22 +652,24 @@ bool CMakeProjectImporter::matchKit(void *directoryData, const Kit *k) const if (data->qt.qt && QtSupport::QtKitAspect::qtVersionId(k) != data->qt.qt->uniqueId()) return false; - const QList allLanguages = ToolChainManager::allLanguages(); - for (const ToolChainDescription &tcd : data->toolChains) { - if (!Utils::contains(allLanguages, [&tcd](const Id& language) {return language == tcd.language;})) - continue; - ToolChain *tc = ToolChainKitAspect::toolChain(k, tcd.language); - if (!tc || !tc->matchesCompilerCommand(tcd.compilerPath)) { - return false; - } - } - + bool haveCMakePreset = false; if (!data->cmakePreset.isEmpty()) { auto presetConfigItem = CMakeConfigurationKitAspect::cmakePresetConfigItem(k); if (data->cmakePreset != presetConfigItem.expandedValue(k)) return false; ensureBuildDirectory(*data, k); + haveCMakePreset = true; + } + + const QList allLanguages = ToolChainManager::allLanguages(); + for (const ToolChainDescription &tcd : data->toolChains) { + if (!Utils::contains(allLanguages, [&tcd](const Id& language) {return language == tcd.language;})) + continue; + ToolChain *tc = ToolChainKitAspect::toolChain(k, tcd.language); + if ((!tc || !tc->matchesCompilerCommand(tcd.compilerPath)) && !haveCMakePreset) { + return false; + } } qCDebug(cmInputLog) << k->displayName()