aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2018-08-31 16:18:07 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2018-08-31 16:18:07 +0200
commit58219e2d386a799cb89bf54a22386737614d31b0 (patch)
tree9e57e3e02d530e16cc512c95f1bededb68fd39e3 /src/lib
parentac7351024345ef6730e9d3b575979be20991ff88 (diff)
parent89689cac88ffe880942c7acb59fc3374a34cbd6c (diff)
Merge 1.12 into master
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/corelib/buildgraph/buildgraph.cpp22
-rw-r--r--src/lib/corelib/buildgraph/executor.cpp4
-rw-r--r--src/lib/corelib/buildgraph/inputartifactscanner.cpp4
-rw-r--r--src/lib/corelib/language/language.cpp8
-rw-r--r--src/lib/corelib/language/language.h2
-rw-r--r--src/lib/corelib/language/projectresolver.cpp13
6 files changed, 31 insertions, 22 deletions
diff --git a/src/lib/corelib/buildgraph/buildgraph.cpp b/src/lib/corelib/buildgraph/buildgraph.cpp
index 27e28ce44..42091ec56 100644
--- a/src/lib/corelib/buildgraph/buildgraph.cpp
+++ b/src/lib/corelib/buildgraph/buildgraph.cpp
@@ -224,9 +224,25 @@ private:
QScriptValue result = engine->newArray();
quint32 idx = 0;
const bool exportCase = depType == DependencyType::Exported;
- const std::vector<ResolvedProductPtr> &productDeps = (exportCase
- ? product->exportedModule.productDependencies
- : product->dependencies);
+ std::vector<ResolvedProductPtr> productDeps;
+ if (exportCase) {
+ if (!product->exportedModule.productDependencies.empty()) {
+ const auto allProducts = product->topLevelProject()->allProducts();
+ const auto getProductForName = [&allProducts](const QString &name) {
+ const auto cmp = [name](const ResolvedProductConstPtr &p) {
+ return p->uniqueName() == name;
+ };
+ const auto it = std::find_if(allProducts.cbegin(), allProducts.cend(), cmp);
+ QBS_ASSERT(it != allProducts.cend(), return ResolvedProductPtr());
+ return *it;
+ };
+ std::transform(product->exportedModule.productDependencies.cbegin(),
+ product->exportedModule.productDependencies.cend(),
+ std::back_inserter(productDeps), getProductForName);
+ }
+ } else {
+ productDeps = product->dependencies;
+ }
for (const ResolvedProductPtr &dependency : qAsConst(productDeps)) {
QScriptValue obj = engine->newObject(engine->productPropertyScriptClass());
obj.setPrototype(setupProductScriptValue(static_cast<ScriptEngine *>(engine),
diff --git a/src/lib/corelib/buildgraph/executor.cpp b/src/lib/corelib/buildgraph/executor.cpp
index 9a97b054e..1fd6aa986 100644
--- a/src/lib/corelib/buildgraph/executor.cpp
+++ b/src/lib/corelib/buildgraph/executor.cpp
@@ -889,8 +889,8 @@ void Executor::rescueOldBuildData(Artifact *artifact, bool *childrenAdded = null
if (childrenAdded && !childrenToConnect.empty())
*childrenAdded = true;
for (Artifact * const child : childrenToConnect) {
- safeConnect(artifact, child);
- artifact->childrenAddedByScanner << child;
+ if (safeConnect(artifact, child))
+ artifact->childrenAddedByScanner << child;
}
qCDebug(lcBuildGraph) << "Data was rescued.";
} else {
diff --git a/src/lib/corelib/buildgraph/inputartifactscanner.cpp b/src/lib/corelib/buildgraph/inputartifactscanner.cpp
index 051560aba..143c99fb5 100644
--- a/src/lib/corelib/buildgraph/inputartifactscanner.cpp
+++ b/src/lib/corelib/buildgraph/inputartifactscanner.cpp
@@ -343,8 +343,8 @@ void InputArtifactScanner::handleDependency(ResolvedDependency &dependency)
} else {
if (m_artifact->children.contains(artifactDependency))
return;
- safeConnect(m_artifact, artifactDependency);
- m_artifact->childrenAddedByScanner += artifactDependency;
+ if (safeConnect(m_artifact, artifactDependency))
+ m_artifact->childrenAddedByScanner += artifactDependency;
m_newDependencyAdded = true;
}
}
diff --git a/src/lib/corelib/language/language.cpp b/src/lib/corelib/language/language.cpp
index 06887fefb..d8a5d9162 100644
--- a/src/lib/corelib/language/language.cpp
+++ b/src/lib/corelib/language/language.cpp
@@ -937,11 +937,6 @@ bool operator==(const ExportedItem &i1, const ExportedItem &i2)
bool operator==(const ExportedModule &m1, const ExportedModule &m2)
{
- static const auto cmpProductsByName = [](
- const ResolvedProductConstPtr &p1,
- const ResolvedProductConstPtr &p2) {
- return p1->name == p2->name;
- };
static const auto depMapsEqual = [](const QMap<ResolvedProductConstPtr, QVariantMap> &m1,
const QMap<ResolvedProductConstPtr, QVariantMap> &m2) {
if (m1.size() != m2.size())
@@ -961,8 +956,7 @@ bool operator==(const ExportedModule &m1, const ExportedModule &m2)
&& m1.m_properties == m2.m_properties
&& m1.importStatements == m2.importStatements
&& m1.productDependencies.size() == m2.productDependencies.size()
- && std::equal(m1.productDependencies.cbegin(), m1.productDependencies.cend(),
- m2.productDependencies.cbegin(), cmpProductsByName)
+ && m1.productDependencies == m2.productDependencies
&& depMapsEqual(m1.dependencyParameters, m2.dependencyParameters);
}
diff --git a/src/lib/corelib/language/language.h b/src/lib/corelib/language/language.h
index 06a9af54a..f9d69efff 100644
--- a/src/lib/corelib/language/language.h
+++ b/src/lib/corelib/language/language.h
@@ -537,7 +537,7 @@ public:
QVariantMap propertyValues;
QVariantMap modulePropertyValues;
std::vector<ExportedItemPtr> children;
- std::vector<ResolvedProductPtr> productDependencies;
+ std::vector<QString> productDependencies;
std::vector<ExportedModuleDependency> moduleDependencies;
std::vector<ExportedProperty> m_properties;
QMap<ResolvedProductConstPtr, QVariantMap> dependencyParameters;
diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp
index 27829e378..ddac7264c 100644
--- a/src/lib/corelib/language/projectresolver.cpp
+++ b/src/lib/corelib/language/projectresolver.cpp
@@ -948,19 +948,18 @@ void ProjectResolver::collectExportedProductDependencies()
if (!contains(directDepNames, dep.product->name))
continue;
- if (!contains(exportingProduct->exportedModule.productDependencies, dep.product))
- exportingProduct->exportedModule.productDependencies.push_back(dep.product);
+ if (!contains(exportingProduct->exportedModule.productDependencies,
+ dep.product->uniqueName())) {
+ exportingProduct->exportedModule.productDependencies.push_back(
+ dep.product->uniqueName());
+ }
if (!dep.parameters.isEmpty()) {
exportingProduct->exportedModule.dependencyParameters.insert(dep.product,
dep.parameters);
}
}
auto &productDeps = exportingProduct->exportedModule.productDependencies;
- static const auto cmpFunc = [](const ResolvedProductConstPtr &p1,
- const ResolvedProductConstPtr &p2) {
- return p1->uniqueName() < p2->uniqueName();
- };
- std::sort(productDeps.begin(), productDeps.end(), cmpFunc);
+ std::sort(productDeps.begin(), productDeps.end());
}
}