Meson: Merge the tool wrapper files

Change-Id: I055006e29ee8c2067275e64043c7a7ffcc460390
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
hjk
2024-07-22 12:11:22 +02:00
parent d09063de87
commit 3197ef3ea6
13 changed files with 206 additions and 259 deletions

View File

@@ -3,12 +3,14 @@
#pragma once
#include "mesonpluginconstants.h"
#include "versionhelper.h"
#include <utils/commandline.h>
#include <utils/environment.h>
#include <utils/id.h>
#include <utils/qtcassert.h>
#include <utils/qtcprocess.h>
#include <utils/store.h>
#include <optional>
@@ -61,8 +63,6 @@ public:
static Version read_version(const Utils::FilePath &toolPath);
static std::optional<Utils::FilePath> findTool(const QStringList &exeNames);
template<typename T>
friend Utils::Store toVariantMap(const T &);
template<typename T>
@@ -82,5 +82,80 @@ Utils::Store toVariantMap(const T &);
template<typename T>
T fromVariantMap(const Utils::Store &);
bool run_meson(const Command &command, QIODevice *output = nullptr);
bool isSetup(const Utils::FilePath &buildPath);
class MesonWrapper final : public ToolWrapper
{
public:
using ToolWrapper::ToolWrapper;
Command setup(const Utils::FilePath &sourceDirectory,
const Utils::FilePath &buildDirectory,
const QStringList &options = {}) const;
Command configure(const Utils::FilePath &sourceDirectory,
const Utils::FilePath &buildDirectory,
const QStringList &options = {}) const;
Command regenerate(const Utils::FilePath &sourceDirectory,
const Utils::FilePath &buildDirectory) const;
Command introspect(const Utils::FilePath &sourceDirectory) const;
static std::optional<Utils::FilePath> find();
static QString toolName() { return {"Meson"}; }
};
template<>
inline Utils::Store toVariantMap<MesonWrapper>(const MesonWrapper &meson)
{
Utils::Store data;
data.insert(Constants::ToolsSettings::NAME_KEY, meson.m_name);
data.insert(Constants::ToolsSettings::EXE_KEY, meson.m_exe.toSettings());
data.insert(Constants::ToolsSettings::AUTO_DETECTED_KEY, meson.m_autoDetected);
data.insert(Constants::ToolsSettings::ID_KEY, meson.m_id.toSetting());
data.insert(Constants::ToolsSettings::TOOL_TYPE_KEY, Constants::ToolsSettings::TOOL_TYPE_MESON);
return data;
}
template<>
inline MesonWrapper *fromVariantMap<MesonWrapper *>(const Utils::Store &data)
{
return new MesonWrapper(data[Constants::ToolsSettings::NAME_KEY].toString(),
Utils::FilePath::fromSettings(data[Constants::ToolsSettings::EXE_KEY]),
Utils::Id::fromSetting(data[Constants::ToolsSettings::ID_KEY]),
data[Constants::ToolsSettings::AUTO_DETECTED_KEY].toBool());
}
class NinjaWrapper final : public ToolWrapper
{
public:
using ToolWrapper::ToolWrapper;
static std::optional<Utils::FilePath> find();
static QString toolName() { return {"Ninja"}; }
};
template<>
inline Utils::Store toVariantMap<NinjaWrapper>(const NinjaWrapper &meson)
{
Utils::Store data;
data.insert(Constants::ToolsSettings::NAME_KEY, meson.m_name);
data.insert(Constants::ToolsSettings::EXE_KEY, meson.m_exe.toSettings());
data.insert(Constants::ToolsSettings::AUTO_DETECTED_KEY, meson.m_autoDetected);
data.insert(Constants::ToolsSettings::ID_KEY, meson.m_id.toSetting());
data.insert(Constants::ToolsSettings::TOOL_TYPE_KEY, Constants::ToolsSettings::TOOL_TYPE_NINJA);
return data;
}
template<>
inline NinjaWrapper *fromVariantMap<NinjaWrapper *>(const Utils::Store &data)
{
return new NinjaWrapper(data[Constants::ToolsSettings::NAME_KEY].toString(),
Utils::FilePath::fromSettings(data[Constants::ToolsSettings::EXE_KEY]),
Utils::Id::fromSetting(data[Constants::ToolsSettings::ID_KEY]),
data[Constants::ToolsSettings::AUTO_DETECTED_KEY].toBool());
}
} // namespace Internal
} // namespace MesonProjectManager