* PackageVariants are now owned by the installer. Multiple packages can have references to them.

git-svn-id: trunk@22407 -
This commit is contained in:
joost 2012-09-16 20:01:31 +00:00
parent 76b9b4fdac
commit 5d24a23e66

View File

@ -435,6 +435,7 @@ Type
{ TPackageVariant }
TPackage = Class;
TPackageVariant = class(TNamedItem)
private
FOptions: TStrings;
@ -453,17 +454,16 @@ Type
FActivePackageVariantName: string;
FDefaultPackageVariantName: string;
FIsInheritable: boolean;
FMasterPackage: TPackage;
FName: string;
FOwner: TPersistent;
function GetActivePackageVariant: TPackageVariant;
function GetDefaultPackageVariant: TPackageVariant;
procedure SetActivePackageVariantName(AValue: string);
procedure SetDefaultPackageVariantName(AValue: string);
protected
function GetOwner: TPersistent; override;
public
function Add(AName: String): TPackageVariant; overload; virtual;
property Name: string read FName write FName;
property MasterPackage: TPackage read FMasterPackage;
property DefaultPackageVariant: TPackageVariant read GetDefaultPackageVariant;
property ActivePackageVariant: TPackageVariant read GetActivePackageVariant;
property DefaultPackageVariantName: string read FDefaultPackageVariantName write SetDefaultPackageVariantName;
@ -752,7 +752,7 @@ Type
Procedure GetArchiveFiles(List : TStrings; ACPU:TCPU; AOS : TOS); virtual;
Procedure GetArchiveSourceFiles(List : TStrings); virtual;
Procedure GetManifest(Manifest : TStrings);
function AddPackageVariant(AName: string; AIsInheritable: boolean): TPackageVariants;
Procedure AddPackageVariant(APackageVariant: TPackageVariants);
procedure ApplyPackageVariantToCompilerOptions(ACompilerOptions: tstrings);
procedure SetDefaultPackageVariant;
procedure LoadUnitConfigFromFile(Const AFileName: String);
@ -1105,6 +1105,7 @@ Type
FLogLevels : TVerboseLevels;
FFPMakeOptionsString: string;
FPackageVariantSettings: TStrings;
FPackageVariants: TFPList;
Protected
Procedure Log(Level : TVerboseLevel; Const Msg : String);
Procedure CreatePackages; virtual;
@ -1125,6 +1126,7 @@ Type
Constructor Create(AOwner : TComponent); virtual;
Destructor destroy; override;
Function AddPackage(Const AName : String) : TPackage;
Function AddPackageVariant(AName: string; AIsInheritable: boolean): TPackageVariants;
Function Run : Boolean;
Property FPMakeOptionsString: string read FFPMakeOptionsString;
Property BuildEngine : TBuildEngine Read FBuildEngine;
@ -2212,11 +2214,6 @@ begin
FDefaultPackageVariantName:=AValue;
end;
function TPackageVariants.GetOwner: TPersistent;
begin
Result:=FOwner;
end;
function TPackageVariants.GetActivePackageVariant: TPackageVariant;
begin
result := ItemByName(ActivePackageVariantName) as TPackageVariant;
@ -2803,11 +2800,6 @@ begin
FreeAndNil(FVersion);
FreeAndNil(FOptions);
FreeAndNil(FFlags);
for i := 0 to FPackageVariants.Count-1 do
begin
if TPackageVariants(FPackageVariants.Items[i]).Owner=Self then
TPackageVariants(FPackageVariants.Items[i]).Free;
end;
FreeAndNil(FPackageVariants);
inherited destroy;
end;
@ -3128,13 +3120,11 @@ begin
end;
end;
function TPackage.AddPackageVariant(AName: string; AIsInheritable: boolean): TPackageVariants;
procedure TPackage.AddPackageVariant(APackageVariant: TPackageVariants);
begin
result := TPackageVariants.Create(TPackageVariant);
result.Name:=AName;
result.FIsInheritable:=AIsInheritable;
FPackageVariants.Add(result);
result.FOwner := Self;
if not assigned(APackageVariant.FMasterPackage) then
APackageVariant.FMasterPackage := Self;
FPackageVariants.Add(APackageVariant);
end;
procedure TPackage.ApplyPackageVariantToCompilerOptions(ACompilerOptions: tstrings);
@ -3164,8 +3154,8 @@ begin
Dictionary.AddVariable(PackageVariants.Name,PackageVariants.ActivePackageVariantName);
SetUnitsOutputDir(FUnitsOutputDir+'$('+PackageVariants.name+')');
SetPackageUnitInstallDir(FPackageUnitInstallDir+'$('+PackageVariants.Name+')');
// Do not add targets f the package is inerited
if PackageVariants.GetOwner=Self then
// Do not add targets f the package is inherited
if PackageVariants.MasterPackage=Self then
for j := 0 to PackageVariants.ActivePackageVariant.Targets.count -1 do
targets.add.assign(PackageVariants.ActivePackageVariant.Targets.items[j]);
end;
@ -3235,7 +3225,8 @@ begin
else
AnIsInheritable:=false;
PackageVariantsStr:=copy(PackageVariantsStr,k+1,length(PackageVariantsStr)-k);
pv := AddPackageVariant(PackageVarName, AnIsInheritable);
pv := Installer.AddPackageVariant(PackageVarName, AnIsInheritable);
AddPackageVariant(pv);
k := pos(',',PackageVariantsStr);
while k>0 do
@ -3849,6 +3840,7 @@ end;
constructor TCustomInstaller.Create(AOwner: TComponent);
begin
FPackageVariantSettings := TStringList.Create;
FPackageVariants := TFPList.Create;
GlobalDictionary:=DictionaryClass.Create(Nil);
AnalyzeOptions;
GlobalDictionary.AddVariable('BaseInstallDir',Defaults.BaseInstallDir);
@ -3860,11 +3852,19 @@ end;
destructor TCustomInstaller.Destroy;
var
i: integer;
begin
FreePackages;
FreeAndNil(Defaults);
FreeAndNil(GlobalDictionary);
FreeAndNil(FPackageVariantSettings);
for i := 0 to FPackageVariants.Count-1 do
begin
if TPackageVariants(FPackageVariants.Items[i]).Owner=Self then
TPackageVariants(FPackageVariants.Items[i]).Free;
end;
FreeAndNil(FPackageVariants);
inherited destroy;
end;
@ -3921,6 +3921,13 @@ begin
result:=Packages.AddPackage(AName);
end;
function TCustomInstaller.AddPackageVariant(AName: string; AIsInheritable: boolean): TPackageVariants;
begin
result := TPackageVariants.Create(TPackageVariant);
result.Name:=AName;
result.FIsInheritable:=AIsInheritable;
FPackageVariants.Add(result);
end;
procedure TCustomInstaller.AnalyzeOptions;