IDE: macro FPCVer: skip asking pas2js targets, added fallbacks

git-svn-id: trunk@60591 -
This commit is contained in:
mattias 2019-03-05 09:44:14 +00:00
parent 9f27095fee
commit 0e0db19ed3

View File

@ -659,7 +659,7 @@ begin
Result:=Opts.CompilerPath;
// the compiler filename is resolved twice, once for getting the default
// compiler target OS/CPU and once with the real values.
// For easier debugging macros, avoid this double resolve.
// For easier macro debugging, avoid this double resolve.
if Result='' then
// see below
else if Result='$(CompPath)' then
@ -2123,13 +2123,31 @@ end;
function TBuildManager.MacroFuncFPCVer(const Param: string; const Data: PtrInt;
var Abort: boolean): string;
function TryTarget(CompilerFilename, TargetOS, TargetCPU: String): boolean;
var
ConfigCache: TPCTargetConfigCache;
begin
Result:=false;
ConfigCache:=CodeToolBoss.CompilerDefinesCache.ConfigCaches.Find(
CompilerFilename,'',TargetOS,TargetCPU,true);
if ConfigCache=nil then exit;
if ConfigCache.NeedsUpdate then begin
// ask compiler
if not ConfigCache.Update(CodeToolBoss.CompilerDefinesCache.TestFilename,
CodeToolBoss.CompilerDefinesCache.ExtraOptions,nil)
then
exit;
end;
FFPCVer:=ConfigCache.GetFPCVer;
FFPC_FULLVERSION:=ConfigCache.GetFPC_FULLVERSION;
Result:=FFPC_FULLVERSION>0;
end;
procedure Compute;
var
TargetOS: String;
TargetCPU: String;
CompilerFilename: String;
ConfigCache: TPCTargetConfigCache;
s: string;
CompilerFilename, s: String;
begin
FFPC_FULLVERSION:=0;
if OverrideFPCVer<>'' then begin
@ -2143,22 +2161,26 @@ function TBuildManager.MacroFuncFPCVer(const Param: string; const Data: PtrInt;
// Not from the fpc.exe, but from the real compiler
CompilerFilename:=GetFPCompilerFilename;
if not IsCTExecutable(CompilerFilename,s) then exit;
// 1. try with project target OS/CPU
TargetOS:=GetTargetOS;
TargetCPU:=GetTargetCPU;
ConfigCache:=CodeToolBoss.CompilerDefinesCache.ConfigCaches.Find(
CompilerFilename,'',TargetOS,TargetCPU,true);
if ConfigCache=nil then exit;
if ConfigCache.NeedsUpdate then begin
// ask compiler
if not ConfigCache.Update(CodeToolBoss.CompilerDefinesCache.TestFilename,
CodeToolBoss.CompilerDefinesCache.ExtraOptions,nil)
then
exit;
end;
FFPCVer:=ConfigCache.GetFPCVer;
FFPC_FULLVERSION:=ConfigCache.GetFPC_FULLVERSION;
end else
FFPC_FULLVERSION:=FPCVersionToNumber(FFPCVer);
if IsPas2jsTargetOS(TargetOS) or IsPas2jsTargetCPU(TargetCPU) then
// skip
else if TryTarget(CompilerFilename,TargetOS,TargetCPU) then
exit;
// 2. try with IDE target OS/CPU
TargetOS:=GetCompiledTargetOS;
TargetCPU:=GetCompiledTargetCPU;
if TryTarget(CompilerFilename,TargetOS,TargetCPU) then exit;
// 3. try with no target OS/CPU - using whatever the compiler supports
TargetOS:='';
TargetCPU:='';
if TryTarget(CompilerFilename,TargetOS,TargetCPU) then exit;
end;
FFPC_FULLVERSION:=FPCVersionToNumber(FFPCVer);
end;
begin
@ -2749,7 +2771,7 @@ var
OldTargetOS: String;
OldTargetCPU: String;
OldLCLWidgetType: String;
FPCTargetChanged: Boolean;
PCTargetChanged: Boolean;
LCLTargetChanged: Boolean;
CompilerTargetOS: string;
CompilerTargetCPU: string;
@ -2814,11 +2836,11 @@ begin
fTargetOS:=GetFPCTargetOS(fTargetOS);
fTargetCPU:=GetFPCTargetCPU(fTargetCPU);
FPCTargetChanged:=(OldTargetOS<>fTargetOS)
PCTargetChanged:=(OldTargetOS<>fTargetOS)
or (OldTargetCPU<>fTargetCPU)
or (CodeToolBoss.DefineTree.FindDefineTemplateByName(
StdDefTemplLazarusSources,true)=nil);
if FPCTargetChanged then
if PCTargetChanged then
begin
IncreaseBuildMacroChangeStamp;
CodeToolBoss.DefineTree.ClearCache;
@ -2828,9 +2850,9 @@ begin
fLCLWidgetType:=GetEffectiveLCLWidgetType;
LCLTargetChanged:=(OldLCLWidgetType<>fLCLWidgetType);
if FPCTargetChanged or LCLTargetChanged then begin
if PCTargetChanged or LCLTargetChanged then begin
if ConsoleVerbosity>=0 then
DebugLn(['Hint: (lazarus) [TBuildManager.SetBuildTarget] Old=',OldTargetCPU,'-',OldTargetOS,'-',OldLCLWidgetType,' New=',fTargetCPU,'-',fTargetOS,'-',fLCLWidgetType,' FPC=',FPCTargetChanged,' LCL=',LCLTargetChanged]);
DebugLn(['Hint: (lazarus) [TBuildManager.SetBuildTarget] Old=',OldTargetCPU,'-',OldTargetOS,'-',OldLCLWidgetType,' New=',fTargetCPU,'-',fTargetOS,'-',fLCLWidgetType,' Changed: OS/CPU=',PCTargetChanged,' LCL=',LCLTargetChanged]);
end;
if LCLTargetChanged then
CodeToolBoss.SetGlobalValue(ExternalMacroStart+'LCLWidgetType',fLCLWidgetType);