CMake: Do not crash when deleting cmake tools

Do not crash when the cmake tool that was used to parse the project
gets removed.

Change-Id: Ieda3ae2025dbcfb1f90d9bd01c5f0ed960756c6a
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This commit is contained in:
Tobias Hunger
2018-05-24 16:57:31 +02:00
parent b48742ad40
commit 88b065db3f
8 changed files with 45 additions and 28 deletions

View File

@@ -98,13 +98,14 @@ ServerModeReader::~ServerModeReader()
void ServerModeReader::setParameters(const BuildDirParameters &p)
{
QTC_ASSERT(p.cmakeTool, return);
CMakeTool *cmake = p.cmakeTool();
QTC_ASSERT(cmake, return);
BuildDirReader::setParameters(p);
if (!m_cmakeServer) {
m_cmakeServer.reset(new ServerMode(p.environment,
p.sourceDirectory, p.workDirectory,
p.cmakeTool->cmakeExecutable(),
cmake->cmakeExecutable(),
p.generator, p.extraGenerator, p.platform, p.toolset,
true, 1));
connect(m_cmakeServer.get(), &ServerMode::errorOccured,
@@ -139,15 +140,17 @@ void ServerModeReader::setParameters(const BuildDirParameters &p)
bool ServerModeReader::isCompatible(const BuildDirParameters &p)
{
if (!p.cmakeTool)
CMakeTool *newCmake = p.cmakeTool();
CMakeTool *oldCmake = m_parameters.cmakeTool();
if (!newCmake || !oldCmake)
return false;
// Server mode connection got lost, reset...
if (!m_parameters.cmakeTool->cmakeExecutable().isEmpty() && !m_cmakeServer)
if (!oldCmake && oldCmake->cmakeExecutable().isEmpty() && !m_cmakeServer)
return false;
return p.cmakeTool->hasServerMode()
&& p.cmakeTool->cmakeExecutable() == m_parameters.cmakeTool->cmakeExecutable()
return newCmake->hasServerMode()
&& newCmake->cmakeExecutable() == oldCmake->cmakeExecutable()
&& p.environment == m_parameters.environment
&& p.generator == m_parameters.generator
&& p.extraGenerator == m_parameters.extraGenerator