From cbd58d2ff66f3b3ca6c9d6bb6b54b4865b7aecea Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Fri, 16 Dec 2016 03:04:28 -0800 Subject: Fix clangdb autotests with MSVC and MinGW Change-Id: I6db4e074fb7aa4956ccaca7e57d4b674bc2d0c9a Reviewed-by: Christian Gagneraud Reviewed-by: Christian Kandeler --- .../blackbox/testdata-clangdb/project1/project.qbs | 10 +++++++ tests/auto/blackbox/tst_clangdb.cpp | 33 ++++++++++++++-------- tests/auto/blackbox/tst_clangdb.h | 7 +++-- 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. -- cgit v1.2.3