summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2016-06-29 17:29:58 +0200
committerJoerg Bornemann <joerg.bornemann@qt.io>2016-07-05 08:09:31 +0000
commitdc528350e4b206260fc28132c7553899c6869b1c (patch)
tree0b35082376ee80a74b72944ed7501a06927c23f5
parentc2b26d91f7b7d3fe8ba10cffbb959cdd853b09d0 (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.cpp28
-rw-r--r--src/jomlib/dependencygraph.h2
-rw-r--r--src/jomlib/targetexecutor.cpp2
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);