diff options
author | Alexis Jeandet <alexis.jeandet@member.fsf.org> | 2020-05-01 18:20:56 +0200 |
---|---|---|
committer | Alexis Jeandet <alexis.jeandet@member.fsf.org> | 2020-06-08 09:55:17 +0000 |
commit | 77d7bb5014a79db539f82d95392d07c6bda9d6a8 (patch) | |
tree | 8249ab051adc2962203355c8ec59abde420106d8 /src/plugins/mesonprojectmanager/settings/tools/toolssettingsaccessor.cpp | |
parent | a8f38f8aab5303bb6e0c6575508661b51b7aebc3 (diff) | |
download | qt-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.cpp | 100 |
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 |