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