From 5838b40c6d5cd9f76865edd1379c301ecea976c1 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 21 Apr 2020 11:36:24 +0200 Subject: [PATCH] Enforce PWD in the environment of build steps In the shell PWD can be different from the "real" working directory, because the latter never contains symbolic links (getcwd). E.g. Clang uses PWD as the basis for debug information. Fixes: QTCREATORBUG-23788 Change-Id: I19f06dcfded5ccca2dc0162a3a543cdc756bffb0 Reviewed-by: hjk Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/abstractprocessstep.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/plugins/projectexplorer/abstractprocessstep.cpp b/src/plugins/projectexplorer/abstractprocessstep.cpp index 29a13663119..479cd309f34 100644 --- a/src/plugins/projectexplorer/abstractprocessstep.cpp +++ b/src/plugins/projectexplorer/abstractprocessstep.cpp @@ -236,7 +236,12 @@ void AbstractProcessStep::doRun() d->m_process.reset(new Utils::QtcProcess()); d->m_process->setUseCtrlCStub(Utils::HostOsInfo::isWindowsHost()); d->m_process->setWorkingDirectory(wd.absolutePath()); - d->m_process->setEnvironment(d->m_param.environment()); + // Enforce PWD in the environment because some build tools use that. + // PWD can be different from getcwd in case of symbolic links (getcwd resolves symlinks). + // For example Clang uses PWD for paths in debug info, see QTCREATORBUG-23788 + Environment envWithPwd = d->m_param.environment(); + envWithPwd.set("PWD", d->m_process->workingDirectory()); + d->m_process->setEnvironment(envWithPwd); d->m_process->setCommand(effectiveCommand); if (d->m_lowPriority && ProjectExplorerPlugin::projectExplorerSettings().lowBuildPriority) d->m_process->setLowPriority();