From c5db6427911ae2d35af862f14ef8b7c88b6fc5b9 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 26 Oct 2022 15:49:16 +0200 Subject: [PATCH] QbsProjectManager: Add UI support for "profile" build variant Fixes: QTCREATORBUG-27206 Change-Id: I086e90173d71927d463498c31a567c1bc8089bd3 Reviewed-by: Qt CI Bot Reviewed-by: Reviewed-by: Christian Stenger --- .../qbsbuildconfiguration.cpp | 35 ++++++++++++++----- .../qbsprojectmanager/qbsbuildstep.cpp | 2 ++ .../qbsprojectmanager/qbsprojectimporter.cpp | 13 ++++--- .../qbsprojectmanagerconstants.h | 1 + 4 files changed, 39 insertions(+), 12 deletions(-) diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp index 8ca2d186977..76a8f44993e 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp @@ -64,11 +64,17 @@ QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Utils::Id id) setInitializer([this, target](const BuildInfo &info) { const Kit *kit = target->kit(); QVariantMap configData = info.extraInfo.value(); - configData.insert(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY), - (info.buildType == BuildConfiguration::Debug) - ? QLatin1String(Constants::QBS_VARIANT_DEBUG) - : QLatin1String(Constants::QBS_VARIANT_RELEASE)); - + const QString buildVariant = [](BuildConfiguration::BuildType buildType) -> QString { + switch (buildType) { + case BuildConfiguration::Release: return Constants::QBS_VARIANT_RELEASE; + case BuildConfiguration::Profile: return Constants::QBS_VARIANT_PROFILING; + case BuildConfiguration::Debug: + case BuildConfiguration::Unknown: + break; + } + return Constants::QBS_VARIANT_DEBUG; + }(info.buildType); + configData.insert(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY), buildVariant); FilePath buildDir = info.buildDirectory; if (buildDir.isEmpty()) buildDir = defaultBuildDirectory(target->project()->projectFilePath(), @@ -208,6 +214,8 @@ BuildConfiguration::BuildType QbsBuildConfiguration::buildType() const return Debug; if (variant == QLatin1String(Constants::QBS_VARIANT_RELEASE)) return Release; + if (variant == QLatin1String(Constants::QBS_VARIANT_PROFILING)) + return Profile; return Unknown; } @@ -339,9 +347,17 @@ QbsBuildConfigurationFactory::QbsBuildConfigurationFactory() const QString rel = QbsProjectManager::Tr::tr("Release", "Shadow build directory suffix"); info.buildDirectory = defaultBuildDirectory(projectPath, k, rel, info.buildType); result << info; + + info = createBuildInfo(BuildConfiguration::Profile); + info.displayName = ProjectExplorer::Tr::tr("Profile"); + //: Non-ASCII characters in directory suffix may cause build issues. + const QString prof = QbsProjectManager::Tr::tr("Profile", "Shadow build directory suffix"); + info.buildDirectory = defaultBuildDirectory(projectPath, k, prof, info.buildType); + result << info; } else { result << createBuildInfo(BuildConfiguration::Debug); result << createBuildInfo(BuildConfiguration::Release); + result << createBuildInfo(BuildConfiguration::Profile); } return result; @@ -352,10 +368,13 @@ BuildInfo QbsBuildConfigurationFactory::createBuildInfo(BuildConfiguration::Buil { BuildInfo info; info.buildType = type; - info.typeName = type == BuildConfiguration::Debug - ? ProjectExplorer::Tr::tr("Debug") : ProjectExplorer::Tr::tr("Release"); + info.typeName = type == BuildConfiguration::Profile + ? ProjectExplorer::Tr::tr("Profiling") : type == BuildConfiguration::Release + ? ProjectExplorer::Tr::tr("Release") : ProjectExplorer::Tr::tr("Debug"); QVariantMap config; - config.insert("configName", type == BuildConfiguration::Debug ? "Debug" : "Release"); + config.insert("configName", type == BuildConfiguration::Release + ? "Release" : type == BuildConfiguration::Profile + ? "Profile" : "Debug"); info.extraInfo = config; return info; } diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp index d0b66a15491..07146fb1374 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp @@ -212,6 +212,8 @@ QbsBuildStep::QbsBuildStep(BuildStepList *bsl, Utils::Id id) : m_buildVariant->addOption({ProjectExplorer::Tr::tr("Debug"), {}, Constants::QBS_VARIANT_DEBUG}); m_buildVariant->addOption({ProjectExplorer::Tr::tr("Release"), {}, Constants::QBS_VARIANT_RELEASE}); + m_buildVariant->addOption({ProjectExplorer::Tr::tr("Profile"), {}, + Constants::QBS_VARIANT_PROFILING}); m_selectedAbis = addAspect(); m_selectedAbis->setLabelText(QbsProjectManager::Tr::tr("ABIs:")); diff --git a/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp b/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp index 06d6e6376e7..a4a91fceaf3 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp +++ b/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp @@ -4,6 +4,7 @@ #include "qbsprojectimporter.h" #include "qbspmlogging.h" +#include "qbsprojectmanagerconstants.h" #include "qbssession.h" #include @@ -24,6 +25,9 @@ using namespace ProjectExplorer; using namespace Utils; +namespace PEConstants = ProjectExplorer::Constants; +namespace QbsConstants = QbsProjectManager::Constants; + namespace QbsProjectManager::Internal { struct BuildGraphData @@ -178,9 +182,9 @@ Kit *QbsProjectImporter::createKit(void *directoryData) const return createTemporaryKit(qtVersionData,[this, bgData](Kit *k) -> void { QList tcData; if (!bgData->cxxCompilerPath.isEmpty()) - tcData << findOrCreateToolChains({bgData->cxxCompilerPath, Constants::CXX_LANGUAGE_ID}); + tcData << findOrCreateToolChains({bgData->cxxCompilerPath, PEConstants::CXX_LANGUAGE_ID}); if (!bgData->cCompilerPath.isEmpty()) - tcData << findOrCreateToolChains({bgData->cCompilerPath, Constants::C_LANGUAGE_ID}); + tcData << findOrCreateToolChains({bgData->cCompilerPath, PEConstants::C_LANGUAGE_ID}); for (const ToolChainData &tc : std::as_const(tcData)) { if (!tc.tcs.isEmpty()) ToolChainKitAspect::setToolChain(k, tc.tcs.first()); @@ -194,8 +198,9 @@ const QList QbsProjectImporter::buildInfoList(void *directoryData) co const auto * const bgData = static_cast(directoryData); BuildInfo info; info.displayName = bgData->bgFilePath.completeBaseName(); - info.buildType = bgData->buildVariant == "debug" - ? BuildConfiguration::Debug : BuildConfiguration::Release; + info.buildType = bgData->buildVariant == QbsConstants::QBS_VARIANT_PROFILING + ? BuildConfiguration::Profile : bgData->buildVariant == QbsConstants::QBS_VARIANT_RELEASE + ? BuildConfiguration::Release : BuildConfiguration::Debug; info.buildDirectory = bgData->bgFilePath.parentDir().parentDir(); QVariantMap config = bgData->overriddenProperties; config.insert("configName", info.displayName); diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h b/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h index a6562d0ae71..7d4aeeb9b99 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h +++ b/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h @@ -41,6 +41,7 @@ const char QBS_BC_ID[] = "Qbs.QbsBuildConfiguration"; // QBS strings: const char QBS_VARIANT_DEBUG[] = "debug"; const char QBS_VARIANT_RELEASE[] = "release"; +const char QBS_VARIANT_PROFILING[] = "profiling"; const char QBS_CONFIG_VARIANT_KEY[] = "qbs.defaultBuildVariant"; const char QBS_CONFIG_PROFILE_KEY[] = "qbs.profile";