summaryrefslogtreecommitdiff
path: root/src/lib/buildgraph
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2013-10-28 10:06:18 +0100
committerChristian Kandeler <christian.kandeler@digia.com>2013-10-28 11:52:38 +0100
commitfa69cddcdfbdda334ebde569b8cd9a1f0390fec1 (patch)
tree388aac837168ca81a76b7354954e6c6f4bc1286c /src/lib/buildgraph
parent08a5cafa374420456e599d7eab619c4f7667cd97 (diff)
downloadqbs-fa69cddcdfbdda334ebde569b8cd9a1f0390fec1.tar.gz
Check for duplicate product names.
Strangely, no such check exists currently. Instead, one will typically get an internal error on the artifact level later on. Change-Id: Id9cd749a70564100bd7286b896f64cafbe9bfb73 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src/lib/buildgraph')
-rw-r--r--src/lib/buildgraph/buildgraph.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/lib/buildgraph/buildgraph.cpp b/src/lib/buildgraph/buildgraph.cpp
index 819de79cc..f8c4f8b6a 100644
--- a/src/lib/buildgraph/buildgraph.cpp
+++ b/src/lib/buildgraph/buildgraph.cpp
@@ -396,7 +396,7 @@ void insertArtifact(const ResolvedProductPtr &product, Artifact *artifact, const
pl.append(QString(" - %1 \n").arg(p->name));
}
throw ErrorInfo(QString ("BUG: already inserted in this project: %1\n%2")
- .arg(artifact->filePath()).arg(pl));
+ .arg(artifact->filePath()).arg(pl), CodeLocation(), true);
}
}
}
@@ -462,18 +462,27 @@ static void doSanityChecksForProduct(const ResolvedProductConstPtr &product, con
}
}
-void doSanityChecks(const ResolvedProjectPtr &project, const Logger &logger)
+static void doSanityChecks(const ResolvedProjectPtr &project, QSet<QString> &productNames,
+ const Logger &logger)
{
logger.qbsDebug() << "Sanity checking project '" << project->name << "'";
foreach (const ResolvedProjectPtr &subProject, project->subProjects)
- doSanityChecks(subProject, logger);
+ doSanityChecks(subProject, productNames, logger);
foreach (const ResolvedProductConstPtr &product, project->products) {
QBS_CHECK(product->project == project);
QBS_CHECK(product->topLevelProject() == project->topLevelProject());
doSanityChecksForProduct(product, logger);
+ QBS_CHECK(!productNames.contains(product->name));
+ productNames << product->name;
}
}
+void doSanityChecks(const ResolvedProjectPtr &project, const Logger &logger)
+{
+ QSet<QString> productNames;
+ doSanityChecks(project, productNames, logger);
+}
+
} // namespace Internal
} // namespace qbs