aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2013-10-22 16:28:23 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2013-10-22 16:36:36 +0200
commitafd141c892418419fa0084898c0cc5b03a69f96a (patch)
tree797b55bb54593dfcb05735d53939c52f0ba6ae6f
parent1b2f39da7da66f9ea5a4dc163ae5835dd722eccf (diff)
Take dependencies into account when tracking changes.
They are currently ignored. Change-Id: I94b89f9b7c6838106670d553429b297823ac861f Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
-rw-r--r--src/lib/buildgraph/buildgraphloader.cpp15
-rw-r--r--tests/auto/blackbox/testdata/propertyChanges/lib.cpp1
-rw-r--r--tests/auto/blackbox/testdata/propertyChanges/project.qbs6
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp21
4 files changed, 43 insertions, 0 deletions
diff --git a/src/lib/buildgraph/buildgraphloader.cpp b/src/lib/buildgraph/buildgraphloader.cpp
index 861738477..130784b31 100644
--- a/src/lib/buildgraph/buildgraphloader.cpp
+++ b/src/lib/buildgraph/buildgraphloader.cpp
@@ -394,11 +394,26 @@ void BuildGraphLoader::checkAllProductsForChanges(const QList<ResolvedProductPtr
}
}
+static bool dependenciesAreEqual(const ResolvedProductConstPtr &p1,
+ const ResolvedProductConstPtr &p2)
+{
+ if (p1->dependencies.count() != p2->dependencies.count())
+ return false;
+ QSet<QString> names1;
+ QSet<QString> names2;
+ foreach (const ResolvedProductConstPtr &dep, p1->dependencies)
+ names1 << dep->name;
+ foreach (const ResolvedProductConstPtr &dep, p2->dependencies)
+ names2 << dep->name;
+ return names1 == names2;
+}
+
bool BuildGraphLoader::checkProductForChanges(const ResolvedProductPtr &restoredProduct,
const ResolvedProductPtr &newlyResolvedProduct)
{
return !transformerListsAreEqual(restoredProduct->transformers,
newlyResolvedProduct->transformers)
+ || !dependenciesAreEqual(restoredProduct, newlyResolvedProduct)
|| checkForPropertyChanges(restoredProduct, newlyResolvedProduct);
// TODO: Check for more stuff.
}
diff --git a/tests/auto/blackbox/testdata/propertyChanges/lib.cpp b/tests/auto/blackbox/testdata/propertyChanges/lib.cpp
new file mode 100644
index 000000000..56757a701
--- /dev/null
+++ b/tests/auto/blackbox/testdata/propertyChanges/lib.cpp
@@ -0,0 +1 @@
+void f() {}
diff --git a/tests/auto/blackbox/testdata/propertyChanges/project.qbs b/tests/auto/blackbox/testdata/propertyChanges/project.qbs
index 13c568ec5..9b23e08d7 100644
--- a/tests/auto/blackbox/testdata/propertyChanges/project.qbs
+++ b/tests/auto/blackbox/testdata/propertyChanges/project.qbs
@@ -9,6 +9,7 @@ Project {
files: "source1.cpp"
}
CppApplication {
+ Depends { name: 'library' }
name: "product 2"
cpp.defines: project.projectDefines
files: "source2.cpp"
@@ -18,6 +19,11 @@ Project {
cpp.defines: qbs.getenv("QBS_BLACKBOX_DEFINE")
files: "source3.cpp"
}
+ DynamicLibrary {
+ name: "library"
+ Depends { name: "cpp" }
+ files: "lib.cpp"
+ }
Product {
name: "generated text file"
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp
index 0d378259f..8cbbbb50a 100644
--- a/tests/auto/blackbox/tst_blackbox.cpp
+++ b/tests/auto/blackbox/tst_blackbox.cpp
@@ -1040,6 +1040,7 @@ void TestBlackbox::propertyChanges()
QVERIFY(m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(m_qbsStdout.contains("compiling source2.cpp"));
QVERIFY(m_qbsStdout.contains("compiling source3.cpp"));
+ QVERIFY(m_qbsStdout.contains("compiling lib.cpp"));
QVERIFY(m_qbsStdout.contains("linking product 1.debug"));
QVERIFY(m_qbsStdout.contains("generated.txt"));
QFile generatedFile(buildDir + QLatin1String("/generated.txt"));
@@ -1052,6 +1053,7 @@ void TestBlackbox::propertyChanges()
QVERIFY(!m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source2.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source3.cpp"));
+ QVERIFY(!m_qbsStdout.contains("compiling lib.cpp.cpp"));
QVERIFY(!m_qbsStdout.contains("linking"));
QVERIFY(!m_qbsStdout.contains("generated.txt"));
@@ -1064,6 +1066,7 @@ void TestBlackbox::propertyChanges()
QVERIFY(!m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source2.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source3.cpp"));
+ QVERIFY(!m_qbsStdout.contains("compiling lib.cpp"));
QVERIFY(!m_qbsStdout.contains("linking"));
QVERIFY(!m_qbsStdout.contains("generated.txt"));
@@ -1080,6 +1083,7 @@ void TestBlackbox::propertyChanges()
QVERIFY(m_qbsStdout.contains("linking product 1.debug"));
QVERIFY(!m_qbsStdout.contains("linking product 2"));
QVERIFY(!m_qbsStdout.contains("linking product 3"));
+ QVERIFY(!m_qbsStdout.contains("linking library"));
QVERIFY(!m_qbsStdout.contains("generated.txt"));
// Incremental build, input property changed via project for second product.
@@ -1129,6 +1133,7 @@ void TestBlackbox::propertyChanges()
QVERIFY(m_qbsStdout.contains("linking product 1.release"));
QVERIFY(m_qbsStdout.contains("compiling source2.cpp"));
QVERIFY(m_qbsStdout.contains("compiling source3.cpp"));
+ QVERIFY(m_qbsStdout.contains("compiling lib.cpp"));
QVERIFY(!m_qbsStdout.contains("generated.txt"));
QCOMPARE(runQbs(), 0);
QVERIFY(m_qbsStdout.contains("compiling source1.cpp"));
@@ -1137,6 +1142,21 @@ void TestBlackbox::propertyChanges()
QVERIFY(m_qbsStdout.contains("compiling source3.cpp"));
QVERIFY(!m_qbsStdout.contains("generated.txt"));
+ // Incremental build, non-essential dependency removed.
+ waitForNewTimestamp();
+ QVERIFY(projectFile.open(QIODevice::ReadWrite));
+ contents = projectFile.readAll();
+ contents.replace("Depends { name: 'library' }", "// Depends { name: 'library' }");
+ projectFile.resize(0);
+ projectFile.write(contents);
+ projectFile.close();
+ QCOMPARE(runQbs(), 0);
+ QVERIFY(!m_qbsStdout.contains("linking product 1"));
+ QVERIFY(m_qbsStdout.contains("linking product 2"));
+ QVERIFY(!m_qbsStdout.contains("linking product 3"));
+ QVERIFY(!m_qbsStdout.contains("linking library"));
+ QVERIFY(!m_qbsStdout.contains("generated.txt"));
+
// Incremental build, prepare script of a transformer changed.
waitForNewTimestamp();
QVERIFY(projectFile.open(QIODevice::ReadWrite));
@@ -1149,6 +1169,7 @@ void TestBlackbox::propertyChanges()
QVERIFY(!m_qbsStdout.contains("compiling source1.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source2.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling source3.cpp"));
+ QVERIFY(!m_qbsStdout.contains("compiling lib.cpp"));
QVERIFY(m_qbsStdout.contains("generated.txt"));
QVERIFY(generatedFile.open(QIODevice::ReadOnly));
QCOMPARE(generatedFile.readAll(), QByteArray("contents 2"));