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

@@ -257,11 +257,11 @@ bool AndroidBuildApkStep::init()
}
ProjectExplorer::ProcessParameters *pp = processParameters();
setupProcessParameters(pp, this, arguments, command);
Android::setupProcessParameters(pp, this, arguments, command);
// Generate arguments with keystore password concealed
ProjectExplorer::ProcessParameters pp2;
setupProcessParameters(&pp2, this, argumentsPasswordConcealed, command);
Android::setupProcessParameters(&pp2, this, argumentsPasswordConcealed, command);
m_command = pp2.effectiveCommand().toString();
m_argumentsPasswordConcealed = pp2.prettyArguments();

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

View File

@@ -39,10 +39,16 @@ class PROJECTEXPLORER_EXPORT AbstractProcessStep : public BuildStep
public:
ProcessParameters *processParameters();
void setupProcessParameters(ProcessParameters *params);
bool ignoreReturnValue() const;
void setIgnoreReturnValue(bool b);
void setCommandLineProvider(const std::function<Utils::CommandLine()> &provider);
void setWorkingDirectoryProvider(const std::function<Utils::FilePath()> &provider);
void setEnvironmentModifier(const std::function<void(Utils::Environment &)> &modifier);
void setUseEnglishOutput();
void emitFaultyConfigurationMessage();
protected:

View File

@@ -226,9 +226,7 @@ bool MakeStep::init()
}
ProcessParameters *pp = processParameters();
pp->setMacroExpander(macroExpander());
pp->setWorkingDirectory(buildDirectory());
pp->setEnvironment(buildEnvironment());
setupProcessParameters(pp);
pp->setCommandLine(make);
pp->resolveAll();