diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2016-06-29 17:29:58 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2016-07-05 08:09:31 +0000 |
commit | dc528350e4b206260fc28132c7553899c6869b1c (patch) | |
tree | 0b35082376ee80a74b72944ed7501a06927c23f5 | |
parent | c2b26d91f7b7d3fe8ba10cffbb959cdd853b09d0 (diff) |
Implement the "build all targets" option
Task-number: QTCREATORBUG-16500
Change-Id: If0dbadf34318698900e7fb59d71ef3ed6e65aedb
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
-rw-r--r-- | src/jomlib/dependencygraph.cpp | 28 | ||||
-rw-r--r-- | src/jomlib/dependencygraph.h | 2 | ||||
-rw-r--r-- | src/jomlib/targetexecutor.cpp | 2 |
3 files changed, 17 insertions, 15 deletions
diff --git a/src/jomlib/dependencygraph.cpp b/src/jomlib/dependencygraph.cpp index 9d087d3..e4af688 100644 --- a/src/jomlib/dependencygraph.cpp +++ b/src/jomlib/dependencygraph.cpp @@ -281,23 +281,25 @@ void DependencyGraph::removeLeaf(Node* node) deleteNode(node); } -DescriptionBlock* DependencyGraph::findAvailableTarget() +DescriptionBlock *DependencyGraph::findAvailableTarget(bool ignoreTimeStamps) { if (m_leavesSet.isEmpty()) return 0; - // remove all leaves that are not up-to-date - QList<Node*> upToDateNodes; - while (m_bDirtyLeaves) { - m_bDirtyLeaves = false; - foreach (Node *leaf, m_leavesList) - if (leaf->state != Node::ExecutingState && isTargetUpToDate(leaf->target)) - upToDateNodes.append(leaf); - foreach (Node *leaf, upToDateNodes) { - displayNodeBuildInfo(leaf, true); - removeLeaf(leaf); + if (!ignoreTimeStamps) { + // remove all leaves that are not up-to-date + QList<Node *> upToDateNodes; + while (m_bDirtyLeaves) { + m_bDirtyLeaves = false; + foreach (Node *leaf, m_leavesList) + if (leaf->state != Node::ExecutingState && isTargetUpToDate(leaf->target)) + upToDateNodes.append(leaf); + foreach (Node *leaf, upToDateNodes) { + displayNodeBuildInfo(leaf, true); + removeLeaf(leaf); + } + upToDateNodes.clear(); } - upToDateNodes.clear(); } // apply inference rules separated by makefiles @@ -314,7 +316,7 @@ DescriptionBlock* DependencyGraph::findAvailableTarget() foreach (Node *leaf, m_leavesList) { if (leaf->state != Node::ExecutingState) { leaf->state = Node::ExecutingState; - displayNodeBuildInfo(leaf, false); + displayNodeBuildInfo(leaf, ignoreTimeStamps ? isTargetUpToDate(leaf->target) : false); return leaf->target; } } diff --git a/src/jomlib/dependencygraph.h b/src/jomlib/dependencygraph.h index 3a089dc..3384c4a 100644 --- a/src/jomlib/dependencygraph.h +++ b/src/jomlib/dependencygraph.h @@ -42,7 +42,7 @@ public: void build(DescriptionBlock* target); bool isEmpty() const; void removeLeaf(DescriptionBlock* target); - DescriptionBlock* findAvailableTarget(); + DescriptionBlock *findAvailableTarget(bool ignoreTimeStamps); void dump(); void dotDump(); void clear(); diff --git a/src/jomlib/targetexecutor.cpp b/src/jomlib/targetexecutor.cpp index d813a4d..f765f2a 100644 --- a/src/jomlib/targetexecutor.cpp +++ b/src/jomlib/targetexecutor.cpp @@ -192,7 +192,7 @@ void TargetExecutor::finishBuild(int exitCode) void TargetExecutor::findNextTarget() { forever { - m_nextTarget = m_depgraph->findAvailableTarget(); + m_nextTarget = m_depgraph->findAvailableTarget(m_makefile->options()->buildAllTargets); if (m_nextTarget && m_nextTarget->m_commands.isEmpty()) { // Short cut for targets without commands. m_depgraph->removeLeaf(m_nextTarget); |