mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 22:09:32 +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
|
private
|
||||||
FActivePackageVariantName: string;
|
FActivePackageVariantName: string;
|
||||||
FDefaultPackageVariantName: string;
|
FDefaultPackageVariantName: string;
|
||||||
|
FIsInheritable: boolean;
|
||||||
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;
|
||||||
@ -461,6 +465,7 @@ Type
|
|||||||
property ActivePackageVariant: TPackageVariant read GetActivePackageVariant;
|
property ActivePackageVariant: TPackageVariant read GetActivePackageVariant;
|
||||||
property DefaultPackageVariantName: string read FDefaultPackageVariantName write SetDefaultPackageVariantName;
|
property DefaultPackageVariantName: string read FDefaultPackageVariantName write SetDefaultPackageVariantName;
|
||||||
property ActivePackageVariantName: string read FActivePackageVariantName write SetActivePackageVariantName;
|
property ActivePackageVariantName: string read FActivePackageVariantName write SetActivePackageVariantName;
|
||||||
|
property IsInheritable: boolean read FIsInheritable;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -732,6 +737,8 @@ Type
|
|||||||
Function HaveOptions : Boolean;
|
Function HaveOptions : Boolean;
|
||||||
Function GetUnitsOutputDir(ACPU:TCPU; AOS : TOS):String;
|
Function GetUnitsOutputDir(ACPU:TCPU; AOS : TOS):String;
|
||||||
Function GetUnitConfigOutputDir(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);
|
Procedure SetUnitsOutputDir(AValue: string);
|
||||||
Function GetPackageUnitInstallDir(ACPU:TCPU; AOS : TOS):String;
|
Function GetPackageUnitInstallDir(ACPU:TCPU; AOS : TOS):String;
|
||||||
Procedure SetPackageUnitInstallDir(AValue: string);
|
Procedure SetPackageUnitInstallDir(AValue: string);
|
||||||
@ -742,7 +749,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; ARecompileWhenNoMatch: boolean): TPackageVariants;
|
function AddPackageVariant(AName: string; AIsInheritable: boolean): TPackageVariants;
|
||||||
procedure ApplyPackageVariantToCompilerOptions(ACompilerOptions: tstrings);
|
procedure ApplyPackageVariantToCompilerOptions(ACompilerOptions: tstrings);
|
||||||
procedure SetDefaultPackageVariant;
|
procedure SetDefaultPackageVariant;
|
||||||
Property Version : String Read GetVersion Write SetVersion;
|
Property Version : String Read GetVersion Write SetVersion;
|
||||||
@ -2196,6 +2203,11 @@ 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;
|
||||||
@ -2766,6 +2778,8 @@ end;
|
|||||||
|
|
||||||
|
|
||||||
destructor TPackage.destroy;
|
destructor TPackage.destroy;
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
begin
|
begin
|
||||||
FreeAndNil(FDictionary);
|
FreeAndNil(FDictionary);
|
||||||
FreeAndNil(FDependencies);
|
FreeAndNil(FDependencies);
|
||||||
@ -2781,6 +2795,11 @@ begin
|
|||||||
FreeAndNil(FTargets);
|
FreeAndNil(FTargets);
|
||||||
FreeAndNil(FVersion);
|
FreeAndNil(FVersion);
|
||||||
FreeAndNil(FOptions);
|
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);
|
FreeAndNil(FPackageVariants);
|
||||||
inherited destroy;
|
inherited destroy;
|
||||||
end;
|
end;
|
||||||
@ -2810,6 +2829,37 @@ begin
|
|||||||
result:=FixPath(Dictionary.Substitute('units'+PathDelim+'$(target)'+PathDelim,['CPU',CPUToString(ACPU),'OS',OSToString(AOS),'target',MakeTargetString(ACPU,AOS)]));
|
result:=FixPath(Dictionary.Substitute('units'+PathDelim+'$(target)'+PathDelim,['CPU',CPUToString(ACPU),'OS',OSToString(AOS),'target',MakeTargetString(ACPU,AOS)]));
|
||||||
end;
|
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);
|
procedure TPackage.SetUnitsOutputDir(AValue: string);
|
||||||
begin
|
begin
|
||||||
if AValue<>'' then
|
if AValue<>'' then
|
||||||
@ -3070,11 +3120,13 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TPackage.AddPackageVariant(AName: string; ARecompileWhenNoMatch: boolean): TPackageVariants;
|
function TPackage.AddPackageVariant(AName: string; AIsInheritable: boolean): TPackageVariants;
|
||||||
begin
|
begin
|
||||||
result := TPackageVariants.Create(TPackageVariant);
|
result := TPackageVariants.Create(TPackageVariant);
|
||||||
result.Name:=AName;
|
result.Name:=AName;
|
||||||
|
result.FIsInheritable:=AIsInheritable;
|
||||||
FPackageVariants.Add(result);
|
FPackageVariants.Add(result);
|
||||||
|
result.FOwner := Self;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TPackage.ApplyPackageVariantToCompilerOptions(ACompilerOptions: tstrings);
|
procedure TPackage.ApplyPackageVariantToCompilerOptions(ACompilerOptions: tstrings);
|
||||||
@ -3118,6 +3170,7 @@ var
|
|||||||
PackageVariantsStr: string;
|
PackageVariantsStr: string;
|
||||||
PackageVarName: string;
|
PackageVarName: string;
|
||||||
pv: TPackageVariants;
|
pv: TPackageVariants;
|
||||||
|
AnIsInheritable: boolean;
|
||||||
begin
|
begin
|
||||||
L:=TStringList.Create;
|
L:=TStringList.Create;
|
||||||
Try
|
Try
|
||||||
@ -3159,8 +3212,15 @@ begin
|
|||||||
if k > 0 then
|
if k > 0 then
|
||||||
begin
|
begin
|
||||||
PackageVarName:=copy(PackageVariantsStr,1,k-1);
|
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);
|
PackageVariantsStr:=copy(PackageVariantsStr,k+1,length(PackageVariantsStr)-k);
|
||||||
pv := AddPackageVariant(PackageVarName, false);
|
pv := AddPackageVariant(PackageVarName, AnIsInheritable);
|
||||||
|
|
||||||
k := pos(',',PackageVariantsStr);
|
k := pos(',',PackageVariantsStr);
|
||||||
while k>0 do
|
while k>0 do
|
||||||
@ -3228,7 +3288,10 @@ begin
|
|||||||
for i := 0 to FPackageVariants.Count-1 do
|
for i := 0 to FPackageVariants.Count-1 do
|
||||||
begin
|
begin
|
||||||
PackageVariants := TPackageVariants(FPackageVariants.Items[i]);
|
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
|
for j := 0 to PackageVariants.Count-1 do
|
||||||
if not sametext(PackageVariants.Items[j].Name, PackageVariants.DefaultPackageVariantName) then
|
if not sametext(PackageVariants.Items[j].Name, PackageVariants.DefaultPackageVariantName) then
|
||||||
PackageVariantsStr:=PackageVariantsStr+','+PackageVariants.Items[j].Name;
|
PackageVariantsStr:=PackageVariantsStr+','+PackageVariants.Items[j].Name;
|
||||||
@ -5542,6 +5605,7 @@ begin
|
|||||||
(P.InstalledChecksum<>$ffffffff) and
|
(P.InstalledChecksum<>$ffffffff) and
|
||||||
(P.InstalledChecksum<>D.RequireChecksum) then
|
(P.InstalledChecksum<>D.RequireChecksum) then
|
||||||
Log(vlDebug,SDbgPackageChecksumChanged,[P.Name]);
|
Log(vlDebug,SDbgPackageChecksumChanged,[P.Name]);
|
||||||
|
APackage.InheritPackageVariantsFromDependency(P);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -5583,6 +5647,7 @@ begin
|
|||||||
(P.InstalledChecksum<>$ffffffff) and
|
(P.InstalledChecksum<>$ffffffff) and
|
||||||
(P.InstalledChecksum<>D.RequireChecksum) then
|
(P.InstalledChecksum<>D.RequireChecksum) then
|
||||||
Log(vlDebug,SDbgPackageChecksumChanged,[P.Name]);
|
Log(vlDebug,SDbgPackageChecksumChanged,[P.Name]);
|
||||||
|
APackage.InheritPackageVariantsFromDependency(P);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -5712,7 +5777,6 @@ begin
|
|||||||
|
|
||||||
GPathPrefix:=APackage.Directory;
|
GPathPrefix:=APackage.Directory;
|
||||||
Try
|
Try
|
||||||
APackage.SetDefaultPackageVariant;
|
|
||||||
CreateOutputDir(APackage);
|
CreateOutputDir(APackage);
|
||||||
APackage.Dictionary.AddVariable('UNITSOUTPUTDIR',AddPathPrefix(APackage,APackage.GetUnitsOutputDir(Defaults.CPU,Defaults.OS)));
|
APackage.Dictionary.AddVariable('UNITSOUTPUTDIR',AddPathPrefix(APackage,APackage.GetUnitsOutputDir(Defaults.CPU,Defaults.OS)));
|
||||||
APackage.Dictionary.AddVariable('BINOUTPUTDIR',AddPathPrefix(APackage,APackage.GetBinOutputDir(Defaults.CPU,Defaults.OS)));
|
APackage.Dictionary.AddVariable('BINOUTPUTDIR',AddPathPrefix(APackage,APackage.GetBinOutputDir(Defaults.CPU,Defaults.OS)));
|
||||||
@ -5853,6 +5917,8 @@ begin
|
|||||||
result := False;
|
result := False;
|
||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
|
APackage.SetDefaultPackageVariant;
|
||||||
|
|
||||||
ResolveFileNames(APackage,Defaults.CPU,Defaults.OS,True,False);
|
ResolveFileNames(APackage,Defaults.CPU,Defaults.OS,True,False);
|
||||||
If NeedsCompile(APackage) then
|
If NeedsCompile(APackage) then
|
||||||
result := True
|
result := True
|
||||||
|
Loading…
Reference in New Issue
Block a user