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