summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@theqtcompany.com>2016-03-30 13:43:16 +0200
committerTobias Hunger <tobias.hunger@theqtcompany.com>2016-03-30 13:05:06 +0000
commit82b9e9ed37fe15619c80d1a9f656bfe2ea6e1f94 (patch)
treeffdae014e1acce043d6f3b54e15d181bb07013c5 /src
parent2c822ae3c168ac6b45a31afea023d44920fbaf8b (diff)
downloadqt-creator-82b9e9ed37fe15619c80d1a9f656bfe2ea6e1f94.tar.gz
CMake: Do not crash when cloning cmake buildconfigurations
Change-Id: I832981cdea16ab058f92758c9bae9b64b904d573 Task-number: QTCREATORBUG-15926 Reviewed-by: Tim Jenssen <tim.jenssen@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp63
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h1
2 files changed, 35 insertions, 29 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
index 7f73a321f7..d77e5efa90 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
@@ -63,33 +63,7 @@ const char CONFIGURATION_KEY[] = "CMake.Configuration";
CMakeBuildConfiguration::CMakeBuildConfiguration(ProjectExplorer::Target *parent) :
BuildConfiguration(parent, Core::Id(Constants::CMAKE_BC_ID))
{
- auto project = static_cast<CMakeProject *>(parent->project());
- setBuildDirectory(shadowBuildDirectory(project->projectFilePath(),
- parent->kit(),
- displayName(), BuildConfiguration::Unknown));
-
- m_buildDirManager = new BuildDirManager(this);
- connect(m_buildDirManager, &BuildDirManager::dataAvailable,
- this, &CMakeBuildConfiguration::dataAvailable);
- connect(m_buildDirManager, &BuildDirManager::errorOccured,
- this, &CMakeBuildConfiguration::setError);
- connect(m_buildDirManager, &BuildDirManager::configurationStarted,
- this, [this]() { m_completeConfigurationCache.clear(); emit parsingStarted(); });
-
- connect(this, &CMakeBuildConfiguration::environmentChanged,
- m_buildDirManager, &BuildDirManager::forceReparse);
- connect(this, &CMakeBuildConfiguration::buildDirectoryChanged,
- m_buildDirManager, &BuildDirManager::forceReparse);
- connect(target(), &Target::kitChanged, this, [this]() {
- ProjectExplorer::Kit *k = target()->kit();
- CMakeConfig config = cmakeConfiguration();
- config.append(CMakeConfigurationKitInformation::configuration(k)); // last value wins...
- setCMakeConfiguration(config);
- m_buildDirManager->maybeForceReparse();
- });
-
- connect(this, &CMakeBuildConfiguration::parsingStarted, project, &CMakeProject::handleParsingStarted);
- connect(this, &CMakeBuildConfiguration::dataAvailable, project, &CMakeProject::parseCMakeOutput);
+ ctor();
}
CMakeBuildConfiguration::~CMakeBuildConfiguration()
@@ -112,7 +86,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(ProjectExplorer::Target *parent
BuildConfiguration(parent, source),
m_configuration(source->m_configuration)
{
- Q_ASSERT(parent);
+ ctor();
cloneSteps(source);
}
@@ -155,6 +129,37 @@ bool CMakeBuildConfiguration::fromMap(const QVariantMap &map)
return true;
}
+void CMakeBuildConfiguration::ctor()
+{
+ auto project = static_cast<CMakeProject *>(target()->project());
+ setBuildDirectory(shadowBuildDirectory(project->projectFilePath(),
+ target()->kit(),
+ displayName(), BuildConfiguration::Unknown));
+
+ m_buildDirManager = new BuildDirManager(this);
+ connect(m_buildDirManager, &BuildDirManager::dataAvailable,
+ this, &CMakeBuildConfiguration::dataAvailable);
+ connect(m_buildDirManager, &BuildDirManager::errorOccured,
+ this, &CMakeBuildConfiguration::setError);
+ connect(m_buildDirManager, &BuildDirManager::configurationStarted,
+ this, [this]() { m_completeConfigurationCache.clear(); emit parsingStarted(); });
+
+ connect(this, &CMakeBuildConfiguration::environmentChanged,
+ m_buildDirManager, &BuildDirManager::forceReparse);
+ connect(this, &CMakeBuildConfiguration::buildDirectoryChanged,
+ m_buildDirManager, &BuildDirManager::forceReparse);
+ connect(target(), &Target::kitChanged, this, [this]() {
+ ProjectExplorer::Kit *k = target()->kit();
+ CMakeConfig config = cmakeConfiguration();
+ config.append(CMakeConfigurationKitInformation::configuration(k)); // last value wins...
+ setCMakeConfiguration(config);
+ m_buildDirManager->maybeForceReparse();
+ });
+
+ connect(this, &CMakeBuildConfiguration::parsingStarted, project, &CMakeProject::handleParsingStarted);
+ connect(this, &CMakeBuildConfiguration::dataAvailable, project, &CMakeProject::parseCMakeOutput);
+}
+
BuildDirManager *CMakeBuildConfiguration::buildDirManager() const
{
return m_buildDirManager;
@@ -197,7 +202,7 @@ FileName CMakeBuildConfiguration::shadowBuildDirectory(const FileName &projectFi
QList<ConfigModel::DataItem> CMakeBuildConfiguration::completeCMakeConfiguration() const
{
- if (m_buildDirManager->isParsing())
+ if (!m_buildDirManager && m_buildDirManager->isParsing())
return QList<ConfigModel::DataItem>();
if (m_completeConfigurationCache.isEmpty())
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
index 1bd00c3b64..62f0913f7d 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
@@ -92,6 +92,7 @@ protected:
bool fromMap(const QVariantMap &map) override;
private:
+ void ctor();
QList<ConfigModel::DataItem> completeCMakeConfiguration() const;
void setCurrentCMakeConfiguration(const QList<ConfigModel::DataItem> &items);