aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@qt.io>2016-12-16 03:04:28 -0800
committerJake Petroules <jake.petroules@qt.io>2016-12-19 21:03:35 +0000
commitcbd58d2ff66f3b3ca6c9d6bb6b54b4865b7aecea (patch)
tree6b8140a332dcc446226541fa47deefeb2a100f07
parenta7afa6a9ad312bacf528fc3e97688c125f151abf (diff)
Fix clangdb autotests with MSVC and MinGW
Change-Id: I6db4e074fb7aa4956ccaca7e57d4b674bc2d0c9a Reviewed-by: Christian Gagneraud <chgans@gna.org> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--tests/auto/blackbox/testdata-clangdb/project1/project.qbs10
-rw-r--r--tests/auto/blackbox/tst_clangdb.cpp33
-rw-r--r--tests/auto/blackbox/tst_clangdb.h7
3 files changed, 35 insertions, 15 deletions
diff --git a/tests/auto/blackbox/testdata-clangdb/project1/project.qbs b/tests/auto/blackbox/testdata-clangdb/project1/project.qbs
index 354912ea0..d222a326a 100644
--- a/tests/auto/blackbox/testdata-clangdb/project1/project.qbs
+++ b/tests/auto/blackbox/testdata-clangdb/project1/project.qbs
@@ -7,6 +7,16 @@ import qbs
Project {
Application {
+ Probe {
+ property var buildEnv: cpp.buildEnv
+ configure: {
+ if (buildEnv) {
+ console.info("INCLUDE=" + buildEnv["INCLUDE"]);
+ console.info("LIB=" + buildEnv["LIB"]);
+ }
+ }
+ }
+
targetName: "i like spaces"
Depends {
diff --git a/tests/auto/blackbox/tst_clangdb.cpp b/tests/auto/blackbox/tst_clangdb.cpp
index fbcd01be1..639a583b8 100644
--- a/tests/auto/blackbox/tst_clangdb.cpp
+++ b/tests/auto/blackbox/tst_clangdb.cpp
@@ -52,6 +52,9 @@ int TestClangDb::runProcess(const QString &exec, const QStringList &args, QByteA
QByteArray &stdOut)
{
QProcess process;
+ QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
+ env.insert(processEnvironment);
+ process.setProcessEnvironment(env);
process.start(exec, args);
const int waitTime = 10 * 60000;
@@ -106,6 +109,20 @@ void TestClangDb::ensureBuildTreeCreated()
{
QCOMPARE(runQbs(), 0);
QVERIFY(QFile::exists(buildDir));
+
+ qbs::Settings settings((QString()));
+ qbs::Profile profile(profileName(), &settings);
+ if (profile.value("qbs.toolchain").toStringList().contains("msvc")) {
+ sanitizeOutput(&m_qbsStdout);
+ for (const auto &line : m_qbsStdout.split('\n')) {
+ static const QByteArray includeEnv = "INCLUDE=";
+ static const QByteArray libEnv = "LIB=";
+ if (line.startsWith(includeEnv))
+ processEnvironment.insert("INCLUDE", line.mid(includeEnv.size()));
+ if (line.startsWith(libEnv))
+ processEnvironment.insert("LIB", line.mid(libEnv.size()));
+ }
+ }
}
void TestClangDb::checkCanGenerateDb()
@@ -147,11 +164,6 @@ void TestClangDb::checkDbIsConsistentWithProject()
QVERIFY(entry.value("file").isString());
QVERIFY(entry.value("file").toString() == sourceFilePath);
- qbs::Settings settings((QString()));
- qbs::Profile profile(profileName(), &settings);
- if (profile.value("qbs.toolchain").toStringList().contains("msvc"))
- QSKIP("MSVC command line is not self-contained");
-
// Validate the compile command itself, this requires a previous build since the command
// line contains 'deep' path that are created during Qbs build run
QByteArray stdErr;
@@ -190,15 +202,12 @@ void TestClangDb::checkClangDetectsSourceCodeProblems()
qbs::Settings settings((QString()));
qbs::Profile profile(profileName(), &settings);
if (profile.value("qbs.toolchain").toStringList().contains("msvc")) {
- QFile commandsFile(relativeBuildDir() + "/compile_commands.json");
- QVERIFY2(commandsFile.open(QIODevice::ReadWrite), qPrintable(commandsFile.errorString()));
- QByteArray data = commandsFile.readAll();
- data.replace("/D", "-D");
- commandsFile.resize(0);
- commandsFile.write(data);
+ arguments << "-extra-arg-before=--driver-mode=cl";
+ } else if (profile.value("qbs.toolchain").toStringList().contains("mingw")) {
+ arguments << "-extra-arg-before=--driver-mode=g++";
}
- arguments = QStringList() << "-analyze" << "-p" << relativeBuildDir() << sourceFilePath;
+ arguments << "-analyze" << "-p" << relativeBuildDir() << sourceFilePath;
QVERIFY(runProcess(executable, arguments, stdErr, stdOut) == 0);
const QString output = QString::fromLocal8Bit(stdErr);
QVERIFY(output.contains(QRegExp(QStringLiteral("warning.*undefined"), Qt::CaseInsensitive)));
diff --git a/tests/auto/blackbox/tst_clangdb.h b/tests/auto/blackbox/tst_clangdb.h
index 1aa33c4d6..16da83414 100644
--- a/tests/auto/blackbox/tst_clangdb.h
+++ b/tests/auto/blackbox/tst_clangdb.h
@@ -49,15 +49,16 @@ private slots:
void checkClangDetectsSourceCodeProblems();
private:
- static int runProcess(const QString &exec, const QStringList &args, QByteArray &stdErr,
- QByteArray &stdOut);
- static qbs::Internal::Version clangVersion();
+ int runProcess(const QString &exec, const QStringList &args, QByteArray &stdErr,
+ QByteArray &stdOut);
+ qbs::Internal::Version clangVersion();
const QString projectDir;
const QString projectFileName;
const QString buildDir;
const QString sourceFilePath;
const QString dbFilePath;
+ QProcessEnvironment processEnvironment;
};
#endif // Include guard.