aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-12-22 16:32:05 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2017-12-23 07:23:23 +0000
commited5dd866cd83c74df5d2d22660b8f1d695218e1b (patch)
treef925dc6b405094c45ac87cc3c58b66548fbe2280
parentffca2303fee02c52415aa01cf8ea658c06649ebc (diff)
Fix convenience command-line override syntax for qbs properties
Users can write "qbs.xyz" instead of "modules.qbs.xyz", but we only applied that during module prototype loading, meaning that using that syntax (and only that syntax) would not override values set in project files, which was obviously quite confusing to users. Now the two variants behave exactly the same. Task-number: QBS-1244 Change-Id: Ie9c5de1ac42e33205b80335566e0721d61718947 Reviewed-by: Jake Petroules <jake.petroules@qt.io>
-rw-r--r--src/lib/corelib/language/moduleloader.cpp2
-rw-r--r--tests/auto/language/testdata/qbs-property-convenience-override.qbs6
-rw-r--r--tests/auto/language/tst_language.cpp19
-rw-r--r--tests/auto/language/tst_language.h1
4 files changed, 28 insertions, 0 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp
index 4341a9787..e7d2dfdec 100644
--- a/src/lib/corelib/language/moduleloader.cpp
+++ b/src/lib/corelib/language/moduleloader.cpp
@@ -2725,6 +2725,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)
diff --git a/tests/auto/language/testdata/qbs-property-convenience-override.qbs b/tests/auto/language/testdata/qbs-property-convenience-override.qbs
new file mode 100644
index 000000000..d4a8e7279
--- /dev/null
+++ b/tests/auto/language/testdata/qbs-property-convenience-override.qbs
@@ -0,0 +1,6 @@
+import qbs
+
+Product {
+ name: "p"
+ qbs.installPrefix: "/usr/local"
+}
diff --git a/tests/auto/language/tst_language.cpp b/tests/auto/language/tst_language.cpp
index ce89c9f52..0fbf3ab15 100644
--- a/tests/auto/language/tst_language.cpp
+++ b/tests/auto/language/tst_language.cpp
@@ -2360,6 +2360,25 @@ void TestLanguage::qbsPropertiesInProjectCondition()
QCOMPARE(exceptionCaught, false);
}
+void TestLanguage::qbsPropertyConvenienceOverride()
+{
+ bool exceptionCaught = false;
+ try {
+ SetupProjectParameters params = defaultParameters;
+ params.setProjectFilePath(testProject("qbs-property-convenience-override.qbs"));
+ params.setOverriddenValues({std::make_pair("qbs.installPrefix", "/opt")});
+ TopLevelProjectConstPtr project = loader->loadProject(params);
+ QVERIFY(!!project);
+ QCOMPARE(project->products.count(), 1);
+ QCOMPARE(project->products.first()->moduleProperties->qbsPropertyValue("installPrefix")
+ .toString(), "/opt");
+ }
+ catch (const ErrorInfo &e) {
+ qDebug() << e.toString();
+ }
+ QCOMPARE(exceptionCaught, false);
+}
+
void TestLanguage::relaxedErrorMode()
{
m_logSink->setLogLevel(LoggerMinLevel);
diff --git a/tests/auto/language/tst_language.h b/tests/auto/language/tst_language.h
index db7ff31f4..7dff0c68a 100644
--- a/tests/auto/language/tst_language.h
+++ b/tests/auto/language/tst_language.h
@@ -144,6 +144,7 @@ private slots:
void propertiesItemInModule();
void propertyAssignmentInExportedGroup();
void qbsPropertiesInProjectCondition();
+ void qbsPropertyConvenienceOverride();
void relaxedErrorMode();
void relaxedErrorMode_data();
void requiredAndNonRequiredDependencies();