diff options
Diffstat (limited to 'src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp')
-rw-r--r-- | src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp | 55 |
1 files changed, 41 insertions, 14 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp index 2d9631eb40..450d154010 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp @@ -147,19 +147,30 @@ static QString displayPresetName(const QString &presetName) FilePaths CMakeProjectImporter::importCandidates() { - FilePaths candidates; + FilePaths candidates = presetCandidates(); + + if (candidates.isEmpty()) { + candidates << scanDirectory(projectFilePath().absolutePath(), "build"); + + const QList<Kit *> kits = KitManager::kits(); + for (const Kit *k : kits) { + FilePath shadowBuildDirectory + = CMakeBuildConfiguration::shadowBuildDirectory(projectFilePath(), + k, + QString(), + BuildConfiguration::Unknown); + candidates << scanDirectory(shadowBuildDirectory.absolutePath(), QString()); + } + } - candidates << scanDirectory(projectFilePath().absolutePath(), "build"); + const FilePaths finalists = Utils::filteredUnique(candidates); + qCInfo(cmInputLog) << "import candidates:" << finalists; + return finalists; +} - const QList<Kit *> kits = KitManager::kits(); - for (const Kit *k : kits) { - FilePath shadowBuildDirectory - = CMakeBuildConfiguration::shadowBuildDirectory(projectFilePath(), - k, - QString(), - BuildConfiguration::Unknown); - candidates << scanDirectory(shadowBuildDirectory.absolutePath(), QString()); - } +FilePaths CMakeProjectImporter::presetCandidates() +{ + FilePaths candidates; for (const auto &configPreset : m_project->presetsData().configurePresets) { if (configPreset.hidden.value()) @@ -190,9 +201,9 @@ FilePaths CMakeProjectImporter::importCandidates() } } - const FilePaths finalists = Utils::filteredUnique(candidates); - qCInfo(cmInputLog) << "import candidates:" << finalists; - return finalists; + m_hasCMakePresets = !candidates.isEmpty(); + + return candidates; } Target *CMakeProjectImporter::preferredTarget(const QList<Target *> &possibleTargets) @@ -210,6 +221,22 @@ Target *CMakeProjectImporter::preferredTarget(const QList<Target *> &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, |