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_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<Utils::Id> m_initialCleanSteps;
bool m_parseStdOut = false;
QList<Utils::Id> m_customParsers;
BuildSystem * const m_buildSystem;
BuildSystem *m_buildSystem = nullptr;
QList<DeployConfiguration *> m_deployConfigurations;
DeployConfiguration *m_activeDeployConfiguration = nullptr;
QList<RunConfiguration *> 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;
}