ProjectExplorer: Set up hack to funnel information to buildstep ctors

For now, store most of BuildInfo in the BuildConfiguration. This will
allow accessing it in the BuildStep ctors so the BuildSteps can
be fully setup without polishing afterwards (as currently done
in the main build steps of the three buildsystems, and Nim)

This in meant to be temporary to a large degree.

Change-Id: If6ade6052f4b96670995399ae97ef7d2313f632a
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2019-08-02 18:06:29 +02:00
parent 02707ecdad
commit fb631cb258
16 changed files with 72 additions and 71 deletions

View File

@@ -60,9 +60,9 @@ AutotoolsBuildConfiguration::AutotoolsBuildConfiguration(Target *parent, Core::I
setConfigWidgetDisplayName(tr("Autotools Manager"));
}
void AutotoolsBuildConfiguration::initialize(const BuildInfo &info)
void AutotoolsBuildConfiguration::initialize()
{
BuildConfiguration::initialize(info);
BuildConfiguration::initialize();
BuildStepList *buildSteps = stepList(BUILDSTEPS_BUILD);
@@ -111,11 +111,5 @@ QList<BuildInfo> AutotoolsBuildConfigurationFactory::availableBuilds
return {info};
}
BuildConfiguration::BuildType AutotoolsBuildConfiguration::buildType() const
{
// TODO: Should I return something different from Unknown?
return Unknown;
}
} // Internal
} // AutotoolsProjectManager

View File

@@ -39,8 +39,7 @@ class AutotoolsBuildConfiguration : public ProjectExplorer::BuildConfiguration
friend class ProjectExplorer::BuildConfigurationFactory;
AutotoolsBuildConfiguration(ProjectExplorer::Target *parent, Core::Id id);
void initialize(const ProjectExplorer::BuildInfo &info) override;
BuildType buildType() const override;
void initialize() override;
};
class AutotoolsBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationFactory

View File

@@ -171,9 +171,9 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *parent, Core::Id id)
});
}
void CMakeBuildConfiguration::initialize(const BuildInfo &info)
void CMakeBuildConfiguration::initialize()
{
BuildConfiguration::initialize(info);
BuildConfiguration::initialize();
BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
buildSteps->appendStep(Constants::CMAKE_BUILD_STEP_ID);
@@ -212,14 +212,15 @@ void CMakeBuildConfiguration::initialize(const BuildInfo &info)
BuildStepList *cleanSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
cleanSteps->appendStep(Constants::CMAKE_BUILD_STEP_ID);
if (info.buildDirectory.isEmpty()) {
if (initialBuildDirectory().isEmpty()) {
auto project = target()->project();
setBuildDirectory(CMakeBuildConfiguration::shadowBuildDirectory(project->projectFilePath(),
target()->kit(),
info.displayName, info.buildType));
initialDisplayName(),
initialBuildType()));
}
auto extraInfo = info.extraInfo.value<CMakeExtraBuildInfo>();
setConfigurationForCMake(extraInfo.configuration);
auto info = extraInfo().value<CMakeExtraBuildInfo>();
setConfigurationForCMake(info.configuration);
}
QString CMakeBuildConfiguration::disabledReason() const

View File

@@ -84,7 +84,7 @@ private:
QVariantMap toMap() const override;
BuildType buildType() const override;
void initialize(const ProjectExplorer::BuildInfo &info) override;
void initialize() override;
QString disabledReason() const override;
ProjectExplorer::NamedWidget *createConfigWidget() override;

View File

