aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@theqtcompany.com>2016-06-10 14:08:36 +0200
committerChristian Kandeler <christian.kandeler@theqtcompany.com>2016-06-10 12:30:31 +0000
commitaa4370b16af58032129bf9526605a11e79cf8f75 (patch)
treee03ef9e110ef6da78344676f588d386c4ec330df
parent75c4828dbd35fe31cbc588476ef0d9569ce80a11 (diff)
Make search paths given on the command line available right away.
That is, in the top-level file. Without this patch, such search paths would not make imports available in the first file that was read, which is not what users expect. Change-Id: Iab62e046450a4677c8b7b68a1ad5ba70502826bc Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
-rw-r--r--src/lib/corelib/language/moduleloader.cpp38
-rw-r--r--tests/auto/blackbox/testdata/toplevel-searchpath/qbs-resources/imports/MyProduct.qbs3
-rw-r--r--tests/auto/blackbox/testdata/toplevel-searchpath/toplevel-searchpath.qbs3
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp12
-rw-r--r--tests/auto/blackbox/tst_blackbox.h1
5 files changed, 41 insertions, 16 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp
index 0febedcdf..f878cfc0f 100644
--- a/src/lib/corelib/language/moduleloader.cpp
+++ b/src/lib/corelib/language/moduleloader.cpp
@@ -127,6 +127,18 @@ private:
QList<ProductContext *> m_sortedProducts;
};
+class SearchPathsManager {
+public:
+ SearchPathsManager(ItemReader *itemReader, const QStringList &extraSearchPaths)
+ : m_itemReader(itemReader)
+ {
+ m_itemReader->pushExtraSearchPaths(extraSearchPaths);
+ }
+ ~SearchPathsManager() { m_itemReader->popExtraSearchPaths(); }
+
+private:
+ ItemReader * const m_itemReader;
+};
ModuleLoader::ModuleLoader(ScriptEngine *engine,
const Logger &logger)
@@ -185,9 +197,16 @@ ModuleLoaderResult ModuleLoader::load(const SetupProjectParameters &parameters)
m_pool = result.itemPool.data();
m_reader->setPool(m_pool);
- Item *root = m_reader->readFile(parameters.projectFilePath());
- if (!root)
- return ModuleLoaderResult();
+ const QStringList topLevelSearchPaths = parameters.finalBuildConfigurationTree()
+ .value(QLatin1String("project")).toMap()
+ .value(QLatin1String("qbsSearchPaths")).toStringList();
+ Item *root;
+ {
+ SearchPathsManager searchPathsManager(m_reader, topLevelSearchPaths);
+ root = m_reader->readFile(parameters.projectFilePath());
+ if (!root)
+ return ModuleLoaderResult();
+ }
root = wrapInProjectIfNecessary(root);
@@ -580,19 +599,6 @@ void ModuleLoader::prepareProduct(ProjectContext *projectContext, Item *productI
projectContext->products << productContext;
}
-class SearchPathsManager {
-public:
- SearchPathsManager(ItemReader *itemReader, const QStringList &extraSearchPaths)
- : m_itemReader(itemReader)
- {
- m_itemReader->pushExtraSearchPaths(extraSearchPaths);
- }
- ~SearchPathsManager() { m_itemReader->popExtraSearchPaths(); }
-
-private:
- ItemReader * const m_itemReader;
-};
-
void ModuleLoader::setupProductDependencies(ProductContext *productContext)
{
checkCancelation();
diff --git a/tests/auto/blackbox/testdata/toplevel-searchpath/qbs-resources/imports/MyProduct.qbs b/tests/auto/blackbox/testdata/toplevel-searchpath/qbs-resources/imports/MyProduct.qbs
new file mode 100644
index 000000000..6d16a3c53
--- /dev/null
+++ b/tests/auto/blackbox/testdata/toplevel-searchpath/qbs-resources/imports/MyProduct.qbs
@@ -0,0 +1,3 @@
+import qbs
+
+Product { }
diff --git a/tests/auto/blackbox/testdata/toplevel-searchpath/toplevel-searchpath.qbs b/tests/auto/blackbox/testdata/toplevel-searchpath/toplevel-searchpath.qbs
new file mode 100644
index 000000000..2dd54a81f
--- /dev/null
+++ b/tests/auto/blackbox/testdata/toplevel-searchpath/toplevel-searchpath.qbs
@@ -0,0 +1,3 @@
+import qbs
+
+MyProduct { }
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp
index 6d0b024fd..760c6250f 100644
--- a/tests/auto/blackbox/tst_blackbox.cpp
+++ b/tests/auto/blackbox/tst_blackbox.cpp
@@ -3272,6 +3272,18 @@ void TestBlackbox::toolLookup()
QCOMPARE(runQbs(params), 0);
}
+void TestBlackbox::topLevelSearchPath()
+{
+ QDir::setCurrent(testDataDir + "/toplevel-searchpath");
+
+ QbsRunParameters params;
+ params.expectFailure = true;
+ QVERIFY(runQbs(params) != 0);
+ QVERIFY2(m_qbsStderr.contains("MyProduct"), m_qbsStderr.constData());
+ params.arguments << ("project.qbsSearchPaths:" + QDir::currentPath() + "/qbs-resources");
+ QCOMPARE(runQbs(params), 0);
+}
+
void TestBlackbox::checkProjectFilePath()
{
QDir::setCurrent(testDataDir + "/project_filepath_check");
diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h
index 9f2461b4e..dd190fa9d 100644
--- a/tests/auto/blackbox/tst_blackbox.h
+++ b/tests/auto/blackbox/tst_blackbox.h
@@ -203,6 +203,7 @@ private slots:
void sevenZip();
void tar();
void toolLookup();
+ void topLevelSearchPath();
void track_qobject_change();
void track_qrc();
void trackAddFile();