From 17977b3de72e1d02e1c284831c6e7e01b37ee00b Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@qt.io>
Date: Mon, 17 Oct 2016 14:29:40 +0200
Subject: [PATCH] CMake: Turn CMakeConfigItem into a CMake argument

Add a method to turn a CMakeConfigItem into a string suitable to be passed
to CMake.

Change-Id: Ia7834f1c2fad387dd6e6eaa3863f93385d48ca71
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
---
 .../cmakeprojectmanager/builddirmanager.cpp   | 26 +------------------
 .../cmakeprojectmanager/cmakeconfigitem.cpp   |  5 ++++
 .../cmakeprojectmanager/cmakeconfigitem.h     |  1 +
 3 files changed, 7 insertions(+), 25 deletions(-)

diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.cpp b/src/plugins/cmakeprojectmanager/builddirmanager.cpp
index 9c03f543c0a..cdce5ee44f3 100644
--- a/src/plugins/cmakeprojectmanager/builddirmanager.cpp
+++ b/src/plugins/cmakeprojectmanager/builddirmanager.cpp
@@ -72,31 +72,7 @@ namespace Internal {
 
 static QStringList toArguments(const CMakeConfig &config, const Kit *k) {
     return Utils::transform(config, [k](const CMakeConfigItem &i) -> QString {
-        QString a = QString::fromLatin1("-D");
-        a.append(QString::fromUtf8(i.key));
-        switch (i.type) {
-        case CMakeConfigItem::FILEPATH:
-            a.append(QLatin1String(":FILEPATH="));
-            break;
-        case CMakeConfigItem::PATH:
-            a.append(QLatin1String(":PATH="));
-            break;
-        case CMakeConfigItem::BOOL:
-            a.append(QLatin1String(":BOOL="));
-            break;
-        case CMakeConfigItem::STRING:
-            a.append(QLatin1String(":STRING="));
-            break;
-        case CMakeConfigItem::INTERNAL:
-            a.append(QLatin1String(":INTERNAL="));
-            break;
-        case CMakeConfigItem::STATIC:
-            a.append(QLatin1String(":STATIC="));
-            break;
-        }
-        a.append(i.expandedValue(k));
-
-        return a;
+        return i.toArgument(k->macroExpander());
     });
 }
 
diff --git a/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp b/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp
index 226b2b69152..fdf1fc0e458 100644
--- a/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp
@@ -245,6 +245,11 @@ QString CMakeConfigItem::toString(const Utils::MacroExpander *expander) const
     return QString::fromUtf8(key) + QLatin1Char(':') + typeStr + QLatin1Char('=') + expandedValue;
 }
 
+QString CMakeConfigItem::toArgument(const Utils::MacroExpander *expander) const
+{
+    return "-D" + toString(expander);
+}
+
 bool CMakeConfigItem::operator==(const CMakeConfigItem &o) const
 {
     // type, isAdvanced and documentation do not matter for a match!
diff --git a/src/plugins/cmakeprojectmanager/cmakeconfigitem.h b/src/plugins/cmakeprojectmanager/cmakeconfigitem.h
index bbee1eb8b16..24e5c54cd9d 100644
--- a/src/plugins/cmakeprojectmanager/cmakeconfigitem.h
+++ b/src/plugins/cmakeprojectmanager/cmakeconfigitem.h
@@ -55,6 +55,7 @@ public:
     static std::function<bool(const CMakeConfigItem &a, const CMakeConfigItem &b)> sortOperator();
     static CMakeConfigItem fromString(const QString &s);
     QString toString(const Utils::MacroExpander *expander = nullptr) const;
+    QString toArgument(const Utils::MacroExpander *expander = nullptr) const;
 
     bool operator==(const CMakeConfigItem &o) const;
 
-- 
GitLab