aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-06-27 16:13:03 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2017-06-30 07:48:59 +0000
commit7d0d9705ba4fb8e9813bbf425c10596d306f53c2 (patch)
treedb1499e230d805682dad01ea23f329fbfef7810e
parent6c221de960faa83f0c1769435aef4aed63391b98 (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.cpp2
-rw-r--r--src/lib/corelib/language/language.cpp3
-rw-r--r--src/lib/corelib/language/language.h1
-rw-r--r--src/lib/corelib/language/projectresolver.cpp9
-rw-r--r--tests/auto/blackbox/testdata/export-rule/export-rule.qbs7
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp10
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()