ProjectExplorer: Register some initial build steps by id

Helps to cut down BuildConfigration::setInitializer() usage.
Plan is to have more of that where feasible.

Change-Id: I138fcffc743daaf7068b5236c2a19c9ca0e3e2d4
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2019-12-06 18:42:11 +01:00
parent 78ffbe0ae7
commit 571fb04d59
6 changed files with 40 additions and 28 deletions

View File

@@ -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)
{
// /<foobar> 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<AutotoolsBuildConfiguration>

View File

@@ -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

View File

@@ -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,

View File

@@ -84,6 +84,8 @@ public:
mutable Utils::Environment m_cachedEnvironment;
QString m_configWidgetDisplayName;
bool m_configWidgetHasFrame = false;
QList<Core::Id> m_initialBuildSteps;
QList<Core::Id> 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();

View File

@@ -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;

View File

@@ -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<QmakeExtraBuildInfo>();
BaseQtVersion *version = QtKitAspect::qtVersion(target->kit());