@@ -502,9 +502,9 @@ CompilationDatabaseBuildConfiguration::CompilationDatabaseBuildConfiguration(
target->setApplicationTargets({BuildTargetInfo()});
}
void CompilationDatabaseBuildConfiguration::initialize(const ProjectExplorer::BuildInfo &info)
void CompilationDatabaseBuildConfiguration::initialize()
{
ProjectExplorer::BuildConfiguration::initialize(info);
ProjectExplorer::BuildConfiguration::initialize();
BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
buildSteps->appendStep(ProjectExplorer::Constants::PROCESS_STEP_ID);
}
@@ -514,11 +514,6 @@ ProjectExplorer::NamedWidget *CompilationDatabaseBuildConfiguration::createConfi
return new ProjectExplorer::NamedWidget();
}
ProjectExplorer::BuildConfiguration::BuildType CompilationDatabaseBuildConfiguration::buildType() const
{
return ProjectExplorer::BuildConfiguration::Release;
}
CompilationDatabaseBuildConfigurationFactory::CompilationDatabaseBuildConfigurationFactory()
{
registerBuildConfiguration<CompilationDatabaseBuildConfiguration>(

View File

@@ -88,10 +88,9 @@ class CompilationDatabaseBuildConfiguration : public ProjectExplorer::BuildConfi
public:
CompilationDatabaseBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
ProjectExplorer::NamedWidget *createConfigWidget() override;
BuildType buildType() const override;
protected:
void initialize(const ProjectExplorer::BuildInfo &info) override;
void initialize() override;
};
class CompilationDatabaseBuildConfigurationFactory

View File

@@ -58,9 +58,9 @@ GenericBuildConfiguration::GenericBuildConfiguration(Target *parent, Core::Id id
updateCacheAndEmitEnvironmentChanged();
}
void GenericBuildConfiguration::initialize(const BuildInfo &info)
void GenericBuildConfiguration::initialize()
{
BuildConfiguration::initialize(info);
BuildConfiguration::initialize();
BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
buildSteps->appendStep(Constants::GENERIC_MS_ID);
@@ -101,11 +101,6 @@ QList<BuildInfo> GenericBuildConfigurationFactory::availableBuilds
return {info};
}
BuildConfiguration::BuildType GenericBuildConfiguration::buildType() const
{
return Unknown;
}
void GenericBuildConfiguration::addToEnvironment(Utils::Environment &env) const
{
prependCompilerPathToEnvironment(target()->kit(), env);

View File

@@ -39,8 +39,7 @@ class GenericBuildConfiguration : public ProjectExplorer::BuildConfiguration
friend class ProjectExplorer::BuildConfigurationFactory;
GenericBuildConfiguration(ProjectExplorer::Target *parent, Core::Id id);
void initialize(const ProjectExplorer::BuildInfo &info) override;
BuildType buildType() const override;
void initialize() override;
void addToEnvironment(Utils::Environment &env) const final;
};

View File

@@ -76,9 +76,9 @@ NimBuildConfiguration::NimBuildConfiguration(Target *target, Core::Id id)
setBuildDirectorySettingsKey("Nim.NimBuildConfiguration.BuildDirectory");
}
void NimBuildConfiguration::initialize(const BuildInfo &info)
void NimBuildConfiguration::initialize()
{
BuildConfiguration::initialize(info);
BuildConfiguration::initialize();
auto project = qobject_cast<NimProject *>(target()->project());
QTC_ASSERT(project, return);
@@ -86,15 +86,15 @@ void NimBuildConfiguration::initialize(const BuildInfo &info)
// Create the build configuration and initialize it from build info
setBuildDirectory(defaultBuildDirectory(target()->kit(),
project->projectFilePath(),
info.displayName,
info.buildType));
displayName(),
buildType()));
// Add nim compiler build step
{
BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
auto nimCompilerBuildStep = new NimCompilerBuildStep(buildSteps);
NimCompilerBuildStep::DefaultBuildOptions defaultOption;
switch (info.buildType) {
switch (initialBuildType()) {
case BuildConfiguration::Release:
defaultOption = NimCompilerBuildStep::DefaultBuildOptions::Release;
break;
@@ -119,11 +119,6 @@ void NimBuildConfiguration::initialize(const BuildInfo &info)
}
}
BuildConfiguration::BuildType NimBuildConfiguration::buildType() const
{
return BuildConfiguration::Unknown;
}
FilePath NimBuildConfiguration::cacheDirectory() const
{
return buildDirectory().pathAppended("nimcache");

View File

@@ -39,8 +39,7 @@ class NimBuildConfiguration : public ProjectExplorer::BuildConfiguration
friend class ProjectExplorer::BuildConfigurationFactory;
NimBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
void initialize(const ProjectExplorer::BuildInfo &info) override;
ProjectExplorer::BuildConfiguration::BuildType buildType() const override;
void initialize() override;
public:
Utils::FilePath cacheDirectory() const;

View File

@@ -169,12 +169,8 @@ NamedWidget *BuildConfiguration::createConfigWidget()
return named;
}
void BuildConfiguration::initialize(const BuildInfo &info)
void BuildConfiguration::initialize()
{
setDisplayName(info.displayName);
setDefaultDisplayName(info.displayName);
setBuildDirectory(info.buildDirectory);
m_stepLists.append(new BuildStepList(this, Constants::BUILDSTEPS_BUILD));
m_stepLists.append(new BuildStepList(this, Constants::BUILDSTEPS_CLEAN));
}
@@ -258,6 +254,11 @@ void BuildConfiguration::emitBuildDirectoryChanged()
}
}
QString BuildConfiguration::initialDisplayName() const
{
return m_initialDisplayName;
}
ProjectExplorer::BaseStringAspect *BuildConfiguration::buildDirectoryAspect() const
{
return m_buildDirectoryAspect;
@@ -505,7 +506,18 @@ BuildConfiguration *BuildConfigurationFactory::create(Target *parent, const Buil
BuildConfiguration *bc = m_creator(parent);
if (!bc)
return nullptr;
bc->initialize(info);
bc->setDisplayName(info.displayName);
bc->setDefaultDisplayName(info.displayName);
bc->setBuildDirectory(info.buildDirectory);
bc->m_initialBuildType = info.buildType;
bc->m_initialDisplayName = info.displayName;
bc->m_initialBuildDirectory = info.buildDirectory;
bc->m_extraInfo = info.extraInfo;
bc->initialize();
return bc;
}

View File

@@ -86,7 +86,12 @@ public:
Profile,
Release
};
virtual BuildType buildType() const = 0;
virtual BuildType buildType() const { return m_initialBuildType; }
BuildType initialBuildType() const { return m_initialBuildType; } // FIXME: Remove.
Utils::FilePath initialBuildDirectory() const { return m_initialBuildDirectory; } // FIXME: Remove.
QString initialDisplayName() const; // FIXME: Remove.
QVariant extraInfo() const { return m_extraInfo; } // FIXME: Remove.
static QString buildTypeName(BuildType type);
@@ -108,7 +113,7 @@ signals:
void buildTypeChanged();
protected:
virtual void initialize(const BuildInfo &info);
virtual void initialize();
private:
void emitBuildDirectoryChanged();
@@ -121,6 +126,12 @@ private:
mutable Utils::Environment m_cachedEnvironment;
QString m_configWidgetDisplayName;
bool m_configWidgetHasFrame = false;
// FIXME: Remove.
BuildConfiguration::BuildType m_initialBuildType = BuildConfiguration::Unknown;
Utils::FilePath m_initialBuildDirectory;
QString m_initialDisplayName;
QVariant m_extraInfo;
};
class PROJECTEXPLORER_EXPORT BuildConfigurationFactory : public QObject

