From f7afa521067880c642c08ba0ead97ab351d9f507 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 13 Jul 2023 16:21:49 +0200 Subject: [PATCH] CMake: Use aspects more directly in CMakeBuildStep Change-Id: Id12381556439ef6b3e56307a169830bb18da9003 Reviewed-by: Reviewed-by: Jarek Kobus --- .../cmakeprojectmanager/cmakebuildstep.cpp | 108 ++++++++---------- .../cmakeprojectmanager/cmakebuildstep.h | 12 +- 2 files changed, 53 insertions(+), 67 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp index 3ce1198852d..4252ee3914b 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp @@ -208,37 +208,34 @@ static bool supportsStageForInstallation(const Kit *kit) CMakeBuildStep::CMakeBuildStep(BuildStepList *bsl, Id id) : CMakeAbstractProcessStep(bsl, id) { - m_cmakeArguments = addAspect(); - m_cmakeArguments->setSettingsKey(CMAKE_ARGUMENTS_KEY); - m_cmakeArguments->setLabelText(Tr::tr("CMake arguments:")); - m_cmakeArguments->setDisplayStyle(StringAspect::LineEditDisplay); + cmakeArguments.setSettingsKey(CMAKE_ARGUMENTS_KEY); + cmakeArguments.setLabelText(Tr::tr("CMake arguments:")); + cmakeArguments.setDisplayStyle(StringAspect::LineEditDisplay); - m_toolArguments = addAspect(); - m_toolArguments->setSettingsKey(TOOL_ARGUMENTS_KEY); - m_toolArguments->setLabelText(Tr::tr("Tool arguments:")); - m_toolArguments->setDisplayStyle(StringAspect::LineEditDisplay); + toolArguments.setSettingsKey(TOOL_ARGUMENTS_KEY); + toolArguments.setLabelText(Tr::tr("Tool arguments:")); + toolArguments.setDisplayStyle(StringAspect::LineEditDisplay); - m_useStaging = addAspect(); - m_useStaging->setSettingsKey(USE_STAGING_KEY); - m_useStaging->setLabel(Tr::tr("Stage for installation"), BoolAspect::LabelPlacement::AtCheckBox); - m_useStaging->setDefaultValue(supportsStageForInstallation(kit())); + useStaging.setSettingsKey(USE_STAGING_KEY); + useStaging.setLabel(Tr::tr("Stage for installation"), BoolAspect::LabelPlacement::AtCheckBox); + useStaging.setDefaultValue(supportsStageForInstallation(kit())); - m_stagingDir = addAspect(); - m_stagingDir->setSettingsKey(STAGING_DIR_KEY); - m_stagingDir->setLabelText(Tr::tr("Staging directory:")); - m_stagingDir->setDefaultValue(FilePath::fromUserInput(initialStagingDir(kit()))); + stagingDir.setSettingsKey(STAGING_DIR_KEY); + stagingDir.setLabelText(Tr::tr("Staging directory:")); + stagingDir.setDefaultValue(FilePath::fromUserInput(initialStagingDir(kit()))); Kit *kit = buildConfiguration()->kit(); if (CMakeBuildConfiguration::isIos(kit)) { - m_useiOSAutomaticProvisioningUpdates = addAspect(); - m_useiOSAutomaticProvisioningUpdates->setDefaultValue(true); - m_useiOSAutomaticProvisioningUpdates->setSettingsKey( - IOS_AUTOMATIC_PROVISIONG_UPDATES_ARGUMENTS_KEY); - m_useiOSAutomaticProvisioningUpdates->setLabel( - Tr::tr("Enable automatic provisioning updates:")); - m_useiOSAutomaticProvisioningUpdates->setToolTip( - Tr::tr("Tells xcodebuild to create and download a provisioning profile " - "if a valid one does not exist.")); + useiOSAutomaticProvisioningUpdates.setDefaultValue(true); + useiOSAutomaticProvisioningUpdates.setSettingsKey( + IOS_AUTOMATIC_PROVISIONG_UPDATES_ARGUMENTS_KEY); + useiOSAutomaticProvisioningUpdates.setLabel( + Tr::tr("Enable automatic provisioning updates:")); + useiOSAutomaticProvisioningUpdates.setToolTip( + Tr::tr("Tells xcodebuild to create and download a provisioning profile " + "if a valid one does not exist.")); + } else { + useiOSAutomaticProvisioningUpdates.setVisible(false); } m_buildTargetModel.setHeader({Tr::tr("Target")}); @@ -259,8 +256,8 @@ CMakeBuildStep::CMakeBuildStep(BuildStepList *bsl, Id id) : env.set("NINJA_STATUS", ninjaProgressString + "%o/sec] "); env.modify(m_userEnvironmentChanges); - if (m_useStaging) - env.set("DESTDIR", currentStagingDir()); + if (useStaging()) + env.set("DESTDIR", stagingDir().path()); }); connect(target(), &Target::parsingFinished, this, [this](bool success) { @@ -450,7 +447,7 @@ CommandLine CMakeBuildStep::cmakeCommand() const } return s; })); - if (m_useStaging->value()) + if (useStaging()) cmd.addArg("install"); auto bs = qobject_cast(buildSystem()); @@ -462,17 +459,16 @@ CommandLine CMakeBuildStep::cmakeCommand() const cmd.addArg(bs->cmakeBuildType()); } - if (!m_cmakeArguments->value().isEmpty()) - cmd.addArgs(m_cmakeArguments->value(), CommandLine::Raw); + cmd.addArgs(cmakeArguments(), CommandLine::Raw); bool toolArgumentsSpecified = false; - if (!m_toolArguments->value().isEmpty()) { + if (!toolArguments().isEmpty()) { cmd.addArg("--"); - cmd.addArgs(m_toolArguments->value(), CommandLine::Raw); + cmd.addArgs(toolArguments(), CommandLine::Raw); toolArgumentsSpecified = true; } - if (m_useiOSAutomaticProvisioningUpdates && m_useiOSAutomaticProvisioningUpdates->value()) { + if (useiOSAutomaticProvisioningUpdates()) { // Only add the double dash if it wasn't added before. if (!toolArgumentsSpecified) cmd.addArg("--"); @@ -525,12 +521,12 @@ QWidget *CMakeBuildStep::createConfigWidget() QString summaryText = param.summary(displayName()); - m_stagingDir->setEnabled(m_useStaging->value()); - if (m_useStaging->value()) { + stagingDir.setEnabled(useStaging()); + if (useStaging()) { //: Stage (for installation) at for summaryText.append( "; " - + Tr::tr("Stage at %2 for %3").arg(currentStagingDir(), currentInstallPrefix())); + + Tr::tr("Stage at %2 for %3").arg(stagingDir().path(), currentInstallPrefix())); } if (!m_buildPreset.isEmpty()) { @@ -591,13 +587,11 @@ QWidget *CMakeBuildStep::createConfigWidget() }; Layouting::Form builder; - builder.addRow({m_cmakeArguments}); - builder.addRow({m_toolArguments}); - builder.addRow({m_useStaging}); - builder.addRow({m_stagingDir}); - - if (m_useiOSAutomaticProvisioningUpdates) - builder.addRow({m_useiOSAutomaticProvisioningUpdates}); + builder.addRow({cmakeArguments}); + builder.addRow({toolArguments}); + builder.addRow({useStaging}); + builder.addRow({stagingDir}); + builder.addRow({useiOSAutomaticProvisioningUpdates}); builder.addRow({new QLabel(Tr::tr("Targets:")), frame}); @@ -609,13 +603,11 @@ QWidget *CMakeBuildStep::createConfigWidget() updateDetails(); - connect(m_cmakeArguments, &StringAspect::changed, this, updateDetails); - connect(m_toolArguments, &StringAspect::changed, this, updateDetails); - connect(m_useStaging, &BoolAspect::changed, this, updateDetails); - connect(m_stagingDir, &StringAspect::changed, this, updateDetails); - - if (m_useiOSAutomaticProvisioningUpdates) - connect(m_useiOSAutomaticProvisioningUpdates, &BoolAspect::changed, this, updateDetails); + connect(&cmakeArguments, &BaseAspect::changed, this, updateDetails); + connect(&toolArguments, &BaseAspect::changed, this, updateDetails); + connect(&useStaging, &BaseAspect::changed, this, updateDetails); + connect(&stagingDir, &BaseAspect::changed, this, updateDetails); + connect(&useiOSAutomaticProvisioningUpdates, &BaseAspect::changed, this, updateDetails); connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged, this, updateDetails); @@ -685,12 +677,12 @@ void CMakeBuildStep::setConfiguration(const QString &configuration) void CMakeBuildStep::setToolArguments(const QStringList &nativeToolArguments) { - m_toolArguments->setValue(nativeToolArguments.join(" ")); + toolArguments.setValue(nativeToolArguments.join(" ")); } -void CMakeBuildStep::setCMakeArguments(const QStringList &cmakeArguments) +void CMakeBuildStep::setCMakeArguments(const QStringList &cmakeArgs) { - m_cmakeArguments->setValue(cmakeArguments.join(" ")); + cmakeArguments.setValue(cmakeArgs.join(" ")); } Environment CMakeBuildStep::environment() const @@ -763,11 +755,6 @@ QString CMakeBuildStep::currentInstallPrefix() const return QString::fromUtf8(config.valueOf("CMAKE_INSTALL_PREFIX")); } -QString CMakeBuildStep::currentStagingDir() const -{ - return m_stagingDir->filePath().path(); -} - FilePath CMakeBuildStep::cmakeExecutable() const { CMakeTool *tool = CMakeKitAspect::cmakeTool(kit()); @@ -776,12 +763,11 @@ FilePath CMakeBuildStep::cmakeExecutable() const void CMakeBuildStep::updateDeploymentData() { - if (!m_useStaging->value()) + if (!useStaging()) return; QString install = currentInstallPrefix(); - QString stagingDir = currentStagingDir(); - FilePath rootDir = cmakeExecutable().withNewPath(stagingDir); + FilePath rootDir = cmakeExecutable().withNewPath(stagingDir().path()); Q_UNUSED(install); DeploymentData deploymentData; diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.h b/src/plugins/cmakeprojectmanager/cmakebuildstep.h index 89b0cbd3b5a..af239275d38 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.h @@ -70,6 +70,12 @@ public: void setConfiguration(const QString &configuration); + Utils::StringAspect cmakeArguments{this}; + Utils::StringAspect toolArguments{this}; + Utils::BoolAspect useiOSAutomaticProvisioningUpdates{this}; + Utils::BoolAspect useStaging{this}; + Utils::FilePathAspect stagingDir{this}; + signals: void buildTargetsChanged(); void environmentChanged(); @@ -86,7 +92,6 @@ private: Utils::FilePath cmakeExecutable() const; QString currentInstallPrefix() const; - QString currentStagingDir() const; QString defaultBuildTarget() const; bool isCleanStep() const; @@ -98,11 +103,6 @@ private: friend class CMakeBuildStepConfigWidget; QStringList m_buildTargets; // Convention: Empty string member signifies "Current executable" - Utils::StringAspect *m_cmakeArguments = nullptr; - Utils::StringAspect *m_toolArguments = nullptr; - Utils::BoolAspect *m_useiOSAutomaticProvisioningUpdates = nullptr; - Utils::BoolAspect *m_useStaging = nullptr; - Utils::FilePathAspect *m_stagingDir = nullptr; QString m_allTarget = "all"; QString m_installTarget = "install";