Meson: Use new setup schema for MesonProject

Change-Id: If5d60fe9e6d1afe16585c345ddc026af69560d1d
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2024-07-25 17:27:07 +02:00
parent d0621a7d54
commit 8d429afecf
3 changed files with 52 additions and 60 deletions

View File

@@ -4,56 +4,70 @@
#include "mesonproject.h"
#include "mesonpluginconstants.h"
#include "mesonprojectimporter.h"
#include "mesonprojectmanagertr.h"
#include "toolkitaspectwidget.h"
#include <coreplugin/icontext.h>
#include <projectexplorer/kitaspects.h>
#include <projectexplorer/project.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/target.h>
#include <projectexplorer/projectmanager.h>
using namespace ProjectExplorer;
namespace MesonProjectManager::Internal {
MesonProject::MesonProject(const Utils::FilePath &path)
: Project{Constants::Project::MIMETYPE, path}
class MesonProject final : public Project
{
setId(Constants::Project::ID);
setProjectLanguages(Core::Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID));
setDisplayName(projectDirectory().fileName());
setCanBuildProducts();
setHasMakeInstallEquivalent(true);
}
public:
explicit MesonProject(const Utils::FilePath &path)
: Project{Constants::Project::MIMETYPE, path}
{
setId(Constants::Project::ID);
setProjectLanguages(Core::Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID));
setDisplayName(projectDirectory().fileName());
setCanBuildProducts();
setHasMakeInstallEquivalent(true);
}
Tasks MesonProject::projectIssues(const Kit *k) const
Tasks projectIssues(const Kit *k) const final
{
Tasks result = Project::projectIssues(k);
if (!MesonToolKitAspect::isValid(k))
result.append(
createProjectTask(Task::TaskType::Error, Tr::tr("No Meson tool set.")));
if (!NinjaToolKitAspect::isValid(k))
result.append(
createProjectTask(Task::TaskType::Error, Tr::tr("No Ninja tool set.")));
if (ToolchainKitAspect::toolChains(k).isEmpty())
result.append(createProjectTask(Task::TaskType::Warning,
Tr::tr("No compilers set in kit.")));
return result;
}
ProjectImporter *projectImporter() const final
{
if (m_projectImporter)
m_projectImporter = std::make_unique<MesonProjectImporter>(projectFilePath());
return m_projectImporter.get();
}
private:
DeploymentKnowledge deploymentKnowledge() const final
{
// TODO in next releases
return DeploymentKnowledge::Bad;
}
mutable std::unique_ptr<MesonProjectImporter> m_projectImporter;
};
void setupMesonProject()
{
Tasks result = Project::projectIssues(k);
if (!MesonToolKitAspect::isValid(k))
result.append(
createProjectTask(Task::TaskType::Error, Tr::tr("No Meson tool set.")));
if (!NinjaToolKitAspect::isValid(k))
result.append(
createProjectTask(Task::TaskType::Error, Tr::tr("No Ninja tool set.")));
if (ToolchainKitAspect::toolChains(k).isEmpty())
result.append(createProjectTask(Task::TaskType::Warning,
Tr::tr("No compilers set in kit.")));
return result;
}
ProjectImporter *MesonProject::projectImporter() const
{
if (m_projectImporter)
m_projectImporter = std::make_unique<MesonProjectImporter>(projectFilePath());
return m_projectImporter.get();
}
DeploymentKnowledge MesonProject::deploymentKnowledge() const
{
// TODO in next releases
return DeploymentKnowledge::Bad;
ProjectManager::registerProjectType<MesonProject>(Constants::Project::MIMETYPE);
}
} // namespace MesonProjectManager::Internal

View File

@@ -3,28 +3,8 @@
#pragma once
#include "mesonprojectimporter.h"
#include <projectexplorer/project.h>
#include <projectexplorer/projectimporter.h>
#include <projectexplorer/task.h>
namespace MesonProjectManager::Internal {
class MesonProject final : public ProjectExplorer::Project
{
Q_OBJECT
public:
explicit MesonProject(const Utils::FilePath &path);
~MesonProject() final = default;
ProjectExplorer::Tasks projectIssues(const ProjectExplorer::Kit *k) const final;
ProjectExplorer::ProjectImporter *projectImporter() const final;
private:
ProjectExplorer::DeploymentKnowledge deploymentKnowledge() const override;
mutable std::unique_ptr<MesonProjectImporter> m_projectImporter;
};
void setupMesonProject();
} // namespace MesonProjectManager::Internal

View File

@@ -13,8 +13,6 @@
#include <extensionsystem/iplugin.h>
#include <projectexplorer/projectmanager.h>
#include <utils/fsengine/fileiconprovider.h>
using namespace ProjectExplorer;
@@ -39,9 +37,9 @@ class MesonProjectPlugin final : public ExtensionSystem::IPlugin
setupMesonRunConfiguration();
setupMesonRunAndDebugWorkers();
setupMesonActions(this);
setupMesonProject();
ProjectManager::registerProjectType<MesonProject>(Constants::Project::MIMETYPE);
setupMesonActions(this);
FileIconProvider::registerIconOverlayForFilename(Constants::Icons::MESON, "meson.build");
FileIconProvider::registerIconOverlayForFilename(Constants::Icons::MESON, "meson_options.txt");