aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2016-10-25 11:03:24 +0200
committerJoerg Bornemann <joerg.bornemann@qt.io>2016-10-25 14:41:33 +0000
commit4375c5326651558dc0ce5aea1f4f3807d667f363 (patch)
tree712779647670fe9fa22ea36585ea6d981207d20f
parent9cd8653eef26acdec85c33c350ae47291b99a9b5 (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.cpp18
-rw-r--r--tests/auto/blackbox/tst_clangdb.h3
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;