diff options
author | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-07-02 14:44:27 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-07-02 14:44:55 +0200 |
commit | 2ad4749c8aa924e2dd8b245309e7b585b9329f7f (patch) | |
tree | 781a4f12f564380204dc1b863ef11303b823c781 | |
parent | a22cadc6078e8f0c29bd8eb6f249b0bcd9357fc5 (diff) | |
parent | 37d7dea3d3db3bd47a5e921de1cf54d48a8736d5 (diff) |
Merge remote-tracking branch 'origin/1.2'
Change-Id: I9d5874b3867d3b366e418ae101c25b518053b00a
-rw-r--r--[-rwxr-xr-x] | share/qbs/imports/qbs/base/NSISSetup.qbs | 0 | ||||
-rw-r--r--[-rwxr-xr-x] | share/qbs/modules/nsis/NSISModule.qbs | 0 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/artifactvisitor.cpp | 6 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/artifactvisitor.h | 1 | ||||
-rw-r--r-- | src/lib/corelib/language/evaluatorscriptclass.cpp | 32 | ||||
-rw-r--r-- | src/lib/corelib/language/testdata/propertiesblocks.qbs | 4 | ||||
-rw-r--r-- | src/lib/corelib/language/tst_language.cpp | 73 | ||||
-rw-r--r-- | src/library_dirname.pri | 2 | ||||
-rw-r--r--[-rwxr-xr-x] | tests/auto/blackbox/testdata/nsis/hello.bat | 0 | ||||
-rw-r--r--[-rwxr-xr-x] | tests/auto/blackbox/testdata/nsis/hello.nsi | 0 | ||||
-rw-r--r--[-rwxr-xr-x] | tests/auto/blackbox/testdata/nsis/hello.qbs | 0 |
11 files changed, 96 insertions, 22 deletions
diff --git a/share/qbs/imports/qbs/base/NSISSetup.qbs b/share/qbs/imports/qbs/base/NSISSetup.qbs index f52398a2a..f52398a2a 100755..100644 --- a/share/qbs/imports/qbs/base/NSISSetup.qbs +++ b/share/qbs/imports/qbs/base/NSISSetup.qbs diff --git a/share/qbs/modules/nsis/NSISModule.qbs b/share/qbs/modules/nsis/NSISModule.qbs index ad8b84238..ad8b84238 100755..100644 --- a/share/qbs/modules/nsis/NSISModule.qbs +++ b/share/qbs/modules/nsis/NSISModule.qbs diff --git a/src/lib/corelib/buildgraph/artifactvisitor.cpp b/src/lib/corelib/buildgraph/artifactvisitor.cpp index e8f438c9b..ab7858826 100644 --- a/src/lib/corelib/buildgraph/artifactvisitor.cpp +++ b/src/lib/corelib/buildgraph/artifactvisitor.cpp @@ -54,6 +54,12 @@ void ArtifactVisitor::visitProject(const ResolvedProjectConstPtr &project) visitProduct(product); } +bool ArtifactVisitor::visit(RuleNode *ruleNode) +{ + Q_UNUSED(ruleNode); + return false; +} + bool ArtifactVisitor::visit(Artifact *artifact) { QBS_CHECK(artifact); diff --git a/src/lib/corelib/buildgraph/artifactvisitor.h b/src/lib/corelib/buildgraph/artifactvisitor.h index 2cd67a8f8..79e39c1cc 100644 --- a/src/lib/corelib/buildgraph/artifactvisitor.h +++ b/src/lib/corelib/buildgraph/artifactvisitor.h @@ -47,6 +47,7 @@ public: void visitProduct(const ResolvedProductConstPtr &product); void visitProject(const ResolvedProjectConstPtr &project); + bool visit(RuleNode *ruleNode); bool visit(Artifact *artifact); private: diff --git a/src/lib/corelib/language/evaluatorscriptclass.cpp b/src/lib/corelib/language/evaluatorscriptclass.cpp index a5f03b81c..8fcd785eb 100644 --- a/src/lib/corelib/language/evaluatorscriptclass.cpp +++ b/src/lib/corelib/language/evaluatorscriptclass.cpp @@ -128,9 +128,35 @@ private: const JSSourceValue::Alternative *alternative = 0; alternative = &value->alternatives().at(i); if (!conditionScopeItem) { - conditionScopeItem = data->item->scope(); - if (!conditionScopeItem) - conditionScopeItem = data->item; + // We have to differentiate between module instances and normal items here. + // + // The module instance case: + // Product { + // property bool something: true + // Properties { + // condition: something + // cpp.defines: ["ABC"] + // } + // } + // + // data->item points to cpp and the condition's scope chain must contain cpp's + // scope, which is the item where cpp is instantiated. The scope chain must not + // contain data->item itself. + // + // The normal item case: + // Product { + // property bool something: true + // property string value: "ABC" + // Properties { + // condition: something + // value: "DEF" + // } + // } + // + // data->item points to the product and the condition's scope chain must contain + // the product item. + conditionScopeItem = data->item->isModuleInstance() + ? data->item->scope() : data->item; conditionScope = data->evaluator->scriptValue(conditionScopeItem); QBS_ASSERT(conditionScope.isObject(), return); conditionFileScope = data->evaluator->fileScope(conditionScopeItem->file()); diff --git a/src/lib/corelib/language/testdata/propertiesblocks.qbs b/src/lib/corelib/language/testdata/propertiesblocks.qbs index d61f0dd86..2480e9e7b 100644 --- a/src/lib/corelib/language/testdata/propertiesblocks.qbs +++ b/src/lib/corelib/language/testdata/propertiesblocks.qbs @@ -86,19 +86,23 @@ Project { Product { name: "condition_refers_to_product_property" property string narf: true + property string someString: "SOMETHING" Depends { name: "dummy" } Properties { condition: narf dummy.defines: ["OVERWRITTEN"] + someString: "OVERWRITTEN" } } property string zort: true Product { name: "condition_refers_to_project_property" + property string someString: "SOMETHING" Depends { name: "dummy" } Properties { condition: project.zort dummy.defines: ["OVERWRITTEN"] + someString: "OVERWRITTEN" } } ProductBase { diff --git a/src/lib/corelib/language/tst_language.cpp b/src/lib/corelib/language/tst_language.cpp index 422d77a2f..d8c47c90b 100644 --- a/src/lib/corelib/language/tst_language.cpp +++ b/src/lib/corelib/language/tst_language.cpp @@ -1128,45 +1128,77 @@ void TestLanguage::propertiesBlocks_data() { QTest::addColumn<QString>("propertyName"); QTest::addColumn<QStringList>("expectedValues"); + QTest::addColumn<QString>("expectedStringValue"); - QTest::newRow("init") << QString() << QStringList(); - QTest::newRow("property_overwrite") << QString("dummy.defines") << QStringList("OVERWRITTEN"); - QTest::newRow("property_overwrite_no_outer") << QString("dummy.defines") << QStringList("OVERWRITTEN"); - QTest::newRow("property_append_to_outer") << QString("dummy.defines") << (QStringList() << QString("ONE") << QString("TWO")); + QTest::newRow("init") << QString() << QStringList() << QString(); + QTest::newRow("property_overwrite") + << QString("dummy.defines") + << QStringList("OVERWRITTEN") + << QString(); + QTest::newRow("property_overwrite_no_outer") + << QString("dummy.defines") + << QStringList("OVERWRITTEN") + << QString(); + QTest::newRow("property_append_to_outer") + << QString("dummy.defines") + << (QStringList() << QString("ONE") << QString("TWO")) + << QString(); + + QTest::newRow("multiple_exclusive_properties") + << QString("dummy.defines") + << QStringList("OVERWRITTEN") + << QString(); + QTest::newRow("multiple_exclusive_properties_no_outer") + << QString("dummy.defines") + << QStringList("OVERWRITTEN") + << QString(); + QTest::newRow("multiple_exclusive_properties_append_to_outer") + << QString("dummy.defines") + << (QStringList() << QString("ONE") << QString("TWO")) + << QString(); - QTest::newRow("multiple_exclusive_properties") << QString("dummy.defines") << QStringList("OVERWRITTEN"); - QTest::newRow("multiple_exclusive_properties_no_outer") << QString("dummy.defines") << QStringList("OVERWRITTEN"); - QTest::newRow("multiple_exclusive_properties_append_to_outer") << QString("dummy.defines") << (QStringList() << QString("ONE") << QString("TWO")); QTest::newRow("condition_refers_to_product_property") - << QString("dummy.defines") << QStringList("OVERWRITTEN"); + << QString("dummy.defines") + << QStringList("OVERWRITTEN") + << QString("OVERWRITTEN"); QTest::newRow("condition_refers_to_project_property") - << QString("dummy.defines") << QStringList("OVERWRITTEN"); + << QString("dummy.defines") + << QStringList("OVERWRITTEN") + << QString("OVERWRITTEN"); QTest::newRow("ambiguous_properties") << QString("dummy.defines") - << (QStringList() << QString("ONE") << QString("TWO")); + << (QStringList() << QString("ONE") << QString("TWO")) + << QString(); QTest::newRow("inheritance_overwrite_in_subitem") << QString("dummy.defines") - << (QStringList() << QString("OVERWRITTEN_IN_SUBITEM")); + << (QStringList() << QString("OVERWRITTEN_IN_SUBITEM")) + << QString(); QTest::newRow("inheritance_retain_base1") << QString("dummy.defines") - << (QStringList() << QString("BASE") << QString("SUB")); + << (QStringList() << QString("BASE") << QString("SUB")) + << QString(); QTest::newRow("inheritance_retain_base2") << QString("dummy.defines") - << (QStringList() << QString("BASE") << QString("SUB")); + << (QStringList() << QString("BASE") << QString("SUB")) + << QString(); QTest::newRow("inheritance_retain_base3") << QString("dummy.defines") - << (QStringList() << QString("BASE") << QString("SUB")); + << (QStringList() << QString("BASE") << QString("SUB")) + << QString(); QTest::newRow("inheritance_condition_in_subitem1") << QString("dummy.defines") - << (QStringList() << QString("SOMETHING") << QString("SUB")); + << (QStringList() << QString("SOMETHING") << QString("SUB")) + << QString(); QTest::newRow("inheritance_condition_in_subitem2") << QString("dummy.defines") - << (QStringList() << QString("SOMETHING")); + << (QStringList() << QString("SOMETHING")) + << QString(); QTest::newRow("condition_references_id") << QString("dummy.defines") - << (QStringList() << QString("OVERWRITTEN")); - QTest::newRow("cleanup") << QString() << QStringList(); + << (QStringList() << QString("OVERWRITTEN")) + << QString(); + QTest::newRow("cleanup") << QString() << QStringList() << QString(); } void TestLanguage::propertiesBlocks() @@ -1174,6 +1206,7 @@ void TestLanguage::propertiesBlocks() HANDLE_INIT_CLEANUP_DATATAGS("propertiesblocks.qbs"); QFETCH(QString, propertyName); QFETCH(QStringList, expectedValues); + QFETCH(QString, expectedStringValue); QVERIFY(project); QHash<QString, ResolvedProductPtr> products = productsFromProject(project); const QString productName = QString::fromLocal8Bit(QTest::currentDataTag()); @@ -1182,6 +1215,10 @@ void TestLanguage::propertiesBlocks() QCOMPARE(product->name, productName); QVariant v = productPropertyValue(product, propertyName); QCOMPARE(v.toStringList(), expectedValues); + if (!expectedStringValue.isEmpty()) { + v = productPropertyValue(product, "someString"); + QCOMPARE(v.toString(), expectedStringValue); + } } void TestLanguage::fileTags_data() diff --git a/src/library_dirname.pri b/src/library_dirname.pri index 1e76f1cac..5d0712d79 100644 --- a/src/library_dirname.pri +++ b/src/library_dirname.pri @@ -1 +1 @@ -isEmpty(QBS_QBS_LIBRARY_DIRNAME):QBS_LIBRARY_DIRNAME = lib +isEmpty(QBS_LIBRARY_DIRNAME):QBS_LIBRARY_DIRNAME = lib diff --git a/tests/auto/blackbox/testdata/nsis/hello.bat b/tests/auto/blackbox/testdata/nsis/hello.bat index 3af583cd8..3af583cd8 100755..100644 --- a/tests/auto/blackbox/testdata/nsis/hello.bat +++ b/tests/auto/blackbox/testdata/nsis/hello.bat diff --git a/tests/auto/blackbox/testdata/nsis/hello.nsi b/tests/auto/blackbox/testdata/nsis/hello.nsi index 70b73056a..70b73056a 100755..100644 --- a/tests/auto/blackbox/testdata/nsis/hello.nsi +++ b/tests/auto/blackbox/testdata/nsis/hello.nsi diff --git a/tests/auto/blackbox/testdata/nsis/hello.qbs b/tests/auto/blackbox/testdata/nsis/hello.qbs index b7f3da505..b7f3da505 100755..100644 --- a/tests/auto/blackbox/testdata/nsis/hello.qbs +++ b/tests/auto/blackbox/testdata/nsis/hello.qbs |