ProjectExplorer: Pass parameters to BuildConfiguration initialization

... directly again, mostly undoing the temporary hack from fb631cb258.

Change-Id: I4485dcb23765d99b4b5869973f004457ebd7aa7d
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2019-12-06 17:32:07 +01:00
parent 2ab33d1dc9
commit b1a29dedfc
9 changed files with 30 additions and 61 deletions

View File

@@ -54,7 +54,7 @@ AutotoolsBuildConfiguration::AutotoolsBuildConfiguration(Target *parent, Core::I
setBuildDirectoryHistoryCompleter("AutoTools.BuildDir.History"); setBuildDirectoryHistoryCompleter("AutoTools.BuildDir.History");
setConfigWidgetDisplayName(tr("Autotools Manager")); setConfigWidgetDisplayName(tr("Autotools Manager"));
setInitializer([this] { setInitializer([this](const BuildInfo &) {
// ### Build Steps Build ### // ### Build Steps Build ###
// autogen.sh or autoreconf // autogen.sh or autoreconf
QFile autogenFile(target()->project()->projectDirectory().toString() + "/autogen.sh"); QFile autogenFile(target()->project()->projectDirectory().toString() + "/autogen.sh");

View File

@@ -89,7 +89,8 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Core::Id id)
displayName(), displayName(),
BuildConfiguration::Unknown)); BuildConfiguration::Unknown));
setInitializer([this, target] { setInitializer([this, target](const BuildInfo &info) {
buildSteps()->appendStep(Constants::CMAKE_BUILD_STEP_ID); buildSteps()->appendStep(Constants::CMAKE_BUILD_STEP_ID);
if (DeviceTypeKitAspect::deviceTypeId(target->kit()) if (DeviceTypeKitAspect::deviceTypeId(target->kit())
@@ -147,14 +148,14 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Core::Id id)
cleanSteps()->appendStep(Constants::CMAKE_BUILD_STEP_ID); cleanSteps()->appendStep(Constants::CMAKE_BUILD_STEP_ID);
if (initialBuildDirectory().isEmpty()) { if (info.buildDirectory.isEmpty()) {
setBuildDirectory(shadowBuildDirectory(target->project()->projectFilePath(), setBuildDirectory(shadowBuildDirectory(target->project()->projectFilePath(),
target->kit(), target->kit(),
initialDisplayName(), info.displayName,
initialBuildType())); info.buildType));
} }
auto info = extraInfo().value<CMakeExtraBuildInfo>(); auto cinfo = info.extraInfo.value<CMakeExtraBuildInfo>();
setConfigurationForCMake(info.configuration); setConfigurationForCMake(cinfo.configuration);
}); });
} }

View File

