diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp index 2ff01898cdc..450d1540102 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp @@ -201,6 +201,8 @@ FilePaths CMakeProjectImporter::presetCandidates() } } + m_hasCMakePresets = !candidates.isEmpty(); + return candidates; } @@ -219,6 +221,22 @@ Target *CMakeProjectImporter::preferredTarget(const QList &possibleTar return ProjectImporter::preferredTarget(possibleTargets); } +bool CMakeProjectImporter::filter(ProjectExplorer::Kit *k) const +{ + if (!m_hasCMakePresets) + return true; + + const auto presetConfigItem = CMakeConfigurationKitAspect::cmakePresetConfigItem(k); + if (presetConfigItem.isNull()) + return false; + + const QString presetName = presetConfigItem.expandedValue(k); + return std::find_if(m_project->presetsData().configurePresets.cbegin(), + m_project->presetsData().configurePresets.cend(), + [&presetName](const auto &preset) { return presetName == preset.name; }) + != m_project->presetsData().configurePresets.cend(); +} + static CMakeConfig configurationFromPresetProbe( const FilePath &importPath, const FilePath &sourceDirectory, diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.h b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.h index e3b329e722f..82e1835ba7b 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.h +++ b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.h @@ -24,6 +24,7 @@ public: Utils::FilePaths importCandidates() final; ProjectExplorer::Target *preferredTarget(const QList &possibleTargets) final; + bool filter(ProjectExplorer::Kit *k) const final; Utils::FilePaths presetCandidates(); private: @@ -48,6 +49,7 @@ private: const CMakeProject *m_project; Utils::TemporaryDirectory m_presetsTempDir; + bool m_hasCMakePresets = false; }; #ifdef WITH_TESTS