mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 04:55:58 +02:00
h2paswizard: fixed compilation
git-svn-id: trunk@45135 -
This commit is contained in:
parent
be15685e52
commit
41d6c332e4
@ -612,7 +612,21 @@ type
|
||||
property UseCTypes: boolean read FUseCTypes write SetUseCTypes;
|
||||
property OutputDirectory: string read FOutputDirectory write SetOutputDirectory;
|
||||
end;
|
||||
|
||||
|
||||
{$IFDEF EnableNewExtTools}
|
||||
const
|
||||
SubToolH2Pas = 'h2pas';
|
||||
type
|
||||
{ TH2PasParser }
|
||||
|
||||
TH2PasParser = class(TExtToolParser)
|
||||
public
|
||||
class function DefaultSubTool: string; override;
|
||||
procedure ReadLine(Line: string; OutputIndex: integer; var Handled: boolean
|
||||
); override; // (worker thread)
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
{ TH2PasTool }
|
||||
|
||||
TH2PasTool = class(TIDEExternalToolOptions)
|
||||
@ -643,7 +657,9 @@ type
|
||||
procedure SetProjectHistory(const AValue: TStrings);
|
||||
procedure SetWindowBounds(const AValue: TRect);
|
||||
procedure Seth2pasFilename(const AValue: string);
|
||||
{$IFNDEF EnableNewExtTools}
|
||||
procedure OnParseH2PasLine(Sender: TObject; Line: TIDEScanMessageLine);
|
||||
{$ENDIF}
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
@ -662,10 +678,9 @@ type
|
||||
function MergeIncludeFiles(AFile: TH2PasFile;
|
||||
TextConverter: TIDETextConverter): TModalResult;
|
||||
function GetH2PasFilename: string;
|
||||
{$IFNDEF EnableNewExtTools}
|
||||
function FindH2PasErrorMessage: integer;
|
||||
function GetH2PasErrorPostion(const Line: string;
|
||||
out aFilename: string;
|
||||
out LineNumber, Column: integer): boolean;
|
||||
{$ENDIF}
|
||||
function FileIsRelated(const aFilename: string): Boolean;
|
||||
public
|
||||
property Project: TH2PasProject read FProject write SetProject;
|
||||
@ -697,6 +712,53 @@ const
|
||||
|
||||
implementation
|
||||
|
||||
{$IFDEF EnableNewExtTools}
|
||||
{ TH2PasParser }
|
||||
|
||||
class function TH2PasParser.DefaultSubTool: string;
|
||||
begin
|
||||
Result:=SubToolH2Pas;
|
||||
end;
|
||||
|
||||
procedure TH2PasParser.ReadLine(Line: string; OutputIndex: integer;
|
||||
var Handled: boolean);
|
||||
|
||||
function ReadString(var p: PChar; Expected: PChar): boolean;
|
||||
begin
|
||||
while Expected^<>#0 do begin
|
||||
if p^<>Expected^ then exit(false);
|
||||
inc(p);
|
||||
inc(Expected);
|
||||
end;
|
||||
Result:=true;
|
||||
end;
|
||||
|
||||
var
|
||||
p: PChar;
|
||||
LineNumber: Integer;
|
||||
Msg: String;
|
||||
MsgLine: TMessageLine;
|
||||
begin
|
||||
p:=PChar(Line);
|
||||
// read 'at line '
|
||||
if not ReadString(p,'at line ') then exit;
|
||||
// read line number
|
||||
if not (p^ in ['0'..'9']) then exit;
|
||||
LineNumber:=0;
|
||||
while (LineNumber<999999) and (p^ in ['0'..'9']) do begin
|
||||
LineNumber:=LineNumber*10+ord(p^)-ord('0');
|
||||
inc(p);
|
||||
end;
|
||||
// read ' error : '
|
||||
if not ReadString(p,' error : ') then exit;
|
||||
Msg:=p;
|
||||
MsgLine:=CreateMsgLine(OutputIndex);
|
||||
MsgLine.SubTool:=SubToolH2Pas;
|
||||
MsgLine.Urgency:=mluError;
|
||||
MsgLine.Msg:=Msg;
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
{ TH2PasFile }
|
||||
|
||||
procedure TH2PasFile.SetFilename(const AValue: string);
|
||||
@ -1680,6 +1742,7 @@ end;
|
||||
|
||||
{ TH2PasConverter }
|
||||
|
||||
{$IFNDEF EnableNewExtTools}
|
||||
procedure TH2PasConverter.OnParseH2PasLine(Sender: TObject;
|
||||
Line: TIDEScanMessageLine);
|
||||
var
|
||||
@ -1699,6 +1762,7 @@ begin
|
||||
//DebugLn(['TH2PasConverter.OnParseH2PasLine ',Line.Line]);
|
||||
end;
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
function TH2PasConverter.GetCurrentProjectFilename: string;
|
||||
begin
|
||||
@ -1959,12 +2023,9 @@ var
|
||||
if Filename='' then
|
||||
Filename:=DefaultFilename;
|
||||
// create error message
|
||||
ErrMsg:=Filename;
|
||||
BaseDir:=ExtractFilePath(Project.BaseDir);
|
||||
Filename:=CreateRelativePath(Filename,BaseDir);
|
||||
|
||||
if ErrMsg='' then
|
||||
ErrMsg:=DefaultFilename;
|
||||
ErrMsg:=CreateRelativePath(Filename,BaseDir);
|
||||
|
||||
if Line>0 then begin
|
||||
ErrMsg:=ErrMsg+'('+IntToStr(Line)+',';
|
||||
if Col>0 then
|
||||
@ -1975,8 +2036,13 @@ var
|
||||
end;
|
||||
ErrMsg:=ErrMsg+' Error: '+ErrorTool.ErrorMsg+' ('+ErrorTool.Caption+')';
|
||||
DebugLn(['TH2PasConverter.ConvertFile Failed: ',ErrMsg]);
|
||||
{$IFDEF EnableNewExtTools}
|
||||
IDEMessagesWindow.AddCustomMessage(mluError,ErrorTool.ErrorMsg,Filename,Line,Col,ErrorTool.Caption);
|
||||
LazarusIDE.DoJumpToCompilerMessage(true);
|
||||
{$ELSE}
|
||||
IDEMessagesWindow.AddMsg(ErrMsg,BaseDir,-1);
|
||||
LazarusIDE.DoJumpToCompilerMessage(true, IDEMessagesWindow.LinesCount-1);
|
||||
{$ENDIF}
|
||||
Result:=mrAbort;
|
||||
end;
|
||||
|
||||
@ -2038,14 +2104,22 @@ begin
|
||||
Tool.TargetFilename:=TextConverter.Filename;
|
||||
Tool.Filename:=GetH2PasFilename;
|
||||
Tool.CmdLineParams:=AFile.GetH2PasParameters(Tool.TargetFilename);
|
||||
Tool.WorkingDirectory:=Project.BaseDir;
|
||||
DebugLn(['TH2PasConverter.ConvertFile Tool.Filename="',Tool.Filename,'" Tool.CmdLineParams="',Tool.CmdLineParams,'"']);
|
||||
{$IFDEF EnableNewExtTools}
|
||||
Tool.Scanners.Add(SubToolH2Pas);
|
||||
if not RunExternalTool(Tool) then
|
||||
exit(mrAbort);
|
||||
if IDEMessagesWindow.SelectFirstUrgentMessage(mluError,false) then
|
||||
exit(mrAbort);
|
||||
{$ELSE}
|
||||
Tool.ScanOutput:=true;
|
||||
Tool.ShowAllOutput:=true;
|
||||
Tool.WorkingDirectory:=Project.BaseDir;
|
||||
Tool.OnParseLine:=@OnParseH2PasLine;
|
||||
DebugLn(['TH2PasConverter.ConvertFile Tool.Filename="',Tool.Filename,'" Tool.CmdLineParams="',Tool.CmdLineParams,'"']);
|
||||
Result:=RunExternalTool(Tool);
|
||||
if Result<>mrOk then exit(mrAbort);
|
||||
if FindH2PasErrorMessage>=0 then exit(mrAbort);
|
||||
{$ENDIF}
|
||||
finally
|
||||
Tool.Free;
|
||||
end;
|
||||
@ -2241,6 +2315,7 @@ begin
|
||||
Result:=FindDefaultExecutablePath(h2pasFilename);
|
||||
end;
|
||||
|
||||
{$IFNDEF EnableNewExtTools}
|
||||
function TH2PasConverter.FindH2PasErrorMessage: integer;
|
||||
var
|
||||
i: Integer;
|
||||
@ -2255,21 +2330,7 @@ begin
|
||||
end;
|
||||
Result:=-1;
|
||||
end;
|
||||
|
||||
function TH2PasConverter.GetH2PasErrorPostion(const Line: string;
|
||||
out aFilename: string; out LineNumber, Column: integer): boolean;
|
||||
begin
|
||||
Result:=REMatches(Line,'^(.*)\(([0-9]+)\)');
|
||||
if Result then begin
|
||||
aFilename:=REVar(1);
|
||||
LineNumber:=StrToIntDef(REVar(2),-1);
|
||||
Column:=1;
|
||||
end else begin
|
||||
aFilename:='';
|
||||
LineNumber:=-1;
|
||||
Column:=-1;
|
||||
end;
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
function TH2PasConverter.FileIsRelated(const aFilename: string): Boolean;
|
||||
begin
|
||||
|
@ -22,14 +22,15 @@ unit H2PasDlg;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, LCLProc, LCLType, LResources, Forms, Controls,
|
||||
Graphics, Dialogs, ComCtrls, Buttons, StdCtrls, ExtCtrls,
|
||||
LazConfigStorage,
|
||||
SynEdit, SynHighlighterCPP,
|
||||
FileProcs,
|
||||
IDEMsgIntf, MenuIntf, IDECommands, BaseIDEIntf, IDEDialogs, LazIDEIntf,
|
||||
ProjectIntf, CodeToolManager, SrcEditorIntf, IDETextConverter,
|
||||
H2PasStrConsts, H2PasConvert, IDETextConvListEdit, CompOptsIntf;
|
||||
Classes, SysUtils, LCLProc, LCLType, LResources, Forms, Controls, Graphics,
|
||||
Dialogs, ComCtrls, Buttons, StdCtrls, ExtCtrls, LazConfigStorage, SynEdit,
|
||||
SynHighlighterCPP, FileProcs, IDEMsgIntf, MenuIntf, IDECommands, BaseIDEIntf,
|
||||
IDEDialogs, LazIDEIntf, ProjectIntf, CodeToolManager, SrcEditorIntf,
|
||||
IDETextConverter, H2PasStrConsts, H2PasConvert, IDETextConvListEdit,
|
||||
{$IFDEF EnableNewExtTools}
|
||||
IDEExternToolIntf,
|
||||
{$ENDIF}
|
||||
CompOptsIntf;
|
||||
|
||||
type
|
||||
|
||||
@ -162,7 +163,7 @@ type
|
||||
function OnIDESavedAll(Sender: TObject): TModalResult;
|
||||
public
|
||||
function Convert: TModalResult;
|
||||
procedure ShowH2PasError(MsgLine: integer);
|
||||
procedure ShowH2PasError;
|
||||
|
||||
function SaveSettings: TModalResult;
|
||||
function SaveGlobalSettings: TModalResult;
|
||||
@ -238,6 +239,11 @@ begin
|
||||
TextConverterToolClasses.RegisterClass(TReplaceTypeCastFunctionsInUnit);
|
||||
TextConverterToolClasses.RegisterClass(TFixForwardDefinitions);
|
||||
TextConverterToolClasses.RegisterClass(TAddToUsesSection);
|
||||
|
||||
{$IFDEF EnableNewExtTools}
|
||||
// register h2pas output parser
|
||||
ExternalToolList.RegisterParser(TH2PasParser);
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
{ TH2PasDialog }
|
||||
@ -1115,19 +1121,13 @@ begin
|
||||
|
||||
Result:=Converter.Execute;
|
||||
if Result<>mrOk then begin
|
||||
ShowH2PasError(-1);
|
||||
ShowH2PasError;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TH2PasDialog.ShowH2PasError(MsgLine: integer);
|
||||
procedure TH2PasDialog.ShowH2PasError;
|
||||
begin
|
||||
if MsgLine<0 then
|
||||
MsgLine:=Converter.FindH2PasErrorMessage;
|
||||
if (MsgLine<0) or (MsgLine>=IDEMessagesWindow.LinesCount) then begin
|
||||
exit;
|
||||
end;
|
||||
|
||||
LazarusIDE.DoJumpToCompilerMessage(true, MsgLine);
|
||||
LazarusIDE.DoJumpToCompilerMessage(true);
|
||||
end;
|
||||
|
||||
function TH2PasDialog.SaveSettings: TModalResult;
|
||||
|
Loading…
Reference in New Issue
Block a user