File indexing completed on 2024-05-05 04:40:21

0001 /*
0002     SPDX-FileCopyrightText: 2006 Andreas Pakulat <apaku@gmx.de>
0003     SPDX-FileCopyrightText: 2010 Milian Wolff <mail@milianw.de>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #ifndef QMAKEMANAGER_H
0009 #define QMAKEMANAGER_H
0010 
0011 #include <project/interfaces/ibuildsystemmanager.h>
0012 #include <project/abstractfilemanagerplugin.h>
0013 
0014 class QMakeFolderItem;
0015 class IQMakeBuilder;
0016 class QMakeCache;
0017 class QMakeProjectFile;
0018 
0019 class QMakeProjectManager : public KDevelop::AbstractFileManagerPlugin, public KDevelop::IBuildSystemManager
0020 {
0021     Q_OBJECT
0022     Q_INTERFACES( KDevelop::IBuildSystemManager )
0023 
0024 public:
0025     explicit QMakeProjectManager( QObject* parent = nullptr, const QVariantList& args = QVariantList() );
0026 
0027     ~QMakeProjectManager() override;
0028 
0029     KDevelop::ContextMenuExtension contextMenuExtension(KDevelop::Context* context, QWidget* parent) override;
0030 
0031     //BEGIN AbstractFileManager
0032     KDevelop::ProjectFolderItem* import( KDevelop::IProject* project ) override;
0033     KDevelop::ProjectFolderItem* createFolderItem( KDevelop::IProject* project, const KDevelop::Path& path,
0034                                                    KDevelop::ProjectBaseItem* parent = nullptr ) override;
0035     Features features() const override;
0036     bool isValid( const KDevelop::Path& path, const bool isFolder, KDevelop::IProject* project ) const override;
0037     //END AbstractFileManager
0038 
0039     //BEGIN IBuildSystemManager
0040     //TODO
0041     KDevelop::IProjectBuilder*  builder() const override;
0042     KDevelop::Path buildDirectory(KDevelop::ProjectBaseItem*) const override;
0043     KDevelop::Path::List collectDirectories(KDevelop::ProjectBaseItem*, const bool collectIncludes=true) const;
0044     KDevelop::Path::List includeDirectories(KDevelop::ProjectBaseItem*) const override;
0045     KDevelop::Path::List frameworkDirectories(KDevelop::ProjectBaseItem* item) const override;
0046     QHash<QString,QString> defines(KDevelop::ProjectBaseItem*) const override;
0047     QString extraArguments(KDevelop::ProjectBaseItem *item) const override;
0048     bool hasBuildInfo(KDevelop::ProjectBaseItem*) const override;
0049 
0050     KDevelop::ProjectTargetItem* createTarget( const QString&, KDevelop::ProjectFolderItem* ) override
0051     {
0052         return nullptr;
0053     }
0054 
0055     bool addFilesToTarget(const QList<KDevelop::ProjectFileItem*>&, KDevelop::ProjectTargetItem*) override
0056     {
0057         return false;
0058     }
0059 
0060     bool removeTarget( KDevelop::ProjectTargetItem* ) override
0061     {
0062         return false;
0063     }
0064 
0065     bool removeFilesFromTargets(const QList<KDevelop::ProjectFileItem*>&) override
0066     {
0067         return false;
0068     }
0069 
0070     QList<KDevelop::ProjectTargetItem*> targets(KDevelop::ProjectFolderItem*) const override;
0071 
0072     KDevelop::Path compiler(KDevelop::ProjectTargetItem* item) const override;
0073     //END IBuildSystemManager
0074 
0075 private Q_SLOTS:
0076     void slotFolderAdded( KDevelop::ProjectFolderItem* folder );
0077     void slotRunQMake();
0078     void slotDirty(const QString& path);
0079 
0080 private:    
0081     KDevelop::ProjectFolderItem* projectRootItem( KDevelop::IProject* project, const KDevelop::Path& path );
0082     KDevelop::ProjectFolderItem* buildFolderItem( KDevelop::IProject* project, const KDevelop::Path& path,
0083                                                   KDevelop::ProjectBaseItem* parent );
0084     QMakeCache* findQMakeCache( KDevelop::IProject* project, const KDevelop::Path &path = {} ) const;
0085     
0086     IQMakeBuilder* m_builder = nullptr;
0087     mutable QString m_qtIncludeDir;
0088     QAction* m_runQMake = nullptr;
0089     QMakeFolderItem* m_actionItem;
0090 };
0091 
0092 #endif
0093