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