IDE: further migration external tools

git-svn-id: trunk@42356 -
This commit is contained in:
mattias 2013-08-05 14:56:01 +00:00
parent 0b5c1437dd
commit f81c251cb5
3 changed files with 35 additions and 69 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;