File indexing completed on 2024-04-28 04:38:19

0001 /*
0002     SPDX-FileCopyrightText: 2006-2007 Aleix Pol <aleixpol@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef CMAKEBUILDER_H
0008 #define CMAKEBUILDER_H
0009 
0010 #include <interfaces/iplugin.h>
0011 #include <QList>
0012 #include <QVariantList>
0013 #include <QUrl>
0014 #include <project/interfaces/iprojectbuilder.h>
0015 
0016 class QStringList;
0017 class KDialog;
0018 
0019 namespace KDevelop{
0020     class ProjectBaseItem;
0021 }
0022 
0023 /**
0024  * @author Aleix Pol
0025 */
0026 class CMakeBuilder : public KDevelop::IPlugin, public KDevelop::IProjectBuilder
0027 {
0028     Q_OBJECT
0029     Q_INTERFACES( KDevelop::IProjectBuilder )
0030 
0031 public:
0032     explicit CMakeBuilder(QObject *parent = nullptr, const QVariantList &args = QVariantList());
0033     ~CMakeBuilder() override;
0034 
0035     KJob* build(KDevelop::ProjectBaseItem *dom) override;
0036     KJob* install(KDevelop::ProjectBaseItem *dom, const QUrl &installPrefix) override;
0037     KJob* clean(KDevelop::ProjectBaseItem *dom) override;
0038     KJob* configure(KDevelop::IProject*) override;
0039     KJob* prune(KDevelop::IProject*) override;
0040 
0041     QList< KDevelop::IProjectBuilder* > additionalBuilderPlugins( KDevelop::IProject* project ) const override;
0042 
0043 //     bool updateConfig( KDevelop::IProject* project );
0044 
0045     int configPages() const override;
0046     KDevelop::ConfigPage* configPage(int number, QWidget* parent) override;
0047 
0048 Q_SIGNALS:
0049     void built(KDevelop::ProjectBaseItem*);
0050     void failed(KDevelop::ProjectBaseItem*);
0051     void installed(KDevelop::ProjectBaseItem*);
0052     void cleaned(KDevelop::ProjectBaseItem*);
0053     void configured(KDevelop::IProject*);
0054     void pruned(KDevelop::IProject*);
0055 
0056 private:
0057     KJob* checkConfigureJob(KDevelop::IProject* project, bool& valid);
0058 
0059     void addBuilder(const QString& neededfile, const QStringList& generator, KDevelop::IPlugin* i);
0060     KDevelop::IProjectBuilder* builderForProject(KDevelop::IProject* p) const;
0061     QMap<QString, KDevelop::IProjectBuilder*> m_builders;
0062     QMap<QString, IProjectBuilder*> m_buildersForGenerator;
0063 };
0064 
0065 #endif // CMAKEBUILDER_H
0066