File indexing completed on 2024-05-12 05:43:20

0001 /*
0002  * SPDX-FileCopyrightText: 2022 Pablo Rauzy <r .at. uzy.me>
0003  * SPDX-License-Identifier: GPL-2.0-or-later
0004  */
0005 
0006 #ifndef MAKEFILEACTIONS_H
0007 #define MAKEFILEACTIONS_H
0008 
0009 #include <QAction>
0010 #include <QFileInfo>
0011 #include <QList>
0012 #include <QMenu>
0013 #include <QObject>
0014 #include <QPointer>
0015 #include <QProcess>
0016 #include <QString>
0017 #include <QVariantList>
0018 #include <QWidget>
0019 
0020 #include <KAbstractFileItemActionPlugin>
0021 #include <KFileItemListProperties>
0022 
0023 #include "targettree.h"
0024 
0025 /**
0026  * File item action plugin to execute Makefile targets.
0027  *
0028  * This class adds a "Makeā€¦" submenu to Makefiles' context menu which contains one action per target to launch it.
0029  */
0030 class MakefileActions : public KAbstractFileItemActionPlugin
0031 {
0032     Q_OBJECT
0033 
0034 public:
0035     MakefileActions(QObject *parent, const QVariantList &args);
0036     QList<QAction *> actions(const KFileItemListProperties &fileItemInfos, QWidget *mainWindow) override;
0037 
0038 private:
0039     QStringList m_trustedFiles;
0040     QString m_file;
0041     bool m_openTerminal;
0042     QPointer<QProcess> m_proc;
0043     QString m_runningTarget;
0044     bool m_isMaking;
0045 
0046     static bool isGNUMake();
0047     QStringList listTargets_GNU(QProcess &proc, const QString &file) const;
0048     QStringList listTargets_BSD(QProcess &proc, const QString &file) const;
0049 
0050     TargetTree targetTree() const;
0051     void buildMenu(QMenu *menu, const TargetTree &targets, QWidget *mainWindow);
0052     void addTarget(QMenu *menu, const TargetTree &target, const QString &title, QWidget *mainWindow);
0053 
0054 public Q_SLOTS:
0055     void makeTarget(const QString &target, QWidget *mainWindow);
0056 };
0057 
0058 #endif