summaryrefslogtreecommitdiff
path: root/src/lib/corelib/buildgraph
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-11-08 11:05:44 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2017-11-09 09:05:43 +0000
commit9c1aa4ece11a8481772b340123a232b70d16858d (patch)
tree0d818c8c9763b92280cc3798cba086550886cdeb /src/lib/corelib/buildgraph
parent8f8ea38dfd9c76092917fe63e7a132b00c456739 (diff)
downloadqbs-9c1aa4ece11a8481772b340123a232b70d16858d.tar.gz
Fix check for the "same file as different artifact" case in connect()
That can legally happen if the child artifact is a source file present in different products. Task-number: QBS-1241 Change-Id: Ideba1321072deee5c01b8915f32a747b45864793 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/lib/corelib/buildgraph')
-rw-r--r--src/lib/corelib/buildgraph/buildgraph.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/lib/corelib/buildgraph/buildgraph.cpp b/src/lib/corelib/buildgraph/buildgraph.cpp
index 58192d3df..f053e2ee7 100644
--- a/src/lib/corelib/buildgraph/buildgraph.cpp
+++ b/src/lib/corelib/buildgraph/buildgraph.cpp
@@ -342,7 +342,11 @@ void connect(BuildGraphNode *p, BuildGraphNode *c)
qCDebug(lcBuildGraph) << "connect" << p->toString() << "->" << c->toString();
if (Artifact *ac = dynamic_cast<Artifact *>(c)) {
for (const Artifact *child : filterByType<Artifact>(p->children)) {
- if (child != ac && child->filePath() == ac->filePath()) {
+ if (child == ac)
+ return;
+ const bool filePathsMustBeDifferent = child->artifactType == Artifact::Generated
+ || child->product == ac->product || child->artifactType != ac->artifactType;
+ if (filePathsMustBeDifferent && child->filePath() == ac->filePath()) {
throw ErrorInfo(QString::fromLatin1("%1 already has a child artifact %2 as "
"different object.").arg(p->toString(),
ac->filePath()),
@@ -550,7 +554,8 @@ static void doSanityChecksForProduct(const ResolvedProductConstPtr &product,
continue;
}
- QBS_CHECK(!filePaths.contains(artifact->filePath()));
+ QBS_CHECK(artifact->artifactType == Artifact::SourceFile ||
+ !filePaths.contains(artifact->filePath()));
filePaths << artifact->filePath();
for (Artifact * const child : qAsConst(artifact->childrenAddedByScanner))