mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-06 12:00:40 +02:00
IDE: pass reason for compile project and package dependencies as string
git-svn-id: trunk@36653 -
This commit is contained in:
parent
8425f35288
commit
4609a3fe68
43
ide/main.pp
43
ide/main.pp
@ -907,7 +907,7 @@ type
|
||||
function DoSaveForBuild(AReason: TCompileReason): TModalResult; override;
|
||||
function DoCheckIfProjectNeedsCompilation(AProject: TProject;
|
||||
const CompilerFilename, CompilerParams, SrcFilename: string;
|
||||
out NeedBuildAllFlag: boolean): TModalResult;
|
||||
out NeedBuildAllFlag: boolean; var Note: string): TModalResult;
|
||||
function DoBuildProject(const AReason: TCompileReason;
|
||||
Flags: TProjectBuildFlags): TModalResult; override;
|
||||
function UpdateProjectPOFile(AProject: TProject): TModalResult;
|
||||
@ -11726,8 +11726,8 @@ begin
|
||||
end;
|
||||
|
||||
function TMainIDE.DoCheckIfProjectNeedsCompilation(AProject: TProject;
|
||||
const CompilerFilename, CompilerParams, SrcFilename: string;
|
||||
out NeedBuildAllFlag: boolean): TModalResult;
|
||||
const CompilerFilename, CompilerParams, SrcFilename: string; out
|
||||
NeedBuildAllFlag: boolean; var Note: string): TModalResult;
|
||||
var
|
||||
StateFilename: String;
|
||||
StateFileAge: LongInt;
|
||||
@ -11749,6 +11749,7 @@ begin
|
||||
if Result<>mrOk then exit;
|
||||
if not (lpsfStateFileLoaded in AProject.StateFlags) then begin
|
||||
DebugLn('TMainIDE.CheckIfPackageNeedsCompilation No state file for ',AProject.IDAsString);
|
||||
Note+='State file "'+StateFilename+'" of '+AProject.IDAsString+' is missing.'+LineEnding;
|
||||
exit(mrYes);
|
||||
end;
|
||||
|
||||
@ -11758,6 +11759,9 @@ begin
|
||||
if FileExistsCached(SrcFilename) and (StateFileAge<FileAgeCached(SrcFilename)) then
|
||||
begin
|
||||
DebugLn('TMainIDE.CheckIfProjectNeedsCompilation SrcFile outdated ',AProject.IDAsString);
|
||||
Note+='Source file "'+SrcFilename+'" of '+AProject.IDAsString+' outdated:'+LineEnding
|
||||
+' source age='+FileAgeToStr(FileAgeCached(SrcFilename))+LineEnding
|
||||
+' state file age='+FileAgeToStr(StateFileAge)+LineEnding;
|
||||
exit(mrYes);
|
||||
end;
|
||||
|
||||
@ -11766,22 +11770,32 @@ begin
|
||||
DebugLn('TMainIDE.CheckIfProjectNeedsCompilation Compiler filename changed for ',AProject.IDAsString);
|
||||
DebugLn(' Old="',AProject.LastCompilerFilename,'"');
|
||||
DebugLn(' Now="',CompilerFilename,'"');
|
||||
Note+='Compiler filename changed for '+AProject.IDAsString+':'+LineEnding
|
||||
+' Old="'+AProject.LastCompilerFilename+'"'+LineEnding
|
||||
+' Now="'+CompilerFilename+'"'+LineEnding;
|
||||
exit(mrYes);
|
||||
end;
|
||||
if not FileExistsUTF8(CompilerFilename) then begin
|
||||
DebugLn('TMainIDE.CheckIfProjectNeedsCompilation Compiler filename not found for ',AProject.IDAsString);
|
||||
if not FileExistsCached(CompilerFilename) then begin
|
||||
DebugLn('TMainIDE.CheckIfProjectNeedsCompilation Compiler file not found for ',AProject.IDAsString);
|
||||
DebugLn(' File="',CompilerFilename,'"');
|
||||
Note+='Compiler file "'+CompilerFilename+'" not found for '+AProject.IDAsString+'.'+LineEnding;
|
||||
exit(mrYes);
|
||||
end;
|
||||
if FileAgeCached(CompilerFilename)<>AProject.LastCompilerFileDate then begin
|
||||
DebugLn('TMainIDE.CheckIfProjectNeedsCompilation Compiler file changed for ',AProject.IDAsString);
|
||||
DebugLn(' File="',CompilerFilename,'"');
|
||||
Note+='Compiler file "'+CompilerFilename+'" for '+AProject.IDAsString+' changed:'+LineEnding
|
||||
+' Old="'+FileAgeToStr(AProject.LastCompilerFileDate)+'"'+LineEnding
|
||||
+' Now="'+FileAgeToStr(FileAgeCached(CompilerFilename))+'"'+LineEnding;
|
||||
exit(mrYes);
|
||||
end;
|
||||
if CompilerParams<>AProject.LastCompilerParams then begin
|
||||
DebugLn('TMainIDE.CheckIfProjectNeedsCompilation Compiler params changed for ',AProject.IDAsString);
|
||||
DebugLn(' Old="',AProject.LastCompilerParams,'"');
|
||||
DebugLn(' Now="',CompilerParams,'"');
|
||||
Note+='Compiler params changed for '+AProject.IDAsString+':'+LineEnding
|
||||
+' Old="'+AProject.LastCompilerParams+'"'+LineEnding
|
||||
+' Now="'+CompilerParams+'"'+LineEnding;
|
||||
exit(mrYes);
|
||||
end;
|
||||
|
||||
@ -11793,15 +11807,19 @@ begin
|
||||
Result:=PackageGraph.CheckCompileNeedDueToDependencies(AProject,
|
||||
AProject.FirstRequiredDependency,
|
||||
not (pfUseDesignTimePackages in AProject.Flags),
|
||||
StateFileAge);
|
||||
StateFileAge,Note);
|
||||
if Result<>mrNo then exit;
|
||||
|
||||
// check project files
|
||||
AnUnitInfo:=AProject.FirstPartOfProject;
|
||||
while AnUnitInfo<>nil do begin
|
||||
if FileExistsCached(AnUnitInfo.Filename) then begin
|
||||
if (not AnUnitInfo.IsVirtual) and FileExistsCached(AnUnitInfo.Filename) then
|
||||
begin
|
||||
if (StateFileAge<FileAgeCached(AnUnitInfo.Filename)) then begin
|
||||
DebugLn('TMainIDE.CheckIfProjectNeedsCompilation Src has changed ',AProject.IDAsString,' ',AnUnitInfo.Filename);
|
||||
Note+='File "'+AnUnitInfo.Filename+'" of '+AProject.IDAsString+' is newer than state file:'+LineEnding
|
||||
+' file age="'+FileAgeToStr(FileAgeCached(AnUnitInfo.Filename))+'"'+LineEnding
|
||||
+' state file age="'+FileAgeToStr(StateFileAge)+'"'+LineEnding;
|
||||
exit(mrYes);
|
||||
end;
|
||||
if AnUnitInfo.ComponentName<>'' then begin
|
||||
@ -11809,6 +11827,9 @@ begin
|
||||
if FileExistsCached(LFMFilename)
|
||||
and (StateFileAge<FileAgeCached(LFMFilename)) then begin
|
||||
DebugLn('TMainIDE.CheckIfProjectNeedsCompilation LFM has changed ',AProject.IDAsString,' ',LFMFilename);
|
||||
Note+='File "'+LFMFilename+'" of '+AProject.IDAsString+' is newer than state file:'+LineEnding
|
||||
+' file age="'+FileAgeToStr(FileAgeCached(LFMFilename))+'"'+LineEnding
|
||||
+' state file age="'+FileAgeToStr(StateFileAge)+'"'+LineEnding;
|
||||
exit(mrYes);
|
||||
end;
|
||||
end;
|
||||
@ -11820,9 +11841,13 @@ begin
|
||||
AnUnitInfo:=AProject.FirstUnitWithEditorIndex;
|
||||
while AnUnitInfo<>nil do begin
|
||||
if (not AnUnitInfo.IsPartOfProject)
|
||||
and (not AnUnitInfo.IsVirtual)
|
||||
and FileExistsCached(AnUnitInfo.Filename)
|
||||
and (StateFileAge<FileAgeCached(AnUnitInfo.Filename)) then begin
|
||||
DebugLn('TMainIDE.CheckIfProjectNeedsCompilation Editor Src has changed ',AProject.IDAsString,' ',AnUnitInfo.Filename);
|
||||
Note+='Editor file "'+AnUnitInfo.Filename+'" is newer than state file:'+LineEnding
|
||||
+' file age="'+FileAgeToStr(FileAgeCached(AnUnitInfo.Filename))+'"'+LineEnding
|
||||
+' state file age="'+FileAgeToStr(StateFileAge)+'"'+LineEnding;
|
||||
exit(mrYes);
|
||||
end;
|
||||
AnUnitInfo:=AnUnitInfo.NextUnitWithEditorIndex;
|
||||
@ -11979,6 +12004,7 @@ var
|
||||
err : TFPCErrorType;
|
||||
TargetExeDirectory: String;
|
||||
FPCVersion, FPCRelease, FPCPatch: integer;
|
||||
Note: String;
|
||||
begin
|
||||
if Project1.MainUnitInfo=nil then begin
|
||||
// this project has no source to compile
|
||||
@ -12074,9 +12100,10 @@ begin
|
||||
// and check if a 'build all' is needed
|
||||
NeedBuildAllFlag:=false;
|
||||
if (AReason in Project1.CompilerOptions.CompileReasons) then begin
|
||||
Note:='';
|
||||
Result:=DoCheckIfProjectNeedsCompilation(Project1,
|
||||
CompilerFilename,CompilerParams,
|
||||
SrcFilename,NeedBuildAllFlag);
|
||||
SrcFilename,NeedBuildAllFlag,Note);
|
||||
if (pbfOnlyIfNeeded in Flags)
|
||||
and (not (pfAlwaysBuild in Project1.Flags)) then begin
|
||||
if Result=mrNo then begin
|
||||
|
@ -284,11 +284,11 @@ type
|
||||
function LoadPackageCompiledState(APackage: TLazPackage;
|
||||
IgnoreErrors, ShowAbort: boolean): TModalResult;
|
||||
function CheckCompileNeedDueToFPCUnits(TheOwner: TObject;
|
||||
StateFileAge: longint): boolean;
|
||||
StateFileAge: longint; var Note: string): boolean;
|
||||
function CheckCompileNeedDueToDependencies(TheOwner: TObject;
|
||||
FirstDependency: TPkgDependency;
|
||||
SkipDesignTimePackages: boolean; StateFileAge: longint
|
||||
): TModalResult;
|
||||
FirstDependency: TPkgDependency;
|
||||
SkipDesignTimePackages: boolean; StateFileAge: longint;
|
||||
var Note: string): TModalResult;
|
||||
function CheckIfPackageNeedsCompilation(APackage: TLazPackage;
|
||||
SkipDesignTimePackages: boolean;
|
||||
out NeedBuildAllFlag: boolean; var Note: string): TModalResult;
|
||||
@ -2753,7 +2753,7 @@ begin
|
||||
end;
|
||||
|
||||
function TLazPackageGraph.CheckCompileNeedDueToFPCUnits(TheOwner: TObject;
|
||||
StateFileAge: longint): boolean;
|
||||
StateFileAge: longint; var Note: string): boolean;
|
||||
var
|
||||
AProject: TLazProject;
|
||||
Pkg: TLazPackage;
|
||||
@ -2795,6 +2795,9 @@ begin
|
||||
Filename:=Item^.Value;
|
||||
if FileAgeCached(Filename)>StateFileAge then begin
|
||||
debugln(['TLazPackageGraph.CheckCompileNeedDueToFPCUnits FPC unit "',Filename,'" is newer than state file of ',ID]);
|
||||
Note+='FPC unit "'+Filename+'" is newer than state file of '+ID+':'+LineEnding
|
||||
+' unit age='+FileAgeToStr(FileAgeCached(Filename))+LineEnding
|
||||
+' state file age='+FileAgeToStr(StateFileAge)+LineEnding;
|
||||
exit(true);
|
||||
end;
|
||||
Node:=CfgCache.Units.Tree.FindSuccessor(Node);
|
||||
@ -2803,7 +2806,7 @@ end;
|
||||
|
||||
function TLazPackageGraph.CheckCompileNeedDueToDependencies(TheOwner: TObject;
|
||||
FirstDependency: TPkgDependency; SkipDesignTimePackages: boolean;
|
||||
StateFileAge: longint): TModalResult;
|
||||
StateFileAge: longint; var Note: string): TModalResult;
|
||||
|
||||
function GetOwnerID: string;
|
||||
begin
|
||||
@ -2820,7 +2823,7 @@ begin
|
||||
if Dependency=nil then begin
|
||||
// no dependencies
|
||||
// => check FPC units
|
||||
if CheckCompileNeedDueToFPCUnits(TheOwner,StateFileAge) then
|
||||
if CheckCompileNeedDueToFPCUnits(TheOwner,StateFileAge,Note) then
|
||||
exit(mrYes);
|
||||
Result:=mrNo;
|
||||
exit;
|
||||
@ -2836,16 +2839,23 @@ begin
|
||||
// check compile state file of required package
|
||||
if not RequiredPackage.AutoCreated then begin
|
||||
Result:=LoadPackageCompiledState(RequiredPackage,false,true);
|
||||
if Result<>mrOk then exit;
|
||||
if Result<>mrOk then begin
|
||||
Note+='unable to load state file of '+RequiredPackage.IDAsString;
|
||||
exit;
|
||||
end;
|
||||
Result:=mrYes;
|
||||
o:=RequiredPackage.GetOutputDirType;
|
||||
if not RequiredPackage.LastCompile[o].StateFileLoaded then begin
|
||||
DebugLn('TPkgManager.CheckCompileNeedDueToDependencies Missing state file for ',RequiredPackage.IDAsString,': ',RequiredPackage.GetStateFilename);
|
||||
Note+='Package '+RequiredPackage.IDAsString+' has no state file "'+RequiredPackage.GetStateFilename+'".'+LineEnding;
|
||||
exit;
|
||||
end;
|
||||
if StateFileAge<RequiredPackage.LastCompile[o].StateFileDate then begin
|
||||
DebugLn('TPkgManager.CheckCompileNeedDueToDependencies ',
|
||||
' State file of ',RequiredPackage.IDAsString,' is newer than state file of ',GetOwnerID);
|
||||
Note+='State file of '+RequiredPackage.IDAsString+' is newer than state file of '+GetOwnerID+LineEnding
|
||||
+' '+RequiredPackage.IDAsString+'='+FileAgeToStr(RequiredPackage.LastCompile[o].StateFileDate)+LineEnding
|
||||
+' '+GetOwnerID+'='+FileAgeToStr(StateFileAge)+LineEnding;
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
@ -2859,9 +2869,13 @@ begin
|
||||
and FileExistsCached(OtherStateFile)
|
||||
and (FileAgeCached(OtherStateFile)>StateFileAge) then begin
|
||||
DebugLn('TPkgManager.CheckCompileNeedDueToDependencies ',
|
||||
' OtherState of ',RequiredPackage.IDAsString,' file "',OtherStateFile,'" (',
|
||||
' State file of ',RequiredPackage.IDAsString,' "',OtherStateFile,'" (',
|
||||
FileAgeToStr(FileAgeCached(OtherStateFile)),')'
|
||||
,' is newer than State file ',GetOwnerID,'(',FileAgeToStr(StateFileAge),')');
|
||||
,' is newer than state file ',GetOwnerID,'(',FileAgeToStr(StateFileAge),')');
|
||||
Note+='State file of used package is newer than state file:'+LineEnding
|
||||
+' Used package '+RequiredPackage.IDAsString+', file="'+OtherStateFile+'", '
|
||||
+' age='+FileAgeToStr(FileAgeCached(OtherStateFile))+LineEnding
|
||||
+' package '+GetOwnerID+', age='+FileAgeToStr(StateFileAge)+LineEnding;
|
||||
Result:=mrYes;
|
||||
exit;
|
||||
end;
|
||||
@ -2898,7 +2912,10 @@ begin
|
||||
Result:=CheckIfCurPkgOutDirNeedsCompile(APackage,
|
||||
true,SkipDesignTimePackages,
|
||||
NeedBuildAllFlag,ConfigChanged,DependenciesChanged,Note);
|
||||
if Result=mrNo then exit; // the current output is valid
|
||||
if Result=mrNo then begin
|
||||
// the current output is valid
|
||||
exit;
|
||||
end;
|
||||
|
||||
// the current output directory needs compilation
|
||||
if APackage.CompilerOptions.ParsedOpts.OutputDirectoryOverride='' then
|
||||
@ -2911,11 +2928,14 @@ begin
|
||||
exit;
|
||||
end;
|
||||
debugln(['TLazPackageGraph.CheckIfPackageNeedsCompilation normal output dir is not writable: ',OutputDir]);
|
||||
Note+='Normal output directory is not writable.'+LineEnding;
|
||||
// the normal output directory is not writable
|
||||
// => try the fallback directory
|
||||
NewOutputDir:=GetFallbackOutputDir(APackage);
|
||||
if (NewOutputDir=OutputDir) or (NewOutputDir='') then exit;
|
||||
if (NewOutputDir=OutputDir) or (NewOutputDir='') then begin
|
||||
Note+='Normal output directory is not writable. There is no fallback.'+LineEnding;
|
||||
exit;
|
||||
end;
|
||||
Note+='Normal output directory is not writable, switching to fallback.'+LineEnding;
|
||||
APackage.CompilerOptions.ParsedOpts.OutputDirectoryOverride:=NewOutputDir;
|
||||
Result:=CheckIfCurPkgOutDirNeedsCompile(APackage,
|
||||
true,SkipDesignTimePackages,
|
||||
@ -3150,7 +3170,8 @@ begin
|
||||
if CheckDependencies then begin
|
||||
// check all required packages
|
||||
Result:=CheckCompileNeedDueToDependencies(APackage,
|
||||
APackage.FirstRequiredDependency,SkipDesignTimePackages,StateFileAge);
|
||||
APackage.FirstRequiredDependency,SkipDesignTimePackages,StateFileAge,
|
||||
Note);
|
||||
if Result<>mrNo then begin
|
||||
DependenciesChanged:=true;
|
||||
exit;
|
||||
|
Loading…
Reference in New Issue
Block a user