View File

@@ -94,20 +94,21 @@ QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Core::Id id)
this, &QbsBuildConfiguration::triggerReparseIfActive);
}
void QbsBuildConfiguration::initialize(const BuildInfo &info)
void QbsBuildConfiguration::initialize()
{
BuildConfiguration::initialize(info);
BuildConfiguration::initialize();
QVariantMap configData = info.extraInfo.value<QVariantMap>();
QVariantMap configData = extraInfo().value<QVariantMap>();
configData.insert(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY),
(info.buildType == BuildConfiguration::Debug)
(initialBuildType() == BuildConfiguration::Debug)
? QLatin1String(Constants::QBS_VARIANT_DEBUG)
: QLatin1String(Constants::QBS_VARIANT_RELEASE));
Utils::FilePath buildDir = info.buildDirectory;
Utils::FilePath buildDir = initialBuildDirectory();
if (buildDir.isEmpty())
buildDir = defaultBuildDirectory(target()->project()->projectFilePath(),
target()->kit(), info.displayName, info.buildType);
target()->kit(), initialDisplayName(),
initialBuildType());
setBuildDirectory(buildDir);
// Add the build configuration.
@@ -115,14 +116,14 @@ void QbsBuildConfiguration::initialize(const BuildInfo &info)
QString configName = bd.take("configName").toString();
if (configName.isEmpty()) {
configName = "qtc_" + target()->kit()->fileSystemFriendlyName() + '_'
+ Utils::FileUtils::fileSystemFriendlyName(info.displayName);
+ Utils::FileUtils::fileSystemFriendlyName(initialDisplayName());
}
m_configurationName->setValue(configName);
BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
auto bs = new QbsBuildStep(buildSteps);
if (info.buildType == Release)
if (initialBuildType() == Release)
bs->setQmlDebuggingEnabled(false);
bs->setQbsConfiguration(bd);
buildSteps->appendStep(bs);

