diff options
-rw-r--r-- | src/lib/corelib/language/moduleloader.cpp | 39 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata/missing-override-prefix/missing-override-prefix.qbs | 3 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.cpp | 11 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.h | 1 |
4 files changed, 46 insertions, 8 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp index fa3dabfb5..a8a3c5492 100644 --- a/src/lib/corelib/language/moduleloader.cpp +++ b/src/lib/corelib/language/moduleloader.cpp @@ -76,6 +76,14 @@ namespace qbs { namespace Internal { +static void handlePropertyError(const ErrorInfo &error, const SetupProjectParameters ¶ms, + Logger &logger) +{ + if (params.propertyCheckingMode() == ErrorHandlingMode::Strict) + throw error; + logger.printWarning(error); +} + class ModuleLoader::ItemModuleList : public QList<Item::Module> {}; const QString moduleSearchSubDir = QLatin1String("modules"); @@ -273,6 +281,29 @@ ModuleLoaderResult ModuleLoader::load(const SetupProjectParameters ¶meters) m_reader->setEnableTiming(parameters.logElapsedTime()); m_elapsedTimeProbes = 0; + for (const QString &key : m_parameters.overriddenValues().keys()) { + static const QStringList prefixes({ QLatin1String("project"), QLatin1String("projects"), + QLatin1String("products"), QLatin1String("modules"), + QLatin1String("qbs")}); + bool ok = false; + for (const auto &prefix : prefixes) { + if (key.startsWith(prefix + QLatin1Char('.'))) { + ok = true; + break; + } + } + if (ok) + continue; + ErrorInfo e(Tr::tr("Property override key '%1' not understood.").arg(key)); + e.append(Tr::tr("Please use one of the following:")); + e.append(QLatin1Char('\t') + Tr::tr("projects.<project-name>.<property-name>:value")); + e.append(QLatin1Char('\t') + Tr::tr("products.<product-name>.<property-name>:value")); + e.append(QLatin1Char('\t') + Tr::tr("modules.<module-name>.<property-name>:value")); + e.append(QLatin1Char('\t') + Tr::tr("products.<product-name>.<module-name>." + "<property-name>:value")); + handlePropertyError(e, m_parameters, m_logger); + } + ModuleLoaderResult result; m_pool = result.itemPool.data(); m_reader->setPool(m_pool); @@ -314,14 +345,6 @@ ModuleLoaderResult ModuleLoader::load(const SetupProjectParameters ¶meters) return result; } -static void handlePropertyError(const ErrorInfo &error, const SetupProjectParameters ¶ms, - Logger &logger) -{ - if (params.propertyCheckingMode() == ErrorHandlingMode::Strict) - throw error; - logger.printWarning(error); -} - class PropertyDeclarationCheck : public ValueHandler { const Set<Item *> &m_disabledItems; diff --git a/tests/auto/blackbox/testdata/missing-override-prefix/missing-override-prefix.qbs b/tests/auto/blackbox/testdata/missing-override-prefix/missing-override-prefix.qbs new file mode 100644 index 000000000..6d16a3c53 --- /dev/null +++ b/tests/auto/blackbox/testdata/missing-override-prefix/missing-override-prefix.qbs @@ -0,0 +1,3 @@ +import qbs + +Product { } diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 9a0b89a80..5115c7ddb 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -4719,6 +4719,17 @@ void TestBlackbox::missingDependency() QVERIFY(m_qbsStderr.contains("false positive")); } +void TestBlackbox::missingOverridePrefix() +{ + QDir::setCurrent(testDataDir + "/missing-override-prefix"); + QbsRunParameters params; + params.expectFailure = true; + params.arguments << "blubb.whatever:false"; + QCOMPARE(runQbs(params), 0); + QVERIFY2(m_qbsStderr.contains("Property override key 'blubb.whatever' not understood"), + m_qbsStderr.constData()); +} + void TestBlackbox::badInterpreter() { if (!HostOsInfo::isAnyUnixHost()) diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h index c73855696..bb6426daa 100644 --- a/tests/auto/blackbox/tst_blackbox.h +++ b/tests/auto/blackbox/tst_blackbox.h @@ -125,6 +125,7 @@ private slots: void loadableModule(); void lrelease(); void missingDependency(); + void missingOverridePrefix(); void mixedBuildVariants(); void mocFlags(); void multipleChanges(); |