aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2018-01-05 10:33:43 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2018-01-05 10:33:59 +0100
commite1fd4f05b13292998dc8b2a3bf89369da5a062d9 (patch)
treeae5bb6d6344991f9bd0c456cbd97ab01081fc7b8 /src/lib
parent2b0f23a49fb63d091c635ce449545a4ec9f5e5cc (diff)
parent3bde712fa2c1f926720e85d20ae7fd5f9f378fef (diff)
Merge 1.10 into master
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/corelib/generators/generatordata.h2
-rw-r--r--src/lib/corelib/language/moduleloader.cpp27
-rw-r--r--src/lib/corelib/language/moduleloader.h1
3 files changed, 9 insertions, 21 deletions
diff --git a/src/lib/corelib/generators/generatordata.h b/src/lib/corelib/generators/generatordata.h
index f8cb743f9..fb816e0a2 100644
--- a/src/lib/corelib/generators/generatordata.h
+++ b/src/lib/corelib/generators/generatordata.h
@@ -58,6 +58,8 @@ template <typename U> struct IMultiplexableContainer {
template <typename T> T uniqueValue(const std::function<T(const U &data)> &func,
const QString &errorMessage) const
{
+ if (data.empty())
+ return T();
auto it = data.begin(), end = data.end();
auto value = func(*it++);
for (; it != end; ++it) {
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp
index f8d112165..56dda767c 100644
--- a/src/lib/corelib/language/moduleloader.cpp
+++ b/src/lib/corelib/language/moduleloader.cpp
@@ -1543,17 +1543,18 @@ static void mergeParameters(QVariantMap &dst, const QVariantMap &src)
}
}
-static void adjustParametersItemTypes(Item *item)
+static void adjustParametersItemTypesAndScopes(Item *item, Item *scope)
{
if (item->type() == ItemType::ModuleInstance) {
item->setType(ItemType::ModuleParameters);
+ item->setScope(scope);
return;
}
for (auto value : item->properties()) {
if (value->type() != Value::ItemValueType)
continue;
- adjustParametersItemTypes(std::static_pointer_cast<ItemValue>(value)->item());
+ adjustParametersItemTypesAndScopes(std::static_pointer_cast<ItemValue>(value)->item(), scope);
}
}
@@ -1595,7 +1596,7 @@ void ModuleLoader::mergeExportItems(const ProductContext &productContext)
filesWithExportItem += exportItem->file();
for (Item * const child : exportItem->children()) {
if (child->type() == ItemType::Parameters) {
- adjustParametersItemTypes(child);
+ adjustParametersItemTypesAndScopes(child, child);
mergeParameters(pmi.defaultParameters,
m_evaluator->scriptValue(child).toVariant().toMap());
} else {
@@ -1998,7 +1999,7 @@ void ModuleLoader::resolveDependencies(DependsContext *dependsContext, Item *ite
for (Item * const dependsItem : dependsItemPerLoadedModule) {
if (dependsItem == lastDependsItem)
continue;
- adjustParametersItemTypes(dependsItem);
+ adjustParametersItemTypesAndScopes(dependsItem, dependsItem);
forwardParameterDeclarations(dependsItem, loadedModules);
lastDependsItem = dependsItem;
}
@@ -2802,6 +2803,8 @@ void ModuleLoader::instantiateModule(ProductContext *productContext, Item *expor
+ QLatin1Char('.') + fullName;
for (Item *instance = moduleInstance; instance; instance = instance->prototype()) {
overrideItemProperties(instance, generalOverrideKey, m_parameters.overriddenValuesTree());
+ if (fullName == QStringLiteral("qbs"))
+ overrideItemProperties(instance, fullName, m_parameters.overriddenValuesTree());
overrideItemProperties(instance, perProductOverrideKey,
m_parameters.overriddenValuesTree());
if (instance == deepestModuleInstance)
@@ -3128,26 +3131,10 @@ void ModuleLoader::setScopeForDescendants(Item *item, Item *scope)
{
for (Item * const child : item->children()) {
child->setScope(scope);
- if (child->type() == ItemType::Depends)
- forwardScopeToItemValues(child, scope);
setScopeForDescendants(child, scope);
}
}
-void ModuleLoader::forwardScopeToItemValues(Item *item, Item *scope)
-{
- const auto &itemProperties = item->properties();
- for (const ValuePtr &v : itemProperties) {
- if (v->type() != Value::ItemValueType)
- continue;
- Item *k = std::static_pointer_cast<ItemValue>(v)->item();
- if (k->type() == ItemType::ModulePrefix)
- forwardScopeToItemValues(k, scope);
- else
- k->setScope(scope);
- }
-}
-
void ModuleLoader::overrideItemProperties(Item *item, const QString &buildConfigKey,
const QVariantMap &buildConfig)
{
diff --git a/src/lib/corelib/language/moduleloader.h b/src/lib/corelib/language/moduleloader.h
index d12944329..3dafd42de 100644
--- a/src/lib/corelib/language/moduleloader.h
+++ b/src/lib/corelib/language/moduleloader.h
@@ -305,7 +305,6 @@ private:
static QString findExistingModulePath(const QString &searchPath,
const QualifiedId &moduleName);
static void setScopeForDescendants(Item *item, Item *scope);
- static void forwardScopeToItemValues(Item *item, Item *scope);
void overrideItemProperties(Item *item, const QString &buildConfigKey,
const QVariantMap &buildConfig);
void addProductModuleDependencies(ProductContext *ctx, const Item::Module &module);