View File

@@ -48,7 +48,7 @@ class QbsBuildConfiguration : public ProjectExplorer::BuildConfiguration
QbsBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
public:
void initialize(const ProjectExplorer::BuildInfo &info) override;
void initialize() override;
QbsBuildStep *qbsStep() const;
QVariantMap qbsConfiguration() const;

View File

@@ -128,9 +128,9 @@ QmakeBuildConfiguration::QmakeBuildConfiguration(Target *target, Core::Id id)
this, &QmakeBuildConfiguration::qtVersionsChanged);
}
void QmakeBuildConfiguration::initialize(const BuildInfo &info)
void QmakeBuildConfiguration::initialize()
{
BuildConfiguration::initialize(info);
BuildConfiguration::initialize();
BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
auto qmakeStep = new QMakeStep(buildSteps);
@@ -140,11 +140,11 @@ void QmakeBuildConfiguration::initialize(const BuildInfo &info)
BuildStepList *cleanSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
cleanSteps->appendStep(Constants::MAKESTEP_BS_ID);
const QmakeExtraBuildInfo qmakeExtra = info.extraInfo.value<QmakeExtraBuildInfo>();
const QmakeExtraBuildInfo qmakeExtra = extraInfo().value<QmakeExtraBuildInfo>();
BaseQtVersion *version = QtKitAspect::qtVersion(target()->kit());
BaseQtVersion::QmakeBuildConfigs config = version->defaultBuildConfig();
if (info.buildType == BuildConfiguration::Debug)
if (initialBuildType() == BuildConfiguration::Debug)
config |= BaseQtVersion::DebugBuild;
else
config &= ~BaseQtVersion::DebugBuild;
@@ -158,10 +158,11 @@ void QmakeBuildConfiguration::initialize(const BuildInfo &info)
setQMakeBuildConfiguration(config);
FilePath directory = info.buildDirectory;
FilePath directory = initialBuildDirectory();
if (directory.isEmpty()) {
directory = defaultBuildDirectory(target()->project()->projectFilePath(),
target()->kit(), info.displayName, buildType());
target()->kit(), initialDisplayName(),
initialBuildType());
}
setBuildDirectory(directory);

View File

@@ -46,7 +46,7 @@ public:
QmakeBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
~QmakeBuildConfiguration() override;
void initialize(const ProjectExplorer::BuildInfo &info) override;
void initialize() override;
ProjectExplorer::NamedWidget *createConfigWidget() override;
void setSubNodeBuild(QmakeProFileNode *node);