diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index 0f0754d9ccc..65a82aa565c 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -89,6 +89,8 @@ BuildConfiguration::BuildConfiguration(Target *target, const Core::Id id) : bsl->setDefaultDisplayName(tr("Clean")); m_stepLists.append(bsl); + emitEnvironmentChanged(); + connect(target, SIGNAL(kitChanged()), this, SLOT(handleKitUpdate())); } @@ -104,6 +106,8 @@ BuildConfiguration::BuildConfiguration(Target *target, BuildConfiguration *sourc // otherwise BuildStepFactories might reject to set up a BuildStep for us // since we are not yet the derived class! + emitEnvironmentChanged(); + connect(target, SIGNAL(kitChanged()), this, SLOT(handleKitUpdate())); } @@ -159,7 +163,7 @@ bool BuildConfiguration::fromMap(const QVariantMap &map) m_clearSystemEnvironment = map.value(QLatin1String(CLEAR_SYSTEM_ENVIRONMENT_KEY)).toBool(); m_userEnvironmentChanges = Utils::EnvironmentItem::fromStringList(map.value(QLatin1String(USER_ENVIRONMENT_CHANGES_KEY)).toStringList()); - m_lastEnvironment = environment(); + emitEnvironmentChanged(); qDeleteAll(m_stepLists); m_stepLists.clear(); @@ -193,11 +197,12 @@ bool BuildConfiguration::fromMap(const QVariantMap &map) void BuildConfiguration::emitEnvironmentChanged() { - Utils::Environment env = environment(); - if (env == m_lastEnvironment) - return; - m_lastEnvironment = env; - emit environmentChanged(); + Utils::Environment env = baseEnvironment(); + env.modify(userEnvironmentChanges()); + if (env == m_cachedEnvironment) + return; + m_cachedEnvironment = env; + emit environmentChanged(); } void BuildConfiguration::handleKitUpdate() @@ -229,9 +234,7 @@ QString BuildConfiguration::baseEnvironmentText() const Utils::Environment BuildConfiguration::environment() const { - Utils::Environment env = baseEnvironment(); - env.modify(userEnvironmentChanges()); - return env; + return m_cachedEnvironment; } void BuildConfiguration::setUseSystemEnvironment(bool b) diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h index b778229784a..975c23c04cf 100644 --- a/src/plugins/projectexplorer/buildconfiguration.h +++ b/src/plugins/projectexplorer/buildconfiguration.h @@ -111,7 +111,7 @@ private: QList m_userEnvironmentChanges; QList m_stepLists; Utils::AbstractMacroExpander *m_macroExpander; - Utils::Environment m_lastEnvironment; + mutable Utils::Environment m_cachedEnvironment; }; class PROJECTEXPLORER_EXPORT IBuildConfigurationFactory :