From 68ad02560f6b9d984ac88ff133d44b9056e8369b Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 6 Mar 2025 18:25:11 +0100 Subject: [PATCH] ProjectExplorer: Create BuildSystem after BuildConfigurationPrivate E.g. MesonBuildSystem calls back on the BuildConfiguration in its constructor, thus requiring the d-pointer to be set up at this point. Fixes: QTCREATORBUG-32593 Change-Id: I023422c13a60e2e26148c22a753cf0339afddf39 Reviewed-by: hjk --- src/plugins/projectexplorer/buildconfiguration.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index 5a851e9724a..71be4ba0ab4 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -148,13 +148,10 @@ public: , m_cleanSteps(bc, Constants::BUILDSTEPS_CLEAN) , m_buildDirectoryAspect(bc, bc) , m_tooltipAspect(bc) - , m_buildSystem(bc->project()->createBuildSystem(bc)) , m_deployConfigurationModel(bc->target()) , m_runConfigurationModel(bc->target()) {} - ~BuildConfigurationPrivate() { delete m_buildSystem; } - bool m_clearSystemEnvironment = false; EnvironmentItems m_userEnvironmentChanges; BuildStepList m_buildSteps; @@ -169,7 +166,7 @@ public: QList m_initialCleanSteps; bool m_parseStdOut = false; QList m_customParsers; - BuildSystem * const m_buildSystem; + BuildSystem *m_buildSystem = nullptr; QList m_deployConfigurations; DeployConfiguration *m_activeDeployConfiguration = nullptr; QList m_runConfigurations; @@ -189,6 +186,7 @@ BuildConfiguration::BuildConfiguration(Target *target, Utils::Id id) : ProjectConfiguration(target, id) , d(new Internal::BuildConfigurationPrivate(this)) { + d->m_buildSystem = project()->createBuildSystem(this); MacroExpander *expander = macroExpander(); expander->setDisplayName(Tr::tr("Build Settings")); expander->setAccumulating(true); @@ -256,6 +254,7 @@ BuildConfiguration::~BuildConfiguration() { qDeleteAll(d->m_deployConfigurations); qDeleteAll(d->m_runConfigurations); + delete d->m_buildSystem; delete d; }