File indexing completed on 2024-05-05 16:46:01
0001 /* 0002 SPDX-FileCopyrightText: 2017 Aleix Pol Gonzalez <aleixpol@kde.org> 0003 SPDX-FileCopyrightText: 2018 Daniel Mensinger <daniel@mensinger-ka.de> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #pragma once 0009 0010 #include <project/interfaces/iprojectbuilder.h> 0011 #include <util/path.h> 0012 0013 namespace Meson 0014 { 0015 struct BuildDir; 0016 } 0017 0018 class MesonBuilder : public QObject, public KDevelop::IProjectBuilder 0019 { 0020 Q_OBJECT 0021 Q_INTERFACES(KDevelop::IProjectBuilder) 0022 public: 0023 enum DirectoryStatus { 0024 DOES_NOT_EXIST = 0, 0025 CLEAN, 0026 MESON_CONFIGURED, 0027 MESON_FAILED_CONFIGURATION, 0028 INVALID_BUILD_DIR, 0029 DIR_NOT_EMPTY, 0030 EMPTY_STRING, 0031 ___UNDEFINED___ 0032 }; 0033 0034 explicit MesonBuilder(QObject* parent); 0035 0036 KJob* build(KDevelop::ProjectBaseItem* item) override; 0037 KJob* clean(KDevelop::ProjectBaseItem* item) override; 0038 KJob* install(KDevelop::ProjectBaseItem* dom, const QUrl& installPath) override; 0039 KJob* prune(KDevelop::IProject* project) override; 0040 0041 KJob* configure(KDevelop::IProject* project) override; 0042 KJob* configure(KDevelop::IProject* project, const Meson::BuildDir& buildDir, QStringList args, 0043 DirectoryStatus status = ___UNDEFINED___); 0044 0045 /// Evaluate a directory for the use with meson 0046 static DirectoryStatus evaluateBuildDirectory(const KDevelop::Path& path, const QString& backend); 0047 0048 bool hasError() const; 0049 QString errorDescription() const; 0050 0051 QList<KDevelop::IProjectBuilder*> additionalBuilderPlugins(KDevelop::IProject* project) const override; 0052 0053 Q_SIGNALS: 0054 void built(KDevelop::ProjectBaseItem*); 0055 void installed(KDevelop::ProjectBaseItem*); 0056 void cleaned(KDevelop::ProjectBaseItem*); 0057 void failed(KDevelop::ProjectBaseItem*); 0058 void configured(KDevelop::IProject*); 0059 void pruned(KDevelop::IProject*); 0060 0061 private: 0062 KDevelop::IProjectBuilder* m_ninjaBuilder = nullptr; 0063 QString m_errorString; 0064 0065 KJob* configureIfRequired(KDevelop::IProject* project, KJob* realJob); 0066 };