From e63444b45d106b9090b19d80837518ad17d16669 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 25 Nov 2019 15:07:21 +0100 Subject: [PATCH] ProjectExplorer: Introduce SeparateDebugInfoAspect ... and use it in the qbs build configuration. Change-Id: Ie9002e5c43d1d43c81dc30a1fcbb29a5a1a25705 Reviewed-by: hjk --- src/plugins/projectexplorer/buildaspects.cpp | 6 ++++ src/plugins/projectexplorer/buildaspects.h | 7 +++++ .../qbsbuildconfiguration.cpp | 9 ++++++ .../qbsprojectmanager/qbsbuildconfiguration.h | 3 ++ .../qbsprojectmanager/qbsbuildstep.cpp | 30 +++++++++++++++++-- .../qbsprojectmanagerconstants.h | 1 + 6 files changed, 54 insertions(+), 2 deletions(-) diff --git a/src/plugins/projectexplorer/buildaspects.cpp b/src/plugins/projectexplorer/buildaspects.cpp index 0b77b82e3db..b0c1e193179 100644 --- a/src/plugins/projectexplorer/buildaspects.cpp +++ b/src/plugins/projectexplorer/buildaspects.cpp @@ -27,4 +27,10 @@ namespace ProjectExplorer { +SeparateDebugInfoAspect::SeparateDebugInfoAspect() +{ + setDisplayName(tr("Separate Debug Info")); + setSettingsKey("SeparateDebugInfo"); +} + } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/buildaspects.h b/src/plugins/projectexplorer/buildaspects.h index b294664a474..40d123fee3d 100644 --- a/src/plugins/projectexplorer/buildaspects.h +++ b/src/plugins/projectexplorer/buildaspects.h @@ -30,4 +30,11 @@ namespace ProjectExplorer { +class PROJECTEXPLORER_EXPORT SeparateDebugInfoAspect : public BaseTriStateAspect +{ + Q_OBJECT +public: + SeparateDebugInfoAspect(); +}; + } // namespace ProjectExplorer diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp index c49bf6bc205..59e8ed0668b 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp @@ -87,6 +87,10 @@ QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Core::Id id) connect(m_configurationName, &BaseStringAspect::changed, this, &BuildConfiguration::buildDirectoryChanged); + const auto separateDebugInfoAspect = addAspect(); + connect(separateDebugInfoAspect, &SeparateDebugInfoAspect::changed, + this, &QbsBuildConfiguration::qbsConfigurationChanged); + const auto qmlDebuggingAspect = addAspect(); qmlDebuggingAspect->setKit(target->kit()); connect(qmlDebuggingAspect, &QtSupport::QmlDebuggingAspect::changed, @@ -382,6 +386,11 @@ BaseTriStateAspect::Value QbsBuildConfiguration::qmlDebuggingSetting() const return aspect()->setting(); } +BaseTriStateAspect::Value QbsBuildConfiguration::separateDebugInfoSetting() const +{ + return aspect()->setting(); +} + // --------------------------------------------------------------------------- // QbsBuildConfigurationFactory: // --------------------------------------------------------------------------- diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h index ee33ef729f4..a80e6867cad 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h +++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h @@ -29,6 +29,7 @@ #include "qbsproject.h" +#include #include #include #include @@ -78,6 +79,8 @@ public: bool isQmlDebuggingEnabled() const; QtSupport::QmlDebuggingAspect::Value qmlDebuggingSetting() const; + ProjectExplorer::SeparateDebugInfoAspect::Value separateDebugInfoSetting() const; + signals: void qbsConfigurationChanged(); diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp index d47f3671f03..ee139c348f1 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp @@ -212,8 +212,20 @@ void QbsBuildStep::doCancel() QVariantMap QbsBuildStep::qbsConfiguration(VariableHandling variableHandling) const { QVariantMap config = m_qbsConfiguration; + const auto qbsBuildConfig = static_cast(buildConfiguration()); config.insert(Constants::QBS_FORCE_PROBES_KEY, m_forceProbes); - switch (static_cast(buildConfiguration())->qmlDebuggingSetting()) { + switch (qbsBuildConfig->separateDebugInfoSetting()) { + case SeparateDebugInfoAspect::Value::Enabled: + config.insert(Constants::QBS_CONFIG_SEPARATE_DEBUG_INFO_KEY, true); + break; + case SeparateDebugInfoAspect::Value::Disabled: + config.insert(Constants::QBS_CONFIG_SEPARATE_DEBUG_INFO_KEY, false); + break; + default: + config.remove(Constants::QBS_CONFIG_SEPARATE_DEBUG_INFO_KEY); + break; + } + switch (qbsBuildConfig->qmlDebuggingSetting()) { case QtSupport::QmlDebuggingAspect::Value::Enabled: config.insert(Constants::QBS_CONFIG_QUICK_DEBUG_KEY, true); break; @@ -674,6 +686,16 @@ void QbsBuildStepConfigWidget::updateState() command += ' ' + m_propertyCache.at(i).name + ':' + m_propertyCache.at(i).effectiveValue; } + switch (qbsBuildConfig->separateDebugInfoSetting()) { + case SeparateDebugInfoAspect::Value::Enabled: + command.append(' ').append(Constants::QBS_CONFIG_SEPARATE_DEBUG_INFO_KEY).append(":true"); + break; + case SeparateDebugInfoAspect::Value::Disabled: + command.append(' ').append(Constants::QBS_CONFIG_SEPARATE_DEBUG_INFO_KEY).append(":false"); + break; + default: + break; + } switch (qbsBuildConfig->qmlDebuggingSetting()) { case QtSupport::QmlDebuggingAspect::Value::Enabled: command.append(' ').append(Constants::QBS_CONFIG_QUICK_DEBUG_KEY).append(":true"); @@ -698,6 +720,7 @@ void QbsBuildStepConfigWidget::updatePropertyEdit(const QVariantMap &data) editable.remove(Constants::QBS_CONFIG_PROFILE_KEY); editable.remove(Constants::QBS_CONFIG_VARIANT_KEY); editable.remove(Constants::QBS_CONFIG_DECLARATIVE_DEBUG_KEY); // For existing .user files + editable.remove(Constants::QBS_CONFIG_SEPARATE_DEBUG_INFO_KEY); editable.remove(Constants::QBS_CONFIG_QUICK_DEBUG_KEY); editable.remove(Constants::QBS_FORCE_PROBES_KEY); editable.remove(Constants::QBS_INSTALL_ROOT_KEY); @@ -799,6 +822,7 @@ void QbsBuildStepConfigWidget::applyCachedProperties() tmp.value(Constants::QBS_CONFIG_VARIANT_KEY)); const QStringList additionalSpecialKeys({Constants::QBS_CONFIG_DECLARATIVE_DEBUG_KEY, Constants::QBS_CONFIG_QUICK_DEBUG_KEY, + Constants::QBS_CONFIG_SEPARATE_DEBUG_INFO_KEY, Constants::QBS_INSTALL_ROOT_KEY}); for (const QString &key : additionalSpecialKeys) { const auto it = tmp.constFind(key); @@ -840,7 +864,9 @@ bool QbsBuildStepConfigWidget::validateProperties(Utils::FancyLineEdit *edit, QS const QString propertyName = rawArg.left(pos); static const QStringList specialProperties{ Constants::QBS_CONFIG_PROFILE_KEY, Constants::QBS_CONFIG_VARIANT_KEY, - Constants::QBS_CONFIG_QUICK_DEBUG_KEY, Constants::QBS_INSTALL_ROOT_KEY}; + Constants::QBS_CONFIG_QUICK_DEBUG_KEY, Constants::QBS_INSTALL_ROOT_KEY, + Constants::QBS_CONFIG_SEPARATE_DEBUG_INFO_KEY, + }; if (specialProperties.contains(propertyName)) { if (errorMessage) { *errorMessage = tr("Property \"%1\" cannot be set here. " diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h b/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h index c64fead172d..b1c32967abb 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h +++ b/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h @@ -69,6 +69,7 @@ const char QBS_CONFIG_PROFILE_KEY[] = "qbs.profile"; const char QBS_INSTALL_ROOT_KEY[] = "qbs.installRoot"; const char QBS_CONFIG_DECLARATIVE_DEBUG_KEY[] = "modules.Qt.declarative.qmlDebugging"; const char QBS_CONFIG_QUICK_DEBUG_KEY[] = "modules.Qt.quick.qmlDebugging"; +const char QBS_CONFIG_SEPARATE_DEBUG_INFO_KEY[] = "modules.cpp.separateDebugInformation"; const char QBS_FORCE_PROBES_KEY[] = "qbspm.forceProbes"; // Icons: