diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2019-02-06 10:11:09 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2019-02-11 12:50:46 +0000 |
commit | 40215ac87a15c41c6531714da2d43728df75235b (patch) | |
tree | 11ad39dd85d0eaf5a942c6fdd267d32d886f1a9f /src/lib/corelib/language/moduleloader.cpp | |
parent | 061c88a6081f487886e4b9e42ff4ec014cfd6040 (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.cpp | 15 |
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 ¶meters) 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()) { |