From fb631cb2585ae0acafa7a7df0f295c236f7b36f8 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 2 Aug 2019 18:06:29 +0200 Subject: [PATCH] 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 --- .../autotoolsbuildconfiguration.cpp | 10 ++------ .../autotoolsbuildconfiguration.h | 3 +-- .../cmakebuildconfiguration.cpp | 13 +++++----- .../cmakebuildconfiguration.h | 2 +- .../compilationdatabaseproject.cpp | 9 ++----- .../compilationdatabaseproject.h | 3 +-- .../genericbuildconfiguration.cpp | 9 ++----- .../genericbuildconfiguration.h | 3 +-- .../nim/project/nimbuildconfiguration.cpp | 15 ++++-------- .../nim/project/nimbuildconfiguration.h | 3 +-- .../projectexplorer/buildconfiguration.cpp | 24 ++++++++++++++----- .../projectexplorer/buildconfiguration.h | 15 ++++++++++-- .../qbsbuildconfiguration.cpp | 17 ++++++------- .../qbsprojectmanager/qbsbuildconfiguration.h | 2 +- .../qmakebuildconfiguration.cpp | 13 +++++----- .../qmakebuildconfiguration.h | 2 +- 16 files changed, 72 insertions(+), 71 deletions(-) diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp index a4dba21818e..64f31d6642c 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp @@ -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 AutotoolsBuildConfigurationFactory::availableBuilds return {info}; } -BuildConfiguration::BuildType AutotoolsBuildConfiguration::buildType() const -{ - // TODO: Should I return something different from Unknown? - return Unknown; -} - } // Internal } // AutotoolsProjectManager diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h index 13d23834c31..1b2bcf80214 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h +++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h @@ -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 diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index bc4b471d7f8..0db829388c0 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -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(); - setConfigurationForCMake(extraInfo.configuration); + auto info = extraInfo().value(); + setConfigurationForCMake(info.configuration); } QString CMakeBuildConfiguration::disabledReason() const diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index 7619fc23633..8fa9483096c 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -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; diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp index 63b301af85f..17cd53817da 100644 --- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp +++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp @@ -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( diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.h b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.h index 9e38e914314..ca829f312af 100644 --- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.h +++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.h @@ -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 diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp index 84f14798d20..12d61b16115 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp @@ -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 GenericBuildConfigurationFactory::availableBuilds return {info}; } -BuildConfiguration::BuildType GenericBuildConfiguration::buildType() const -{ - return Unknown; -} - void GenericBuildConfiguration::addToEnvironment(Utils::Environment &env) const { prependCompilerPathToEnvironment(target()->kit(), env); diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h index be049373155..03e590ab925 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.h +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h @@ -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; }; diff --git a/src/plugins/nim/project/nimbuildconfiguration.cpp b/src/plugins/nim/project/nimbuildconfiguration.cpp index 7992cb744aa..8092bb4da2b 100644 --- a/src/plugins/nim/project/nimbuildconfiguration.cpp +++ b/src/plugins/nim/project/nimbuildconfiguration.cpp @@ -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(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"); diff --git a/src/plugins/nim/project/nimbuildconfiguration.h b/src/plugins/nim/project/nimbuildconfiguration.h index fd988023c34..d5c4a293e44 100644 --- a/src/plugins/nim/project/nimbuildconfiguration.h +++ b/src/plugins/nim/project/nimbuildconfiguration.h @@ -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; diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index 1a6ab7a025e..d35aa5dbc39 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -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; } diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h index 99f3b3ef341..89cbc77f537 100644 --- a/src/plugins/projectexplorer/buildconfiguration.h +++ b/src/plugins/projectexplorer/buildconfiguration.h @@ -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 diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp index 862f876f29c..93cbde2eb10 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp @@ -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 configData = extraInfo().value(); 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); diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h index 8b66663a408..0dbd442efb1 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h +++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h @@ -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; diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp index 3cd172541e3..f319920b181 100644 --- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp +++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp @@ -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(); + const QmakeExtraBuildInfo qmakeExtra = extraInfo().value(); 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); diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h index b66fa897fb2..07df4f0a662 100644 --- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h +++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h @@ -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);