File indexing completed on 2024-04-28 04:38:24
0001 /* 0002 SPDX-FileCopyrightText: 2010 Andreas Pakulat <apaku@gmx.de> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-or-later 0005 */ 0006 0007 #ifndef CUSTOMBUILDSYSTEMPLUGIN_H 0008 #define CUSTOMBUILDSYSTEMPLUGIN_H 0009 0010 #include <interfaces/iplugin.h> 0011 #include <project/interfaces/ibuildsystemmanager.h> 0012 #include <project/interfaces/iprojectbuilder.h> 0013 #include <project/abstractfilemanagerplugin.h> 0014 0015 class KConfigGroup; 0016 class KDialogBase; 0017 0018 namespace KDevelop 0019 { 0020 class ProjectBaseItem; 0021 class IProject; 0022 } 0023 0024 class CustomBuildSystem : public KDevelop::AbstractFileManagerPlugin, public KDevelop::IProjectBuilder, public KDevelop::IBuildSystemManager 0025 { 0026 Q_OBJECT 0027 Q_INTERFACES( KDevelop::IProjectBuilder ) 0028 Q_INTERFACES( KDevelop::IProjectFileManager ) 0029 Q_INTERFACES( KDevelop::IBuildSystemManager ) 0030 public: 0031 explicit CustomBuildSystem( QObject *parent = nullptr, const QVariantList &args = QVariantList() ); 0032 ~CustomBuildSystem() override; 0033 0034 // ProjectBuilder API 0035 KJob* build( KDevelop::ProjectBaseItem* dom ) override; 0036 KJob* clean( KDevelop::ProjectBaseItem* dom ) override; 0037 KJob* prune( KDevelop::IProject* ) override; 0038 0039 /// @p installPrefix will be passed as DESTDIR environment variable 0040 KJob* install( KDevelop::ProjectBaseItem* item, const QUrl &installPrefix ) override; 0041 KJob* configure( KDevelop::IProject* ) override; 0042 0043 KDevelop::Path compiler(KDevelop::ProjectTargetItem * p) const override; 0044 0045 Q_SIGNALS: 0046 void built( KDevelop::ProjectBaseItem *dom ); 0047 void installed( KDevelop::ProjectBaseItem* ); 0048 void cleaned( KDevelop::ProjectBaseItem* ); 0049 void failed( KDevelop::ProjectBaseItem *dom ); 0050 void configured( KDevelop::IProject* ); 0051 void pruned( KDevelop::IProject* ); 0052 0053 // AbstractFileManagerPlugin API 0054 public: 0055 Features features() const override; 0056 KDevelop::ProjectFolderItem* createFolderItem( KDevelop::IProject* project, 0057 const KDevelop::Path& path, KDevelop::ProjectBaseItem* parent = nullptr ) override; 0058 0059 // BuildSystemManager API 0060 public: 0061 bool addFilesToTarget( const QList<KDevelop::ProjectFileItem*>& file, KDevelop::ProjectTargetItem* parent ) override; 0062 bool hasBuildInfo( KDevelop::ProjectBaseItem* ) const override; 0063 KDevelop::Path buildDirectory( KDevelop::ProjectBaseItem* ) const override; 0064 IProjectBuilder* builder() const override; 0065 KDevelop::ProjectTargetItem* createTarget( const QString& target, KDevelop::ProjectFolderItem* parent ) override; 0066 QHash<QString, QString> defines( KDevelop::ProjectBaseItem* ) const override; 0067 KDevelop::Path::List includeDirectories( KDevelop::ProjectBaseItem* ) const override; 0068 KDevelop::Path::List frameworkDirectories( KDevelop::ProjectBaseItem* ) const override; 0069 QString extraArguments(KDevelop::ProjectBaseItem *item) const override; 0070 bool removeFilesFromTargets( const QList<KDevelop::ProjectFileItem*>& ) override; 0071 bool removeTarget( KDevelop::ProjectTargetItem* target ) override; 0072 QList<KDevelop::ProjectTargetItem*> targets( KDevelop::ProjectFolderItem* ) const override; 0073 KConfigGroup configuration( KDevelop::IProject* ) const; 0074 KConfigGroup findMatchingPathGroup( const KConfigGroup& cfg, KDevelop::ProjectBaseItem* item ) const; 0075 0076 // IPlugin API 0077 public: 0078 int perProjectConfigPages() const override; 0079 KDevelop::ConfigPage* perProjectConfigPage(int number, const KDevelop::ProjectConfigOptions& options, QWidget* parent) override; 0080 }; 0081 0082 #endif