mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-02 06:39:36 +01:00
IdeIntf: Add base class TPkgDependencyBase to new unit PackageDependencyIntf.
git-svn-id: trunk@54404 -
This commit is contained in:
parent
6b6acd5124
commit
f4df80d90f
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -1869,6 +1869,7 @@ components/ideintf/objectinspector.lfm svneol=native#text/plain
|
||||
components/ideintf/objectinspector.pp svneol=native#text/pascal
|
||||
components/ideintf/objinspstrconsts.pas svneol=native#text/pascal
|
||||
components/ideintf/oifavoriteproperties.pas svneol=native#text/pascal
|
||||
components/ideintf/packagedependencyintf.pas svneol=native#text/pascal
|
||||
components/ideintf/packageintf.pas svneol=native#text/pascal
|
||||
components/ideintf/pagespropeditdlg.lfm svneol=native#text/plain
|
||||
components/ideintf/pagespropeditdlg.pas svneol=native#text/pascal
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
<Description Value="IDEIntf - the interface units for the Lazarus IDE"/>
|
||||
<License Value="Modified LGPL2"/>
|
||||
<Version Major="1"/>
|
||||
<Files Count="81">
|
||||
<Files Count="82">
|
||||
<Item1>
|
||||
<Filename Value="actionseditor.pas"/>
|
||||
<UnitName Value="ActionsEditor"/>
|
||||
@ -346,6 +346,10 @@
|
||||
<Filename Value="changeparentdlg.lfm"/>
|
||||
<Type Value="LFM"/>
|
||||
</Item81>
|
||||
<Item82>
|
||||
<Filename Value="packagedependencyintf.pas"/>
|
||||
<UnitName Value="PackageDependencyIntf"/>
|
||||
</Item82>
|
||||
</Files>
|
||||
<LazDoc Paths="docs"/>
|
||||
<i18n>
|
||||
|
||||
@ -22,7 +22,7 @@ uses
|
||||
ProjectIntf, ProjectResourcesIntf, PropEdits, PropEditUtils, SrcEditorIntf,
|
||||
StatusBarPropEdit, StringsPropEditDlg, TextTools, TreeViewPropEdit,
|
||||
UnitResources, ProjPackIntf, DBGridColumnsPropEditForm, ToolBarIntf,
|
||||
ChangeParentDlg, LazarusPackageIntf;
|
||||
ChangeParentDlg, PackageDependencyIntf, LazarusPackageIntf;
|
||||
|
||||
implementation
|
||||
|
||||
|
||||
233
components/ideintf/packagedependencyintf.pas
Normal file
233
components/ideintf/packagedependencyintf.pas
Normal file
@ -0,0 +1,233 @@
|
||||
unit PackageDependencyIntf;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils;
|
||||
|
||||
type
|
||||
|
||||
{ TPkgVersion }
|
||||
|
||||
TPkgVersionValid = (
|
||||
pvtNone,
|
||||
pvtMajor,
|
||||
pvtMinor,
|
||||
pvtRelease,
|
||||
pvtBuild
|
||||
);
|
||||
|
||||
TPkgVersion = class
|
||||
public
|
||||
Major: integer;
|
||||
Minor: integer;
|
||||
Release: integer;
|
||||
Build: integer;
|
||||
Valid: TPkgVersionValid;
|
||||
OnChange: TNotifyEvent;
|
||||
procedure Clear;
|
||||
function Compare(Version2: TPkgVersion): integer;
|
||||
function CompareMask(ExactVersion: TPkgVersion): integer;
|
||||
procedure Assign(Source: TPkgVersion);
|
||||
function AsString: string;
|
||||
function AsWord: string;
|
||||
function ReadString(const s: string): boolean;
|
||||
procedure SetValues(NewMajor, NewMinor, NewRelease, NewBuild: integer;
|
||||
NewValid: TPkgVersionValid = pvtBuild);
|
||||
function VersionBound(v: integer): integer;
|
||||
end;
|
||||
|
||||
{ PkgDependency flags }
|
||||
|
||||
TPkgDependencyFlag = (
|
||||
pdfMinVersion, // >= MinVersion
|
||||
pdfMaxVersion // <= MaxVersion
|
||||
);
|
||||
TPkgDependencyFlags = set of TPkgDependencyFlag;
|
||||
|
||||
{ TPkgDependencyBase }
|
||||
|
||||
TPkgDependencyBase = class
|
||||
private
|
||||
protected
|
||||
FFlags: TPkgDependencyFlags;
|
||||
FMaxVersion: TPkgVersion;
|
||||
FMinVersion: TPkgVersion;
|
||||
FPackageName: string;
|
||||
FRemoved: boolean;
|
||||
//FRequiredPackage: TIDEPackage;
|
||||
procedure SetPackageName(const AValue: string); virtual; abstract;
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
procedure Clear; virtual;
|
||||
// API for iterating dependencies.
|
||||
function NextUsedByDependency: TPkgDependencyBase; virtual; abstract;
|
||||
function PrevUsedByDependency: TPkgDependencyBase; virtual; abstract;
|
||||
function NextRequiresDependency: TPkgDependencyBase; virtual; abstract;
|
||||
function PrevRequiresDependency: TPkgDependencyBase; virtual; abstract;
|
||||
// API for adding / removing dependencies.
|
||||
procedure AddRequiresDep(var FirstDependency: TPkgDependencyBase); virtual; abstract;
|
||||
procedure AddUsedByDep(var FirstDependency: TPkgDependencyBase); virtual; abstract;
|
||||
procedure RemoveRequiresDep(var FirstDependency: TPkgDependencyBase); virtual; abstract;
|
||||
procedure RemoveUsedByDep(var FirstDependency: TPkgDependencyBase); virtual; abstract;
|
||||
public
|
||||
property Flags: TPkgDependencyFlags read FFlags write FFlags;
|
||||
property MinVersion: TPkgVersion read FMinVersion write FMinVersion;
|
||||
property MaxVersion: TPkgVersion read FMaxVersion write FMaxVersion;
|
||||
property PackageName: string read FPackageName write SetPackageName;
|
||||
property Removed: boolean read FRemoved write FRemoved;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{ TPkgVersion }
|
||||
|
||||
procedure TPkgVersion.Clear;
|
||||
begin
|
||||
SetValues(0,0,0,0,pvtBuild);
|
||||
end;
|
||||
|
||||
function TPkgVersion.Compare(Version2: TPkgVersion): integer;
|
||||
begin
|
||||
Result:=Major-Version2.Major;
|
||||
if Result<>0 then exit;
|
||||
Result:=Minor-Version2.Minor;
|
||||
if Result<>0 then exit;
|
||||
Result:=Release-Version2.Release;
|
||||
if Result<>0 then exit;
|
||||
Result:=Build-Version2.Build;
|
||||
end;
|
||||
|
||||
function TPkgVersion.CompareMask(ExactVersion: TPkgVersion): integer;
|
||||
begin
|
||||
if Valid=pvtNone then exit(0);
|
||||
Result:=Major-ExactVersion.Major;
|
||||
if Result<>0 then exit;
|
||||
if Valid=pvtMajor then exit;
|
||||
Result:=Minor-ExactVersion.Minor;
|
||||
if Result<>0 then exit;
|
||||
if Valid=pvtMinor then exit;
|
||||
Result:=Release-ExactVersion.Release;
|
||||
if Result<>0 then exit;
|
||||
if Valid=pvtRelease then exit;
|
||||
Result:=Build-ExactVersion.Build;
|
||||
end;
|
||||
|
||||
procedure TPkgVersion.Assign(Source: TPkgVersion);
|
||||
begin
|
||||
SetValues(Source.Major,Source.Minor,Source.Release,Source.Build,Source.Valid);
|
||||
end;
|
||||
|
||||
function TPkgVersion.AsString: string;
|
||||
begin
|
||||
Result:=IntToStr(Major)+'.'+IntToStr(Minor);
|
||||
if (Build<>0) then
|
||||
Result:=Result+'.'+IntToStr(Release)+'.'+IntToStr(Build)
|
||||
else if (Release<>0) then
|
||||
Result:=Result+'.'+IntToStr(Release)
|
||||
end;
|
||||
|
||||
function TPkgVersion.AsWord: string;
|
||||
begin
|
||||
Result:=IntToStr(Major)+'_'+IntToStr(Minor);
|
||||
if (Build<>0) then
|
||||
Result:=Result+'_'+IntToStr(Release)+'_'+IntToStr(Build)
|
||||
else if (Release<>0) then
|
||||
Result:=Result+'_'+IntToStr(Release)
|
||||
end;
|
||||
|
||||
function TPkgVersion.ReadString(const s: string): boolean;
|
||||
var
|
||||
ints: array[1..4] of integer;
|
||||
i: integer;
|
||||
CurPos: Integer;
|
||||
StartPos: Integer;
|
||||
NewValid: TPkgVersionValid;
|
||||
begin
|
||||
Result:=false;
|
||||
CurPos:=1;
|
||||
NewValid:=pvtNone;
|
||||
for i:=1 to 4 do begin
|
||||
ints[i]:=0;
|
||||
if CurPos<length(s) then begin
|
||||
if i>Low(ints) then begin
|
||||
// read point
|
||||
if s[CurPos]<>'.' then exit;
|
||||
inc(CurPos);
|
||||
end;
|
||||
// read int
|
||||
StartPos:=CurPos;
|
||||
while (CurPos<=length(s)) and (i<=9999)
|
||||
and (s[CurPos] in ['0'..'9']) do begin
|
||||
ints[i]:=ints[i]*10+ord(s[CurPos])-ord('0');
|
||||
inc(CurPos);
|
||||
end;
|
||||
if (StartPos=CurPos) then exit;
|
||||
NewValid:=succ(NewValid);
|
||||
end;
|
||||
end;
|
||||
if CurPos<=length(s) then exit;
|
||||
SetValues(ints[1],ints[2],ints[3],ints[4],NewValid);
|
||||
|
||||
Result:=true;
|
||||
end;
|
||||
|
||||
procedure TPkgVersion.SetValues(NewMajor, NewMinor, NewRelease,
|
||||
NewBuild: integer; NewValid: TPkgVersionValid);
|
||||
begin
|
||||
NewMajor:=VersionBound(NewMajor);
|
||||
NewMinor:=VersionBound(NewMinor);
|
||||
NewRelease:=VersionBound(NewRelease);
|
||||
NewBuild:=VersionBound(NewBuild);
|
||||
if (NewMajor=Major) and (NewMinor=Minor) and (NewRelease=Release)
|
||||
and (NewBuild=Build) and (NewValid=Valid) then exit;
|
||||
Major:=NewMajor;
|
||||
Minor:=NewMinor;
|
||||
Release:=NewRelease;
|
||||
Build:=NewBuild;
|
||||
Valid:=NewValid;
|
||||
if Assigned(OnChange) then OnChange(Self);
|
||||
end;
|
||||
|
||||
function TPkgVersion.VersionBound(v: integer): integer;
|
||||
begin
|
||||
if v>9999 then
|
||||
Result:=9999
|
||||
else if v<0 then
|
||||
Result:=0
|
||||
else
|
||||
Result:=v;
|
||||
end;
|
||||
|
||||
{ TLazPackageID }
|
||||
|
||||
constructor TPkgDependencyBase.Create;
|
||||
begin
|
||||
inherited Create;
|
||||
MinVersion:=TPkgVersion.Create;
|
||||
MaxVersion:=TPkgVersion.Create;
|
||||
Clear;
|
||||
end;
|
||||
|
||||
destructor TPkgDependencyBase.Destroy;
|
||||
begin
|
||||
PackageName:='';
|
||||
FreeAndNil(fMinVersion);
|
||||
FreeAndNil(fMaxVersion);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TPkgDependencyBase.Clear;
|
||||
begin
|
||||
PackageName:='';
|
||||
FRemoved:=false;
|
||||
FFlags:=[];
|
||||
FMaxVersion.Clear;
|
||||
FMinVersion.Clear;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
@ -16,8 +16,13 @@ unit PackageIntf;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, contnrs, LCLProc, Forms, LazConfigStorage,
|
||||
NewItemIntf, ProjPackIntf, IDEOptionsIntf;
|
||||
Classes, SysUtils, contnrs,
|
||||
// LCL
|
||||
LCLProc, Forms,
|
||||
// LazUtils
|
||||
LazConfigStorage,
|
||||
// IdeIntf
|
||||
NewItemIntf, ProjPackIntf, PackageDependencyIntf;
|
||||
|
||||
const
|
||||
PkgDescGroupName = 'Package';
|
||||
@ -42,36 +47,6 @@ const
|
||||
PkgFileRealUnitTypes = [pftUnit,pftMainUnit];
|
||||
|
||||
type
|
||||
{ TPkgVersion }
|
||||
|
||||
TPkgVersionValid = (
|
||||
pvtNone,
|
||||
pvtMajor,
|
||||
pvtMinor,
|
||||
pvtRelease,
|
||||
pvtBuild
|
||||
);
|
||||
|
||||
TPkgVersion = class
|
||||
public
|
||||
Major: integer;
|
||||
Minor: integer;
|
||||
Release: integer;
|
||||
Build: integer;
|
||||
Valid: TPkgVersionValid;
|
||||
OnChange: TNotifyEvent;
|
||||
procedure Clear;
|
||||
function Compare(Version2: TPkgVersion): integer;
|
||||
function CompareMask(ExactVersion: TPkgVersion): integer;
|
||||
procedure Assign(Source: TPkgVersion);
|
||||
function AsString: string;
|
||||
function AsWord: string;
|
||||
function ReadString(const s: string): boolean;
|
||||
procedure SetValues(NewMajor, NewMinor, NewRelease, NewBuild: integer;
|
||||
NewValid: TPkgVersionValid = pvtBuild);
|
||||
function VersionBound(v: integer): integer;
|
||||
end;
|
||||
|
||||
TIDEPackage = class;
|
||||
|
||||
{ TLazPackageFile }
|
||||
@ -96,6 +71,32 @@ type
|
||||
property InUses: boolean read GetInUses write SetInUses; // added to uses section of package
|
||||
end;
|
||||
|
||||
{ PkgDependency flags }
|
||||
|
||||
TLoadPackageResult = (
|
||||
lprUndefined,
|
||||
lprSuccess,
|
||||
lprNotFound,
|
||||
lprLoadError
|
||||
);
|
||||
|
||||
{ TPkgDependencyID }
|
||||
|
||||
TPkgDependencyID = class(TPkgDependencyBase)
|
||||
private
|
||||
procedure SetRequiredPackage(const AValue: TIDEPackage);
|
||||
protected
|
||||
FLoadPackageResult: TLoadPackageResult;
|
||||
FRequiredPackage: TIDEPackage;
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
procedure Clear; override;
|
||||
public
|
||||
property LoadPackageResult: TLoadPackageResult read FLoadPackageResult write FLoadPackageResult;
|
||||
property RequiredIDEPackage: TIDEPackage read FRequiredPackage write SetRequiredPackage;
|
||||
end;
|
||||
|
||||
{ TLazPackageID }
|
||||
|
||||
TLazPackageID = class(TIDEProjPackBase)
|
||||
@ -135,9 +136,9 @@ type
|
||||
TIDEPackage = class(TLazPackageID)
|
||||
protected
|
||||
FAutoInstall: TPackageInstallType;
|
||||
FChangeStamp: integer;
|
||||
FCustomOptions: TConfigStorage;
|
||||
FFilename: string;
|
||||
FChangeStamp: integer;
|
||||
function GetDirectoryExpanded: string; virtual; abstract;
|
||||
function GetFileCount: integer; virtual; abstract;
|
||||
function GetPkgFiles(Index: integer): TLazPackageFile; virtual; abstract;
|
||||
@ -154,16 +155,18 @@ type
|
||||
constructor Create; override;
|
||||
destructor Destroy; override;
|
||||
procedure ClearCustomOptions;
|
||||
// used by dependencies
|
||||
procedure AddUsedByDependency(Dependency: TPkgDependencyBase); virtual; abstract;
|
||||
procedure RemoveUsedByDependency(Dependency: TPkgDependencyBase); virtual; abstract;
|
||||
public
|
||||
property AutoInstall: TPackageInstallType read FAutoInstall
|
||||
write SetAutoInstall;
|
||||
property AutoInstall: TPackageInstallType read FAutoInstall write SetAutoInstall;
|
||||
property Filename: string read FFilename write SetFilename;//the .lpk filename
|
||||
property Modified: boolean read GetModified write SetModified;
|
||||
property DirectoryExpanded: string read GetDirectoryExpanded;
|
||||
property CustomOptions: TConfigStorage read FCustomOptions;
|
||||
property ChangeStamp: integer read FChangeStamp;
|
||||
property CustomOptions: TConfigStorage read FCustomOptions;
|
||||
property DirectoryExpanded: string read GetDirectoryExpanded;
|
||||
property FileCount: integer read GetFileCount;
|
||||
property Files[Index: integer]: TLazPackageFile read GetPkgFiles;
|
||||
property Modified: boolean read GetModified write SetModified;
|
||||
property RemovedFilesCount: integer read GetRemovedCount;
|
||||
property RemovedFiles[Index: integer]: TLazPackageFile read GetRemovedPkgFiles;
|
||||
end;
|
||||
@ -474,123 +477,36 @@ begin
|
||||
FDescriptor:=TNewItemPackage(Source).Descriptor;
|
||||
end;
|
||||
|
||||
{ TPkgVersion }
|
||||
{ TLazPackageID }
|
||||
|
||||
procedure TPkgVersion.Clear;
|
||||
constructor TPkgDependencyID.Create;
|
||||
begin
|
||||
SetValues(0,0,0,0,pvtBuild);
|
||||
inherited Create;
|
||||
end;
|
||||
|
||||
function TPkgVersion.Compare(Version2: TPkgVersion): integer;
|
||||
destructor TPkgDependencyID.Destroy;
|
||||
begin
|
||||
Result:=Major-Version2.Major;
|
||||
if Result<>0 then exit;
|
||||
Result:=Minor-Version2.Minor;
|
||||
if Result<>0 then exit;
|
||||
Result:=Release-Version2.Release;
|
||||
if Result<>0 then exit;
|
||||
Result:=Build-Version2.Build;
|
||||
RequiredIDEPackage:=nil;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
function TPkgVersion.CompareMask(ExactVersion: TPkgVersion): integer;
|
||||
procedure TPkgDependencyID.Clear;
|
||||
begin
|
||||
if Valid=pvtNone then exit(0);
|
||||
Result:=Major-ExactVersion.Major;
|
||||
if Result<>0 then exit;
|
||||
if Valid=pvtMajor then exit;
|
||||
Result:=Minor-ExactVersion.Minor;
|
||||
if Result<>0 then exit;
|
||||
if Valid=pvtMinor then exit;
|
||||
Result:=Release-ExactVersion.Release;
|
||||
if Result<>0 then exit;
|
||||
if Valid=pvtRelease then exit;
|
||||
Result:=Build-ExactVersion.Build;
|
||||
inherited Clear;
|
||||
RequiredIDEPackage:=nil;
|
||||
end;
|
||||
|
||||
procedure TPkgVersion.Assign(Source: TPkgVersion);
|
||||
begin
|
||||
SetValues(Source.Major,Source.Minor,Source.Release,Source.Build,Source.Valid);
|
||||
end;
|
||||
// Setters
|
||||
|
||||
function TPkgVersion.AsString: string;
|
||||
procedure TPkgDependencyID.SetRequiredPackage(const AValue: TIDEPackage);
|
||||
begin
|
||||
Result:=IntToStr(Major)+'.'+IntToStr(Minor);
|
||||
if (Build<>0) then
|
||||
Result:=Result+'.'+IntToStr(Release)+'.'+IntToStr(Build)
|
||||
else if (Release<>0) then
|
||||
Result:=Result+'.'+IntToStr(Release)
|
||||
end;
|
||||
|
||||
function TPkgVersion.AsWord: string;
|
||||
begin
|
||||
Result:=IntToStr(Major)+'_'+IntToStr(Minor);
|
||||
if (Build<>0) then
|
||||
Result:=Result+'_'+IntToStr(Release)+'_'+IntToStr(Build)
|
||||
else if (Release<>0) then
|
||||
Result:=Result+'_'+IntToStr(Release)
|
||||
end;
|
||||
|
||||
function TPkgVersion.ReadString(const s: string): boolean;
|
||||
var
|
||||
ints: array[1..4] of integer;
|
||||
i: integer;
|
||||
CurPos: Integer;
|
||||
StartPos: Integer;
|
||||
NewValid: TPkgVersionValid;
|
||||
begin
|
||||
Result:=false;
|
||||
CurPos:=1;
|
||||
NewValid:=pvtNone;
|
||||
for i:=1 to 4 do begin
|
||||
ints[i]:=0;
|
||||
if CurPos<length(s) then begin
|
||||
if i>Low(ints) then begin
|
||||
// read point
|
||||
if s[CurPos]<>'.' then exit;
|
||||
inc(CurPos);
|
||||
end;
|
||||
// read int
|
||||
StartPos:=CurPos;
|
||||
while (CurPos<=length(s)) and (i<=9999)
|
||||
and (s[CurPos] in ['0'..'9']) do begin
|
||||
ints[i]:=ints[i]*10+ord(s[CurPos])-ord('0');
|
||||
inc(CurPos);
|
||||
end;
|
||||
if (StartPos=CurPos) then exit;
|
||||
NewValid:=succ(NewValid);
|
||||
end;
|
||||
end;
|
||||
if CurPos<=length(s) then exit;
|
||||
SetValues(ints[1],ints[2],ints[3],ints[4],NewValid);
|
||||
|
||||
Result:=true;
|
||||
end;
|
||||
|
||||
procedure TPkgVersion.SetValues(NewMajor, NewMinor, NewRelease,
|
||||
NewBuild: integer; NewValid: TPkgVersionValid);
|
||||
begin
|
||||
NewMajor:=VersionBound(NewMajor);
|
||||
NewMinor:=VersionBound(NewMinor);
|
||||
NewRelease:=VersionBound(NewRelease);
|
||||
NewBuild:=VersionBound(NewBuild);
|
||||
if (NewMajor=Major) and (NewMinor=Minor) and (NewRelease=Release)
|
||||
and (NewBuild=Build) and (NewValid=Valid) then exit;
|
||||
Major:=NewMajor;
|
||||
Minor:=NewMinor;
|
||||
Release:=NewRelease;
|
||||
Build:=NewBuild;
|
||||
Valid:=NewValid;
|
||||
if Assigned(OnChange) then OnChange(Self);
|
||||
end;
|
||||
|
||||
function TPkgVersion.VersionBound(v: integer): integer;
|
||||
begin
|
||||
if v>9999 then
|
||||
Result:=9999
|
||||
else if v<0 then
|
||||
Result:=0
|
||||
else
|
||||
Result:=v;
|
||||
if FRequiredPackage=AValue then exit;
|
||||
if FRequiredPackage<>nil then
|
||||
FRequiredPackage.RemoveUsedByDependency(Self);
|
||||
FLoadPackageResult:=lprUndefined;
|
||||
FRequiredPackage:=AValue;
|
||||
if FRequiredPackage<>nil then
|
||||
FRequiredPackage.AddUsedByDependency(Self);
|
||||
end;
|
||||
|
||||
{ TLazPackageID }
|
||||
|
||||
@ -11,7 +11,7 @@ uses
|
||||
// LazControls
|
||||
ListFilterEdit,
|
||||
// IDEIntf
|
||||
IDEWindowIntf, PackageIntf, IDEDialogs,
|
||||
IDEWindowIntf, PackageDependencyIntf, PackageIntf, IDEDialogs,
|
||||
// IDE
|
||||
LazarusIDEStrConsts, PackageDefs, PackageSystem, ProjPackCommon, ProjPackChecks;
|
||||
|
||||
|
||||
@ -5,9 +5,13 @@ unit package_description_options;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, Forms, Dialogs, Controls, StdCtrls, Spin, LCLProc,
|
||||
PackageIntf, IDEOptionsIntf, LazarusIDEStrConsts, PackageDefs, PackageSystem,
|
||||
BrokenDependenciesDlg;
|
||||
Classes, SysUtils,
|
||||
// LCL
|
||||
Forms, Controls, StdCtrls, Spin, LCLProc,
|
||||
// IdeIntf
|
||||
PackageDependencyIntf, IDEOptionsIntf,
|
||||
// IDE
|
||||
LazarusIDEStrConsts, PackageDefs, PackageSystem, BrokenDependenciesDlg;
|
||||
|
||||
type
|
||||
|
||||
|
||||
@ -41,14 +41,14 @@ uses
|
||||
LCLType, LCLProc, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons,
|
||||
ExtCtrls, ComCtrls, ImgList, TreeFilterEdit,
|
||||
// Codetools
|
||||
KeywordFuncLists, BasicCodeTools,
|
||||
BasicCodeTools,
|
||||
// LazUtils
|
||||
FileUtil, LazFileUtils, LazUTF8, AvgLvlTree, Laz2_XMLCfg,
|
||||
LazFileUtils, AvgLvlTree, Laz2_XMLCfg,
|
||||
// IdeIntf
|
||||
PackageIntf, IDEImagesIntf, IDEHelpIntf, IDEDialogs, IDEWindowIntf,
|
||||
PackageDependencyIntf, PackageIntf, IDEImagesIntf, IDEHelpIntf, IDEDialogs, IDEWindowIntf,
|
||||
// IDE
|
||||
LazarusIDEStrConsts, EnvironmentOpts, InputHistory,
|
||||
LazConf, IDEProcs, PackageDefs, PackageSystem, PackageLinks, LPKCache;
|
||||
LazarusIDEStrConsts, InputHistory,
|
||||
LazConf, PackageDefs, PackageSystem, LPKCache;
|
||||
|
||||
type
|
||||
TOnCheckInstallPackageList =
|
||||
|
||||
@ -51,9 +51,14 @@ unit LPKCache;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, PackageLinks, PackageDefs, PackageSystem, PackageIntf,
|
||||
EnvironmentOpts, LCLProc, LazFileUtils, AvgLvlTree, Laz2_XMLCfg,
|
||||
LazLoggerBase, LazMethodList;
|
||||
Classes, SysUtils,
|
||||
LCLProc,
|
||||
// LazUtils
|
||||
LazFileUtils, AvgLvlTree, Laz2_XMLCfg, LazLoggerBase, LazMethodList,
|
||||
// IdeIntf
|
||||
PackageDependencyIntf, PackageIntf,
|
||||
// IDE
|
||||
EnvironmentOpts, PackageLinks, PackageDefs, PackageSystem;
|
||||
|
||||
type
|
||||
TLPKInfoState = (
|
||||
|
||||
@ -46,8 +46,8 @@ uses
|
||||
// LazUtils
|
||||
LazFileUtils, LazFileCache, LazUTF8,
|
||||
// IDEIntf
|
||||
PropEdits, LazIDEIntf, MacroIntf, MacroDefIntf, PackageIntf, IDEOptionsIntf,
|
||||
ProjPackIntf, IDEDialogs, ComponentReg,
|
||||
PropEdits, LazIDEIntf, MacroIntf, MacroDefIntf, IDEOptionsIntf,
|
||||
PackageDependencyIntf, PackageIntf, IDEDialogs, ComponentReg,
|
||||
// IDE
|
||||
EditDefineTree, CompilerOptions, CompOptsModes, IDEOptionDefs, ProjPackCommon,
|
||||
LazarusIDEStrConsts, IDEProcs, TransferMacros, FileReferenceList, PublishModule;
|
||||
@ -221,25 +221,12 @@ type
|
||||
|
||||
{ TPkgDependency }
|
||||
|
||||
TPkgDependencyFlag = (
|
||||
pdfMinVersion, // >= MinVersion
|
||||
pdfMaxVersion // <= MaxVersion
|
||||
);
|
||||
TPkgDependencyFlags = set of TPkgDependencyFlag;
|
||||
|
||||
TPkgMarkerFlag = (
|
||||
pmfVisited,
|
||||
pmfMarked
|
||||
);
|
||||
TPkgMarkerFlags = set of TPkgMarkerFlag;
|
||||
|
||||
TLoadPackageResult = (
|
||||
lprUndefined,
|
||||
lprSuccess,
|
||||
lprNotFound,
|
||||
lprLoadError
|
||||
);
|
||||
|
||||
TPkgDependencyList = (
|
||||
pdlRequires,
|
||||
pdlUsedBy
|
||||
@ -247,33 +234,23 @@ type
|
||||
|
||||
{ TPkgDependency }
|
||||
|
||||
TPkgDependency = class
|
||||
TPkgDependency = class(TPkgDependencyID)
|
||||
private
|
||||
FDefaultFilename: string;
|
||||
FFlags: TPkgDependencyFlags;
|
||||
FHoldPackage: boolean;
|
||||
FLoadPackageResult: TLoadPackageResult;
|
||||
FMarkerFlags: TPKgMarkerFlags;
|
||||
FOwner: TObject;
|
||||
FMaxVersion: TPkgVersion;
|
||||
FMinVersion: TPkgVersion;
|
||||
FPackageName: string;
|
||||
FPreferDefaultFilename: boolean;
|
||||
FRemoved: boolean;
|
||||
FRequiredPackage: TLazPackage;
|
||||
procedure SetFlags(const AValue: TPkgDependencyFlags);
|
||||
function GetRequiredPackage: TLazPackage;
|
||||
procedure SetHoldPackage(const AValue: boolean);
|
||||
procedure SetLoadPackageResult(const AValue: TLoadPackageResult);
|
||||
procedure SetMaxVersion(const AValue: TPkgVersion);
|
||||
procedure SetMinVersion(const AValue: TPkgVersion);
|
||||
procedure SetPackageName(const AValue: string);
|
||||
procedure SetRemoved(const AValue: boolean);
|
||||
procedure SetRequiredPackage(const AValue: TLazPackage);
|
||||
procedure SetRequiredPackage(AValue: TLazPackage);
|
||||
protected
|
||||
procedure SetPackageName(const AValue: string); override;
|
||||
public
|
||||
NextDependency, PrevDependency: array[TPkgDependencyList] of TPkgDependency;
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
procedure Clear;
|
||||
procedure Clear; override;
|
||||
procedure LoadFromXMLConfig(XMLConfig: TXMLConfig; const Path: string;
|
||||
FileVersion: integer);
|
||||
procedure SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string;
|
||||
@ -289,35 +266,36 @@ type
|
||||
function IsCompatible(Pkg: TLazPackageID): boolean;
|
||||
procedure MakeCompatible(const PkgName: string; const Version: TPkgVersion);
|
||||
function AsString(WithOwner: boolean = false; WithDefaults: boolean = false): string;
|
||||
function NextUsedByDependency: TPkgDependency;
|
||||
function PrevUsedByDependency: TPkgDependency;
|
||||
function NextRequiresDependency: TPkgDependency;
|
||||
function PrevRequiresDependency: TPkgDependency;
|
||||
// API for iterating dependencies.
|
||||
function NextUsedByDependency: TPkgDependency; override;
|
||||
function PrevUsedByDependency: TPkgDependency; override;
|
||||
function NextRequiresDependency: TPkgDependency; override;
|
||||
function PrevRequiresDependency: TPkgDependency; override;
|
||||
// API for adding / removing dependencies, defined in base class.
|
||||
procedure AddUsedByDep(var FirstDependency: TPkgDependencyBase); override;
|
||||
procedure RemoveUsedByDep(var FirstDependency: TPkgDependencyBase); override;
|
||||
procedure AddRequiresDep(var FirstDependency: TPkgDependencyBase); override;
|
||||
procedure RemoveRequiresDep(var FirstDependency: TPkgDependencyBase); override;
|
||||
// API using ListType.
|
||||
procedure AddToList(var FirstDependency: TPkgDependency;
|
||||
ListType: TPkgDependencyList);
|
||||
ListType: TPkgDependencyList);
|
||||
procedure AddToEndOfList(var LastDependency: TPkgDependency;
|
||||
ListType: TPkgDependencyList);
|
||||
ListType: TPkgDependencyList);
|
||||
procedure RemoveFromList(var FirstDependency: TPkgDependency;
|
||||
ListType: TPkgDependencyList);
|
||||
ListType: TPkgDependencyList);
|
||||
function MoveUpInList(var FirstDependency: TPkgDependency;
|
||||
ListType: TPkgDependencyList): Boolean;
|
||||
ListType: TPkgDependencyList): Boolean;
|
||||
function MoveDownInList(var FirstDependency: TPkgDependency;
|
||||
ListType: TPkgDependencyList): Boolean;
|
||||
function MakeFilenameRelativeToOwner(const AFilename: string): string;
|
||||
function FindDefaultFilename: string;
|
||||
public
|
||||
property PackageName: string read FPackageName write SetPackageName;
|
||||
property Flags: TPkgDependencyFlags read FFlags write SetFlags;
|
||||
property MinVersion: TPkgVersion read FMinVersion write SetMinVersion;
|
||||
property MaxVersion: TPkgVersion read FMaxVersion write SetMaxVersion;
|
||||
property Removed: boolean read FRemoved write SetRemoved;
|
||||
property Owner: TObject read FOwner write FOwner;// package or project or IDE
|
||||
property RequiredPackage: TLazPackage read FRequiredPackage write SetRequiredPackage;
|
||||
property LoadPackageResult: TLoadPackageResult read FLoadPackageResult write SetLoadPackageResult;
|
||||
property HoldPackage: boolean read FHoldPackage write SetHoldPackage;
|
||||
property MarkerFlags: TPKgMarkerFlags read FMarkerFlags write FMarkerFlags;
|
||||
property DefaultFilename: string read FDefaultFilename write FDefaultFilename;
|
||||
property PreferDefaultFilename: boolean read FPreferDefaultFilename write FPreferDefaultFilename;
|
||||
property RequiredPackage: TLazPackage read GetRequiredPackage write SetRequiredPackage;
|
||||
end;
|
||||
PPkgDependency = ^TPkgDependency;
|
||||
|
||||
@ -736,8 +714,8 @@ type
|
||||
WithUsedPackages: boolean);
|
||||
procedure SetAllComponentPriorities(const p: TComponentPriority);
|
||||
// used by dependencies
|
||||
procedure AddUsedByDependency(Dependency: TPkgDependency);
|
||||
procedure RemoveUsedByDependency(Dependency: TPkgDependency);
|
||||
procedure AddUsedByDependency(Dependency: TPkgDependencyBase); override;
|
||||
procedure RemoveUsedByDependency(Dependency: TPkgDependencyBase); override;
|
||||
function UsedByDepByIndex(Index: integer): TPkgDependency;
|
||||
function FindUsedByDepPrefer(Ignore: TPkgDependency): TPkgDependency;
|
||||
// provides
|
||||
@ -1813,12 +1791,6 @@ end;
|
||||
|
||||
{ TPkgDependency }
|
||||
|
||||
procedure TPkgDependency.SetFlags(const AValue: TPkgDependencyFlags);
|
||||
begin
|
||||
if FFlags=AValue then exit;
|
||||
FFlags:=AValue;
|
||||
end;
|
||||
|
||||
procedure TPkgDependency.SetHoldPackage(const AValue: boolean);
|
||||
begin
|
||||
if FHoldPackage=AValue then exit;
|
||||
@ -1831,22 +1803,14 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TPkgDependency.SetLoadPackageResult(const AValue: TLoadPackageResult);
|
||||
function TPkgDependency.GetRequiredPackage: TLazPackage;
|
||||
begin
|
||||
if FLoadPackageResult=AValue then exit;
|
||||
FLoadPackageResult:=AValue;
|
||||
Result := TLazPackage(FRequiredPackage);
|
||||
end;
|
||||
|
||||
procedure TPkgDependency.SetMaxVersion(const AValue: TPkgVersion);
|
||||
procedure TPkgDependency.SetRequiredPackage(AValue: TLazPackage);
|
||||
begin
|
||||
if FMaxVersion=AValue then exit;
|
||||
FMaxVersion:=AValue;
|
||||
end;
|
||||
|
||||
procedure TPkgDependency.SetMinVersion(const AValue: TPkgVersion);
|
||||
begin
|
||||
if FMinVersion=AValue then exit;
|
||||
FMinVersion:=AValue;
|
||||
RequiredIDEPackage := AValue;
|
||||
end;
|
||||
|
||||
procedure TPkgDependency.SetPackageName(const AValue: string);
|
||||
@ -1860,47 +1824,19 @@ begin
|
||||
FDefaultFilename:='';
|
||||
end;
|
||||
|
||||
procedure TPkgDependency.SetRemoved(const AValue: boolean);
|
||||
begin
|
||||
if FRemoved=AValue then exit;
|
||||
FRemoved:=AValue;
|
||||
end;
|
||||
|
||||
procedure TPkgDependency.SetRequiredPackage(const AValue: TLazPackage);
|
||||
begin
|
||||
if FRequiredPackage=AValue then exit;
|
||||
if FRequiredPackage<>nil then
|
||||
FRequiredPackage.RemoveUsedByDependency(Self);
|
||||
fLoadPackageResult:=lprUndefined;
|
||||
FRequiredPackage:=AValue;
|
||||
if FRequiredPackage<>nil then
|
||||
FRequiredPackage.AddUsedByDependency(Self);
|
||||
end;
|
||||
|
||||
constructor TPkgDependency.Create;
|
||||
begin
|
||||
MinVersion:=TPkgVersion.Create;
|
||||
MaxVersion:=TPkgVersion.Create;
|
||||
Clear;
|
||||
inherited Create;
|
||||
end;
|
||||
|
||||
destructor TPkgDependency.Destroy;
|
||||
begin
|
||||
RequiredPackage:=nil;
|
||||
PackageName:='';
|
||||
FreeAndNil(fMinVersion);
|
||||
FreeAndNil(fMaxVersion);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TPkgDependency.Clear;
|
||||
begin
|
||||
RequiredPackage:=nil;
|
||||
PackageName:='';
|
||||
FRemoved:=false;
|
||||
FFlags:=[];
|
||||
FMaxVersion.Clear;
|
||||
FMinVersion.Clear;
|
||||
inherited Clear;
|
||||
FDefaultFilename:='';
|
||||
FPreferDefaultFilename:=false;
|
||||
end;
|
||||
@ -2078,6 +2014,26 @@ begin
|
||||
Result:=PrevDependency[pdlRequires];
|
||||
end;
|
||||
|
||||
procedure TPkgDependency.AddUsedByDep(var FirstDependency: TPkgDependencyBase);
|
||||
begin
|
||||
AddToList(TPkgDependency(FirstDependency), pdlUsedBy);
|
||||
end;
|
||||
|
||||
procedure TPkgDependency.RemoveUsedByDep(var FirstDependency: TPkgDependencyBase);
|
||||
begin
|
||||
RemoveFromList(TPkgDependency(FirstDependency), pdlUsedBy);
|
||||
end;
|
||||
|
||||
procedure TPkgDependency.AddRequiresDep(var FirstDependency: TPkgDependencyBase);
|
||||
begin
|
||||
AddToList(TPkgDependency(FirstDependency), pdlRequires);
|
||||
end;
|
||||
|
||||
procedure TPkgDependency.RemoveRequiresDep(var FirstDependency: TPkgDependencyBase);
|
||||
begin
|
||||
RemoveFromList(TPkgDependency(FirstDependency), pdlRequires);
|
||||
end;
|
||||
|
||||
procedure TPkgDependency.AddToList(var FirstDependency: TPkgDependency;
|
||||
ListType: TPkgDependencyList);
|
||||
begin
|
||||
@ -3770,17 +3726,17 @@ begin
|
||||
APackage)<>nil;
|
||||
end;
|
||||
|
||||
procedure TLazPackage.AddUsedByDependency(Dependency: TPkgDependency);
|
||||
procedure TLazPackage.AddUsedByDependency(Dependency: TPkgDependencyBase);
|
||||
begin
|
||||
Dependency.AddToList(FFirstUsedByDependency,pdlUsedBy);
|
||||
if Dependency.HoldPackage then
|
||||
Dependency.AddUsedByDep(TPkgDependencyBase(FFirstUsedByDependency));
|
||||
if TPkgDependency(Dependency).HoldPackage then
|
||||
inc(FHoldPackageCount);
|
||||
end;
|
||||
|
||||
procedure TLazPackage.RemoveUsedByDependency(Dependency: TPkgDependency);
|
||||
procedure TLazPackage.RemoveUsedByDependency(Dependency: TPkgDependencyBase);
|
||||
begin
|
||||
Dependency.RemoveFromList(FFirstUsedByDependency,pdlUsedBy);
|
||||
if Dependency.HoldPackage then
|
||||
Dependency.RemoveUsedByDep(TPkgDependencyBase(FFirstUsedByDependency));
|
||||
if TPkgDependency(Dependency).HoldPackage then
|
||||
dec(FHoldPackageCount);
|
||||
end;
|
||||
|
||||
|
||||
@ -42,7 +42,7 @@ uses
|
||||
FileUtil, LazFileUtils, LazFileCache,
|
||||
// IDEIntf
|
||||
IDEImagesIntf, MenuIntf, LazIDEIntf, ProjectIntf, CodeToolsStructs,
|
||||
FormEditingIntf, PackageIntf, IDEHelpIntf, IDEOptionsIntf,
|
||||
FormEditingIntf, PackageDependencyIntf, PackageIntf, IDEHelpIntf, IDEOptionsIntf,
|
||||
NewItemIntf, IDEWindowIntf, IDEDialogs, ComponentReg,
|
||||
// IDE
|
||||
MainBase, IDEProcs, LazarusIDEStrConsts, IDEDefs, CompilerOptions,
|
||||
|
||||
@ -39,10 +39,17 @@ unit PackageLinks;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Laz2_XMLCfg, FileProcs, LazFileCache,
|
||||
CodeToolManager, CodeToolsStructs,
|
||||
LCLProc, Forms, FileUtil, AvgLvlTree, lazutf8classes, LazFileUtils, MacroIntf,
|
||||
PackageIntf, IDEProcs, EnvironmentOpts, PackageDefs, LazConf, IDECmdLine;
|
||||
Classes, SysUtils,
|
||||
// LCL
|
||||
Forms, LCLProc,
|
||||
// LazUtils
|
||||
Laz2_XMLCfg, LazFileCache, AvgLvlTree, LazUTF8Classes, LazFileUtils, FileUtil,
|
||||
// Codetools
|
||||
FileProcs, CodeToolManager, CodeToolsStructs,
|
||||
// IdeIntf
|
||||
MacroIntf, PackageDependencyIntf, PackageIntf,
|
||||
// IDE
|
||||
IDEProcs, EnvironmentOpts, LazConf, IDECmdLine, PackageDefs;
|
||||
|
||||
const
|
||||
PkgLinksFileVersion = 3;
|
||||
|
||||
@ -53,7 +53,7 @@ uses
|
||||
BasicCodeTools, CodeToolsStructs, NonPascalCodeTools, SourceChanger,
|
||||
CodeToolManager, DirectoryCacher,
|
||||
// IDEIntf,
|
||||
IDEExternToolIntf, IDEDialogs, IDEMsgIntf, PackageIntf,
|
||||
IDEExternToolIntf, IDEDialogs, IDEMsgIntf, PackageDependencyIntf, PackageIntf,
|
||||
CompOptsIntf, LazIDEIntf, MacroDefIntf, ProjectIntf, LazarusPackageIntf,
|
||||
// IDE
|
||||
LazarusIDEStrConsts, IDECmdLine, EnvironmentOpts, IDEProcs, LazConf,
|
||||
|
||||
@ -11,7 +11,7 @@ uses
|
||||
// LazUtils
|
||||
FileUtil, LazFileUtils,
|
||||
// IDEIntf
|
||||
ComponentReg, IDEDialogs,
|
||||
PackageDependencyIntf, ComponentReg, IDEDialogs,
|
||||
// IDE
|
||||
LazarusIDEStrConsts, IDEDefs, Project, PackageSystem, PackageDefs, ProjPackCommon;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user