diff --git a/components/ideintf/ideexterntoolintf.pas b/components/ideintf/ideexterntoolintf.pas index 2a30e675f7..ee3ca7022b 100644 --- a/components/ideintf/ideexterntoolintf.pas +++ b/components/ideintf/ideexterntoolintf.pas @@ -447,6 +447,7 @@ type FFreeData: boolean; FGroup: TExternalToolGroup; FHint: string; + FReadStdOutBeforeErr: boolean; FResolveMacrosOnExecute: boolean; FThread: TThread; FWorkerDirectory: string; @@ -530,6 +531,7 @@ type property Terminated: boolean read FTerminated; property ExitStatus: integer read FExitStatus write FExitStatus; property ErrorMessage: string read FErrorMessage write FErrorMessage; // error executing tool + property ReadStdOutBeforeErr: boolean read FReadStdOutBeforeErr write FReadStdOutBeforeErr; // output property WorkerOutput: TStrings read FWorkerOutput; // the raw output diff --git a/ide/exttools.pas b/ide/exttools.pas index d1eda00500..8c03b600e1 100644 --- a/ide/exttools.pas +++ b/ide/exttools.pas @@ -1630,8 +1630,13 @@ begin StdErrLine:=''; LastUpdate:=GetTickCount64; while (Tool<>nil) and (Tool.Stage=etsRunning) do begin - HasOutput:=ReadInputPipe(Tool.Process.Output,OutputLine) - or ReadInputPipe(Tool.Process.Stderr,StdErrLine); + if Tool.ReadStdOutBeforeErr then begin + HasOutput:=ReadInputPipe(Tool.Process.Output,OutputLine) + or ReadInputPipe(Tool.Process.Stderr,StdErrLine); + end else begin + HasOutput:=ReadInputPipe(Tool.Process.Stderr,StdErrLine) + or ReadInputPipe(Tool.Process.Output,OutputLine); + end; if (not HasOutput) then begin // no more pending output if not Tool.Process.Running then break;