File indexing completed on 2024-04-28 04:38:57
0001 /* 0002 SPDX-FileCopyrightText: 2004 Roberto Raggi <roberto@kdevelop.org> 0003 SPDX-FileCopyrightText: 2007 Andreas Pakulat <apaku@gmx.de> 0004 SPDX-FileCopyrightText: 2007 Dukju Ahn <dukjuahn@gmail.com> 0005 0006 SPDX-License-Identifier: LGPL-2.0-or-later 0007 */ 0008 0009 #ifndef MAKEBUILDER_H 0010 #define MAKEBUILDER_H 0011 0012 #include <interfaces/iplugin.h> 0013 0014 #include <QVariantList> 0015 0016 #include "imakebuilder.h" 0017 #include "makejob.h" 0018 0019 #include <util/objectlist.h> 0020 0021 namespace KDevelop { 0022 class ProjectBaseItem; 0023 } 0024 0025 /** 0026 @author Roberto Raggi 0027 */ 0028 class MakeBuilder: public KDevelop::IPlugin, public IMakeBuilder 0029 { 0030 Q_OBJECT 0031 Q_INTERFACES( IMakeBuilder ) 0032 Q_INTERFACES( KDevelop::IProjectBuilder ) 0033 public: 0034 explicit MakeBuilder(QObject *parent = nullptr, const QVariantList &args = QVariantList()); 0035 ~MakeBuilder() override; 0036 0037 /** 0038 * If argument is ProjectItem, invoke "make" in IBuildSystemManager::buildDirectory(), with 0039 * specified target in project setting. 0040 * 0041 * If argument is ProjectTargetItem, invoke "make" with targetname QStandardItem::text(). In this case, 0042 * it tries its best to fetch ProjectItem, which is the argument of IBuildSystemManager::buildDirectory() 0043 * If it fails to fetch ProjectItem, the top build directory is defaulted to project directory. 0044 * Based on top build directory, the actual build_dir is computed and handed to outputview 0045 * 0046 * If argument is ProjectBuildFolderItem, invoke "make" with specified target in project setting. 0047 * To determine the build directory, first calculates rel_dir between 0048 * top_project_dir(ProjectItem::url()) and ProjectBuildFolderItem::url(). 0049 * Then invokes make in top_build_dir/rel_dir. 0050 * If this fails to fetch top_build_dir, just invoke "make" in ProjectBuildFolderItem::url(). 0051 * 0052 * @TODO: Work on any project item, for fileitems you may find a target. 0053 */ 0054 KJob* build(KDevelop::ProjectBaseItem *dom) override; 0055 KJob* clean(KDevelop::ProjectBaseItem *dom) override; 0056 KJob* install(KDevelop::ProjectBaseItem *dom, const QUrl &installPath) override; 0057 0058 KJob* executeMakeTarget(KDevelop::ProjectBaseItem* item, const QString& targetname ) override; 0059 KJob* executeMakeTargets(KDevelop::ProjectBaseItem* item, const QStringList& targetnames, 0060 const MakeVariables& variables = MakeVariables() ) override; 0061 KJob* runMake( KDevelop::ProjectBaseItem*, MakeJob::CommandType, const QStringList& = QStringList(), 0062 const MakeVariables& variables = MakeVariables() ); 0063 0064 int perProjectConfigPages() const override; 0065 KDevelop::ConfigPage* perProjectConfigPage(int number, const KDevelop::ProjectConfigOptions& options, QWidget* parent) override; 0066 0067 Q_SIGNALS: 0068 void built( KDevelop::ProjectBaseItem* ); 0069 void failed( KDevelop::ProjectBaseItem* ); 0070 void installed(KDevelop::ProjectBaseItem*); 0071 void cleaned(KDevelop::ProjectBaseItem*); 0072 void makeTargetBuilt( KDevelop::ProjectBaseItem* item, const QString& targetname ); 0073 0074 private Q_SLOTS: 0075 void jobFinished(KJob* job); 0076 0077 private: 0078 KDevelop::ObjectList<MakeJob> m_activeMakeJobs; 0079 }; 0080 0081 #endif // KDEVMAKEBUILDER_H 0082