mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 20:09:25 +02:00
* Added ability to inherit package-variants from dependencies.
git-svn-id: trunk@22358 -
This commit is contained in:
parent
dfb01f7391
commit
982c7ca9a9
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user