diff options
author | Joerg Bornemann <joerg.bornemann@digia.com> | 2013-11-20 11:58:43 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@digia.com> | 2013-11-20 13:55:53 +0100 |
commit | 4b81c4c5f29670082a2db102d3631b02b3c98f38 (patch) | |
tree | 3a1b017f08a7f280fcdb984df91a888bea2e2d08 | |
parent | 74084a1e43a15dc897ed0b2baa3961aa5e782992 (diff) |
evaluate qbsSearchPaths after the item has been fully set up
This makes sure that builtin functions like qbs.getenv can be called in
qbsSearchPaths.
Task-number: QBS-463
Change-Id: I74d50f25fd7e62663a5680741b22bc27db8ea80f
Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
-rw-r--r-- | src/lib/language/moduleloader.cpp | 11 | ||||
-rw-r--r-- | src/lib/language/testdata/builtinFunctionInSearchPathsProperty.qbs | 8 | ||||
-rw-r--r-- | src/lib/language/tst_language.cpp | 14 | ||||
-rw-r--r-- | src/lib/language/tst_language.h | 1 |
4 files changed, 29 insertions, 5 deletions
diff --git a/src/lib/language/moduleloader.cpp b/src/lib/language/moduleloader.cpp index 60a89e6df..c4fce38a1 100644 --- a/src/lib/language/moduleloader.cpp +++ b/src/lib/language/moduleloader.cpp @@ -206,6 +206,12 @@ void ModuleLoader::handleProject(ModuleLoaderResult *loadResult, Item *item, return; ProjectContext projectContext; projectContext.result = loadResult; + + ProductContext dummyProductContext; + dummyProductContext.project = &projectContext; + loadBaseModule(&dummyProductContext, item); + overrideItemProperties(item, QLatin1String("project"), m_overriddenProperties); + projectContext.extraModuleSearchPaths = readExtraModuleSearchPaths(item); projectContext.extraModuleSearchPaths += FileInfo::resolvePath(item->file()->dirPath(), moduleSearchSubDir); @@ -216,11 +222,6 @@ void ModuleLoader::handleProject(ModuleLoaderResult *loadResult, Item *item, projectContext.scope = Item::create(m_pool); projectContext.scope->setProperty(QLatin1String("project"), itemValue); - ProductContext dummyProductContext; - dummyProductContext.project = &projectContext; - loadBaseModule(&dummyProductContext, item); - overrideItemProperties(item, QLatin1String("project"), m_overriddenProperties); - foreach (Item *child, item->children()) { child->setScope(projectContext.scope); if (child->typeName() == QLatin1String("Product")) { diff --git a/src/lib/language/testdata/builtinFunctionInSearchPathsProperty.qbs b/src/lib/language/testdata/builtinFunctionInSearchPathsProperty.qbs new file mode 100644 index 000000000..f8f1b4d17 --- /dev/null +++ b/src/lib/language/testdata/builtinFunctionInSearchPathsProperty.qbs @@ -0,0 +1,8 @@ +import qbs + +Project { + qbsSearchPaths: { + if (!qbs.getenv("PATH")) + throw "getenv doesn't seem to work"; + } +} diff --git a/src/lib/language/tst_language.cpp b/src/lib/language/tst_language.cpp index dfe743c1f..20a977d70 100644 --- a/src/lib/language/tst_language.cpp +++ b/src/lib/language/tst_language.cpp @@ -190,6 +190,20 @@ void TestLanguage::buildConfigStringListSyntax() QCOMPARE(exceptionCaught, false); } +void TestLanguage::builtinFunctionInSearchPathsProperty() +{ + bool exceptionCaught = false; + try { + SetupProjectParameters parameters = defaultParameters; + parameters.setProjectFilePath(testProject("builtinFunctionInSearchPathsProperty.qbs")); + QVERIFY(loader->loadProject(parameters)); + } catch (const ErrorInfo &e) { + exceptionCaught = true; + qDebug() << e.toString(); + } + QCOMPARE(exceptionCaught, false); +} + void TestLanguage::conditionalDepends() { bool exceptionCaught = false; diff --git a/src/lib/language/tst_language.h b/src/lib/language/tst_language.h index bf2b49bcc..a0dbd78eb 100644 --- a/src/lib/language/tst_language.h +++ b/src/lib/language/tst_language.h @@ -68,6 +68,7 @@ private slots: void baseProperty(); void buildConfigStringListSyntax(); + void builtinFunctionInSearchPathsProperty(); void conditionalDepends(); void environmentVariable(); void erroneousFiles_data(); |