summaryrefslogtreecommitdiff
path: root/src/plugins/mesonprojectmanager/settings/tools/toolssettingsaccessor.cpp
diff options
context:
space:
mode:
authorAlexis Jeandet <alexis.jeandet@member.fsf.org>2020-05-01 18:20:56 +0200
committerAlexis Jeandet <alexis.jeandet@member.fsf.org>2020-06-08 09:55:17 +0000
commit77d7bb5014a79db539f82d95392d07c6bda9d6a8 (patch)
tree8249ab051adc2962203355c8ec59abde420106d8 /src/plugins/mesonprojectmanager/settings/tools/toolssettingsaccessor.cpp
parenta8f38f8aab5303bb6e0c6575508661b51b7aebc3 (diff)
downloadqt-creator-77d7bb5014a79db539f82d95392d07c6bda9d6a8.tar.gz
Meson build plugin initial support
Most basic project management is implemented: - Project config/build - Build options accessible to user - Lists most build targets - Meson and Ninja added to kit setup - Basic project file tree with files known by Meson - Some basic meson and ninja process output parsing - Some project templates Missing features, that will come later: - Configurable project tree layout - Locators for Meson - Build importer - Access to Machine files for better user fine tuning - ... Fixes: QTCREATORBUG-18117 Change-Id: I2811e71562c113fb0fc6b6177bcf0698fa71ef63 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Diffstat (limited to 'src/plugins/mesonprojectmanager/settings/tools/toolssettingsaccessor.cpp')
-rw-r--r--src/plugins/mesonprojectmanager/settings/tools/toolssettingsaccessor.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/plugins/mesonprojectmanager/settings/tools/toolssettingsaccessor.cpp b/src/plugins/mesonprojectmanager/settings/tools/toolssettingsaccessor.cpp
new file mode 100644
index 0000000000..7027517812
--- /dev/null
+++ b/src/plugins/mesonprojectmanager/settings/tools/toolssettingsaccessor.cpp
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 Alexis Jeandet.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "toolssettingsaccessor.h"
+#include <app/app_version.h>
+#include <coreplugin/icore.h>
+#include <iterator>
+#include <mesonpluginconstants.h>
+#include <utils/fileutils.h>
+#include <vector>
+#include <QCoreApplication>
+#include <QVariantMap>
+
+namespace MesonProjectManager {
+namespace Internal {
+namespace {
+inline QString entryName(int index)
+{
+ using namespace Constants;
+ return QString("%1%2").arg(ToolsSettings::ENTRY_KEY).arg(index);
+}
+} // namespace
+
+ToolsSettingsAccessor::ToolsSettingsAccessor()
+ : UpgradingSettingsAccessor("QtCreatorMesonTools",
+ QCoreApplication::translate("MesonProjectManager::MesonToolManager",
+ "Meson"),
+ Core::Constants::IDE_DISPLAY_NAME)
+{
+ setBaseFilePath(Utils::FilePath::fromString(Core::ICore::userResourcePath())
+ .pathAppended(Constants::ToolsSettings::FILENAME));
+}
+
+void ToolsSettingsAccessor::saveMesonTools(const std::vector<MesonTools::Tool_t> &tools,
+ QWidget *parent)
+{
+ using namespace Constants;
+ QVariantMap data;
+ int entry_count = 0;
+ std::for_each(std::cbegin(tools),
+ std::cend(tools),
+ [&data, &entry_count](const MesonTools::Tool_t &tool) {
+ auto asMeson = std::dynamic_pointer_cast<MesonWrapper>(tool);
+ if (asMeson)
+ data.insert(entryName(entry_count), toVariantMap<MesonWrapper>(*asMeson));
+ else {
+ auto asNinja = std::dynamic_pointer_cast<NinjaWrapper>(tool);
+ if (asNinja)
+ data.insert(entryName(entry_count),
+ toVariantMap<NinjaWrapper>(*asNinja));
+ }
+ entry_count++;
+ });
+ data.insert(ToolsSettings::ENTRY_COUNT, entry_count);
+ saveSettings(data, parent);
+}
+
+std::vector<MesonTools::Tool_t> ToolsSettingsAccessor::loadMesonTools(QWidget *parent)
+{
+ using namespace Constants;
+ auto data = restoreSettings(parent);
+ auto entry_count = data.value(ToolsSettings::ENTRY_COUNT, 0).toInt();
+ std::vector<MesonTools::Tool_t> result;
+ for (auto toolIndex = 0; toolIndex < entry_count; toolIndex++) {
+ auto name = entryName(toolIndex);
+ if (data.contains(name)) {
+ const auto map = data[name].toMap();
+ auto type = map.value(ToolsSettings::TOOL_TYPE_KEY, ToolsSettings::TOOL_TYPE_MESON);
+ if (type == ToolsSettings::TOOL_TYPE_NINJA)
+ result.emplace_back(fromVariantMap<NinjaWrapper *>(data[name].toMap()));
+ else
+ result.emplace_back(fromVariantMap<MesonWrapper *>(data[name].toMap()));
+ }
+ }
+ return result;
+}
+} // namespace Internal
+} // namespace MesonProjectManager