ProjectExplorer: Start to consolidate AbstractProcessStep setup

Add some convenience functions to the base class to avoid repetition
in the derived classes.

Will be used immediately it in some derived classes.

Change-Id: I8fd6aa4f8351720cdc8f63f7fa5f506e32a8143b
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2020-08-13 12:20:41 +02:00
parent 53abd750bf
commit 70b226144f
4 changed files with 50 additions and 5 deletions

View File

@@ -108,6 +108,9 @@ public:
AbstractProcessStep *q;
std::unique_ptr<Utils::QtcProcess> m_process;
ProcessParameters m_param;
std::function<CommandLine()> m_commandLineProvider;
std::function<FilePath()> m_workingDirectoryProvider;
std::function<void(Environment &)> m_environmentModifier;
bool m_ignoreReturnValue = false;
bool m_lowPriority = false;
std::unique_ptr<QTextDecoder> stdoutStream;
@@ -149,6 +152,26 @@ void AbstractProcessStep::setIgnoreReturnValue(bool b)
d->m_ignoreReturnValue = b;
}
void AbstractProcessStep::setEnvironmentModifier(const std::function<void (Environment &)> &modifier)
{
d->m_environmentModifier = modifier;
}
void AbstractProcessStep::setUseEnglishOutput()
{
d->m_environmentModifier = [](Environment &env) { Environment::setupEnglishOutput(&env); };
}
void AbstractProcessStep::setCommandLineProvider(const std::function<CommandLine()> &provider)
{
d->m_commandLineProvider = provider;
}
void AbstractProcessStep::setWorkingDirectoryProvider(const std::function<FilePath()> &provider)
{
d->m_workingDirectoryProvider = provider;
}
/*!
Reimplemented from BuildStep::init(). You need to call this from
YourBuildStep::init().
@@ -242,6 +265,24 @@ ProcessParameters *AbstractProcessStep::processParameters()
return &d->m_param;
}
void AbstractProcessStep::setupProcessParameters(ProcessParameters *params)
{
params->setMacroExpander(macroExpander());
Utils::Environment env = buildEnvironment();
if (d->m_environmentModifier)
d->m_environmentModifier(env);
params->setEnvironment(env);
if (d->m_workingDirectoryProvider)
params->setWorkingDirectory(d->m_workingDirectoryProvider());
else
params->setWorkingDirectory(buildDirectory());
if (d->m_commandLineProvider)
params->setCommandLine(d->m_commandLineProvider());
}
void AbstractProcessStep::Private::cleanUp(QProcess *process)
{
// The process has finished, leftover data is read in processFinished