mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-24 22:39:21 +02:00
IDE: Optimize DefineTemplates updates for packages and project.
git-svn-id: trunk@64405 -
This commit is contained in:
parent
00e7a5c92b
commit
b092cee8be
@ -602,7 +602,7 @@ type
|
||||
procedure RemoveTemplatesOwnedBy(TheOwner: TObject;
|
||||
const MustFlags, NotFlags: TDefineTemplateFlags);
|
||||
procedure ReplaceChild(ParentTemplate, NewDefineTemplate: TDefineTemplate;
|
||||
const ChildName: string);
|
||||
const ChildName: string; AClearCache: boolean=true);
|
||||
procedure ReplaceRootSameName(ADefineTemplate: TDefineTemplate);
|
||||
procedure ReplaceRootSameName(const Name: string;
|
||||
ADefineTemplate: TDefineTemplate);
|
||||
@ -6007,8 +6007,8 @@ begin
|
||||
if HadDefines then ClearCache;
|
||||
end;
|
||||
|
||||
procedure TDefineTree.ReplaceChild(ParentTemplate,
|
||||
NewDefineTemplate: TDefineTemplate; const ChildName: string);
|
||||
procedure TDefineTree.ReplaceChild(ParentTemplate, NewDefineTemplate: TDefineTemplate;
|
||||
const ChildName: string; AClearCache: boolean);
|
||||
// if there is a DefineTemplate with the same name then replace it
|
||||
// else add as last
|
||||
var OldDefineTemplate: TDefineTemplate;
|
||||
@ -6016,9 +6016,9 @@ begin
|
||||
if (ChildName='') or (ParentTemplate=nil) then exit;
|
||||
OldDefineTemplate:=ParentTemplate.FindChildByName(ChildName);
|
||||
if OldDefineTemplate<>nil then begin
|
||||
if not OldDefineTemplate.IsEqual(NewDefineTemplate,true,false) then begin
|
||||
if AClearCache
|
||||
and not OldDefineTemplate.IsEqual(NewDefineTemplate,true,false) then
|
||||
ClearCache;
|
||||
end;
|
||||
if NewDefineTemplate<>nil then
|
||||
NewDefineTemplate.InsertBehind(OldDefineTemplate);
|
||||
if OldDefineTemplate=FFirstDefineTemplate then
|
||||
@ -6026,7 +6026,8 @@ begin
|
||||
OldDefineTemplate.Unbind;
|
||||
OldDefineTemplate.Free;
|
||||
end else begin
|
||||
ClearCache;
|
||||
if AClearCache then
|
||||
ClearCache;
|
||||
ParentTemplate.AddChild(NewDefineTemplate);
|
||||
end;
|
||||
end;
|
||||
|
@ -648,10 +648,13 @@ end;
|
||||
procedure TExpressionEvaluator.RemoveDoubles(OnGetSameString: TOnGetSameString);
|
||||
var
|
||||
i: Integer;
|
||||
V: String;
|
||||
begin
|
||||
for i:=0 to FCount-1 do begin
|
||||
OnGetSameString(FNames[i]);
|
||||
OnGetSameString(FValues[i]);
|
||||
V:=FValues[i];
|
||||
if V<>'' then
|
||||
OnGetSameString(V);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -70,7 +70,6 @@ function CreateProjectTemplateWithID(const ProjectID: string): TDefineTemplate;
|
||||
// packages
|
||||
function FindPackagesTemplate: TDefineTemplate;
|
||||
function FindPackageTemplateWithID(const PkgID: string): TDefineTemplate;
|
||||
function CreatePackagesTemplate: TDefineTemplate;
|
||||
function CreatePackageTemplateWithID(const PkgID: string): TDefineTemplate;
|
||||
|
||||
// miscellaneous
|
||||
|
10
ide/main.pp
10
ide/main.pp
@ -5212,7 +5212,7 @@ begin
|
||||
UpdateCaption;
|
||||
if Assigned(ProjInspector) then
|
||||
ProjInspector.UpdateTitle;
|
||||
Project1.DefineTemplates.AllChanged;
|
||||
Project1.DefineTemplates.AllChanged(false);
|
||||
IncreaseCompilerParseStamp;
|
||||
|
||||
if Project1.UseAsDefault then
|
||||
@ -9785,8 +9785,8 @@ begin
|
||||
if FIDECodeToolsDefines=ctdNeedUpdate then begin
|
||||
FIDECodeToolsDefines:=ctdUpdating;
|
||||
if Project1<>nil then
|
||||
Project1.DefineTemplates.AllChanged;
|
||||
PkgBoss.RebuildDefineTemplates;
|
||||
Project1.DefineTemplates.AllChanged(false);
|
||||
PackageGraph.RebuildDefineTemplates;
|
||||
FIDECodeToolsDefines:=ctdReady;
|
||||
//DebugLn('TMainIDE.CodeToolBossPrepareTree CompilerGraphStamp=',dbgs(CompilerGraphStamp));
|
||||
{$IFDEF VerboseAddProjPkg}
|
||||
@ -9905,12 +9905,12 @@ end;
|
||||
|
||||
procedure TMainIDE.CompilerParseStampIncHandler;
|
||||
begin
|
||||
if FIDECodeToolsDefines=ctdUpdating then exit;
|
||||
if (FIDECodeToolsDefines=ctdUpdating) or (not FIDEStarted) then exit;
|
||||
{$IFDEF VerboseAddProjPkg}
|
||||
DebugLn(['TMainIDE.OnCompilerParseStampIncreased ']);
|
||||
{$ENDIF}
|
||||
FIDECodeToolsDefines:=ctdNeedUpdate;
|
||||
CodeToolBoss.DefineTree.ClearCache;
|
||||
//CodeToolBoss.DefineTree.ClearCache;
|
||||
end;
|
||||
|
||||
procedure TMainIDE.CodeToolBossScannerInit(Self: TCodeToolManager; Scanner: TLinkScanner);
|
||||
|
@ -564,7 +564,7 @@ type
|
||||
procedure FixTemplateOrder;
|
||||
protected
|
||||
procedure UpdateMain; override;
|
||||
procedure UpdateSrcDirIfDef; override;
|
||||
function UpdateSrcDirIfDef: Boolean; override;
|
||||
procedure UpdateSourceDirectories; override;
|
||||
procedure UpdateOutputDirectory; override;
|
||||
procedure UpdateDefinesForCustomDefines; override;
|
||||
@ -572,7 +572,7 @@ type
|
||||
public
|
||||
constructor Create(AOwner: IProjPack);
|
||||
destructor Destroy; override;
|
||||
procedure AllChanged; override;
|
||||
procedure AllChanged(AActivating: boolean); override;
|
||||
procedure UpdateGlobalValues;
|
||||
end;
|
||||
|
||||
@ -6476,9 +6476,9 @@ begin
|
||||
// ClearCache is here unnessary, because it is only a block
|
||||
end;
|
||||
|
||||
procedure TProjectDefineTemplates.UpdateSrcDirIfDef;
|
||||
function TProjectDefineTemplates.UpdateSrcDirIfDef: Boolean;
|
||||
// Returns the changed state
|
||||
var
|
||||
Changed: Boolean;
|
||||
NamespacesDefTempl: TDefineTemplate;
|
||||
UnitPathDefTempl: TDefineTemplate;
|
||||
IncPathDefTempl: TDefineTemplate;
|
||||
@ -6497,7 +6497,7 @@ begin
|
||||
FMain.AddChild(FSrcDirectories);
|
||||
end;
|
||||
|
||||
Changed:=false;
|
||||
Result:=false;
|
||||
IfValue:='defined(#ProjectSrcMark'+Owner.IDAsWord+')';
|
||||
if (Owner as TProject) = Project1 then
|
||||
IfValue:=IfValue+' or defined('+UseDefaultsFlagName+')';
|
||||
@ -6532,15 +6532,13 @@ begin
|
||||
da_Define);
|
||||
FSrcDirIf.AddChild(SrcPathDefTempl);
|
||||
|
||||
Changed:=true;
|
||||
Result:=true;
|
||||
end else begin
|
||||
if FSrcDirIf.Value<>IfValue then begin
|
||||
FSrcDirIf.Value:=IfValue;
|
||||
Changed:=true;
|
||||
Result:=true;
|
||||
end;
|
||||
end;
|
||||
if Changed then
|
||||
CodeToolBoss.DefineTree.ClearCache;
|
||||
end;
|
||||
|
||||
procedure TProjectDefineTemplates.UpdateOutputDirectory;
|
||||
@ -6576,7 +6574,7 @@ begin
|
||||
FOutputSrcPath.SetDefineOwner(Proj,false);
|
||||
FOutputSrcPath.SetFlags([dtfAutoGenerated],[],false);
|
||||
CodeToolBoss.DefineTree.ReplaceChild(FOutputDir,FOutputSrcPath,
|
||||
FOutputSrcPath.Name);
|
||||
FOutputSrcPath.Name, not (ptfLoading in FFlags));
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -6656,8 +6654,8 @@ begin
|
||||
// add directory
|
||||
FSrcDirectories.AddChild(SrcDirDefTempl);
|
||||
end;
|
||||
CodeToolBoss.DefineTree.ClearCache;
|
||||
|
||||
if not (ptfLoading in FFlags) then
|
||||
CodeToolBoss.DefineTree.ClearCache;
|
||||
finally
|
||||
NewSourceDirs.Free;
|
||||
end;
|
||||
@ -6667,14 +6665,12 @@ procedure TProjectDefineTemplates.UpdateDefinesForCustomDefines;
|
||||
var
|
||||
OptionsDefTempl: TDefineTemplate;
|
||||
NewCustomOptions: String;
|
||||
Changed: Boolean;
|
||||
begin
|
||||
if (not Owner.NeedsDefineTemplates) or (not Active) then exit;
|
||||
|
||||
// check if something has changed
|
||||
NewCustomOptions:=Owner.BaseCompilerOptions.GetOptionsForCTDefines;
|
||||
if (FLastCustomOptions=NewCustomOptions) then exit;
|
||||
Changed:=false;
|
||||
|
||||
FLastCustomOptions:=NewCustomOptions;
|
||||
OptionsDefTempl:=CodeToolBoss.DefinePool.CreateFPCCommandLineDefines(
|
||||
@ -6682,16 +6678,15 @@ begin
|
||||
if OptionsDefTempl=nil then begin
|
||||
// no custom options -> delete old template
|
||||
if FSrcDirIf<>nil then begin
|
||||
if FSrcDirIf.DeleteChild('Custom Options') then
|
||||
Changed:=true;
|
||||
if FSrcDirIf.DeleteChild('Custom Options') and not (ptfLoading in FFlags) then
|
||||
CodeToolBoss.DefineTree.ClearCache;
|
||||
end;
|
||||
end else begin
|
||||
UpdateSrcDirIfDef;
|
||||
FSrcDirIf.ReplaceChild(OptionsDefTempl);
|
||||
Changed:=true;
|
||||
if not (ptfLoading in FFlags) then
|
||||
CodeToolBoss.DefineTree.ClearCache;
|
||||
end;
|
||||
if Changed then
|
||||
CodeToolBoss.DefineTree.ClearCache;
|
||||
end;
|
||||
|
||||
procedure TProjectDefineTemplates.FixTemplateOrder;
|
||||
@ -6702,16 +6697,15 @@ end;
|
||||
|
||||
procedure TProjectDefineTemplates.ClearFlags;
|
||||
begin
|
||||
FFlags:=FFlags+[ptfFlagsChanged];
|
||||
FFlags:=FFlags+[ptfCustomDefinesChanged];
|
||||
end;
|
||||
|
||||
procedure TProjectDefineTemplates.AllChanged;
|
||||
procedure TProjectDefineTemplates.AllChanged(AActivating: boolean);
|
||||
begin
|
||||
UpdateSrcDirIfDef;
|
||||
SourceDirectoriesChanged;
|
||||
CustomDefinesChanged;
|
||||
UpdateGlobalValues;
|
||||
UpdateSrcDirIfDef;
|
||||
CodeToolBoss.DefineTree.ClearCache;
|
||||
end;
|
||||
|
||||
procedure TProjectDefineTemplates.UpdateGlobalValues;
|
||||
|
@ -3613,7 +3613,6 @@ begin
|
||||
MainBuildBoss.SetBuildTargetProject1(false);
|
||||
// (i.e. remove old project specific things and create new)
|
||||
IncreaseCompilerParseStamp;
|
||||
Project1.DefineTemplates.AllChanged;
|
||||
Project1.DefineTemplates.Active:=true;
|
||||
DebugBoss.Reset;
|
||||
finally
|
||||
@ -7448,7 +7447,6 @@ begin
|
||||
// load required packages
|
||||
PkgBoss.OpenProjectDependencies(Project1, MainIDE.IDEStarted);
|
||||
|
||||
Project1.DefineTemplates.AllChanged;
|
||||
//DebugLn('CompleteLoadingProjectInfo ',Project1.IDAsString);
|
||||
Project1.DefineTemplates.Active:=true;
|
||||
|
||||
|
@ -127,7 +127,6 @@ type
|
||||
): TModalResult; virtual; abstract;
|
||||
function CheckUserSearchPaths(aCompilerOptions: TBaseCompilerOptions): TModalResult; virtual; abstract;
|
||||
procedure DoShowPackageGraphPathList(PathList: TFPList); virtual; abstract;
|
||||
procedure RebuildDefineTemplates; virtual; abstract;
|
||||
procedure LazarusSrcDirChanged; virtual; abstract;
|
||||
|
||||
// package compilation
|
||||
|
@ -405,7 +405,7 @@ type
|
||||
private
|
||||
protected
|
||||
procedure UpdateMain; override;
|
||||
procedure UpdateSrcDirIfDef; override;
|
||||
function UpdateSrcDirIfDef: Boolean; override;
|
||||
procedure UpdateSourceDirectories; override;
|
||||
procedure UpdateOutputDirectory; override;
|
||||
procedure UpdateDefinesForCustomDefines; override;
|
||||
@ -413,7 +413,7 @@ type
|
||||
public
|
||||
constructor Create(AOwner: IProjPack);
|
||||
destructor Destroy; override;
|
||||
procedure AllChanged; override;
|
||||
procedure AllChanged(AActivating: boolean); override;
|
||||
end;
|
||||
|
||||
|
||||
@ -589,6 +589,7 @@ type
|
||||
procedure SetAutoInstall(AValue: TPackageInstallType); override;
|
||||
public
|
||||
constructor Create; override;
|
||||
constructor CreateAndClear;
|
||||
destructor Destroy; override;
|
||||
procedure AssignOptions(Source: TPersistent); override;
|
||||
// IDE options
|
||||
@ -742,7 +743,8 @@ type
|
||||
property FPDocPaths: string read FFPDocPaths write SetFPDocPaths;
|
||||
property FPDocPackageName: string read FFPDocPackageName write SetFPDocPackageName;
|
||||
property License: string read FLicense write SetLicense;
|
||||
property LPKSource: TCodeBuffer read FLPKSource write SetLPKSource;// see Missing, can be nil when file on disk was removed or point to a different codebuffer during rename
|
||||
// see Missing, can be nil when file on disk was removed or point to a different codebuffer during rename
|
||||
property LPKSource: TCodeBuffer read FLPKSource write SetLPKSource;
|
||||
property LPKSourceChangeStep: integer read FLPKSourceChangeStep write FLPKSourceChangeStep;
|
||||
property Macros: TTransferMacroList read FMacros;
|
||||
property MainUnit: TPkgFile read FMainUnit;
|
||||
@ -2626,10 +2628,15 @@ begin
|
||||
FDefineTemplates:=TLazPackageDefineTemplates.Create(Self);
|
||||
fPublishOptions:=TPublishPackageOptions.Create(Self);
|
||||
FProvides:=TStringList.Create;
|
||||
Clear;
|
||||
FUsageOptions.ParsedOpts.InvalidateParseOnChange:=true;
|
||||
end;
|
||||
|
||||
constructor TLazPackage.CreateAndClear;
|
||||
begin
|
||||
Create;
|
||||
Clear;
|
||||
end;
|
||||
|
||||
destructor TLazPackage.Destroy;
|
||||
begin
|
||||
Include(FFlags,lpfDestroying);
|
||||
@ -4348,8 +4355,7 @@ begin
|
||||
Result:=LazPackage.IDAsString;
|
||||
end;
|
||||
|
||||
function TPkgAdditionalCompilerOptions.
|
||||
GetBaseCompilerOptions: TBaseCompilerOptions;
|
||||
function TPkgAdditionalCompilerOptions.GetBaseCompilerOptions: TBaseCompilerOptions;
|
||||
begin
|
||||
Result:=LazPackage.CompilerOptions;
|
||||
end;
|
||||
@ -4374,13 +4380,14 @@ begin
|
||||
ptfCustomDefinesChanged];
|
||||
end;
|
||||
|
||||
procedure TLazPackageDefineTemplates.AllChanged;
|
||||
procedure TLazPackageDefineTemplates.AllChanged(AActivating: boolean);
|
||||
begin
|
||||
IDChanged;
|
||||
UpdateSrcDirIfDef;// always create the SrcDirIfDef for IDE add-ons
|
||||
if not AActivating then // Create the SrcDirIfDef for IDE add-ons
|
||||
UpdateSrcDirIfDef; // (Will be called from other methods during activation)
|
||||
SourceDirectoriesChanged;
|
||||
CustomDefinesChanged;
|
||||
OutputDirectoryChanged;
|
||||
CustomDefinesChanged;
|
||||
end;
|
||||
|
||||
procedure TLazPackageDefineTemplates.UpdateMain;
|
||||
@ -4397,9 +4404,8 @@ begin
|
||||
// ClearCache is here unnessary, because it is only a block
|
||||
end;
|
||||
|
||||
procedure TLazPackageDefineTemplates.UpdateSrcDirIfDef;
|
||||
function TLazPackageDefineTemplates.UpdateSrcDirIfDef: Boolean;
|
||||
var
|
||||
Changed: Boolean;
|
||||
NewVariable: String;
|
||||
UnitPathDefTempl: TDefineTemplate;
|
||||
IncPathDefTempl: TDefineTemplate;
|
||||
@ -4416,7 +4422,7 @@ begin
|
||||
da_Block);
|
||||
FMain.AddChild(FSrcDirectories);
|
||||
end;
|
||||
Changed:=false;
|
||||
Result:=false;
|
||||
if FSrcDirIf=nil then begin
|
||||
FSrcDirIf:=TDefineTemplate.Create('Source Directory Additions',
|
||||
'Additional defines for package source directories',
|
||||
@ -4433,8 +4439,7 @@ begin
|
||||
'#IncPath','$(#IncPath);$PkgIncPath('+Owner.IDAsString+')',
|
||||
da_Define);
|
||||
FSrcDirIf.AddChild(IncPathDefTempl);
|
||||
|
||||
Changed:=true;
|
||||
Result:=true;
|
||||
end else begin
|
||||
NewVariable:='#PkgSrcMark'+Owner.IDAsWord;
|
||||
if NewVariable<>FSrcDirIf.Variable then begin
|
||||
@ -4447,12 +4452,9 @@ begin
|
||||
IncPathDefTempl:=FSrcDirIf.FindChildByName('IncPath');
|
||||
if IncPathDefTempl<>nil then
|
||||
IncPathDefTempl.Value:='$(#IncPath);$PkgIncPath('+Owner.IDAsString+')';
|
||||
|
||||
Changed:=true;
|
||||
Result:=true;
|
||||
end;
|
||||
end;
|
||||
if Changed then
|
||||
CodeToolBoss.DefineTree.ClearCache;
|
||||
end;
|
||||
|
||||
procedure TLazPackageDefineTemplates.UpdateOutputDirectory;
|
||||
@ -4484,7 +4486,7 @@ begin
|
||||
FOutputSrcPath.SetDefineOwner(LazPackage,false);
|
||||
FOutputSrcPath.SetFlags([dtfAutoGenerated],[],false);
|
||||
CodeToolBoss.DefineTree.ReplaceChild(FOutputDir,FOutputSrcPath,
|
||||
FOutputSrcPath.Name);
|
||||
FOutputSrcPath.Name, not (ptfLoading in FFlags));
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -4528,8 +4530,7 @@ begin
|
||||
// build source directory define templates
|
||||
FreeAndNil(fLastSourceDirectories);
|
||||
fLastSourceDirectories:=SearchPathToList(CurUnitPath);
|
||||
if (fLastSourceDirectories.Count>0)
|
||||
and ((FSrcDirIf=nil) or IDHasChanged) then
|
||||
if (fLastSourceDirectories.Count>0) and ((FSrcDirIf=nil) or IDHasChanged) then
|
||||
UpdateSrcDirIfDef;
|
||||
for i:=0 to fLastSourceDirectories.Count-1 do begin
|
||||
// create directory template
|
||||
@ -4547,7 +4548,8 @@ begin
|
||||
// add directory
|
||||
FSrcDirectories.AddChild(SrcDirDefTempl);
|
||||
end;
|
||||
CodeToolBoss.DefineTree.ClearCache;
|
||||
if not (ptfLoading in FFlags) then
|
||||
CodeToolBoss.DefineTree.ClearCache;
|
||||
end;
|
||||
|
||||
procedure TLazPackageDefineTemplates.UpdateDefinesForCustomDefines;
|
||||
@ -4567,13 +4569,12 @@ begin
|
||||
if OptionsDefTempl=nil then begin
|
||||
// no custom options -> delete old template
|
||||
if FSrcDirIf<>nil then begin
|
||||
if FSrcDirIf.DeleteChild('Custom Options') then
|
||||
if FSrcDirIf.DeleteChild('Custom Options') and not (ptfLoading in FFlags) then
|
||||
CodeToolBoss.DefineTree.ClearCache;
|
||||
end;
|
||||
end else begin
|
||||
UpdateSrcDirIfDef;
|
||||
FSrcDirIf.ReplaceChild(OptionsDefTempl);
|
||||
CodeToolBoss.DefineTree.ClearCache;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -974,6 +974,7 @@ begin
|
||||
PkgLink.LPKFileDateValid:=true;
|
||||
XMLConfig:=TXMLConfig.Create(nil);
|
||||
NewPackage:=TLazPackage.Create;
|
||||
NewPackage.BeginUpdate;
|
||||
NewPackage.Filename:=AFilename;
|
||||
NewPackage.OnModifySilently := @PkgModify;
|
||||
Result:=LoadXMLConfigFromCodeBuffer(AFilename,XMLConfig,
|
||||
@ -1007,6 +1008,8 @@ begin
|
||||
else
|
||||
ReplacePackage(OldPackage,NewPackage);
|
||||
finally
|
||||
if Assigned(NewPackage) then
|
||||
NewPackage.EndUpdate;
|
||||
if Result<>mrOk then
|
||||
NewPackage.Free;
|
||||
EndUpdate;
|
||||
@ -1199,7 +1202,7 @@ var
|
||||
i: Integer;
|
||||
begin
|
||||
for i:=0 to Count-1 do
|
||||
Packages[i].DefineTemplates.AllChanged;
|
||||
Packages[i].DefineTemplates.AllChanged(false);
|
||||
end;
|
||||
|
||||
function TLazPackageGraph.MacroFunctionPkgDir(const s: string;
|
||||
@ -1826,7 +1829,7 @@ end;
|
||||
function TLazPackageGraph.CreateNewPackage(const Prefix: string): TLazPackage;
|
||||
begin
|
||||
BeginUpdate(true);
|
||||
Result:=TLazPackage.Create;
|
||||
Result:=TLazPackage.CreateAndClear;
|
||||
Result.OnModifySilently:=@PkgModify;
|
||||
Result.Name:=CreateUniquePkgName(Prefix,nil);
|
||||
AddPackage(Result);
|
||||
@ -2039,7 +2042,7 @@ end;
|
||||
|
||||
function TLazPackageGraph.CreateDefaultPackage: TLazPackage;
|
||||
begin
|
||||
Result:=TLazPackage.Create;
|
||||
Result:=TLazPackage.CreateAndClear;
|
||||
with Result do begin
|
||||
Missing:=true;
|
||||
UserReadOnly:=true;
|
||||
@ -6067,7 +6070,7 @@ begin
|
||||
// a valid lpk file of the installed package can not be found
|
||||
IsBasePkg:=IsStaticBasePackage(Dependency.PackageName);
|
||||
// -> create a broken package
|
||||
BrokenPackage:=TLazPackage.Create;
|
||||
BrokenPackage:=TLazPackage.CreateAndClear;
|
||||
with BrokenPackage do begin
|
||||
BeginUpdate;
|
||||
Missing:=true;
|
||||
|
@ -252,7 +252,6 @@ type
|
||||
procedure DoShowPackageGraph(Show: boolean);
|
||||
procedure DoShowPackageGraphPathList(PathList: TFPList); override;
|
||||
function CheckUserSearchPaths(aCompilerOptions: TBaseCompilerOptions): TModalResult; override;
|
||||
procedure RebuildDefineTemplates; override;
|
||||
procedure LazarusSrcDirChanged; override;
|
||||
function GetPackageCount: integer; override;
|
||||
function GetPackages(Index: integer): TIDEPackage; override;
|
||||
@ -3974,11 +3973,6 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TPkgManager.RebuildDefineTemplates;
|
||||
begin
|
||||
PackageGraph.RebuildDefineTemplates;
|
||||
end;
|
||||
|
||||
procedure TPkgManager.LazarusSrcDirChanged;
|
||||
const
|
||||
LazDirMacro = '$(LazarusDir)';
|
||||
|
@ -11,6 +11,8 @@ uses
|
||||
LazTracer, FileReferenceList,
|
||||
// Codetools
|
||||
DefineTemplates, CodeToolManager,
|
||||
// IdeIntf
|
||||
LazIDEIntf,
|
||||
// IDE
|
||||
CompilerOptions;
|
||||
|
||||
@ -44,8 +46,8 @@ type
|
||||
{ TProjPackDefineTemplates }
|
||||
|
||||
TProjPackDefineTemplatesFlag = (
|
||||
ptfLoading,
|
||||
ptfIsPackageTemplate,
|
||||
ptfFlagsChanged,
|
||||
ptfIDChanged,
|
||||
ptfSourceDirsChanged,
|
||||
ptfOutputDirChanged,
|
||||
@ -56,6 +58,7 @@ type
|
||||
TProjPackDefineTemplates = class
|
||||
private
|
||||
FOwner: IProjPack;
|
||||
procedure InternalIDChanged;
|
||||
protected
|
||||
FActive: boolean;
|
||||
FSrcDirectories: TDefineTemplate;
|
||||
@ -73,7 +76,7 @@ type
|
||||
fLastUnitPath: string;
|
||||
procedure SetActive(const AValue: boolean);
|
||||
procedure UpdateMain; virtual; abstract;
|
||||
procedure UpdateSrcDirIfDef; virtual; abstract;
|
||||
function UpdateSrcDirIfDef: Boolean; virtual; abstract;
|
||||
procedure UpdateSourceDirectories; virtual; abstract;
|
||||
procedure UpdateOutputDirectory; virtual; abstract;
|
||||
procedure UpdateDefinesForCustomDefines; virtual; abstract;
|
||||
@ -84,11 +87,11 @@ type
|
||||
procedure Clear;
|
||||
procedure BeginUpdate;
|
||||
procedure EndUpdate;
|
||||
procedure AllChanged; virtual; abstract;
|
||||
procedure AllChanged(AActivating: boolean); virtual; abstract;
|
||||
procedure IDChanged;
|
||||
procedure SourceDirectoriesChanged;// a source directory was added/deleted
|
||||
procedure CustomDefinesChanged; // the defines of the source dirs changed
|
||||
procedure OutputDirectoryChanged;// the path or the defines of the output dir changed
|
||||
procedure CustomDefinesChanged; // the defines of the source dirs changed
|
||||
public
|
||||
property Owner: IProjPack read FOwner;
|
||||
property Main: TDefineTemplate read FMain;
|
||||
@ -145,13 +148,15 @@ begin
|
||||
if FUpdateLock=0 then RaiseGDBException('TProjPackDefineTemplates.EndUpdate');
|
||||
dec(FUpdateLock);
|
||||
if FUpdateLock=0 then begin
|
||||
if ptfIsPackageTemplate in FFlags then begin
|
||||
if ptfIDChanged in FFlags then IDChanged;
|
||||
end;
|
||||
if ptfFlagsChanged in FFlags then CustomDefinesChanged;
|
||||
if not LazarusIDE.IDEStarted then
|
||||
Include(FFlags, ptfLoading);
|
||||
if FFlags * [ptfIsPackageTemplate,ptfIDChanged] // AND
|
||||
= [ptfIsPackageTemplate,ptfIDChanged] then
|
||||
InternalIDChanged;
|
||||
if ptfSourceDirsChanged in FFlags then SourceDirectoriesChanged;
|
||||
if ptfOutputDirChanged in FFlags then OutputDirectoryChanged;
|
||||
if ptfCustomDefinesChanged in FFlags then CustomDefinesChanged;
|
||||
Exclude(FFlags, ptfLoading);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -160,22 +165,30 @@ begin
|
||||
if FActive=AValue then exit;
|
||||
FActive:=AValue;
|
||||
if FActive then
|
||||
AllChanged
|
||||
AllChanged(true)
|
||||
else
|
||||
Clear;
|
||||
end;
|
||||
|
||||
procedure TProjPackDefineTemplates.InternalIDChanged;
|
||||
// Called only from EndUpdate.
|
||||
begin
|
||||
Exclude(FFlags,ptfIDChanged);
|
||||
UpdateMain;
|
||||
end;
|
||||
|
||||
procedure TProjPackDefineTemplates.IDChanged;
|
||||
begin
|
||||
if FUpdateLock>0 then begin
|
||||
Include(FFlags,ptfIDChanged);
|
||||
FFlags:=FFlags+[ptfIDChanged, ptfSourceDirsChanged, ptfOutputDirChanged,
|
||||
ptfCustomDefinesChanged];
|
||||
exit;
|
||||
end;
|
||||
Exclude(FFlags,ptfIDChanged);
|
||||
UpdateMain;
|
||||
UpdateOutputDirectory;
|
||||
UpdateSourceDirectories;
|
||||
UpdateDefinesForCustomDefines;
|
||||
SourceDirectoriesChanged;
|
||||
OutputDirectoryChanged;
|
||||
CustomDefinesChanged;
|
||||
end;
|
||||
|
||||
procedure TProjPackDefineTemplates.SourceDirectoriesChanged;
|
||||
@ -186,7 +199,6 @@ begin
|
||||
end;
|
||||
Exclude(FFlags,ptfSourceDirsChanged);
|
||||
UpdateSourceDirectories;
|
||||
CodeToolBoss.DefineTree.ClearCache;
|
||||
end;
|
||||
|
||||
procedure TProjPackDefineTemplates.OutputDirectoryChanged;
|
||||
@ -197,7 +209,6 @@ begin
|
||||
end;
|
||||
Exclude(FFlags,ptfOutputDirChanged);
|
||||
UpdateOutputDirectory;
|
||||
CodeToolBoss.DefineTree.ClearCache;
|
||||
end;
|
||||
|
||||
procedure TProjPackDefineTemplates.CustomDefinesChanged;
|
||||
@ -208,8 +219,6 @@ begin
|
||||
end;
|
||||
Exclude(FFlags,ptfCustomDefinesChanged);
|
||||
UpdateDefinesForCustomDefines; // maybe custom defines changed
|
||||
if ptfIsPackageTemplate in FFlags then
|
||||
CodeToolBoss.DefineTree.ClearCache;
|
||||
end;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user