IDE: fpc msg parser, use console or system codepage depending on compiler version, bug #26623

git-svn-id: trunk@48038 -
This commit is contained in:
mattias 2015-02-28 11:15:34 +00:00
parent 8f8725a3c5
commit e30dfa934a
2 changed files with 34 additions and 12 deletions

View File

@ -971,6 +971,7 @@ function GetDefaultSrcOS2ForTargetOS(const TargetOS: string): string;
function GetDefaultSrcCPUForTargetCPU(const TargetCPU: string): string;
procedure SplitLazarusCPUOSWidgetCombo(const Combination: string;
var CPU, OS, WidgetSet: string);
function GetCompiledFPCVersion: integer;
function GetCompiledTargetOS: string;
function GetCompiledTargetCPU: string;
function GetDefaultCompilerFilename(const TargetCPU: string = ''; Cross: boolean = false): string;
@ -1013,6 +1014,7 @@ function RunFPCInfo(const CompilerFilename: string;
InfoTypes: TFPCInfoTypes; const Options: string =''): string;
function ExtractFPCFrontEndParameters(const CmdLineParams: string;
const Kinds: TFPCFrontEndParams = AllFPCFrontEndParams): string;
function FPCVersionToNumber(const FPCVersionString: string): integer;
function SplitFPCVersion(const FPCVersionString: string;
out FPCVersion, FPCRelease, FPCPatch: integer): boolean;
function ParseFPCVerbose(List: TStrings; // fpc -va output
@ -1471,6 +1473,16 @@ begin
Add('V',ParamV);
end;
function FPCVersionToNumber(const FPCVersionString: string): integer;
var
FPCVersion, FPCRelease, FPCPatch: integer;
begin
if SplitFPCVersion(FPCVersionString,FPCVersion,FPCRelease,FPCPatch) then
Result:=FPCVersion*10000+FPCRelease*100+FPCPatch
else
Result:=0;
end;
function SplitFPCVersion(const FPCVersionString: string; out FPCVersion,
FPCRelease, FPCPatch: integer): boolean;
// for example 2.5.1
@ -2786,6 +2798,11 @@ begin
WidgetSet:=copy(Combination,StartPos,EndPos-StartPos);
end;
function GetCompiledFPCVersion: integer;
begin
Result:=FPCVersionToNumber({$I %FPCVERSION%});
end;
function GetCompiledTargetOS: string;
begin
Result:=lowerCase({$I %FPCTARGETOS%});
@ -7976,21 +7993,13 @@ begin
end;
function TFPCTargetConfigCache.GetFPC_FULLVERSION: integer;
var
v: String;
FPCVersion: integer;
FPCRelease: integer;
FPCPatch: integer;
begin
if Defines<>nil then
Result:=StrToIntDef(Defines['FPC_FULLVERSION'],0)
else
Result:=0;
if Result=0 then begin
v:={$I %FPCVERSION%};
SplitFPCVersion(v,FPCVersion,FPCRelease,FPCPatch);
Result:=(FPCVersion*100+FPCRelease)*100+FPCPatch;
end;
if Result=0 then
Result:=GetCompiledFPCVersion;
end;
function TFPCTargetConfigCache.IndexOfUsedCfgFile: integer;

View File

@ -204,10 +204,11 @@ type
TranslationFilename: string; // e.g. /path/to/fpcsrc/compiler/msg/errord.msg
TranslationFile: TFPCMsgFilePoolItem;
InstantFPCCache: string; // with trailing pathdelim
FPC_FullVersion: cardinal;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Init; override; // called after macros resolved, before starting thread (main thread)
procedure InitReading; override; // called if process started, before first line (worker thread)
procedure InitReading; override; // called when process started, before first line (worker thread)
procedure Done; override; // called after process stopped (worker thread)
procedure ReadLine(Line: string; OutputIndex: integer; var Handled: boolean); override;
procedure AddMsgLine(MsgLine: TMessageLine); override;
@ -1066,9 +1067,17 @@ var
p: PChar;
aTargetOS: String;
aTargetCPU: String;
FPCVersion: integer;
FPCRelease: integer;
FPCPatch: integer;
begin
inherited Init;
// get FPC version
CodeToolBoss.GetFPCVersionForDirectory(Tool.WorkerDirectory, FPCVersion,
FPCRelease, FPCPatch);
FPC_FullVersion:=FPCVersion*10000+FPCRelease*100+FPCPatch;
if FPCMsgFilePool<>nil then begin
aTargetOS:='';
aTargetCPU:='';
@ -2255,6 +2264,7 @@ begin
FFilesToIgnoreUnitNotUsed:=TStringList.Create;
HideHintsSenderNotUsed:=true;
HideHintsUnitNotUsedInMainSource:=true;
FPC_FullVersion:=GetCompiledFPCVersion;
end;
function TIDEFPCParser.FileExists(const Filename: string; aSynchronized: boolean
@ -2524,7 +2534,10 @@ var
p: PChar;
begin
if Line='' then exit;
Line:=LazUTF8.SysToUTF8(Line);
if FPC_FullVersion>=20701 then
Line:=LazUTF8.ConsoleToUTF8(Line)
else
Line:=LazUTF8.SysToUTF8(Line);
p:=PChar(Line);
fOutputIndex:=OutputIndex;
fMsgID:=0;