From 5d69bdfde72d39acb1ad0ee4092d0d8fe7461d8e Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 13 May 2016 13:34:18 +0200 Subject: [PATCH] CMake: Cache CMakeCache.txt Change-Id: Ib3e7a9943d15a2e90afd29642b666892ba7b0613 Reviewed-by: Tim Jenssen --- .../cmakeprojectmanager/builddirmanager.cpp | 29 +++++++++---------- .../cmakeprojectmanager/builddirmanager.h | 1 + 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.cpp b/src/plugins/cmakeprojectmanager/builddirmanager.cpp index a15e2204593..cec3fce743f 100644 --- a/src/plugins/cmakeprojectmanager/builddirmanager.cpp +++ b/src/plugins/cmakeprojectmanager/builddirmanager.cpp @@ -172,6 +172,7 @@ void BuildDirManager::resetData() { m_hasData = false; + m_cmakeCache.clear(); m_projectName.clear(); m_buildTargets.clear(); m_watchedFiles.clear(); @@ -271,21 +272,19 @@ void BuildDirManager::clearFiles() CMakeConfig BuildDirManager::parsedConfiguration() const { - if (!m_hasData) - return CMakeConfig(); - - Utils::FileName cacheFile = workDirectory(); - cacheFile.appendPath(QLatin1String("CMakeCache.txt")); - QString errorMessage; - CMakeConfig result = parseConfiguration(cacheFile, &errorMessage); - if (!errorMessage.isEmpty()) - emit errorOccured(errorMessage); - const Utils::FileName sourceOfBuildDir - = Utils::FileName::fromUtf8(CMakeConfigItem::valueOf("CMAKE_HOME_DIRECTORY", result)); - if (sourceOfBuildDir != sourceDirectory()) // Use case-insensitive compare where appropriate - emit errorOccured(tr("The build directory is not for %1").arg(sourceDirectory().toUserOutput())); - - return result; + if (m_cmakeCache.isEmpty()) { + Utils::FileName cacheFile = workDirectory(); + cacheFile.appendPath(QLatin1String("CMakeCache.txt")); + QString errorMessage; + m_cmakeCache = parseConfiguration(cacheFile, &errorMessage); + if (!errorMessage.isEmpty()) + emit errorOccured(errorMessage); + const Utils::FileName sourceOfBuildDir + = Utils::FileName::fromUtf8(CMakeConfigItem::valueOf("CMAKE_HOME_DIRECTORY", m_cmakeCache)); + if (sourceOfBuildDir != sourceDirectory()) // Use case-insensitive compare where appropriate + emit errorOccured(tr("The build directory is not for %1").arg(sourceDirectory().toUserOutput())); + } + return m_cmakeCache; } void BuildDirManager::stopProcess() diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.h b/src/plugins/cmakeprojectmanager/builddirmanager.h index 686face66b1..f88b21580d4 100644 --- a/src/plugins/cmakeprojectmanager/builddirmanager.h +++ b/src/plugins/cmakeprojectmanager/builddirmanager.h @@ -112,6 +112,7 @@ private: const CMakeBuildConfiguration *m_buildConfiguration = nullptr; Utils::QtcProcess *m_cmakeProcess = nullptr; QTemporaryDir *m_tempDir = nullptr; + mutable CMakeConfig m_cmakeCache; QSet m_watchedFiles; QString m_projectName;