diff options
author | Christian Kandeler <christian.kandeler@digia.com> | 2013-10-22 16:28:23 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@digia.com> | 2013-10-22 16:36:36 +0200 |
commit | afd141c892418419fa0084898c0cc5b03a69f96a (patch) | |
tree | 797b55bb54593dfcb05735d53939c52f0ba6ae6f | |
parent | 1b2f39da7da66f9ea5a4dc163ae5835dd722eccf (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.cpp | 15 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata/propertyChanges/lib.cpp | 1 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata/propertyChanges/project.qbs | 6 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.cpp | 21 |
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")); |