@@ -55,7 +55,7 @@ GenericBuildConfiguration::GenericBuildConfiguration(Target *parent, Core::Id id
setConfigWidgetDisplayName(tr("Generic Manager")); setConfigWidgetDisplayName(tr("Generic Manager"));
setBuildDirectoryHistoryCompleter("Generic.BuildDir.History"); setBuildDirectoryHistoryCompleter("Generic.BuildDir.History");
setInitializer([this] { setInitializer([this](const BuildInfo &) {
buildSteps()->appendStep(Constants::GENERIC_MS_ID); buildSteps()->appendStep(Constants::GENERIC_MS_ID);
cleanSteps()->appendStep(Constants::GENERIC_MS_ID); cleanSteps()->appendStep(Constants::GENERIC_MS_ID);
updateCacheAndEmitEnvironmentChanged(); updateCacheAndEmitEnvironmentChanged();

View File

@@ -54,9 +54,9 @@ NimbleBuildConfiguration::NimbleBuildConfiguration(Target *target, Core::Id id)
setConfigWidgetHasFrame(true); setConfigWidgetHasFrame(true);
setBuildDirectorySettingsKey("Nim.NimbleBuildConfiguration.BuildDirectory"); setBuildDirectorySettingsKey("Nim.NimbleBuildConfiguration.BuildDirectory");
setInitializer([this] { setInitializer([this](const BuildInfo &info) {
m_buildType = initialBuildType(); m_buildType = info.buildType;
setBuildDirectory(project()->projectDirectory()); setBuildDirectory(project()->projectDirectory());

View File

@@ -73,7 +73,7 @@ NimBuildConfiguration::NimBuildConfiguration(Target *target, Core::Id id)
setBuildDirectorySettingsKey("Nim.NimBuildConfiguration.BuildDirectory"); setBuildDirectorySettingsKey("Nim.NimBuildConfiguration.BuildDirectory");
setInitializer([this, target] { setInitializer([this, target](const BuildInfo &info) {
// Create the build configuration and initialize it from build info // Create the build configuration and initialize it from build info
setBuildDirectory(defaultBuildDirectory(target->kit(), setBuildDirectory(defaultBuildDirectory(target->kit(),
project()->projectFilePath(), project()->projectFilePath(),
@@ -84,7 +84,7 @@ NimBuildConfiguration::NimBuildConfiguration(Target *target, Core::Id id)
{ {
auto nimCompilerBuildStep = new NimCompilerBuildStep(buildSteps()); auto nimCompilerBuildStep = new NimCompilerBuildStep(buildSteps());
NimCompilerBuildStep::DefaultBuildOptions defaultOption; NimCompilerBuildStep::DefaultBuildOptions defaultOption;
switch (initialBuildType()) { switch (info.buildType) {
case BuildConfiguration::Release: case BuildConfiguration::Release:
defaultOption = NimCompilerBuildStep::DefaultBuildOptions::Release; defaultOption = NimCompilerBuildStep::DefaultBuildOptions::Release;
break; break;

View File

@@ -84,13 +84,9 @@ public:
QString m_configWidgetDisplayName; QString m_configWidgetDisplayName;
bool m_configWidgetHasFrame = false; bool m_configWidgetHasFrame = false;
std::function<void()> m_initializer;
// FIXME: Remove. // FIXME: Remove.
BuildConfiguration::BuildType m_initialBuildType = BuildConfiguration::Unknown; BuildConfiguration::BuildType m_initialBuildType = BuildConfiguration::Unknown;
Utils::FilePath m_initialBuildDirectory; std::function<void(const BuildInfo &)> m_initializer;
QString m_initialDisplayName;
QVariant m_extraInfo;
}; };
} // Internal } // Internal
@@ -190,17 +186,14 @@ void BuildConfiguration::doInitialize(const BuildInfo &info)
setBuildDirectory(info.buildDirectory); setBuildDirectory(info.buildDirectory);
d->m_initialBuildType = info.buildType; d->m_initialBuildType = info.buildType;
d->m_initialDisplayName = info.displayName;
d->m_initialBuildDirectory = info.buildDirectory;
d->m_extraInfo = info.extraInfo;
acquaintAspects(); acquaintAspects();
if (d->m_initializer) if (d->m_initializer)
d->m_initializer(); d->m_initializer(info);
} }
void BuildConfiguration::setInitializer(const std::function<void ()> &initializer) void BuildConfiguration::setInitializer(const std::function<void(const BuildInfo &)> &initializer)
{ {
d->m_initializer = initializer; d->m_initializer = initializer;
} }
@@ -318,16 +311,6 @@ void BuildConfiguration::emitBuildDirectoryChanged()
} }
} }
QString BuildConfiguration::initialDisplayName() const
{
return d->m_initialDisplayName;
}
QVariant BuildConfiguration::extraInfo() const
{
return d->m_extraInfo;
}
ProjectExplorer::BuildDirectoryAspect *BuildConfiguration::buildDirectoryAspect() const ProjectExplorer::BuildDirectoryAspect *BuildConfiguration::buildDirectoryAspect() const
{ {
return d->m_buildDirectoryAspect; return d->m_buildDirectoryAspect;
@@ -437,16 +420,6 @@ BuildConfiguration::BuildType BuildConfiguration::buildType() const
return d->m_initialBuildType; return d->m_initialBuildType;
} }
BuildConfiguration::BuildType BuildConfiguration::initialBuildType() const
{
return d->m_initialBuildType;
}
FilePath BuildConfiguration::initialBuildDirectory() const
{
return d->m_initialBuildDirectory;
}
QString BuildConfiguration::buildTypeName(BuildConfiguration::BuildType type) QString BuildConfiguration::buildTypeName(BuildConfiguration::BuildType type)
{ {
switch (type) { switch (type) {

View File

@@ -98,11 +98,6 @@ public:
}; };
virtual BuildType buildType() const; virtual BuildType buildType() const;
BuildType initialBuildType() const; // FIXME: Remove.
Utils::FilePath initialBuildDirectory() const; // FIXME: Remove.
QString initialDisplayName() const; // FIXME: Remove.
QVariant extraInfo() const; // FIXME: Remove.
static QString buildTypeName(BuildType type); static QString buildTypeName(BuildType type);
bool isActive() const override; bool isActive() const override;
@@ -127,7 +122,7 @@ signals:
void buildTypeChanged(); void buildTypeChanged();
protected: protected:
void setInitializer(const std::function<void()> &initializer); void setInitializer(const std::function<void(const BuildInfo &info)> &initializer);
private: private:
void emitBuildDirectoryChanged(); void emitBuildDirectoryChanged();

View File

@@ -80,19 +80,19 @@ QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Core::Id id)
{ {
setConfigWidgetHasFrame(true); setConfigWidgetHasFrame(true);
setInitializer([this, target] { setInitializer([this, target](const BuildInfo &info) {
const Kit *kit = target->kit(); const Kit *kit = target->kit();
QVariantMap configData = extraInfo().value<QVariantMap>(); QVariantMap configData = info.extraInfo.value<QVariantMap>();
configData.insert(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY), configData.insert(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY),
(initialBuildType() == BuildConfiguration::Debug) (info.buildType == BuildConfiguration::Debug)
? QLatin1String(Constants::QBS_VARIANT_DEBUG) ? QLatin1String(Constants::QBS_VARIANT_DEBUG)
: QLatin1String(Constants::QBS_VARIANT_RELEASE)); : QLatin1String(Constants::QBS_VARIANT_RELEASE));
Utils::FilePath buildDir = initialBuildDirectory(); FilePath buildDir = info.buildDirectory;
if (buildDir.isEmpty()) if (buildDir.isEmpty())
buildDir = defaultBuildDirectory(target->project()->projectFilePath(), buildDir = defaultBuildDirectory(target->project()->projectFilePath(),
kit, initialDisplayName(), kit, info.displayName,
initialBuildType()); buildType());
setBuildDirectory(buildDir); setBuildDirectory(buildDir);
// Add the build configuration. // Add the build configuration.
@@ -100,7 +100,7 @@ QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Core::Id id)
QString configName = bd.take("configName").toString(); QString configName = bd.take("configName").toString();
if (configName.isEmpty()) { if (configName.isEmpty()) {
configName = "qtc_" + kit->fileSystemFriendlyName() + '_' configName = "qtc_" + kit->fileSystemFriendlyName() + '_'
+ Utils::FileUtils::fileSystemFriendlyName(initialDisplayName()); + FileUtils::fileSystemFriendlyName(info.displayName);
} }
const QString kitName = kit->displayName(); const QString kitName = kit->displayName();

View File

@@ -109,18 +109,18 @@ QmakeBuildConfiguration::QmakeBuildConfiguration(Target *target, Core::Id id)
setConfigWidgetHasFrame(true); setConfigWidgetHasFrame(true);
m_buildSystem = new QmakeBuildSystem(this); m_buildSystem = new QmakeBuildSystem(this);
setInitializer([this, target] { setInitializer([this, target](const BuildInfo &info) {
auto qmakeStep = new QMakeStep(buildSteps()); auto qmakeStep = new QMakeStep(buildSteps());
buildSteps()->appendStep(qmakeStep); buildSteps()->appendStep(qmakeStep);
buildSteps()->appendStep(Constants::MAKESTEP_BS_ID); buildSteps()->appendStep(Constants::MAKESTEP_BS_ID);
cleanSteps()->appendStep(Constants::MAKESTEP_BS_ID); cleanSteps()->appendStep(Constants::MAKESTEP_BS_ID);
const QmakeExtraBuildInfo qmakeExtra = extraInfo().value<QmakeExtraBuildInfo>(); const QmakeExtraBuildInfo qmakeExtra = info.extraInfo.value<QmakeExtraBuildInfo>();
BaseQtVersion *version = QtKitAspect::qtVersion(target->kit()); BaseQtVersion *version = QtKitAspect::qtVersion(target->kit());
BaseQtVersion::QmakeBuildConfigs config = version->defaultBuildConfig(); BaseQtVersion::QmakeBuildConfigs config = version->defaultBuildConfig();
if (initialBuildType() == BuildConfiguration::Debug) if (info.buildType == BuildConfiguration::Debug)
config |= BaseQtVersion::DebugBuild; config |= BaseQtVersion::DebugBuild;
else else
config &= ~BaseQtVersion::DebugBuild; config &= ~BaseQtVersion::DebugBuild;
@@ -135,11 +135,11 @@ QmakeBuildConfiguration::QmakeBuildConfiguration(Target *target, Core::Id id)
setQMakeBuildConfiguration(config); setQMakeBuildConfiguration(config);
FilePath directory = initialBuildDirectory(); FilePath directory = info.buildDirectory;
if (directory.isEmpty()) { if (directory.isEmpty()) {
directory = shadowBuildDirectory(target->project()->projectFilePath(), directory = shadowBuildDirectory(target->project()->projectFilePath(),
target->kit(), initialDisplayName(), target->kit(), info.displayName,
initialBuildType()); info.buildType);
} }
setBuildDirectory(directory); setBuildDirectory(directory);