diff options
author | Christian Kandeler <christian.kandeler@theqtcompany.com> | 2016-06-10 14:08:36 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@theqtcompany.com> | 2016-06-10 12:30:31 +0000 |
commit | aa4370b16af58032129bf9526605a11e79cf8f75 (patch) | |
tree | e03ef9e110ef6da78344676f588d386c4ec330df | |
parent | 75c4828dbd35fe31cbc588476ef0d9569ce80a11 (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>
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 ¶meters) 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(); |