Meson: Start simplification of tool loading

Change-Id: I5a70c17bd219dc8dc18061842808166b76b26828
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
hjk
2024-07-22 17:14:09 +02:00
parent c76025ed41
commit 36a6fa1664
8 changed files with 102 additions and 115 deletions

View File

@@ -15,6 +15,8 @@
namespace MesonProjectManager {
namespace Internal {
enum class ToolType { Meson, Ninja };
class Command
{
public:
@@ -27,8 +29,12 @@ class ToolWrapper
public:
virtual ~ToolWrapper() {}
ToolWrapper() = delete;
ToolWrapper(const QString &name, const Utils::FilePath &path, bool autoDetected = false);
ToolWrapper(const QString &name,
ToolWrapper(ToolType toolType,
const QString &name,
const Utils::FilePath &path,
bool autoDetected = false);
ToolWrapper(ToolType toolType,
const QString &name,
const Utils::FilePath &path,
const Utils::Id &id,
bool autoDetected = false);
@@ -49,12 +55,14 @@ public:
static Version read_version(const Utils::FilePath &toolPath);
template<typename T>
friend Utils::Store toVariantMap(const T &);
template<typename T>
friend T fromVariantMap(const Utils::Store &);
Utils::Store toVariantMap() const;
static ToolWrapper *fromVariantMap(const Utils::Store &, ToolType toolType);
ToolType toolType() const { return m_toolType; }
void setToolType(ToolType newToolType) { m_toolType = newToolType; }
protected:
ToolType m_toolType;
Version m_version;
bool m_isValid;
bool m_autoDetected;
@@ -63,11 +71,6 @@ protected:
QString m_name;
};
template<typename T>
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);
@@ -88,60 +91,16 @@ public:
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());
}
std::optional<Utils::FilePath> findMesonTool();
std::optional<Utils::FilePath> findNinjaTool();
} // namespace Internal
} // namespace MesonProjectManager