diff --git a/src/plugins/projectexplorer/abstractprocessstep.cpp b/src/plugins/projectexplorer/abstractprocessstep.cpp index f9c23573848..4f3dc2ffba0 100644 --- a/src/plugins/projectexplorer/abstractprocessstep.cpp +++ b/src/plugins/projectexplorer/abstractprocessstep.cpp @@ -4,9 +4,10 @@ #include "abstractprocessstep.h" #include "processparameters.h" -#include "projectexplorer.h" #include "projectexplorersettings.h" #include "projectexplorertr.h" +#include "runconfigurationaspects.h" +#include "runcontrol.h" #include #include @@ -14,9 +15,6 @@ #include -#include -#include - using namespace Tasking; using namespace Utils; @@ -186,6 +184,10 @@ bool AbstractProcessStep::setupProcess(Process &process) Environment envWithPwd = d->m_param.environment(); envWithPwd.set("PWD", workingDir.path()); process.setProcessMode(d->m_param.processMode()); + if (const auto runAsRoot = aspect(); runAsRoot && runAsRoot->value()) { + RunControl::provideAskPassEntry(envWithPwd); + process.setRunAsRoot(true); + } process.setEnvironment(envWithPwd); process.setCommand({d->m_param.effectiveCommand(), d->m_param.effectiveArguments(), CommandLine::Raw}); diff --git a/src/plugins/projectexplorer/makestep.cpp b/src/plugins/projectexplorer/makestep.cpp index 7bf7a1f6df4..2a985057754 100644 --- a/src/plugins/projectexplorer/makestep.cpp +++ b/src/plugins/projectexplorer/makestep.cpp @@ -313,6 +313,10 @@ QWidget *MakeStep::createConfigWidget() if (m_disablingForSubDirsSupported) builder.addRow({m_disabledForSubdirsAspect}); builder.addRow({m_buildTargetsAspect}); + if (m_runAsRootAspect.isVisible()) { + m_runAsRootAspect.setLabelPlacement(BoolAspect::LabelPlacement::InExtraLabel); + builder.addRow({m_runAsRootAspect}); + } builder.setNoMargins(); auto widget = builder.emerge(); diff --git a/src/plugins/projectexplorer/makestep.h b/src/plugins/projectexplorer/makestep.h index d26820d90c2..11283c2f5c0 100644 --- a/src/plugins/projectexplorer/makestep.h +++ b/src/plugins/projectexplorer/makestep.h @@ -4,6 +4,7 @@ #pragma once #include "abstractprocessstep.h" +#include "runconfigurationaspects.h" #include #include @@ -66,6 +67,7 @@ protected: Utils::TextDisplay m_nonOverrideWarning{this}; Utils::IntegerAspect m_jobCountAspect{this}; Utils::BoolAspect m_disabledForSubdirsAspect{this}; + RunAsRootAspect m_runAsRootAspect{this}; private: static int defaultJobCount(); diff --git a/src/plugins/projectexplorer/runconfigurationaspects.cpp b/src/plugins/projectexplorer/runconfigurationaspects.cpp index 48f929a22ad..bc4e1369bd5 100644 --- a/src/plugins/projectexplorer/runconfigurationaspects.cpp +++ b/src/plugins/projectexplorer/runconfigurationaspects.cpp @@ -781,6 +781,10 @@ RunAsRootAspect::RunAsRootAspect(AspectContainer *container) setId("RunAsRoot"); setSettingsKey("RunConfiguration.RunAsRoot"); setLabel(Tr::tr("Run as root user"), LabelPlacement::AtCheckBox); + + // Not technically correct, but sensible approximation. + // Client code with more context can override. + setVisible(HostOsInfo::isAnyUnixHost()); } Interpreter::Interpreter()