diff options
author | Jake Petroules <jake.petroules@qt.io> | 2016-12-16 03:04:28 -0800 |
---|---|---|
committer | Jake Petroules <jake.petroules@qt.io> | 2016-12-19 21:03:35 +0000 |
commit | cbd58d2ff66f3b3ca6c9d6bb6b54b4865b7aecea (patch) | |
tree | 6b8140a332dcc446226541fa47deefeb2a100f07 /tests/auto/blackbox/tst_clangdb.cpp | |
parent | a7afa6a9ad312bacf528fc3e97688c125f151abf (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>
Diffstat (limited to 'tests/auto/blackbox/tst_clangdb.cpp')
-rw-r--r-- | tests/auto/blackbox/tst_clangdb.cpp | 33 |
1 files changed, 21 insertions, 12 deletions
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))); |