forked from qt-creator/qt-creator
Meson: Start generalizing again
Change-Id: I9fc18edb0e159c448193b4cc7c4bd82b2d5f409a Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
@@ -3,51 +3,51 @@
|
||||
|
||||
#include "mesontools.h"
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
#include <utils/environment.h>
|
||||
|
||||
using namespace Utils;
|
||||
|
||||
namespace MesonProjectManager {
|
||||
namespace Internal {
|
||||
namespace MesonProjectManager::Internal {
|
||||
|
||||
MesonTools::Tool_t tool(const Id &id,
|
||||
const std::vector<MesonTools::Tool_t> &tools,
|
||||
ToolType toolType)
|
||||
std::vector<MesonTools::Tool_t> s_tools;
|
||||
|
||||
static MesonTools::Tool_t findTool(const Id &id, ToolType toolType)
|
||||
{
|
||||
const auto tool = std::find_if(std::cbegin(tools),
|
||||
std::cend(tools),
|
||||
const auto tool = std::find_if(std::cbegin(s_tools),
|
||||
std::cend(s_tools),
|
||||
[&id](const MesonTools::Tool_t &tool) {
|
||||
return tool->id() == id;
|
||||
});
|
||||
if (tool != std::cend(tools) && (*tool)->toolType() == toolType)
|
||||
if (tool != std::cend(s_tools) && (*tool)->toolType() == toolType)
|
||||
return *tool;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static MesonTools::Tool_t autoDetected(const std::vector<MesonTools::Tool_t> &tools, ToolType toolType)
|
||||
MesonTools::Tool_t autoDetectedTool(ToolType toolType)
|
||||
{
|
||||
for (const auto &tool : tools) {
|
||||
for (const auto &tool : s_tools) {
|
||||
if (tool->autoDetected() && tool->toolType() == toolType)
|
||||
return tool;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static void fixAutoDetected(std::vector<MesonTools::Tool_t> &tools, ToolType toolType)
|
||||
static void fixAutoDetected(ToolType toolType)
|
||||
{
|
||||
MesonTools::Tool_t autoDetectedTool = autoDetected(tools, toolType);
|
||||
if (!autoDetectedTool) {
|
||||
MesonTools::Tool_t autoDetected = autoDetectedTool(toolType);
|
||||
if (!autoDetected) {
|
||||
QStringList exeNames;
|
||||
QString toolName;
|
||||
if (toolType == ToolType::Meson) {
|
||||
if (std::optional<FilePath> path = findMesonTool()) {
|
||||
tools.emplace_back(
|
||||
if (std::optional<FilePath> path = findTool(toolType)) {
|
||||
s_tools.emplace_back(
|
||||
std::make_shared<ToolWrapper>(toolType,
|
||||
QString("System %1 at %2").arg("Meson").arg(path->toString()), *path, true));
|
||||
}
|
||||
} else if (toolType == ToolType::Ninja) {
|
||||
if (std::optional<FilePath> path = findNinjaTool()) {
|
||||
tools.emplace_back(
|
||||
if (std::optional<FilePath> path = findTool(toolType)) {
|
||||
s_tools.emplace_back(
|
||||
std::make_shared<ToolWrapper>(toolType,
|
||||
QString("System %1 at %2").arg("Ninja").arg(path->toString()), *path, true));
|
||||
}
|
||||
@@ -76,26 +76,28 @@ void MesonTools::addTool(const Id &itemId, const QString &name, const FilePath &
|
||||
|
||||
void MesonTools::addTool(Tool_t meson)
|
||||
{
|
||||
auto self = instance();
|
||||
self->m_tools.emplace_back(std::move(meson));
|
||||
emit self->toolAdded(self->m_tools.back());
|
||||
s_tools.emplace_back(std::move(meson));
|
||||
emit instance()->toolAdded(s_tools.back());
|
||||
}
|
||||
|
||||
void MesonTools::setTools(std::vector<MesonTools::Tool_t> &&tools)
|
||||
{
|
||||
auto self = instance();
|
||||
std::swap(self->m_tools, tools);
|
||||
fixAutoDetected(self->m_tools, ToolType::Meson);
|
||||
fixAutoDetected(self->m_tools, ToolType::Ninja);
|
||||
std::swap(s_tools, tools);
|
||||
fixAutoDetected(ToolType::Meson);
|
||||
fixAutoDetected(ToolType::Ninja);
|
||||
}
|
||||
|
||||
const std::vector<MesonTools::Tool_t> &MesonTools::tools()
|
||||
{
|
||||
return s_tools;
|
||||
}
|
||||
|
||||
void MesonTools::updateTool(const Id &itemId, const QString &name, const FilePath &exe)
|
||||
{
|
||||
auto self = instance();
|
||||
auto item = std::find_if(std::begin(self->m_tools),
|
||||
std::end(self->m_tools),
|
||||
auto item = std::find_if(std::begin(s_tools),
|
||||
std::end(s_tools),
|
||||
[&itemId](const Tool_t &tool) { return tool->id() == itemId; });
|
||||
if (item != std::end(self->m_tools)) {
|
||||
if (item != std::end(s_tools)) {
|
||||
(*item)->setExe(exe);
|
||||
(*item)->setName(name);
|
||||
} else {
|
||||
@@ -105,31 +107,20 @@ void MesonTools::updateTool(const Id &itemId, const QString &name, const FilePat
|
||||
|
||||
void MesonTools::removeTool(const Id &id)
|
||||
{
|
||||
auto self = instance();
|
||||
auto item = Utils::take(self->m_tools, [&id](const auto &item) { return item->id() == id; });
|
||||
auto item = Utils::take(s_tools, [&id](const auto &item) { return item->id() == id; });
|
||||
QTC_ASSERT(item, return );
|
||||
emit self->toolRemoved(*item);
|
||||
emit instance()->toolRemoved(*item);
|
||||
}
|
||||
|
||||
std::shared_ptr<ToolWrapper> MesonTools::ninjaWrapper(const Id &id)
|
||||
std::shared_ptr<ToolWrapper> MesonTools::toolById(const Id &id, ToolType toolType)
|
||||
{
|
||||
return tool(id, MesonTools::instance()->m_tools, ToolType::Ninja);
|
||||
return findTool(id, toolType);
|
||||
}
|
||||
|
||||
std::shared_ptr<ToolWrapper> MesonTools::mesonWrapper(const Id &id)
|
||||
MesonTools *MesonTools::instance()
|
||||
{
|
||||
return tool(id, MesonTools::instance()->m_tools, ToolType::Meson);
|
||||
static MesonTools inst;
|
||||
return &inst;
|
||||
}
|
||||
|
||||
std::shared_ptr<ToolWrapper> MesonTools::autoDetectedNinja()
|
||||
{
|
||||
return autoDetected(MesonTools::instance()->m_tools, ToolType::Ninja);
|
||||
}
|
||||
|
||||
std::shared_ptr<ToolWrapper> MesonTools::autoDetectedMeson()
|
||||
{
|
||||
return autoDetected(MesonTools::instance()->m_tools, ToolType::Meson);
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace MesonProjectManager
|
||||
} // MesonProjectManager::Internal
|
||||
|
||||
Reference in New Issue
Block a user