mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-07 18:58:04 +02:00
IDE: further migration external tools
git-svn-id: trunk@42356 -
This commit is contained in:
parent
0b5c1437dd
commit
f81c251cb5
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user