diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2016-10-25 11:03:24 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2016-10-25 14:41:33 +0000 |
commit | 4375c5326651558dc0ce5aea1f4f3807d667f363 (patch) | |
tree | 712779647670fe9fa22ea36585ea6d981207d20f | |
parent | 9cd8653eef26acdec85c33c350ae47291b99a9b5 (diff) |
Skip checkClangDetectsSourceCodeProblems for clang < 3.7.0
Older clang versions do not support the "arguments" array in the
compilation database. Check clang's version and skip the test for
versions < 3.7.0.
Change-Id: Ie3a8d14917a5c6458efd5fabef28c206d171f8a5
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r-- | tests/auto/blackbox/tst_clangdb.cpp | 18 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_clangdb.h | 3 |
2 files changed, 21 insertions, 0 deletions
diff --git a/tests/auto/blackbox/tst_clangdb.cpp b/tests/auto/blackbox/tst_clangdb.cpp index e74b0c981..7ef379c71 100644 --- a/tests/auto/blackbox/tst_clangdb.cpp +++ b/tests/auto/blackbox/tst_clangdb.cpp @@ -46,6 +46,7 @@ using qbs::InstallOptions; using qbs::Internal::HostOsInfo; +using qbs::Internal::Version; int TestClangDb::runProcess(const QString &exec, const QStringList &args, QByteArray &stdErr, QByteArray &stdOut) @@ -74,6 +75,17 @@ int TestClangDb::runProcess(const QString &exec, const QStringList &args, QByteA return process.exitStatus() == QProcess::NormalExit ? process.exitCode() : -1; } +Version TestClangDb::clangVersion() +{ + QByteArray stdErr; + QByteArray stdOut; + if (runProcess("clang-check", QStringList("--version"), stdErr, stdOut) != 0) + return Version(); + stdOut.remove(0, stdOut.indexOf("LLVM version ") + 13); + stdOut.truncate(stdOut.indexOf('\n')); + return Version::fromString(QString::fromLocal8Bit(stdOut)); +} + TestClangDb::TestClangDb() : TestBlackboxBase(SRCDIR "/testdata-clangdb", "blackbox-clangdb"), projectDir(QDir::cleanPath(testDataDir + "/project1")), @@ -168,6 +180,12 @@ void TestClangDb::checkClangDetectsSourceCodeProblems() const QString executable = findExecutable(QStringList("clang-check")); if (executable.isEmpty()) QSKIP("No working clang-check executable found"); + + // Older clang versions do not support the "arguments" array in the compilation database. + // Should we really want to support them, we would have to fall back to "command" instead. + if (clangVersion() < Version(3, 7)) + QSKIP("This test requires clang-check to be based on at least LLVM 3.7.0."); + arguments = QStringList() << "-analyze" << "-p" << relativeBuildDir() << sourceFilePath; QVERIFY(runProcess(executable, arguments, stdErr, stdOut) == 0); const QString output = QString::fromLocal8Bit(stdErr); diff --git a/tests/auto/blackbox/tst_clangdb.h b/tests/auto/blackbox/tst_clangdb.h index 6769b5311..1aa33c4d6 100644 --- a/tests/auto/blackbox/tst_clangdb.h +++ b/tests/auto/blackbox/tst_clangdb.h @@ -31,6 +31,8 @@ #include "tst_blackbox.h" +#include <tools/version.h> + class TestClangDb : public TestBlackboxBase { Q_OBJECT @@ -49,6 +51,7 @@ private slots: private: static int runProcess(const QString &exec, const QStringList &args, QByteArray &stdErr, QByteArray &stdOut); + static qbs::Internal::Version clangVersion(); const QString projectDir; const QString projectFileName; |