aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/language/moduleloader.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2019-02-06 10:11:09 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2019-02-11 12:50:46 +0000
commit40215ac87a15c41c6531714da2d43728df75235b (patch)
tree11ad39dd85d0eaf5a942c6fdd267d32d886f1a9f /src/lib/corelib/language/moduleloader.cpp
parent061c88a6081f487886e4b9e42ff4ec014cfd6040 (diff)
Module providers: Fix some change tracking problems
- We must not remember our temporary files. - We need to use a different reference time stamp for the created modules. - Collecting the results of File.exists() & friends can lead to false positives, so we disable it for now. Change-Id: Id64685b510606f1991e83eb825c36a1b3ec4a4e1 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/lib/corelib/language/moduleloader.cpp')
-rw-r--r--src/lib/corelib/language/moduleloader.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp
index 58dab062a..fe71df43f 100644
--- a/src/lib/corelib/language/moduleloader.cpp
+++ b/src/lib/corelib/language/moduleloader.cpp
@@ -361,7 +361,7 @@ ModuleLoaderResult ModuleLoader::load(const SetupProjectParameters &parameters)
handleTopLevelProject(&result, root, buildDirectory,
Set<QString>() << QDir::cleanPath(parameters.projectFilePath()));
result.root = root;
- result.qbsFiles = m_reader->filesRead();
+ result.qbsFiles = m_reader->filesRead() - m_tempQbsFiles;
for (auto it = m_localProfiles.cbegin(); it != m_localProfiles.cend(); ++it)
result.profileConfigs.remove(it.key());
printProfilingInfo();
@@ -2156,7 +2156,10 @@ void ModuleLoader::setSearchPathsForProduct(ModuleLoader::ProductContext *produc
if (!m_moduleProviderInfo.empty()) {
const QVariantMap configForProduct = moduleProviderConfig(*product);
for (const ModuleProviderInfo &c : m_moduleProviderInfo) {
- if (configForProduct.value(c.name.toString()) == c.config) {
+ if (configForProduct.value(c.name.toString()).toMap() == c.config) {
+ qCDebug(lcModuleLoader) << "re-using search paths" << c.searchPaths
+ << "from module provider" << c.name
+ << "for product" << product->name;
product->knownModuleProviders.insert(c.name);
product->searchPaths << c.searchPaths;
}
@@ -2622,10 +2625,6 @@ void ModuleLoader::resolveDependsItem(DependsContext *dependsContext, Item *pare
}
ErrorInfo e(Tr::tr("Dependency '%1' not found for product '%2'.")
.arg(moduleName.toString(), productName), dependsItem->location());
- if (moduleName.size() == 2 && moduleName.front() == QStringLiteral("Qt")) {
- e.append(Tr::tr("Please create a Qt profile using the qbs-setup-qt tool "
- "if you haven't already done so."));
- }
throw e;
}
if (result.isProduct && !m_dependsChain.empty() && !m_dependsChain.back().isProduct) {
@@ -3761,6 +3760,7 @@ ModuleLoader::ModuleProviderResult ModuleLoader::findModuleProvider(const Qualif
"for dependency '%1': %2").arg(name.toString(),
dummyItemFile.errorString()));
}
+ m_tempQbsFiles << dummyItemFile.fileName();
qCDebug(lcModuleLoader) << "Instantiating module provider at" << providerFile;
const QString projectBuildDir = product.project->item->variantProperty(
StringConstants::buildDirectoryProperty())->value().toString();
@@ -3789,6 +3789,7 @@ ModuleLoader::ModuleProviderResult ModuleLoader::findModuleProvider(const Qualif
.arg(providerFile, providerItem->typeName(),
BuiltinDeclarations::instance().nameForType(ItemType::ModuleProvider)));
}
+ providerItem->setParent(product.item);
const QVariantMap configMap = moduleConfig.toMap();
for (auto it = configMap.begin(); it != configMap.end(); ++it) {
const PropertyDeclaration decl = providerItem->propertyDeclaration(it.key());
@@ -3798,7 +3799,7 @@ ModuleLoader::ModuleProviderResult ModuleLoader::findModuleProvider(const Qualif
}
providerItem->setProperty(it.key(), VariantValue::create(it.value()));
}
- EvalContextSwitcher contextSwitcher(m_evaluator->engine(), EvalContext::ProbeExecution);
+ EvalContextSwitcher contextSwitcher(m_evaluator->engine(), EvalContext::ModuleProvider);
const QStringList searchPaths
= m_evaluator->stringListValue(providerItem, QStringLiteral("searchPaths"));
if (searchPaths.empty()) {