aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp')
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp51
1 files changed, 50 insertions, 1 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp b/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp
index 7fdb7b2d60..f979c283f3 100644
--- a/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp
@@ -32,7 +32,8 @@
#include <utils/macroexpander.h>
#include <utils/qtcassert.h>
-#include <QString>
+#include <QFile>
+#include <QIODevice>
namespace CMakeProjectManager {
@@ -283,6 +284,54 @@ static QByteArrayList splitCMakeCacheLine(const QByteArray &line) {
<< line.mid(equalPos + 1);
}
+static CMakeConfigItem setItemFromString(const QString &input)
+{
+ return CMakeConfigItem::fromString(input);
+}
+
+static CMakeConfigItem unsetItemFromString(const QString &input)
+{
+ CMakeConfigItem item(input.toUtf8(), QByteArray());
+ item.isUnset = true;
+ return item;
+}
+
+QList<CMakeConfigItem> CMakeConfigItem::itemsFromArguments(const QStringList &list)
+{
+ CMakeConfig result;
+ bool inSet = false;
+ bool inUnset = false;
+ for (const QString &i : list) {
+ if (inSet) {
+ inSet = false;
+ result.append(setItemFromString(i));
+ continue;
+ }
+ if (inUnset) {
+ inUnset = false;
+ result.append(unsetItemFromString(i));
+ continue;
+ }
+ if (i == "-U") {
+ inUnset = true;
+ continue;
+ }
+ if (i == "-D") {
+ inSet = true;
+ continue;
+ }
+ if (i.startsWith("-U")) {
+ result.append(unsetItemFromString(i.mid(2)));
+ continue;
+ }
+ if (i.startsWith("-D")) {
+ result.append(setItemFromString(i.mid(2)));
+ }
+ // ignore everything else as that does not define a configuration option
+ }
+ return result;
+}
+
QList<CMakeConfigItem> CMakeConfigItem::itemsFromFile(const Utils::FilePath &cacheFile, QString *errorMessage)
{
CMakeConfig result;