mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-21 08:39:50 +01:00
codetools: added TDefinePool.GetFPCVerFromFPCTemplate
git-svn-id: trunk@24034 -
This commit is contained in:
parent
db75010348
commit
fc19399e97
@ -494,6 +494,8 @@ type
|
||||
out UnitSearchPath, TargetOS,
|
||||
TargetProcessor: string;
|
||||
Owner: TObject): TDefineTemplate;
|
||||
function GetFPCVerFromFPCTemplate(Template: TDefineTemplate;
|
||||
out FPCVersion, FPCRelease, FPCPatch: integer): boolean;
|
||||
function CreateFPCSrcTemplate(const FPCSrcDir, UnitSearchPath, PPUExt,
|
||||
DefaultTargetOS, DefaultProcessorName: string;
|
||||
UnitLinkListValid: boolean; var UnitLinkList: string;
|
||||
@ -3211,7 +3213,7 @@ begin
|
||||
|
||||
// add
|
||||
if (LastDefTempl<>nil) then begin
|
||||
Result:=TDefineTemplate.Create('Free Pascal Compiler',
|
||||
Result:=TDefineTemplate.Create(StdDefTemplFPC,
|
||||
ctsFreePascalCompilerInitialMacros,'','',da_Block);
|
||||
Result.AddChild(LastDefTempl.GetFirstSibling);
|
||||
Result.SetFlags([dtfAutoGenerated],[],false);
|
||||
@ -3226,6 +3228,80 @@ begin
|
||||
Result.SetDefineOwner(Owner,true);
|
||||
end;
|
||||
|
||||
function TDefinePool.GetFPCVerFromFPCTemplate(Template: TDefineTemplate; out
|
||||
FPCVersion, FPCRelease, FPCPatch: integer): boolean;
|
||||
var
|
||||
p: Integer;
|
||||
|
||||
function ReadInt(const VarName: string; var AnInteger: integer): boolean;
|
||||
var
|
||||
StartPos: Integer;
|
||||
begin
|
||||
StartPos:=p;
|
||||
AnInteger:=0;
|
||||
while (p<=length(VarName)) and (VarName[p] in ['0'..'9']) do begin
|
||||
AnInteger:=AnInteger*10+(ord(VarName[p])-ord('0'));
|
||||
if AnInteger>=100 then begin
|
||||
Result:=false;
|
||||
exit;
|
||||
end;
|
||||
inc(p);
|
||||
end;
|
||||
Result:=StartPos<p;
|
||||
end;
|
||||
|
||||
function ReadVersion(const VarName: string;
|
||||
out NewVersion, NewRelease, NewPatch: integer): integer;
|
||||
begin
|
||||
Result:=0;
|
||||
if (length(VarName)>3) and (VarName[1] in ['V','v'])
|
||||
and (VarName[2] in ['E','e']) and (VarName[3] in ['R','r'])
|
||||
and (VarName[4] in ['0'..'9']) then begin
|
||||
p:=4;
|
||||
if not ReadInt(VarName,NewVersion) then exit;
|
||||
inc(Result);
|
||||
if (p>=length(VarName)) or (VarName[p]<>'_') then exit;
|
||||
inc(p);
|
||||
if not ReadInt(VarName,NewRelease) then exit;
|
||||
inc(Result);
|
||||
if (p>=length(VarName)) or (VarName[p]<>'_') then exit;
|
||||
inc(p);
|
||||
if not ReadInt(VarName,NewPatch) then exit;
|
||||
inc(Result);
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
Def: TDefineTemplate;
|
||||
VarName: String;
|
||||
BestCount: integer;
|
||||
NewCount: LongInt;
|
||||
NewVersion: integer;
|
||||
NewRelease: integer;
|
||||
NewPatch: integer;
|
||||
begin
|
||||
Result:=false;
|
||||
FPCVersion:=0;
|
||||
FPCRelease:=0;
|
||||
FPCPatch:=0;
|
||||
BestCount:=0;
|
||||
Def:=Template;
|
||||
while Def<>nil do begin
|
||||
if Def.Action in [da_Define,da_DefineRecurse] then begin
|
||||
VarName:=Def.Variable;
|
||||
NewCount:=ReadVersion(VarName,NewVersion,NewRelease,NewPatch);
|
||||
if NewCount>BestCount then begin
|
||||
BestCount:=NewCount;
|
||||
FPCVersion:=NewVersion;
|
||||
if NewCount>1 then FPCRelease:=NewRelease;
|
||||
if NewCount>2 then FPCPatch:=NewPatch;
|
||||
if NewCount=3 then exit;
|
||||
end;
|
||||
end;
|
||||
Def:=Def.Next;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TDefinePool.CreateFPCSrcTemplate(
|
||||
const FPCSrcDir, UnitSearchPath, PPUExt, DefaultTargetOS,
|
||||
DefaultProcessorName: string;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user