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 <hjk@qt.io>
This commit is contained in:
Christian Kandeler
2025-03-06 18:25:11 +01:00
parent 74e57329aa
commit 68ad02560f

View File

@@ -148,13 +148,10 @@ public:
, m_cleanSteps(bc, Constants::BUILDSTEPS_CLEAN) , m_cleanSteps(bc, Constants::BUILDSTEPS_CLEAN)
, m_buildDirectoryAspect(bc, bc) , m_buildDirectoryAspect(bc, bc)
, m_tooltipAspect(bc) , m_tooltipAspect(bc)
, m_buildSystem(bc->project()->createBuildSystem(bc))
, m_deployConfigurationModel(bc->target()) , m_deployConfigurationModel(bc->target())
, m_runConfigurationModel(bc->target()) , m_runConfigurationModel(bc->target())
{} {}
~BuildConfigurationPrivate() { delete m_buildSystem; }
bool m_clearSystemEnvironment = false; bool m_clearSystemEnvironment = false;
EnvironmentItems m_userEnvironmentChanges; EnvironmentItems m_userEnvironmentChanges;
BuildStepList m_buildSteps; BuildStepList m_buildSteps;
@@ -169,7 +166,7 @@ public:
QList<Utils::Id> m_initialCleanSteps; QList<Utils::Id> m_initialCleanSteps;
bool m_parseStdOut = false; bool m_parseStdOut = false;
QList<Utils::Id> m_customParsers; QList<Utils::Id> m_customParsers;
BuildSystem * const m_buildSystem; BuildSystem *m_buildSystem = nullptr;
QList<DeployConfiguration *> m_deployConfigurations; QList<DeployConfiguration *> m_deployConfigurations;
DeployConfiguration *m_activeDeployConfiguration = nullptr; DeployConfiguration *m_activeDeployConfiguration = nullptr;
QList<RunConfiguration *> m_runConfigurations; QList<RunConfiguration *> m_runConfigurations;
@@ -189,6 +186,7 @@ BuildConfiguration::BuildConfiguration(Target *target, Utils::Id id)
: ProjectConfiguration(target, id) : ProjectConfiguration(target, id)
, d(new Internal::BuildConfigurationPrivate(this)) , d(new Internal::BuildConfigurationPrivate(this))
{ {
d->m_buildSystem = project()->createBuildSystem(this);
MacroExpander *expander = macroExpander(); MacroExpander *expander = macroExpander();
expander->setDisplayName(Tr::tr("Build Settings")); expander->setDisplayName(Tr::tr("Build Settings"));
expander->setAccumulating(true); expander->setAccumulating(true);
@@ -256,6 +254,7 @@ BuildConfiguration::~BuildConfiguration()
{ {
qDeleteAll(d->m_deployConfigurations); qDeleteAll(d->m_deployConfigurations);
qDeleteAll(d->m_runConfigurations); qDeleteAll(d->m_runConfigurations);
delete d->m_buildSystem;
delete d; delete d;
} }