diff options
Diffstat (limited to 'src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp')
-rw-r--r-- | src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp index 636f0c47f5..abd515f1a0 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp @@ -676,6 +676,24 @@ void CMakeBuildSystem::updateFallbackProjectData() qCDebug(cmakeBuildSystemLog) << "All fallback CMake project data up to date."; } +void CMakeBuildSystem::updateCMakeConfiguration(QString &errorMessage) +{ + CMakeConfig cmakeConfig = m_reader.takeParsedConfiguration(errorMessage); + for (auto &ci : cmakeConfig) + ci.inCMakeCache = true; + if (!errorMessage.isEmpty()) { + const CMakeConfig changes = cmakeBuildConfiguration()->configurationChanges(); + for (const auto &ci : changes) { + const bool haveConfigItem = Utils::contains(cmakeConfig, [ci](const CMakeConfigItem& i) { + return i.key == ci.key; + }); + if (!haveConfigItem) + cmakeConfig.append(ci); + } + } + cmakeBuildConfiguration()->setConfigurationFromCMake(cmakeConfig); +} + void CMakeBuildSystem::handleParsingSucceeded() { if (!cmakeBuildConfiguration()->isActive()) { @@ -699,10 +717,7 @@ void CMakeBuildSystem::handleParsingSucceeded() } { - CMakeConfig cmakeConfig = m_reader.takeParsedConfiguration(errorMessage); - for (auto &ci : cmakeConfig) - ci.inCMakeCache = true; - cmakeBuildConfiguration()->setConfigurationFromCMake(cmakeConfig); + updateCMakeConfiguration(errorMessage); checkAndReportError(errorMessage); } @@ -722,10 +737,7 @@ void CMakeBuildSystem::handleParsingFailed(const QString &msg) cmakeBuildConfiguration()->setError(msg); QString errorMessage; - CMakeConfig cmakeConfig = m_reader.takeParsedConfiguration(errorMessage); - for (auto &ci : cmakeConfig) - ci.inCMakeCache = true; - cmakeBuildConfiguration()->setConfigurationFromCMake(cmakeConfig); + updateCMakeConfiguration(errorMessage); // ignore errorMessage here, we already got one. m_ctestPath.clear(); |