aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2014-02-26 14:56:38 +0100
committerChristian Kandeler <christian.kandeler@digia.com>2014-02-26 17:51:38 +0100
commit78fa3cbf4ffdc1c7469e471e6b0349b3b5a14931 (patch)
tree391d366e9b5ededa29cd20535f69c9f74b8c8b2c /src
parent3db9811427b737d7f116578ead054d18876c93db (diff)
Do not share product properties with artifacts.
Since products potentially share their property maps with their groups, artifacts get product properties such as "name" and "destinationDirectory". This is strange and can mess with change tracking. Therefore we split up the product's property map in two: One contains the module properties and is potentially shared with groups, the other has the actual product properties and is not shared. This patch also removes a workaround from an autotest that was required until now to prevent a false positive in change tracking. Change-Id: Ia1f1f0ce32669fd893a99f809753df526bf1442a Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/lib/corelib/api/project.cpp2
-rw-r--r--src/lib/corelib/api/runenvironment.cpp2
-rw-r--r--src/lib/corelib/buildgraph/buildgraph.cpp11
-rw-r--r--src/lib/corelib/buildgraph/buildgraphloader.cpp24
-rw-r--r--src/lib/corelib/buildgraph/projectbuilddata.cpp2
-rw-r--r--src/lib/corelib/buildgraph/rulesapplicator.cpp2
-rw-r--r--src/lib/corelib/jsextensions/moduleproperties.cpp2
-rw-r--r--src/lib/corelib/language/language.cpp10
-rw-r--r--src/lib/corelib/language/language.h3
-rw-r--r--src/lib/corelib/language/projectresolver.cpp26
-rw-r--r--src/lib/corelib/language/tst_language.cpp67
-rw-r--r--src/lib/corelib/tools/persistence.cpp2
12 files changed, 87 insertions, 66 deletions
diff --git a/src/lib/corelib/api/project.cpp b/src/lib/corelib/api/project.cpp
index 8907e54a8..dd4d57a97 100644
--- a/src/lib/corelib/api/project.cpp
+++ b/src/lib/corelib/api/project.cpp
@@ -329,7 +329,7 @@ void ProjectPrivate::addGroup(const ProductData &product, const QString &groupNa
resolvedGroup->location = groupInserter.itemPosition();
resolvedGroup->enabled = true;
resolvedGroup->name = groupName;
- resolvedGroup->properties = resolvedProduct->properties;
+ resolvedGroup->properties = resolvedProduct->moduleProperties;
resolvedGroup->overrideTags = false;
resolvedProduct->groups << resolvedGroup;
foreach (const ProductData &newProduct, m_projectData.allProducts()) {
diff --git a/src/lib/corelib/api/runenvironment.cpp b/src/lib/corelib/api/runenvironment.cpp
index 25ec6ab46..b0be216f8 100644
--- a/src/lib/corelib/api/runenvironment.cpp
+++ b/src/lib/corelib/api/runenvironment.cpp
@@ -132,7 +132,7 @@ int RunEnvironment::runShell()
int RunEnvironment::runTarget(const QString &targetBin, const QStringList &arguments)
{
const QStringList targetOS = PropertyFinder().propertyValue(
- d->resolvedProduct->properties->value(),
+ d->resolvedProduct->moduleProperties->value(),
QLatin1String("qbs"),
QLatin1String("targetOS")).toStringList();
diff --git a/src/lib/corelib/buildgraph/buildgraph.cpp b/src/lib/corelib/buildgraph/buildgraph.cpp
index 12ec342e4..5c0b4553c 100644
--- a/src/lib/corelib/buildgraph/buildgraph.cpp
+++ b/src/lib/corelib/buildgraph/buildgraph.cpp
@@ -89,7 +89,7 @@ private:
foreach (const ResolvedModuleConstPtr &dependency, product->modules) {
QScriptValue obj = engine->newObject();
setupModuleScriptValue(static_cast<ScriptEngine *>(engine), obj,
- product->properties->value(), dependency->name);
+ product->moduleProperties->value(), dependency->name);
result.setProperty(idx++, obj);
}
return result;
@@ -154,13 +154,10 @@ static void setupProductScriptValue(ScriptEngine *engine, QScriptValue &productS
DependenciesFunction(engine).init(productScriptValue, product);
if (observer)
observer->setProductObjectId(productScriptValue.objectId());
- const QVariantMap &propMap = product->properties->value();
+ const QVariantMap &propMap = product->productProperties;
for (QVariantMap::ConstIterator it = propMap.constBegin(); it != propMap.constEnd(); ++it) {
- const QVariant &value = it.value();
- if (it.key() != QLatin1String("modules")) {
- engine->setObservedProperty(productScriptValue, it.key(),
- engine->toScriptValue(value), observer);
- }
+ engine->setObservedProperty(productScriptValue, it.key(), engine->toScriptValue(it.value()),
+ observer);
}
}
diff --git a/src/lib/corelib/buildgraph/buildgraphloader.cpp b/src/lib/corelib/buildgraph/buildgraphloader.cpp
index 49bd8b91e..cbbab3bf6 100644
--- a/src/lib/corelib/buildgraph/buildgraphloader.cpp
+++ b/src/lib/corelib/buildgraph/buildgraphloader.cpp
@@ -467,8 +467,8 @@ bool BuildGraphLoader::checkProductForInstallInfoChanges(const ResolvedProductPt
const QStringList specialProperties = QStringList() << QLatin1String("install")
<< QLatin1String("installDir") << QLatin1String("installPrefix");
foreach (const QString &key, specialProperties) {
- if (restoredProduct->properties->qbsPropertyValue(key)
- != newlyResolvedProduct->properties->qbsPropertyValue(key)) {
+ if (restoredProduct->moduleProperties->qbsPropertyValue(key)
+ != newlyResolvedProduct->moduleProperties->qbsPropertyValue(key)) {
m_logger.qbsDebug() << "Product property 'qbs." << key << "' changed.";
return true;
}
@@ -652,14 +652,24 @@ static SourceArtifactConstPtr findSourceArtifact(const ResolvedProductConstPtr &
return artifact;
}
+static QVariantMap propertyMapByKind(const ResolvedProductConstPtr &product, Property::Kind kind)
+{
+ switch (kind) {
+ case Property::PropertyInModule:
+ return product->moduleProperties->value();
+ case Property::PropertyInProduct:
+ return product->productProperties;
+ case Property::PropertyInProject:
+ return product->project->projectProperties();
+ }
+}
+
bool BuildGraphLoader::checkForPropertyChanges(const TransformerPtr &restoredTrafo,
const ResolvedProductPtr &freshProduct)
{
// This check must come first, as it can prevent build data rescuing.
foreach (const Property &property, restoredTrafo->propertiesRequestedInCommands) {
- const QVariantMap properties = property.kind == Property::PropertyInProject
- ? freshProduct->project->projectProperties() : freshProduct->properties->value();
- if (checkForPropertyChange(property, properties)) {
+ if (checkForPropertyChange(property, propertyMapByKind(freshProduct, property.kind))) {
const JavaScriptCommandPtr &pseudoCommand = JavaScriptCommand::create();
pseudoCommand->setSourceCode(QLatin1String("random stuff that will cause "
"commandsEqual() to fail"));
@@ -669,9 +679,7 @@ bool BuildGraphLoader::checkForPropertyChanges(const TransformerPtr &restoredTra
}
foreach (const Property &property, restoredTrafo->propertiesRequestedInPrepareScript) {
- const QVariantMap properties = property.kind == Property::PropertyInProject
- ? freshProduct->project->projectProperties() : freshProduct->properties->value();
- if (checkForPropertyChange(property, properties))
+ if (checkForPropertyChange(property, propertyMapByKind(freshProduct, property.kind)))
return true;
}
diff --git a/src/lib/corelib/buildgraph/projectbuilddata.cpp b/src/lib/corelib/buildgraph/projectbuilddata.cpp
index cea83b3cb..0111100d1 100644
--- a/src/lib/corelib/buildgraph/projectbuilddata.cpp
+++ b/src/lib/corelib/buildgraph/projectbuilddata.cpp
@@ -441,7 +441,7 @@ void BuildDataResolver::resolveProductBuildData(const ResolvedProductPtr &produc
qbsFileArtifact = new Artifact;
qbsFileArtifact->artifactType = Artifact::SourceFile;
qbsFileArtifact->setFilePath(product->location.fileName());
- qbsFileArtifact->properties = product->properties;
+ qbsFileArtifact->properties = product->moduleProperties;
insertArtifact(product, qbsFileArtifact, m_logger);
}
qbsFileArtifact->fileTags.insert("qbs");
diff --git a/src/lib/corelib/buildgraph/rulesapplicator.cpp b/src/lib/corelib/buildgraph/rulesapplicator.cpp
index e297ef23d..7e7ca1876 100644
--- a/src/lib/corelib/buildgraph/rulesapplicator.cpp
+++ b/src/lib/corelib/buildgraph/rulesapplicator.cpp
@@ -371,7 +371,7 @@ Artifact *RulesApplicator::createOutputArtifact(const QString &filePath, const F
outputArtifact->setFilePath(outputPath);
outputArtifact->fileTags = fileTags;
outputArtifact->alwaysUpdated = alwaysUpdated;
- outputArtifact->properties = m_product->properties;
+ outputArtifact->properties = m_product->moduleProperties;
insertArtifact(m_product, outputArtifact, m_logger);
m_createdArtifacts += outputArtifact;
}
diff --git a/src/lib/corelib/jsextensions/moduleproperties.cpp b/src/lib/corelib/jsextensions/moduleproperties.cpp
index 1d8286320..93aab3975 100644
--- a/src/lib/corelib/jsextensions/moduleproperties.cpp
+++ b/src/lib/corelib/jsextensions/moduleproperties.cpp
@@ -111,7 +111,7 @@ QScriptValue ModuleProperties::moduleProperties(QScriptContext *context, QScript
PropertyMapConstPtr properties;
const Artifact *artifact = 0;
if (typeScriptValue.toString() == productType()) {
- properties = static_cast<const ResolvedProduct *>(ptr)->properties;
+ properties = static_cast<const ResolvedProduct *>(ptr)->moduleProperties;
} else if (typeScriptValue.toString() == artifactType()) {
artifact = static_cast<const Artifact *>(ptr);
properties = artifact->properties;
diff --git a/src/lib/corelib/language/language.cpp b/src/lib/corelib/language/language.cpp
index 2f10adad4..ffe1e16da 100644
--- a/src/lib/corelib/language/language.cpp
+++ b/src/lib/corelib/language/language.cpp
@@ -495,7 +495,8 @@ void ResolvedProduct::load(PersistentPool &pool)
>> sourceDirectory
>> destinationDirectory
>> location;
- properties = pool.idLoadS<PropertyMapInternal>();
+ pool.stream() >> productProperties;
+ moduleProperties = pool.idLoadS<PropertyMapInternal>();
pool.loadContainerS(rules);
pool.loadContainerS(dependencies);
pool.loadContainerS(fileTaggers);
@@ -517,7 +518,8 @@ void ResolvedProduct::store(PersistentPool &pool) const
<< destinationDirectory
<< location;
- pool.store(properties);
+ pool.stream() << productProperties;
+ pool.store(moduleProperties);
pool.storeContainer(rules);
pool.storeContainer(dependencies);
pool.storeContainer(fileTaggers);
@@ -686,7 +688,7 @@ void ResolvedProduct::setupBuildEnvironment(ScriptEngine *engine, const QProcess
if (!buildEnvironment.isEmpty())
return;
- buildEnvironment = getProcessEnvironment(engine, BuildEnv, modules, properties,
+ buildEnvironment = getProcessEnvironment(engine, BuildEnv, modules, moduleProperties,
topLevelProject(), env);
}
@@ -695,7 +697,7 @@ void ResolvedProduct::setupRunEnvironment(ScriptEngine *engine, const QProcessEn
if (!runEnvironment.isEmpty())
return;
- runEnvironment = getProcessEnvironment(engine, RunEnv, modules, properties,
+ runEnvironment = getProcessEnvironment(engine, RunEnv, modules, moduleProperties,
topLevelProject(), env);
}
diff --git a/src/lib/corelib/language/language.h b/src/lib/corelib/language/language.h
index d2b79a74f..ef545433a 100644
--- a/src/lib/corelib/language/language.h
+++ b/src/lib/corelib/language/language.h
@@ -359,7 +359,8 @@ public:
QString destinationDirectory;
CodeLocation location;
WeakPointer<ResolvedProject> project;
- PropertyMapPtr properties;
+ QVariantMap productProperties;
+ PropertyMapPtr moduleProperties;
QSet<RulePtr> rules;
QSet<ResolvedProductPtr> dependencies;
QList<FileTaggerConstPtr> fileTaggers;
diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp
index 4dcec436d..c2f21de07 100644
--- a/src/lib/corelib/language/projectresolver.cpp
+++ b/src/lib/corelib/language/projectresolver.cpp
@@ -317,8 +317,12 @@ void ProjectResolver::resolveProduct(Item *item, ProjectContext *projectContext)
product->destinationDirectory
= m_evaluator->stringValue(item, QLatin1String("destinationDirectory"));
product->location = item->location();
- product->properties = PropertyMapInternal::create();
- product->properties->setValue(createProductConfig());
+ product->productProperties = createProductConfig();
+ QVariantMap moduleProperties;
+ moduleProperties.insert(QLatin1String("modules"),
+ product->productProperties.take(QLatin1String("modules")));
+ product->moduleProperties = PropertyMapInternal::create();
+ product->moduleProperties->setValue(moduleProperties);
ModuleProperties::init(m_evaluator->scriptValue(item), product);
QList<Item *> subItems = item->children();
@@ -443,10 +447,10 @@ void ProjectResolver::resolveGroup(Item *item, ProjectContext *projectContext)
{
Q_UNUSED(projectContext);
checkCancelation();
- PropertyMapPtr properties = m_productContext->product->properties;
+ PropertyMapPtr moduleProperties = m_productContext->product->moduleProperties;
if (isSomeModulePropertySet(item)) {
- properties = PropertyMapInternal::create();
- properties->setValue(evaluateModuleValues(item));
+ moduleProperties = PropertyMapInternal::create();
+ moduleProperties->setValue(evaluateModuleValues(item));
}
const bool isEnabled = m_evaluator->boolValue(item, QLatin1String("condition"));
@@ -497,13 +501,13 @@ void ProjectResolver::resolveGroup(Item *item, ProjectContext *projectContext)
wildcards->patterns = patterns;
QSet<QString> files = wildcards->expandPatterns(group, m_productContext->product->sourceDirectory);
foreach (const QString &fileName, files)
- createSourceArtifact(m_productContext->product, properties, fileName,
+ createSourceArtifact(m_productContext->product, moduleProperties, fileName,
group->fileTags, group->overrideTags, wildcards->files);
group->wildcards = wildcards;
}
foreach (const QString &fileName, files)
- createSourceArtifact(m_productContext->product, properties, fileName,
+ createSourceArtifact(m_productContext->product, moduleProperties, fileName,
group->fileTags, group->overrideTags, group->files);
ErrorInfo fileError;
foreach (const SourceArtifactConstPtr &a, group->files) {
@@ -519,7 +523,7 @@ void ProjectResolver::resolveGroup(Item *item, ProjectContext *projectContext)
group->name = m_evaluator->stringValue(item, QLatin1String("name"));
if (group->name.isEmpty())
group->name = Tr::tr("Group %1").arg(m_productContext->product->groups.count());
- group->properties = properties;
+ group->properties = moduleProperties;
m_productContext->product->groups += group;
}
@@ -752,7 +756,7 @@ void ProjectResolver::resolveTransformer(Item *item, ProjectContext *projectCont
if (Q_UNLIKELY(child->typeName() != QLatin1String("Artifact")))
throw ErrorInfo(Tr::tr("Transformer: wrong child type '%0'.").arg(child->typeName()));
SourceArtifactPtr artifact = SourceArtifact::create();
- artifact->properties = m_productContext->product->properties;
+ artifact->properties = m_productContext->product->moduleProperties;
QString fileName = m_evaluator->stringValue(child, QLatin1String("fileName"));
if (Q_UNLIKELY(fileName.isEmpty()))
throw ErrorInfo(Tr::tr("Artifact fileName must not be empty."));
@@ -854,11 +858,11 @@ void ProjectResolver::resolveProductDependencies(ProjectContext *projectContext)
if (exportedConfig.isEmpty())
continue;
- insertExportedConfig(usedProductName, exportedConfig, rproduct->properties);
+ insertExportedConfig(usedProductName, exportedConfig, rproduct->moduleProperties);
// insert the configuration of the Export item into the artifact configurations
foreach (SourceArtifactPtr artifact, rproduct->allEnabledFiles()) {
- if (artifact->properties != rproduct->properties)
+ if (artifact->properties != rproduct->moduleProperties)
insertExportedConfig(usedProductName, exportedConfig,
artifact->properties);
}
diff --git a/src/lib/corelib/language/tst_language.cpp b/src/lib/corelib/language/tst_language.cpp
index 2308a7aa2..71436c3a3 100644
--- a/src/lib/corelib/language/tst_language.cpp
+++ b/src/lib/corelib/language/tst_language.cpp
@@ -86,9 +86,14 @@ ResolvedModuleConstPtr TestLanguage::findModuleByName(ResolvedProductPtr product
QVariant TestLanguage::productPropertyValue(ResolvedProductPtr product, QString propertyName)
{
QStringList propertyNameComponents = propertyName.split(QLatin1Char('.'));
- if (propertyNameComponents.count() > 1)
+ QVariantMap properties;
+ if (propertyNameComponents.count() > 1) {
propertyNameComponents.prepend(QLatin1String("modules"));
- return getConfigProperty(product->properties->value(), propertyNameComponents);
+ properties = product->moduleProperties->value();
+ } else {
+ properties = product->productProperties;
+ }
+ return getConfigProperty(properties, propertyNameComponents);
}
void TestLanguage::handleInitCleanupDataTags(const char *projectFileName, bool *handled)
@@ -161,7 +166,7 @@ void TestLanguage::baseProperty()
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
ResolvedProductPtr product = products.value("product1");
QVERIFY(product);
- QVariantMap cfg = product->properties->value();
+ QVariantMap cfg = product->productProperties;
QCOMPARE(cfg.value("narf").toStringList(), QStringList() << "boo");
QCOMPARE(cfg.value("zort").toStringList(), QStringList() << "bar" << "boo");
} catch (const ErrorInfo &e) {
@@ -399,13 +404,13 @@ void TestLanguage::exports()
QVERIFY(product);
QStringList propertyName = QStringList() << "modules" << "mylib"
<< "modules" << "dummy" << "defines";
- QVariant propertyValue = getConfigProperty(product->properties->value(), propertyName);
+ QVariant propertyValue = getConfigProperty(product->moduleProperties->value(), propertyName);
QCOMPARE(propertyValue.toStringList(), QStringList() << "USE_MYLIB");
product = products.value("mylib");
QVERIFY(product);
propertyName = QStringList() << "modules" << "dummy" << "defines";
- propertyValue = getConfigProperty(product->properties->value(), propertyName);
+ propertyValue = getConfigProperty(product->moduleProperties->value(), propertyName);
QCOMPARE(propertyValue.toStringList(), QStringList() << "BUILD_MYLIB");
product = products.value("A");
@@ -427,11 +432,11 @@ void TestLanguage::exports()
QVERIFY(product);
propertyName = QStringList() << "modules" << "productWithInheritedExportItem"
<< "modules" << "dummy" << "cxxFlags";
- propertyValue = getConfigProperty(product->properties->value(), propertyName);
+ propertyValue = getConfigProperty(product->moduleProperties->value(), propertyName);
QCOMPARE(propertyValue.toStringList(), QStringList() << "-bar");
propertyName = QStringList() << "modules" << "productWithInheritedExportItem"
<< "modules" << "dummy" << "defines";
- propertyValue = getConfigProperty(product->properties->value(), propertyName);
+ propertyValue = getConfigProperty(product->moduleProperties->value(), propertyName);
QCOMPARE(propertyValue.toStringList(), QStringList() << "ABC");
}
catch (const ErrorInfo &e) {
@@ -451,7 +456,7 @@ void TestLanguage::fileContextProperties()
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
ResolvedProductPtr product = products.value("product1");
QVERIFY(product);
- QVariantMap cfg = product->properties->value();
+ QVariantMap cfg = product->productProperties;
QCOMPARE(cfg.value("narf").toString(), defaultParameters.projectFilePath());
QString dirPath = QFileInfo(defaultParameters.projectFilePath()).absolutePath();
QCOMPARE(cfg.value("zort").toString(), dirPath);
@@ -585,20 +590,23 @@ void TestLanguage::homeDirectory()
QVERIFY(product);
QDir dir = QDir::home();
- QCOMPARE(product->properties->value().value("home").toString(), dir.canonicalPath());
- QCOMPARE(product->properties->value().value("homeSlash").toString(), dir.canonicalPath());
+ QCOMPARE(product->productProperties.value("home").toString(), dir.canonicalPath());
+ QCOMPARE(product->productProperties.value("homeSlash").toString(),
+ dir.canonicalPath());
dir.cdUp();
- QCOMPARE(product->properties->value().value("homeUp").toString(), dir.canonicalPath());
+ QCOMPARE(product->productProperties.value("homeUp").toString(),
+ dir.canonicalPath());
dir = QDir::home();
- QCOMPARE(product->properties->value().value("homeFile").toString(), dir.filePath("a"));
+ QCOMPARE(product->productProperties.value("homeFile").toString(),
+ dir.filePath("a"));
- QCOMPARE(product->properties->value().value("bogus1").toString(),
+ QCOMPARE(product->productProperties.value("bogus1").toString(),
FileInfo::resolvePath(product->sourceDirectory, QLatin1String("a~b")));
- QCOMPARE(product->properties->value().value("bogus2").toString(),
+ QCOMPARE(product->productProperties.value("bogus2").toString(),
FileInfo::resolvePath(product->sourceDirectory, QLatin1String("a/~/bb")));
- QCOMPARE(product->properties->value().value("user").toString(),
+ QCOMPARE(product->productProperties.value("user").toString(),
FileInfo::resolvePath(product->sourceDirectory, QLatin1String("~foo/bar")));
}
catch (const ErrorInfo &e) {
@@ -849,7 +857,7 @@ void TestLanguage::moduleProperties()
const QString productName = QString::fromLocal8Bit(QTest::currentDataTag());
ResolvedProductPtr product = products.value(productName);
QVERIFY(product);
- QVariantList values = PropertyFinder().propertyValues(product->properties->value(),
+ QVariantList values = PropertyFinder().propertyValues(product->moduleProperties->value(),
"dummy", propertyName,
PropertyFinder::DoMergeLists);
QStringList valueStrings;
@@ -883,7 +891,7 @@ void TestLanguage::moduleScope()
QCOMPARE(products.count(), 1);
ResolvedProductPtr product = products.value("product1");
QVERIFY(product);
- IntPropertyFinder ipf(product->properties->value());
+ IntPropertyFinder ipf(product->moduleProperties->value());
QCOMPARE(ipf.intValue("a"), 2); // overridden in module instance
QCOMPARE(ipf.intValue("b"), 1); // genuine
QCOMPARE(ipf.intValue("c"), 3); // genuine, dependent on overridden value
@@ -941,7 +949,7 @@ void TestLanguage::modules()
modulesInProduct.sort();
expectedModulesInProduct.sort();
QCOMPARE(modulesInProduct, expectedModulesInProduct);
- QCOMPARE(product->properties->value().value("foo").toString(), expectedProductProperty);
+ QCOMPARE(product->productProperties.value("foo").toString(), expectedProductProperty);
}
void TestLanguage::outerInGroup()
@@ -988,19 +996,20 @@ void TestLanguage::pathProperties()
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
ResolvedProductPtr product = products.value("product1");
QVERIFY(product);
- QVariantMap cfg = product->properties->value();
QString projectFileDir = QFileInfo(defaultParameters.projectFilePath()).absolutePath();
- QCOMPARE(cfg.value("projectFileDir").toString(), projectFileDir);
+ const QVariantMap productProps = product->productProperties;
+ const QVariantMap moduleProps = product->moduleProperties->value();
+ QCOMPARE(productProps.value("projectFileDir").toString(), projectFileDir);
QStringList filesInProjectFileDir = QStringList()
<< FileInfo::resolvePath(projectFileDir, "aboutdialog.h")
<< FileInfo::resolvePath(projectFileDir, "aboutdialog.cpp");
- QCOMPARE(cfg.value("filesInProjectFileDir").toStringList(), filesInProjectFileDir);
- QStringList includePaths = getConfigProperty(cfg, QStringList() << "modules" << "dummy"
- << "includePaths").toStringList();
+ QCOMPARE(productProps.value("filesInProjectFileDir").toStringList(), filesInProjectFileDir);
+ QStringList includePaths = getConfigProperty(moduleProps,
+ QStringList() << "modules" << "dummy" << "includePaths").toStringList();
QCOMPARE(includePaths, QStringList() << projectFileDir);
- QCOMPARE(cfg.value("base_fileInProductDir").toString(),
+ QCOMPARE(productProps.value("base_fileInProductDir").toString(),
FileInfo::resolvePath(projectFileDir, QLatin1String("foo")));
- QCOMPARE(cfg.value("base_fileInBaseProductDir").toString(),
+ QCOMPARE(productProps.value("base_fileInBaseProductDir").toString(),
FileInfo::resolvePath(projectFileDir, QLatin1String("subdir/bar")));
} catch (const ErrorInfo &e) {
exceptionCaught = true;
@@ -1030,15 +1039,15 @@ void TestLanguage::profileValuesAndOverriddenValues()
QVERIFY(product);
PropertyFinder pf;
QVariantList values;
- values = pf.propertyValues(product->properties->value(),
+ values = pf.propertyValues(product->moduleProperties->value(),
"dummy", "cxxFlags", PropertyFinder::DoMergeLists);
QCOMPARE(values.length(), 1);
QCOMPARE(values.first().toString(), QString("IN_PROFILE"));
- values = pf.propertyValues(product->properties->value(),
+ values = pf.propertyValues(product->moduleProperties->value(),
"dummy", "defines", PropertyFinder::DoMergeLists);
QCOMPARE(values.length(), 1);
QCOMPARE(values.first().toString(), QString("IN_FILE"));
- values = pf.propertyValues(product->properties->value(),
+ values = pf.propertyValues(product->moduleProperties->value(),
"dummy", "cFlags", PropertyFinder::DoMergeLists);
QCOMPARE(values.length(), 1);
QCOMPARE(values.first().toString(), QString("OVERRIDDEN"));
@@ -1094,7 +1103,7 @@ void TestLanguage::productDirectories()
ResolvedProductPtr product;
product = products.value("MyApp");
QVERIFY(product);
- const QVariantMap config = product->properties->value();
+ const QVariantMap config = product->productProperties;
QCOMPARE(config.value(QLatin1String("buildDirectory")).toString(),
buildDir(defaultParameters));
QCOMPARE(config.value(QLatin1String("sourceDirectory")).toString(), testDataDir());
diff --git a/src/lib/corelib/tools/persistence.cpp b/src/lib/corelib/tools/persistence.cpp
index d9c5f56e2..a01d35b46 100644
--- a/src/lib/corelib/tools/persistence.cpp
+++ b/src/lib/corelib/tools/persistence.cpp
@@ -40,7 +40,7 @@
namespace qbs {
namespace Internal {
-static const char QBS_PERSISTENCE_MAGIC[] = "QBSPERSISTENCE-64";
+static const char QBS_PERSISTENCE_MAGIC[] = "QBSPERSISTENCE-65";
PersistentPool::PersistentPool(const Logger &logger) : m_logger(logger)
{