diff options
Diffstat (limited to 'src/lib/buildgraph/executor.h')
| -rw-r--r-- | src/lib/buildgraph/executor.h | 39 |
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; |
