diff options
author | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2015-04-15 11:48:26 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2015-05-05 16:26:32 +0300 |
commit | 19f4072142d94861ab488b3e2255af0597fa59a6 (patch) | |
tree | 1459eb0b25440c1f37e70d7b9032f3013dc76228 | |
parent | ef79615fe59168b176dcc18f982a0eec9346d2d1 (diff) | |
download | qt-creator-19f4072142d94861ab488b3e2255af0597fa59a6.tar.gz |
Run the analyzer within the build environment.
This is especially important for clang-cl, which requires the environment
set by e.g. vcvars32.bat [1].
[1] http://clang.llvm.org/docs/UsersManual.html#clang-cl
Change-Id: If319bb94752bbef9207581c50173dde99af007bc
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
5 files changed, 24 insertions, 3 deletions
diff --git a/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp b/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp index 9eec04f25b..80338bdd77 100644 --- a/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp +++ b/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp @@ -209,6 +209,13 @@ AnalyzeUnits ClangStaticAnalyzerRunControl::unitsToAnalyze() m_wordWidth); } +static QDebug operator<<(QDebug debug, const Utils::Environment &environment) +{ + foreach (const QString &entry, environment.toStringList()) + debug << "\n " << entry; + return debug; +} + bool ClangStaticAnalyzerRunControl::startEngine() { emit starting(this); @@ -271,6 +278,7 @@ bool ClangStaticAnalyzerRunControl::startEngine() m_progress.reportStarted(); // Start process(es) + qCDebug(LOG) << "Environment:" << startParameters().environment; m_runners.clear(); const int parallelRuns = ClangStaticAnalyzerSettings::instance()->simultaneousProcesses(); QTC_ASSERT(parallelRuns >= 1, emit finished(); return false); @@ -335,7 +343,10 @@ ClangStaticAnalyzerRunner *ClangStaticAnalyzerRunControl::createRunner() QTC_ASSERT(!m_clangLogFileDir.isEmpty(), return 0); ClangStaticAnalyzerRunner *runner - = new ClangStaticAnalyzerRunner(m_clangExecutable, m_clangLogFileDir, this); + = new ClangStaticAnalyzerRunner(m_clangExecutable, + m_clangLogFileDir, + startParameters().environment, + this); connect(runner, &ClangStaticAnalyzerRunner::finishedWithSuccess, this, &ClangStaticAnalyzerRunControl::onRunnerFinishedWithSuccess); connect(runner, &ClangStaticAnalyzerRunner::finishedWithFailure, diff --git a/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrolfactory.cpp b/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrolfactory.cpp index 34fb3d4b5a..0b54fa2af3 100644 --- a/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrolfactory.cpp +++ b/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrolfactory.cpp @@ -25,6 +25,7 @@ #include <cpptools/cppmodelmanager.h> #include <cpptools/cppprojects.h> +#include <projectexplorer/buildconfiguration.h> #include <projectexplorer/gcctoolchain.h> #include <projectexplorer/kit.h> #include <projectexplorer/kitinformation.h> @@ -99,6 +100,10 @@ RunControl *ClangStaticAnalyzerRunControlFactory::create(RunConfiguration *runCo AnalyzerStartParameters sp; sp.runMode = runMode; sp.startMode = StartLocal; + BuildConfiguration * const buildConfiguration = target->activeBuildConfiguration(); + QTC_ASSERT(buildConfiguration, return 0); + sp.environment = buildConfiguration->environment(); + return AnalyzerManager::createRunControl(sp, runConfiguration); } diff --git a/plugins/clangstaticanalyzer/clangstaticanalyzerrunner.cpp b/plugins/clangstaticanalyzer/clangstaticanalyzerrunner.cpp index be3cc8607d..be934bbc8c 100644 --- a/plugins/clangstaticanalyzer/clangstaticanalyzerrunner.cpp +++ b/plugins/clangstaticanalyzer/clangstaticanalyzerrunner.cpp @@ -64,6 +64,7 @@ QString finishedWithBadExitCode(int exitCode) ClangStaticAnalyzerRunner::ClangStaticAnalyzerRunner(const QString &clangExecutable, const QString &clangLogFileDir, + const Utils::Environment &environment, QObject *parent) : QObject(parent) , m_clangExecutable(clangExecutable) @@ -73,6 +74,7 @@ ClangStaticAnalyzerRunner::ClangStaticAnalyzerRunner(const QString &clangExecuta QTC_CHECK(!m_clangLogFileDir.isEmpty()); m_process.setProcessChannelMode(QProcess::MergedChannels); + m_process.setProcessEnvironment(environment.toProcessEnvironment()); m_process.setWorkingDirectory(m_clangLogFileDir); // Current clang-cl puts log file into working dir. connect(&m_process, &QProcess::started, this, &ClangStaticAnalyzerRunner::onProcessStarted); diff --git a/plugins/clangstaticanalyzer/clangstaticanalyzerrunner.h b/plugins/clangstaticanalyzer/clangstaticanalyzerrunner.h index 6164d6ab80..62f8152771 100644 --- a/plugins/clangstaticanalyzer/clangstaticanalyzerrunner.h +++ b/plugins/clangstaticanalyzer/clangstaticanalyzerrunner.h @@ -37,6 +37,7 @@ class ClangStaticAnalyzerRunner : public QObject public: ClangStaticAnalyzerRunner(const QString &clangExecutable, const QString &clangLogFileDir, + const Utils::Environment &environment, QObject *parent = 0); ~ClangStaticAnalyzerRunner(); diff --git a/plugins/clangstaticanalyzer/tests/clangstaticanalyzerrunner/tst_clangstaticanalyzerrunner.cpp b/plugins/clangstaticanalyzer/tests/clangstaticanalyzerrunner/tst_clangstaticanalyzerrunner.cpp index 428213717f..53d31b1d7e 100644 --- a/plugins/clangstaticanalyzer/tests/clangstaticanalyzerrunner/tst_clangstaticanalyzerrunner.cpp +++ b/plugins/clangstaticanalyzer/tests/clangstaticanalyzerrunner/tst_clangstaticanalyzerrunner.cpp @@ -141,7 +141,8 @@ void ClangStaticAnalyzerRunnerTest::runWithTestCodeGeneratedOneIssue() QTemporaryDir temporaryDir(QDir::tempPath() + QLatin1String("/qtc-clangstaticanalyzer-XXXXXX")); QVERIFY(temporaryDir.isValid()); - ClangStaticAnalyzerRunner runner(QLatin1String("clang"), temporaryDir.path()); + ClangStaticAnalyzerRunner runner(QLatin1String("clang"), temporaryDir.path(), + Utils::Environment::systemEnvironment()); ClangStaticAnalyzerRunnerSignalTester st(&runner); QVERIFY(runner.run(testFilePath)); @@ -153,7 +154,8 @@ void ClangStaticAnalyzerRunnerTest::runWithNonExistentFileToAnalyze() { QTemporaryDir temporaryDir(QDir::tempPath() + QLatin1String("/qtc-clangstaticanalyzer-XXXXXX")); QVERIFY(temporaryDir.isValid()); - ClangStaticAnalyzerRunner runner(QLatin1String("clang"), temporaryDir.path()); + ClangStaticAnalyzerRunner runner(QLatin1String("clang"), temporaryDir.path(), + Utils::Environment::systemEnvironment()); ClangStaticAnalyzerRunnerSignalTester st(&runner); QVERIFY(runner.run(QLatin1String("not.existing.file.111"))); |