From f81c251cb5f48b6c2afc0e8b12ddafa910d8937e Mon Sep 17 00:00:00 2001 From: mattias Date: Mon, 5 Aug 2013 14:56:01 +0000 Subject: [PATCH] IDE: further migration external tools git-svn-id: trunk@42356 - --- components/ideintf/ideexterntoolintf.pas | 4 ++ ide/compileroptions.pp | 51 ++++++++++-------------- ide/exttooleditdlg.pas | 49 +++++------------------ 3 files changed, 35 insertions(+), 69 deletions(-) diff --git a/components/ideintf/ideexterntoolintf.pas b/components/ideintf/ideexterntoolintf.pas index 9dcb069012..234d8b92bb 100644 --- a/components/ideintf/ideexterntoolintf.pas +++ b/components/ideintf/ideexterntoolintf.pas @@ -372,6 +372,7 @@ type FExitStatus: integer; FFreeData: boolean; FGroup: TExternalToolGroup; + FResolveMacrosOnExecute: boolean; FWorkerDirectory: string; FWorkerMessages: TMessageLines; FParsers: TFPList; // list of TExtToolParser @@ -436,6 +437,9 @@ type property EnvironmentOverrides: TStrings read FEnvironmentOverrides write SetEnvironmentOverrides; // if not empty, then this and IDE's environemnt will be merged and replace Process.Environment property CmdLineParams: string read GetCmdLineParams write SetCmdLineParams; + function ResolveMacros: boolean; virtual; abstract; // resolve macros in Process.Executable, Process.CurrentDirectory, Process.Params, Process.Environment on Execute + property ResolveMacrosOnExecute: boolean read FResolveMacrosOnExecute + write FResolveMacrosOnExecute; property Stage: TExternalToolStage read FStage; procedure Execute; virtual; abstract; procedure Terminate; virtual; abstract; diff --git a/ide/compileroptions.pp b/ide/compileroptions.pp index 9fb512c1b5..eee10be90a 100644 --- a/ide/compileroptions.pp +++ b/ide/compileroptions.pp @@ -4184,17 +4184,13 @@ var ProgramFilename, Params: string; Filename: String; CurCommand: String; - {$IFDEF EnableNewExtTools} - Tool: TAbstractExternalTool; - {$ELSE} ExtTool: TIDEExternalToolOptions; - {$ENDIF} begin + Result:=mrCancel; + CurCommand:=GetParsedCommand; - if CurCommand='' then begin - Result:=mrOk; - exit; - end; + if CurCommand='' then + exit(mrOk); if SourceEditorManagerIntf<>nil then SourceEditorManagerIntf.ClearErrorLines; @@ -4205,42 +4201,35 @@ begin if Filename<>'' then ProgramFilename:=Filename; end; - {$IFDEF EnableNewExtTools} - Tool:=ExternalToolList.Add(ToolTitle); - Tool.Process.Executable:=ProgramFilename; - Tool.Process.CurrentDirectory:=WorkingDir; - Tool.CmdLineParams:=Params; - if ScanForFPCMessages then - Tool.AddParsers(SubToolFPC); - if ScanForMakeMessages then - Tool.AddParsers(SubToolMake); - if ShowAllMessages then - Tool.AddParsers(SubToolDefault); - Tool.Execute; - Tool.WaitForExit; - if Tool.ErrorMessage<>'' then - Result:=mrCancel - else - Result:=mrOk; - {$ELSE} ExtTool:=TIDEExternalToolOptions.Create; try + ExtTool.Title:=ToolTitle; + ExtTool.WorkingDirectory:=WorkingDir; + ExtTool.CmdLineParams:=Params; + {$IFDEF EnableNewExtTools} + ExtTool.Executable:=ProgramFilename; + if ScanForFPCMessages then + ExtTool.Scanners.Add(SubToolFPC); + if ScanForMakeMessages then + ExtTool.Scanners.Add(SubToolMake); + if ExtTool.Scanners.Count=0 then + ExtTool.Scanners.Add(SubToolDefault); + // run + if RunExternalTool(ExtTool) then + Result:=mrOk; + {$ELSE} ExtTool.Filename:=ProgramFilename; ExtTool.ScanOutputForFPCMessages:=ScanForFPCMessages; ExtTool.ScanOutputForMakeMessages:=ScanForMakeMessages; ExtTool.ScanOutput:=true; ExtTool.ShowAllOutput:=ShowAllMessages; - ExtTool.Title:=ToolTitle; - ExtTool.WorkingDirectory:=WorkingDir; - ExtTool.CmdLineParams:=Params; - // run Result:=RunExternalTool(ExtTool); + {$ENDIF} finally // clean up ExtTool.Free; end; - {$ENDIF} end; procedure TCompilationToolOptions.IncreaseChangeStamp; diff --git a/ide/exttooleditdlg.pas b/ide/exttooleditdlg.pas index 5d281c511d..945c29615d 100644 --- a/ide/exttooleditdlg.pas +++ b/ide/exttooleditdlg.pas @@ -542,49 +542,22 @@ function TExternalToolMenuItems.Run(Index: integer; ShowAbort: boolean ): TModalResult; var Item: TExternalToolMenuItem; - - function ResolveMacros(const Value: string; out NewValue: string): boolean; - begin - NewValue:=Value; - Result:=GlobalMacroList.SubstituteStr(NewValue); - if not Result then exit; - Run:=IDEMessageDialogAb('Invalid macro','Invalid macro in tool "'+Item.Title+'":'#13+Value, - mtError,[mbCancel],ShowAbort); - end; - -var - Tool: TAbstractExternalTool; - Executable: String; - CmdLineParams: string; - WorkingDirectory: string; - i: Integer; - s: String; - EnvironmentOverrides: TStringList; + Tool: TIDEExternalToolOptions; begin Result:=mrCancel; Item:=Items[Index]; - if not ResolveMacros(Item.Filename,Executable) then exit; - if not ResolveMacros(Item.CmdLineParams,CmdLineParams) then exit; - if not ResolveMacros(Item.WorkingDirectory,WorkingDirectory) then exit; - EnvironmentOverrides:=TStringList.Create; + + Tool:=TIDEExternalToolOptions.Create; try - for i:=0 to Item.EnvironmentOverrides.Count-1 do begin - if not ResolveMacros(Item.EnvironmentOverrides[i],s) then exit; - if s<>'' then - EnvironmentOverrides.Add(s); - end; - Tool:=ExternalToolList.Add(Item.Title); - Tool.Process.Executable:=Item.Title; - Tool.Process.CurrentDirectory:=WorkingDirectory; - Tool.CmdLineParams:=CmdLineParams; - for i:=0 to Item.Scanners.Count-1 do - Tool.AddParsers(Item.Scanners[i]); - Tool.EnvironmentOverrides:=EnvironmentOverrides; - Tool.Execute; - if Tool.ParserCount>0 then - Tool.WaitForExit; + Tool.Executable:=Item.Filename; + Tool.WorkingDirectory:=Item.WorkingDirectory; + Tool.CmdLineParams:=Item.CmdLineParams; + Tool.EnvironmentOverrides:=Item.EnvironmentOverrides; + Tool.Scanners:=Item.Scanners; + Tool.ResolveMacros:=true; + if not RunExternalTool(Tool) then exit; finally - EnvironmentOverrides.Free; + Tool.Free; end; end;