summaryrefslogtreecommitdiff
path: root/src/lib/buildgraph/executor.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/buildgraph/executor.h')
-rw-r--r--src/lib/buildgraph/executor.h39
1 files changed, 25 insertions, 14 deletions
diff --git a/src/lib/buildgraph/executor.h b/src/lib/buildgraph/executor.h
index 00f2e0124..94cbb164b 100644
--- a/src/lib/buildgraph/executor.h
+++ b/src/lib/buildgraph/executor.h
@@ -31,6 +31,7 @@
#define QBS_BUILDGRAPHEXECUTOR_H
#include "forward_decls.h"
+#include "buildgraphvisitor.h"
#include <buildgraph/artifact.h>
#include <buildgraph/scanresultcache.h>
#include <language/forward_decls.h>
@@ -46,13 +47,14 @@ namespace qbs {
class ProcessResult;
namespace Internal {
-class AutoMoc;
+class MocTagScanner;
class ExecutorJob;
class FileTime;
class InputArtifactScannerContext;
class ProgressObserver;
+class RuleNode;
-class Executor : public QObject
+class Executor : public QObject, private BuildGraphVisitor
{
Q_OBJECT
@@ -82,42 +84,51 @@ private slots:
void finish();
private:
+ // BuildGraphVisitor implementation
+ bool visit(Artifact *artifact);
+ bool visit(PhonyTarget *target);
+ bool visit(RuleNode *ruleNode);
+
enum ExecutorState { ExecutorIdle, ExecutorRunning, ExecutorCanceling };
struct ComparePriority
{
- bool operator() (const Artifact *x, const Artifact *y) const;
+ bool operator() (const BuildGraphNode *x, const BuildGraphNode *y) const;
};
- typedef std::priority_queue<Artifact *, std::vector<Artifact *>, ComparePriority> Leaves;
+ typedef std::priority_queue<Artifact *, std::vector<BuildGraphNode *>, ComparePriority> Leaves;
void doBuild();
- void prepareAllArtifacts(bool *sourceFilesChanged);
+ void prepareAllNodes();
+ void prepareArtifact(Artifact *artifact);
void prepareReachableArtifacts(const Artifact::BuildState buildState);
- void prepareReachableArtifacts_impl(Artifact *artifact, const Artifact::BuildState buildState);
+ void prepareReachableArtifacts_impl(BuildGraphNode *node, const Artifact::BuildState buildState);
void updateBuildGraph(Artifact::BuildState buildState);
- void updateBuildGraph_impl(Artifact *artifact, Artifact::BuildState buildState, QSet<Artifact *> &seenArtifacts);
+ void updateBuildGraph_impl(BuildGraphNode *node, Artifact::BuildState buildState, QSet<BuildGraphNode *> &seenNodes);
void initLeaves(const QList<Artifact *> &changedArtifacts);
- void initLeavesTopDown(Artifact *artifact, QSet<Artifact *> &seenArtifacts);
+ void initLeavesTopDown(BuildGraphNode *artifact, QSet<BuildGraphNode *> &seenArtifacts);
bool scheduleJobs();
void buildArtifact(Artifact *artifact);
+ void buildPhonyTarget(PhonyTarget *target);
+ void executeRuleNode(RuleNode *ruleNode);
void finishJob(ExecutorJob *job, bool success);
+ void finishNode(BuildGraphNode *leaf);
void finishArtifact(Artifact *artifact);
void setState(ExecutorState);
void addExecutorJobs(int jobNumber);
- void runAutoMoc();
- void insertLeavesAfterAddingDependencies(QVector<Artifact *> dependencies);
+ void insertLeavesAfterAddingDependencies(QVector<BuildGraphNode *> dependencies);
void cancelJobs();
void setupProgressObserver(bool mocWillRun);
void doSanityChecks();
void handleError(const ErrorInfo &error);
+ void runTagScanners();
bool mustExecuteTransformer(const TransformerPtr &transformer) const;
bool isUpToDate(Artifact *artifact) const;
void retrieveSourceFileTimestamp(Artifact *artifact) const;
FileTime recursiveFileTime(const QString &filePath) const;
- void insertLeavesAfterAddingDependencies_recurse(Artifact *const artifact,
- QSet<Artifact *> *seenArtifacts, Leaves *leaves) const;
+ void insertLeavesAfterAddingDependencies_recurse(BuildGraphNode * const node,
+ QSet<BuildGraphNode *> *seenNodes, Leaves *leaves) const;
QString configString() const;
RulesEvaluationContextPtr m_evalContext;
@@ -129,11 +140,11 @@ private:
ExecutorState m_state;
TopLevelProjectPtr m_project;
QList<ResolvedProductPtr> m_productsToBuild;
- QList<Artifact *> m_roots;
+ QList<BuildGraphNode *> m_roots;
Leaves m_leaves;
+ QList<Artifact *> m_changedSourceArtifacts;
ScanResultCache m_scanResultCache;
InputArtifactScannerContext *m_inputArtifactScanContext;
- AutoMoc *m_autoMoc;
int m_mocEffort;
ErrorInfo m_error;
bool m_explicitlyCanceled;