diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2017-11-08 11:05:44 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2017-11-09 09:05:43 +0000 |
commit | 9c1aa4ece11a8481772b340123a232b70d16858d (patch) | |
tree | 0d818c8c9763b92280cc3798cba086550886cdeb /src/lib/corelib/buildgraph | |
parent | 8f8ea38dfd9c76092917fe63e7a132b00c456739 (diff) | |
download | qbs-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.cpp | 9 |
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)) |