aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2013-05-23 14:41:27 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2013-05-23 18:29:12 +0200
commit0212823326dde0db2b7a6022a2ee3b6d718b1fdb (patch)
treee87be63efdc4393653b7d10c30c61b7d84dc70ff
parentff642cf9b4b4fe24ac904692fd3a227a8bd29c51 (diff)
fix overriding of project properties
The overriding of project properties happened too late for project.references. Now it has been moved from ProjectResolver to ModuleLoader. Task-number: QBS-281 Change-Id: I69845abc876bda033eb52d3b8313f82ded0abebb Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
-rw-r--r--src/lib/language/moduleloader.cpp13
-rw-r--r--src/lib/language/moduleloader.h2
-rw-r--r--src/lib/language/projectresolver.cpp14
-rw-r--r--src/lib/language/projectresolver.h1
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp3
5 files changed, 17 insertions, 16 deletions
diff --git a/src/lib/language/moduleloader.cpp b/src/lib/language/moduleloader.cpp
index c9dbc99e2..4745d4284 100644
--- a/src/lib/language/moduleloader.cpp
+++ b/src/lib/language/moduleloader.cpp
@@ -131,6 +131,7 @@ void ModuleLoader::handleProject(ModuleLoaderResult *loadResult, Item *item)
ProductContext dummyProductContext;
dummyProductContext.project = &projectContext;
loadBaseModule(&dummyProductContext, item);
+ overrideItemProperties(item, QLatin1String("project"), m_userProperties);
foreach (Item *child, item->children()) {
child->setScope(projectContext.scope);
@@ -803,5 +804,17 @@ QString ModuleLoader::fullModuleName(const QStringList &moduleName)
#endif
}
+void ModuleLoader::overrideItemProperties(Item *item, const QString &buildConfigKey,
+ const QVariantMap &buildConfig)
+{
+ const QVariant buildConfigValue = buildConfig.value(buildConfigKey);
+ if (buildConfigValue.isNull())
+ return;
+ const QVariantMap overridden = buildConfigValue.toMap();
+ for (QVariantMap::const_iterator it = overridden.constBegin(); it != overridden.constEnd();
+ ++it)
+ item->setProperty(it.key(), VariantValue::create(it.value()));
+}
+
} // namespace Internal
} // namespace qbs
diff --git a/src/lib/language/moduleloader.h b/src/lib/language/moduleloader.h
index 4dd9c100e..d0b2371bb 100644
--- a/src/lib/language/moduleloader.h
+++ b/src/lib/language/moduleloader.h
@@ -101,6 +101,8 @@ public:
bool wrapWithProjectItem = false);
static QString fullModuleName(const QStringList &moduleName);
+ static void overrideItemProperties(Item *item, const QString &buildConfigKey,
+ const QVariantMap &buildConfig);
private:
class ContextBase
diff --git a/src/lib/language/projectresolver.cpp b/src/lib/language/projectresolver.cpp
index d7e88e95f..e1cdafd3d 100644
--- a/src/lib/language/projectresolver.cpp
+++ b/src/lib/language/projectresolver.cpp
@@ -173,7 +173,6 @@ void ProjectResolver::ignoreItem(Item *item)
void ProjectResolver::resolveProject(Item *item)
{
checkCancelation();
- overrideItemProperties(item, QLatin1String("project"));
ResolvedProjectPtr project = ResolvedProject::create();
m_projectContext->project = project;
@@ -236,7 +235,7 @@ void ProjectResolver::resolveProduct(Item *item)
item->setProperty("name", VariantValue::create(product->name));
}
m_logger.qbsTrace() << "[PR] resolveProduct " << product->name;
- overrideItemProperties(item, product->name);
+ ModuleLoader::overrideItemProperties(item, product->name, m_buildConfiguration);
m_projectContext->productsByName.insert(product->name, product);
product->enabled = boolValue(item, QLatin1String("condition"), true);
product->additionalFileTags = fileTagsValue(item, QLatin1String("additionalFileTags"));
@@ -726,17 +725,6 @@ void ProjectResolver::applyFileTaggers(const SourceArtifactPtr &artifact,
}
}
-void ProjectResolver::overrideItemProperties(Item *item, const QString &buildConfigKey)
-{
- const QVariant buildConfigValue = m_buildConfiguration.value(buildConfigKey);
- if (buildConfigValue.isNull())
- return;
- const QVariantMap overridden = buildConfigValue.toMap();
- for (QVariantMap::const_iterator it = overridden.constBegin(); it != overridden.constEnd();
- ++it)
- item->setProperty(it.key(), VariantValue::create(it.value()));
-}
-
QVariantMap ProjectResolver::evaluateModuleValues(Item *item) const
{
QVariantMap modules;
diff --git a/src/lib/language/projectresolver.h b/src/lib/language/projectresolver.h
index b4da3eab2..890a47bc6 100644
--- a/src/lib/language/projectresolver.h
+++ b/src/lib/language/projectresolver.h
@@ -107,7 +107,6 @@ private:
void applyFileTaggers(const ResolvedProductPtr &product) const;
void applyFileTaggers(const SourceArtifactPtr &artifact,
const ResolvedProductConstPtr &product) const;
- void overrideItemProperties(Item *item, const QString &buildConfigKey);
QVariantMap evaluateModuleValues(Item *item) const;
void evaluateModuleValues(Item *item, QVariantMap *modulesMap) const;
QVariantMap evaluateProperties(Item *item) const;
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp
index e12649bf3..f137c5a3a 100644
--- a/tests/auto/blackbox/tst_blackbox.cpp
+++ b/tests/auto/blackbox/tst_blackbox.cpp
@@ -781,11 +781,10 @@ void TestBlackbox::overrideProjectProperties()
QVERIFY(runQbs(params) != 0);
rmDirR(buildDir);
- QEXPECT_FAIL("", "QBS-281", Abort);
params.arguments = QStringList() << QLatin1String("-f")
<< QLatin1String("project_using_helper_lib.qbs")
<< QLatin1String("project.linkSuccessfully:true");
- params.expectFailure = true; // Change to false when failure is no longer expected.
+ params.expectFailure = false;
QCOMPARE(runQbs(params), 0);
}