aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2013-11-20 11:58:43 +0100
committerChristian Kandeler <christian.kandeler@digia.com>2013-11-20 13:55:53 +0100
commit4b81c4c5f29670082a2db102d3631b02b3c98f38 (patch)
tree3a1b017f08a7f280fcdb984df91a888bea2e2d08
parent74084a1e43a15dc897ed0b2baa3961aa5e782992 (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.cpp11
-rw-r--r--src/lib/language/testdata/builtinFunctionInSearchPathsProperty.qbs8
-rw-r--r--src/lib/language/tst_language.cpp14
-rw-r--r--src/lib/language/tst_language.h1
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();