summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2015-04-15 11:48:26 +0200
committerNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2015-05-05 16:26:32 +0300
commit19f4072142d94861ab488b3e2255af0597fa59a6 (patch)
tree1459eb0b25440c1f37e70d7b9032f3013dc76228
parentef79615fe59168b176dcc18f982a0eec9346d2d1 (diff)
downloadqt-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>
-rw-r--r--plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp13
-rw-r--r--plugins/clangstaticanalyzer/clangstaticanalyzerruncontrolfactory.cpp5
-rw-r--r--plugins/clangstaticanalyzer/clangstaticanalyzerrunner.cpp2
-rw-r--r--plugins/clangstaticanalyzer/clangstaticanalyzerrunner.h1
-rw-r--r--plugins/clangstaticanalyzer/tests/clangstaticanalyzerrunner/tst_clangstaticanalyzerrunner.cpp6
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")));