diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 7318c7a791f..25352f0b5d6 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -7,6 +7,7 @@ #include "cmakeprojectconstants.h" #include "cmakeprojectimporter.h" #include "cmakeprojectmanagertr.h" +#include "presetsmacros.h" #include #include @@ -301,6 +302,18 @@ void CMakeProject::readPresets() m_presetsData = combinePresets(cmakePresetsData, cmakeUserPresetsData); setupBuildPresets(m_presetsData); + + for (const auto &configPreset : m_presetsData.configurePresets) { + if (configPreset.hidden.value()) + continue; + + if (configPreset.condition) { + if (!CMakePresets::Macros::evaluatePresetCondition(configPreset, projectFilePath())) + continue; + } + m_presetsData.havePresets = true; + break; + } } bool CMakeProject::setupTarget(Target *t) diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp index 450d1540102..52ed82f8d77 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp @@ -201,8 +201,6 @@ FilePaths CMakeProjectImporter::presetCandidates() } } - m_hasCMakePresets = !candidates.isEmpty(); - return candidates; } @@ -223,7 +221,7 @@ Target *CMakeProjectImporter::preferredTarget(const QList &possibleTar bool CMakeProjectImporter::filter(ProjectExplorer::Kit *k) const { - if (!m_hasCMakePresets) + if (!m_project->presetsData().havePresets) return true; const auto presetConfigItem = CMakeConfigurationKitAspect::cmakePresetConfigItem(k); diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.h b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.h index 82e1835ba7b..63c2403f4b4 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.h +++ b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.h @@ -49,7 +49,6 @@ private: const CMakeProject *m_project; Utils::TemporaryDirectory m_presetsTempDir; - bool m_hasCMakePresets = false; }; #ifdef WITH_TESTS diff --git a/src/plugins/cmakeprojectmanager/presetsparser.h b/src/plugins/cmakeprojectmanager/presetsparser.h index 20d36e389ec..6df09014af3 100644 --- a/src/plugins/cmakeprojectmanager/presetsparser.h +++ b/src/plugins/cmakeprojectmanager/presetsparser.h @@ -140,6 +140,7 @@ class PresetsData { public: int version = 0; + bool havePresets = false; QVersionNumber cmakeMinimimRequired; QHash vendor; std::optional include;