forked from qt-creator/qt-creator
Meson: Start simplification of tool loading
Change-Id: I5a70c17bd219dc8dc18061842808166b76b26828 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user