* Added ability to inherit package-variants from dependencies.

git-svn-id: trunk@22358 -
This commit is contained in:
joost 2012-09-08 15:43:50 +00:00
parent dfb01f7391
commit 982c7ca9a9

View File

@ -449,11 +449,15 @@ Type
private
FActivePackageVariantName: string;
FDefaultPackageVariantName: string;
FIsInheritable: boolean;
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;
@ -461,6 +465,7 @@ Type
property ActivePackageVariant: TPackageVariant read GetActivePackageVariant;
property DefaultPackageVariantName: string read FDefaultPackageVariantName write SetDefaultPackageVariantName;
property ActivePackageVariantName: string read FActivePackageVariantName write SetActivePackageVariantName;
property IsInheritable: boolean read FIsInheritable;
end;
@ -732,6 +737,8 @@ Type
Function HaveOptions : Boolean;
Function GetUnitsOutputDir(ACPU:TCPU; AOS : TOS):String;
Function GetUnitConfigOutputDir(ACPU:TCPU; AOS : TOS):String;
Procedure InheritPackageVariantsFromDependency(ADependencyPackage: TPackage);
Function GetPackageVariantsByName(AName: string): TPackageVariants;
Procedure SetUnitsOutputDir(AValue: string);
Function GetPackageUnitInstallDir(ACPU:TCPU; AOS : TOS):String;
Procedure SetPackageUnitInstallDir(AValue: string);
@ -742,7 +749,7 @@ Type
Procedure GetArchiveFiles(List : TStrings; ACPU:TCPU; AOS : TOS); virtual;
Procedure GetArchiveSourceFiles(List : TStrings); virtual;
Procedure GetManifest(Manifest : TStrings);
function AddPackageVariant(AName: string; ARecompileWhenNoMatch: boolean): TPackageVariants;
function AddPackageVariant(AName: string; AIsInheritable: boolean): TPackageVariants;
procedure ApplyPackageVariantToCompilerOptions(ACompilerOptions: tstrings);
procedure SetDefaultPackageVariant;
Property Version : String Read GetVersion Write SetVersion;
@ -2196,6 +2203,11 @@ begin
FDefaultPackageVariantName:=AValue;
end;
function TPackageVariants.GetOwner: TPersistent;
begin
Result:=FOwner;
end;
function TPackageVariants.GetActivePackageVariant: TPackageVariant;
begin
result := ItemByName(ActivePackageVariantName) as TPackageVariant;
@ -2766,6 +2778,8 @@ end;
destructor TPackage.destroy;
var
i: integer;
begin
FreeAndNil(FDictionary);
FreeAndNil(FDependencies);
@ -2781,6 +2795,11 @@ begin
FreeAndNil(FTargets);
FreeAndNil(FVersion);
FreeAndNil(FOptions);
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;
@ -2810,6 +2829,37 @@ begin
result:=FixPath(Dictionary.Substitute('units'+PathDelim+'$(target)'+PathDelim,['CPU',CPUToString(ACPU),'OS',OSToString(AOS),'target',MakeTargetString(ACPU,AOS)]));
end;
procedure TPackage.InheritPackageVariantsFromDependency(ADependencyPackage: TPackage);
var
i: integer;
APackageVariants: TPackageVariants;
begin
for i := 0 to ADependencyPackage.FPackageVariants.Count-1 do
begin
APackageVariants := TPackageVariants(ADependencyPackage.FPackageVariants[i]);
if APackageVariants.IsInheritable then
begin
if not assigned(GetPackageVariantsByName(APackageVariants.Name)) then
begin
FPackageVariants.Add(APackageVariants);
end;
end;
end;
end;
function TPackage.GetPackageVariantsByName(AName: string): TPackageVariants;
var
i: Integer;
begin
result := nil;
for i := 0 to FPackageVariants.Count-1 do
if SameText(TPackageVariants(FPackageVariants.Items[i]).Name, AName) then
begin
result := TPackageVariants(FPackageVariants.Items[i]);
break;
end;
end;
procedure TPackage.SetUnitsOutputDir(AValue: string);
begin
if AValue<>'' then
@ -3070,11 +3120,13 @@ begin
end;
end;
function TPackage.AddPackageVariant(AName: string; ARecompileWhenNoMatch: boolean): TPackageVariants;
function TPackage.AddPackageVariant(AName: string; AIsInheritable: boolean): TPackageVariants;
begin
result := TPackageVariants.Create(TPackageVariant);
result.Name:=AName;
result.FIsInheritable:=AIsInheritable;
FPackageVariants.Add(result);
result.FOwner := Self;
end;
procedure TPackage.ApplyPackageVariantToCompilerOptions(ACompilerOptions: tstrings);
@ -3118,6 +3170,7 @@ var
PackageVariantsStr: string;
PackageVarName: string;
pv: TPackageVariants;
AnIsInheritable: boolean;
begin
L:=TStringList.Create;
Try
@ -3159,8 +3212,15 @@ begin
if k > 0 then
begin
PackageVarName:=copy(PackageVariantsStr,1,k-1);
if PackageVarName[Length(PackageVarName)]='*' then
begin
SetLength(PackageVarName,Length(PackageVarName)-1);
AnIsInheritable:=true;
end
else
AnIsInheritable:=false;
PackageVariantsStr:=copy(PackageVariantsStr,k+1,length(PackageVariantsStr)-k);
pv := AddPackageVariant(PackageVarName, false);
pv := AddPackageVariant(PackageVarName, AnIsInheritable);
k := pos(',',PackageVariantsStr);
while k>0 do
@ -3228,7 +3288,10 @@ begin
for i := 0 to FPackageVariants.Count-1 do
begin
PackageVariants := TPackageVariants(FPackageVariants.Items[i]);
PackageVariantsStr:=PackageVariants.Name+':'+PackageVariants.DefaultPackageVariantName;
PackageVariantsStr:=PackageVariants.Name;
if PackageVariants.IsInheritable then
PackageVariantsStr:=PackageVariantsStr+'*';
PackageVariantsStr := PackageVariantsStr +':'+PackageVariants.DefaultPackageVariantName;
for j := 0 to PackageVariants.Count-1 do
if not sametext(PackageVariants.Items[j].Name, PackageVariants.DefaultPackageVariantName) then
PackageVariantsStr:=PackageVariantsStr+','+PackageVariants.Items[j].Name;
@ -5542,6 +5605,7 @@ begin
(P.InstalledChecksum<>$ffffffff) and
(P.InstalledChecksum<>D.RequireChecksum) then
Log(vlDebug,SDbgPackageChecksumChanged,[P.Name]);
APackage.InheritPackageVariantsFromDependency(P);
end;
end;
end;
@ -5583,6 +5647,7 @@ begin
(P.InstalledChecksum<>$ffffffff) and
(P.InstalledChecksum<>D.RequireChecksum) then
Log(vlDebug,SDbgPackageChecksumChanged,[P.Name]);
APackage.InheritPackageVariantsFromDependency(P);
end;
end;
end;
@ -5712,7 +5777,6 @@ begin
GPathPrefix:=APackage.Directory;
Try
APackage.SetDefaultPackageVariant;
CreateOutputDir(APackage);
APackage.Dictionary.AddVariable('UNITSOUTPUTDIR',AddPathPrefix(APackage,APackage.GetUnitsOutputDir(Defaults.CPU,Defaults.OS)));
APackage.Dictionary.AddVariable('BINOUTPUTDIR',AddPathPrefix(APackage,APackage.GetBinOutputDir(Defaults.CPU,Defaults.OS)));
@ -5853,6 +5917,8 @@ begin
result := False;
Exit;
end;
APackage.SetDefaultPackageVariant;
ResolveFileNames(APackage,Defaults.CPU,Defaults.OS,True,False);
If NeedsCompile(APackage) then
result := True