From 99a884051f4a0130836129a95b0468297120d950 Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@theqtcompany.com>
Date: Thu, 10 Mar 2016 17:33:45 +0100
Subject: [PATCH] CMake: Export internal cmake cache values

Those are useful for the cmake internal classes, but need to be filtered
out when they are going to get displayed to the users.

Change-Id: I0bb62fa840fa8cb9e6f3b47300ba85a2b186bad0
Reviewed-by: Alexander Drozdov <adrozdoff@gmail.com>
Reviewed-by: Tim Jenssen <tim.jenssen@theqtcompany.com>
Reviewed-by: Niels Weber <niels.weber@theqtcompany.com>
---
 .../cmakeprojectmanager/builddirmanager.cpp   | 19 ++++---------------
 .../cmakeprojectmanager/builddirmanager.h     |  1 -
 .../cmakebuildconfiguration.cpp               |  4 +++-
 3 files changed, 7 insertions(+), 17 deletions(-)

diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.cpp b/src/plugins/cmakeprojectmanager/builddirmanager.cpp
index d4944d75337..e5b620fc85a 100644
--- a/src/plugins/cmakeprojectmanager/builddirmanager.cpp
+++ b/src/plugins/cmakeprojectmanager/builddirmanager.cpp
@@ -273,9 +273,11 @@ CMakeConfig BuildDirManager::parsedConfiguration() const
     Utils::FileName cacheFile = workDirectory();
     cacheFile.appendPath(QLatin1String("CMakeCache.txt"));
     QString errorMessage;
-    CMakeConfig result = parseConfiguration(cacheFile, sourceDirectory(), &errorMessage);
+    CMakeConfig result = parseConfiguration(cacheFile, &errorMessage);
     if (!errorMessage.isEmpty())
         emit errorOccured(errorMessage);
+    if (CMakeConfigItem::valueOf("CMAKE_HOME_DIRECTORY", result) != sourceDirectory().toString().toUtf8())
+        emit errorOccured(tr("The build directory is not for %1").arg(sourceDirectory().toUserOutput()));
 
     return result;
 }
@@ -542,7 +544,6 @@ static CMakeConfigItem::Type fromByteArray(const QByteArray &type) {
 }
 
 CMakeConfig BuildDirManager::parseConfiguration(const Utils::FileName &cacheFile,
-                                                const Utils::FileName &sourceDir,
                                                 QString *errorMessage)
 {
     CMakeConfig result;
@@ -579,19 +580,7 @@ CMakeConfig BuildDirManager::parseConfiguration(const Utils::FileName &cacheFile
             advancedSet.insert(key.left(key.count() - 9 /* "-ADVANCED" */));
         } else {
             CMakeConfigItem::Type t = fromByteArray(type);
-            if (t != CMakeConfigItem::INTERNAL)
-                result << CMakeConfigItem(key, t, documentation, value);
-
-            // Sanity checks:
-            if (key == "CMAKE_HOME_DIRECTORY") {
-                const Utils::FileName actualSourceDir = Utils::FileName::fromUserInput(QString::fromUtf8(value));
-                if (actualSourceDir != sourceDir) {
-                    if (errorMessage)
-                        *errorMessage = tr("Build directory contains a build of the wrong project (%1).")
-                            .arg(actualSourceDir.toUserOutput());
-                    return CMakeConfig();
-                }
-            }
+            result << CMakeConfigItem(key, t, documentation, value);
         }
     }
 
diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.h b/src/plugins/cmakeprojectmanager/builddirmanager.h
index 94a4c7b2b8a..77d0fc1dc0c 100644
--- a/src/plugins/cmakeprojectmanager/builddirmanager.h
+++ b/src/plugins/cmakeprojectmanager/builddirmanager.h
@@ -88,7 +88,6 @@ public:
     CMakeConfig parsedConfiguration() const;
 
     static CMakeConfig parseConfiguration(const Utils::FileName &cacheFile,
-                                          const Utils::FileName &sourceDir,
                                           QString *errorMessage);
 
 signals:
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
index 8f17f2937db..c66779c2c5f 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
@@ -197,7 +197,9 @@ QList<ConfigModel::DataItem> CMakeBuildConfiguration::completeCMakeConfiguration
     if (m_completeConfigurationCache.isEmpty())
         m_completeConfigurationCache = m_buildDirManager->parsedConfiguration();
 
-    return Utils::transform(m_completeConfigurationCache, [](const CMakeConfigItem &i) {
+    CMakeConfig cache = Utils::filtered(m_completeConfigurationCache,
+                                        [](const CMakeConfigItem &i) { return i.type != CMakeConfigItem::INTERNAL; });
+    return Utils::transform(cache, [](const CMakeConfigItem &i) {
         ConfigModel::DataItem j;
         j.key = QString::fromUtf8(i.key);
         j.value = QString::fromUtf8(i.value);
-- 
GitLab