mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-26 06:27:20 +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,
|
out UnitSearchPath, TargetOS,
|
||||||
TargetProcessor: string;
|
TargetProcessor: string;
|
||||||
Owner: TObject): TDefineTemplate;
|
Owner: TObject): TDefineTemplate;
|
||||||
|
function GetFPCVerFromFPCTemplate(Template: TDefineTemplate;
|
||||||
|
out FPCVersion, FPCRelease, FPCPatch: integer): boolean;
|
||||||
function CreateFPCSrcTemplate(const FPCSrcDir, UnitSearchPath, PPUExt,
|
function CreateFPCSrcTemplate(const FPCSrcDir, UnitSearchPath, PPUExt,
|
||||||
DefaultTargetOS, DefaultProcessorName: string;
|
DefaultTargetOS, DefaultProcessorName: string;
|
||||||
UnitLinkListValid: boolean; var UnitLinkList: string;
|
UnitLinkListValid: boolean; var UnitLinkList: string;
|
||||||
@ -3211,7 +3213,7 @@ begin
|
|||||||
|
|
||||||
// add
|
// add
|
||||||
if (LastDefTempl<>nil) then begin
|
if (LastDefTempl<>nil) then begin
|
||||||
Result:=TDefineTemplate.Create('Free Pascal Compiler',
|
Result:=TDefineTemplate.Create(StdDefTemplFPC,
|
||||||
ctsFreePascalCompilerInitialMacros,'','',da_Block);
|
ctsFreePascalCompilerInitialMacros,'','',da_Block);
|
||||||
Result.AddChild(LastDefTempl.GetFirstSibling);
|
Result.AddChild(LastDefTempl.GetFirstSibling);
|
||||||
Result.SetFlags([dtfAutoGenerated],[],false);
|
Result.SetFlags([dtfAutoGenerated],[],false);
|
||||||
@ -3226,6 +3228,80 @@ begin
|
|||||||
Result.SetDefineOwner(Owner,true);
|
Result.SetDefineOwner(Owner,true);
|
||||||
end;
|
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(
|
function TDefinePool.CreateFPCSrcTemplate(
|
||||||
const FPCSrcDir, UnitSearchPath, PPUExt, DefaultTargetOS,
|
const FPCSrcDir, UnitSearchPath, PPUExt, DefaultTargetOS,
|
||||||
DefaultProcessorName: string;
|
DefaultProcessorName: string;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user