diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2017-06-27 16:13:03 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2017-06-30 07:48:59 +0000 |
commit | 7d0d9705ba4fb8e9813bbf425c10596d306f53c2 (patch) | |
tree | db1499e230d805682dad01ea23f329fbfef7810e | |
parent | 6c221de960faa83f0c1769435aef4aed63391b98 (diff) |
Add product dependencies to ResolvedProduct::modules
Otherwise, Export items would not be first class modules, because their
properties would not be available in the depending products.
Change-Id: Ieb50ffdf2a8c8b37408278f71d8ddfb058bf1bef
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
-rw-r--r-- | src/lib/corelib/buildgraph/buildgraph.cpp | 2 | ||||
-rw-r--r-- | src/lib/corelib/language/language.cpp | 3 | ||||
-rw-r--r-- | src/lib/corelib/language/language.h | 1 | ||||
-rw-r--r-- | src/lib/corelib/language/projectresolver.cpp | 9 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata/export-rule/export-rule.qbs | 7 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.cpp | 10 |
6 files changed, 24 insertions, 8 deletions
diff --git a/src/lib/corelib/buildgraph/buildgraph.cpp b/src/lib/corelib/buildgraph/buildgraph.cpp index 0a3f83d38..a12ef3410 100644 --- a/src/lib/corelib/buildgraph/buildgraph.cpp +++ b/src/lib/corelib/buildgraph/buildgraph.cpp @@ -128,6 +128,8 @@ private: result.setProperty(idx++, obj); } for (const ResolvedModuleConstPtr &dependency : qAsConst(product->modules)) { + if (dependency->isProduct) + continue; QScriptValue obj = engine->newObject(); setupModuleScriptValue(static_cast<ScriptEngine *>(engine), obj, product->moduleProperties->value(), dependency->name); diff --git a/src/lib/corelib/language/language.cpp b/src/lib/corelib/language/language.cpp index 4a8ae34ed..f9c469032 100644 --- a/src/lib/corelib/language/language.cpp +++ b/src/lib/corelib/language/language.cpp @@ -346,6 +346,7 @@ void ResolvedModule::load(PersistentPool &pool) pool.load(moduleDependencies); pool.load(setupBuildEnvironmentScript); pool.load(setupRunEnvironmentScript); + pool.load(isProduct); } void ResolvedModule::store(PersistentPool &pool) const @@ -354,11 +355,13 @@ void ResolvedModule::store(PersistentPool &pool) const pool.store(moduleDependencies); pool.store(setupBuildEnvironmentScript); pool.store(setupRunEnvironmentScript); + pool.store(isProduct); } bool operator==(const ResolvedModule &m1, const ResolvedModule &m2) { return m1.name == m2.name + && m1.isProduct == m2.isProduct && m1.moduleDependencies.toSet() == m2.moduleDependencies.toSet() && equals(m1.setupBuildEnvironmentScript.get(), m2.setupBuildEnvironmentScript.get()) && equals(m1.setupRunEnvironmentScript.get(), m2.setupRunEnvironmentScript.get()); diff --git a/src/lib/corelib/language/language.h b/src/lib/corelib/language/language.h index f3c0f058e..583b585e9 100644 --- a/src/lib/corelib/language/language.h +++ b/src/lib/corelib/language/language.h @@ -313,6 +313,7 @@ public: QStringList moduleDependencies; ScriptFunctionPtr setupBuildEnvironmentScript; ScriptFunctionPtr setupRunEnvironmentScript; + bool isProduct; private: ResolvedModule() {} diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp index 9c3cc89a6..f4b20a412 100644 --- a/src/lib/corelib/language/projectresolver.cpp +++ b/src/lib/corelib/language/projectresolver.cpp @@ -491,6 +491,7 @@ void ProjectResolver::resolveModule(const QualifiedId &moduleName, Item *item, b const ResolvedModulePtr &module = moduleContext.module; module->name = moduleName.toString(); + module->isProduct = isProduct; module->setupBuildEnvironmentScript = scriptFunctionValue(item, QLatin1String("setupBuildEnvironment")); module->setupRunEnvironmentScript = scriptFunctionValue(item, @@ -504,11 +505,9 @@ void ProjectResolver::resolveModule(const QualifiedId &moduleName, Item *item, b module->moduleDependencies += m.name.toString(); } - if (!isProduct) { - m_productContext->product->modules += module; - if (!parameters.isEmpty()) - m_productContext->product->moduleParameters[module] = parameters; - } + m_productContext->product->modules += module; + if (!parameters.isEmpty()) + m_productContext->product->moduleParameters[module] = parameters; static const ItemFuncMap mapping { { ItemType::Group, &ProjectResolver::ignoreItem }, diff --git a/tests/auto/blackbox/testdata/export-rule/export-rule.qbs b/tests/auto/blackbox/testdata/export-rule/export-rule.qbs index 51dd787a4..0b1f9f99b 100644 --- a/tests/auto/blackbox/testdata/export-rule/export-rule.qbs +++ b/tests/auto/blackbox/testdata/export-rule/export-rule.qbs @@ -6,14 +6,17 @@ Project { name: "MyApp" files: ["myapp.blubb"] Depends { name: "blubber" } - Depends { name: "cpp" } } StaticLibrary { name: "blubber" files: ["blubber.cpp"] Depends { name: "cpp" } Export { + Depends { name: "cpp" } + property bool enableTagger + property string description: "Creating C++ source file."; FileTagger { + condition: enableTagger patterns: ["*.blubb"] fileTags: ["blubb"] } @@ -25,7 +28,7 @@ Project { } prepare: { var cmd = new JavaScriptCommand(); - cmd.description = "Creating C++ source file."; + cmd.description = product.blubber.description; cmd.sourceCode = function() { File.copy(input.filePath, output.filePath); } diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 5f479ad36..0bdb9c81f 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -2534,8 +2534,16 @@ void TestBlackbox::systemRunPaths_data() void TestBlackbox::exportRule() { QDir::setCurrent(testDataDir + "/export-rule"); - QbsRunParameters params; + QbsRunParameters params(QStringList{"modules.blubber.enableTagger:false"}); + params.expectFailure = true; + QVERIFY(runQbs(params) != 0); + params.command = "resolve"; + params.arguments = QStringList{"modules.blubber.enableTagger:true"}; + params.expectFailure = false; QCOMPARE(runQbs(params), 0); + QCOMPARE(runQbs(), 0); + QVERIFY2(m_qbsStdout.contains("Creating C++ source file"), m_qbsStdout.constData()); + QVERIFY2(m_qbsStdout.contains("compiling myapp.cpp"), m_qbsStdout.constData()); } void TestBlackbox::exportToOutsideSearchPath() |