mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-01 05:32:35 +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;
|
FExitStatus: integer;
|
||||||
FFreeData: boolean;
|
FFreeData: boolean;
|
||||||
FGroup: TExternalToolGroup;
|
FGroup: TExternalToolGroup;
|
||||||
|
FResolveMacrosOnExecute: boolean;
|
||||||
FWorkerDirectory: string;
|
FWorkerDirectory: string;
|
||||||
FWorkerMessages: TMessageLines;
|
FWorkerMessages: TMessageLines;
|
||||||
FParsers: TFPList; // list of TExtToolParser
|
FParsers: TFPList; // list of TExtToolParser
|
||||||
@ -436,6 +437,9 @@ type
|
|||||||
property EnvironmentOverrides: TStrings read FEnvironmentOverrides
|
property EnvironmentOverrides: TStrings read FEnvironmentOverrides
|
||||||
write SetEnvironmentOverrides; // if not empty, then this and IDE's environemnt will be merged and replace Process.Environment
|
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;
|
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;
|
property Stage: TExternalToolStage read FStage;
|
||||||
procedure Execute; virtual; abstract;
|
procedure Execute; virtual; abstract;
|
||||||
procedure Terminate; virtual; abstract;
|
procedure Terminate; virtual; abstract;
|
||||||
|
@ -4184,17 +4184,13 @@ var
|
|||||||
ProgramFilename, Params: string;
|
ProgramFilename, Params: string;
|
||||||
Filename: String;
|
Filename: String;
|
||||||
CurCommand: String;
|
CurCommand: String;
|
||||||
{$IFDEF EnableNewExtTools}
|
|
||||||
Tool: TAbstractExternalTool;
|
|
||||||
{$ELSE}
|
|
||||||
ExtTool: TIDEExternalToolOptions;
|
ExtTool: TIDEExternalToolOptions;
|
||||||
{$ENDIF}
|
|
||||||
begin
|
begin
|
||||||
|
Result:=mrCancel;
|
||||||
|
|
||||||
CurCommand:=GetParsedCommand;
|
CurCommand:=GetParsedCommand;
|
||||||
if CurCommand='' then begin
|
if CurCommand='' then
|
||||||
Result:=mrOk;
|
exit(mrOk);
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
|
|
||||||
if SourceEditorManagerIntf<>nil then
|
if SourceEditorManagerIntf<>nil then
|
||||||
SourceEditorManagerIntf.ClearErrorLines;
|
SourceEditorManagerIntf.ClearErrorLines;
|
||||||
@ -4205,42 +4201,35 @@ begin
|
|||||||
if Filename<>'' then ProgramFilename:=Filename;
|
if Filename<>'' then ProgramFilename:=Filename;
|
||||||
end;
|
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;
|
ExtTool:=TIDEExternalToolOptions.Create;
|
||||||
try
|
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.Filename:=ProgramFilename;
|
||||||
ExtTool.ScanOutputForFPCMessages:=ScanForFPCMessages;
|
ExtTool.ScanOutputForFPCMessages:=ScanForFPCMessages;
|
||||||
ExtTool.ScanOutputForMakeMessages:=ScanForMakeMessages;
|
ExtTool.ScanOutputForMakeMessages:=ScanForMakeMessages;
|
||||||
ExtTool.ScanOutput:=true;
|
ExtTool.ScanOutput:=true;
|
||||||
ExtTool.ShowAllOutput:=ShowAllMessages;
|
ExtTool.ShowAllOutput:=ShowAllMessages;
|
||||||
ExtTool.Title:=ToolTitle;
|
|
||||||
ExtTool.WorkingDirectory:=WorkingDir;
|
|
||||||
ExtTool.CmdLineParams:=Params;
|
|
||||||
|
|
||||||
// run
|
// run
|
||||||
Result:=RunExternalTool(ExtTool);
|
Result:=RunExternalTool(ExtTool);
|
||||||
|
{$ENDIF}
|
||||||
finally
|
finally
|
||||||
// clean up
|
// clean up
|
||||||
ExtTool.Free;
|
ExtTool.Free;
|
||||||
end;
|
end;
|
||||||
{$ENDIF}
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCompilationToolOptions.IncreaseChangeStamp;
|
procedure TCompilationToolOptions.IncreaseChangeStamp;
|
||||||
|
@ -542,49 +542,22 @@ function TExternalToolMenuItems.Run(Index: integer; ShowAbort: boolean
|
|||||||
): TModalResult;
|
): TModalResult;
|
||||||
var
|
var
|
||||||
Item: TExternalToolMenuItem;
|
Item: TExternalToolMenuItem;
|
||||||
|
Tool: TIDEExternalToolOptions;
|
||||||
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;
|
|
||||||
begin
|
begin
|
||||||
Result:=mrCancel;
|
Result:=mrCancel;
|
||||||
Item:=Items[Index];
|
Item:=Items[Index];
|
||||||
if not ResolveMacros(Item.Filename,Executable) then exit;
|
|
||||||
if not ResolveMacros(Item.CmdLineParams,CmdLineParams) then exit;
|
Tool:=TIDEExternalToolOptions.Create;
|
||||||
if not ResolveMacros(Item.WorkingDirectory,WorkingDirectory) then exit;
|
|
||||||
EnvironmentOverrides:=TStringList.Create;
|
|
||||||
try
|
try
|
||||||
for i:=0 to Item.EnvironmentOverrides.Count-1 do begin
|
Tool.Executable:=Item.Filename;
|
||||||
if not ResolveMacros(Item.EnvironmentOverrides[i],s) then exit;
|
Tool.WorkingDirectory:=Item.WorkingDirectory;
|
||||||
if s<>'' then
|
Tool.CmdLineParams:=Item.CmdLineParams;
|
||||||
EnvironmentOverrides.Add(s);
|
Tool.EnvironmentOverrides:=Item.EnvironmentOverrides;
|
||||||
end;
|
Tool.Scanners:=Item.Scanners;
|
||||||
Tool:=ExternalToolList.Add(Item.Title);
|
Tool.ResolveMacros:=true;
|
||||||
Tool.Process.Executable:=Item.Title;
|
if not RunExternalTool(Tool) then exit;
|
||||||
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;
|
|
||||||
finally
|
finally
|
||||||
EnvironmentOverrides.Free;
|
Tool.Free;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user