diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp index d6896cb6279..6de5139f2ff 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp @@ -45,8 +45,8 @@ namespace Internal { // AutotoolsBuildConfiguration -AutotoolsBuildConfiguration::AutotoolsBuildConfiguration(Target *parent, Core::Id id) - : BuildConfiguration(parent, id) +AutotoolsBuildConfiguration::AutotoolsBuildConfiguration(Target *target, Core::Id id) + : BuildConfiguration(target, id) { // / is used so the un-changed check in setBuildDirectory() works correctly. // The leading / is to avoid the relative the path expansion in BuildConfiguration::buildDirectory. @@ -54,29 +54,20 @@ AutotoolsBuildConfiguration::AutotoolsBuildConfiguration(Target *parent, Core::I setBuildDirectoryHistoryCompleter("AutoTools.BuildDir.History"); setConfigWidgetDisplayName(tr("Autotools Manager")); - setInitializer([this](const BuildInfo &) { - // ### Build Steps Build ### - // autogen.sh or autoreconf - QFile autogenFile(target()->project()->projectDirectory().toString() + "/autogen.sh"); - if (autogenFile.exists()) - buildSteps()->appendStep(Constants::AUTOGEN_STEP_ID); - else - buildSteps()->appendStep(Constants::AUTORECONF_STEP_ID); + // ### Build Steps Build ### + QFile autogenFile(target->project()->projectDirectory().toString() + "/autogen.sh"); + if (autogenFile.exists()) + appendInitialBuildStep(Constants::AUTOGEN_STEP_ID); // autogen.sh + else + appendInitialBuildStep(Constants::AUTORECONF_STEP_ID); // autoreconf - // ./configure. - buildSteps()->appendStep(Constants::CONFIGURE_STEP_ID); + appendInitialBuildStep(Constants::CONFIGURE_STEP_ID); // ./configure. + appendInitialBuildStep(Constants::MAKE_STEP_ID); // make - // make - buildSteps()->appendStep(Constants::MAKE_STEP_ID); - - // ### Build Steps Clean ### - cleanSteps()->appendStep(Constants::MAKE_STEP_ID); - }); + // ### Build Steps Clean ### + appendInitialBuildStep(Constants::MAKE_STEP_ID); } - -// AutotoolsBuildConfiguration class - AutotoolsBuildConfigurationFactory::AutotoolsBuildConfigurationFactory() { registerBuildConfiguration diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h index d3c89c9d590..ca744859194 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h +++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h @@ -37,7 +37,7 @@ class AutotoolsBuildConfiguration : public ProjectExplorer::BuildConfiguration Q_OBJECT friend class ProjectExplorer::BuildConfigurationFactory; - AutotoolsBuildConfiguration(ProjectExplorer::Target *parent, Core::Id id); + AutotoolsBuildConfiguration(ProjectExplorer::Target *target, Core::Id id); }; class AutotoolsBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationFactory diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 3edd46b9dab..d2ff275fa90 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -75,9 +75,10 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Core::Id id) displayName(), BuildConfiguration::Unknown)); - setInitializer([this, target](const BuildInfo &info) { + appendInitialBuildStep(Constants::CMAKE_BUILD_STEP_ID); + appendInitialCleanStep(Constants::CMAKE_BUILD_STEP_ID); - buildSteps()->appendStep(Constants::CMAKE_BUILD_STEP_ID); + setInitializer([this, target](const BuildInfo &info) { CMakeConfig config; config.append({"CMAKE_BUILD_TYPE", info.typeName.toUtf8()}); @@ -147,8 +148,6 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Core::Id id) m_initialConfiguration.prepend(CMakeProjectManager::CMakeConfigItem{"CMAKE_FIND_ROOT_PATH", "%{Qt:QT_INSTALL_PREFIX}"}); } - cleanSteps()->appendStep(Constants::CMAKE_BUILD_STEP_ID); - if (info.buildDirectory.isEmpty()) { setBuildDirectory(shadowBuildDirectory(target->project()->projectFilePath(), k, diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index 92585468308..ffaae6bcbdb 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -84,6 +84,8 @@ public: mutable Utils::Environment m_cachedEnvironment; QString m_configWidgetDisplayName; bool m_configWidgetHasFrame = false; + QList m_initialBuildSteps; + QList m_initialCleanSteps; // FIXME: Remove. BuildConfiguration::BuildType m_initialBuildType = BuildConfiguration::Unknown; @@ -190,6 +192,12 @@ void BuildConfiguration::doInitialize(const BuildInfo &info) d->m_initialBuildType = info.buildType; + for (Core::Id id : qAsConst(d->m_initialBuildSteps)) + d->m_buildSteps.appendStep(id); + + for (Core::Id id : qAsConst(d->m_initialCleanSteps)) + d->m_cleanSteps.appendStep(id); + acquaintAspects(); if (d->m_initializer) @@ -250,6 +258,16 @@ BuildStepList *BuildConfiguration::cleanSteps() const return &d->m_cleanSteps; } +void BuildConfiguration::appendInitialBuildStep(Core::Id id) +{ + d->m_initialBuildSteps.append(id); +} + +void BuildConfiguration::appendInitialCleanStep(Core::Id id) +{ + d->m_initialCleanSteps.append(id); +} + QVariantMap BuildConfiguration::toMap() const { QVariantMap map = ProjectConfiguration::toMap(); diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h index 3f053f15597..f940be1a773 100644 --- a/src/plugins/projectexplorer/buildconfiguration.h +++ b/src/plugins/projectexplorer/buildconfiguration.h @@ -80,6 +80,9 @@ public: BuildStepList *buildSteps() const; BuildStepList *cleanSteps() const; + void appendInitialBuildStep(Core::Id id); + void appendInitialCleanStep(Core::Id id); + bool fromMap(const QVariantMap &map) override; QVariantMap toMap() const override; diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp index 02d235fdda2..6456a97d97d 100644 --- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp +++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp @@ -108,15 +108,16 @@ QmakeBuildConfiguration::QmakeBuildConfiguration(Target *target, Core::Id id) { setConfigWidgetDisplayName(tr("General")); setConfigWidgetHasFrame(true); + m_buildSystem = new QmakeBuildSystem(this); + appendInitialCleanStep(Constants::MAKESTEP_BS_ID); + setInitializer([this, target](const BuildInfo &info) { auto qmakeStep = new QMakeStep(buildSteps()); buildSteps()->appendStep(qmakeStep); buildSteps()->appendStep(Constants::MAKESTEP_BS_ID); - cleanSteps()->appendStep(Constants::MAKESTEP_BS_ID); - const QmakeExtraBuildInfo qmakeExtra = info.extraInfo.value(); BaseQtVersion *version = QtKitAspect::qtVersion(target->kit());