mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-24 14:29:22 +02:00
* Added ability to add package-variants on the command-line
git-svn-id: trunk@35814 -
This commit is contained in:
parent
0f8751c9e6
commit
efd5aace57
@ -537,6 +537,7 @@ Type
|
|||||||
TPackageVariants = class(TNamedCollection)
|
TPackageVariants = class(TNamedCollection)
|
||||||
private
|
private
|
||||||
FActivePackageVariantName: string;
|
FActivePackageVariantName: string;
|
||||||
|
FAutoAddToPackage: boolean;
|
||||||
FDefaultPackageVariantName: string;
|
FDefaultPackageVariantName: string;
|
||||||
FIsInheritable: boolean;
|
FIsInheritable: boolean;
|
||||||
FMasterPackage: TPackage;
|
FMasterPackage: TPackage;
|
||||||
@ -554,6 +555,7 @@ Type
|
|||||||
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;
|
property IsInheritable: boolean read FIsInheritable;
|
||||||
|
property AutoAddToPackage: boolean read FAutoAddToPackage;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -1274,11 +1276,12 @@ Type
|
|||||||
Procedure Archive; virtual;
|
Procedure Archive; virtual;
|
||||||
Procedure Manifest; virtual;
|
Procedure Manifest; virtual;
|
||||||
Procedure PkgList; virtual;
|
Procedure PkgList; virtual;
|
||||||
|
procedure AddAutoPackageVariantsToPackage(APackage: TPackage); virtual;
|
||||||
Public
|
Public
|
||||||
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 AddPackageVariant(AName: string; AIsInheritable: boolean; AutoAddToPackage: Boolean = false): 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;
|
||||||
@ -1632,6 +1635,7 @@ ResourceString
|
|||||||
SErrEventNotSupported = 'Unsupported event type';
|
SErrEventNotSupported = 'Unsupported event type';
|
||||||
SErrorPkgNotInstalled = 'Package "%s" is not installed, can not uninstall.';
|
SErrorPkgNotInstalled = 'Package "%s" is not installed, can not uninstall.';
|
||||||
SErrBuildUnitCompilation = 'Compilation of "%s" failed';
|
SErrBuildUnitCompilation = 'Compilation of "%s" failed';
|
||||||
|
SErrExpectPkgVariant = 'The Package-variant on the command-line position %d (%s) should have at least one item';
|
||||||
|
|
||||||
SWarnCircularTargetDependency = 'Warning: Circular dependency detected when compiling target %s with target %s';
|
SWarnCircularTargetDependency = 'Warning: Circular dependency detected when compiling target %s with target %s';
|
||||||
SWarnCircularPackageDependency = 'Warning: Circular dependency detected when compiling package %s with package %s';
|
SWarnCircularPackageDependency = 'Warning: Circular dependency detected when compiling package %s with package %s';
|
||||||
@ -1767,6 +1771,12 @@ ResourceString
|
|||||||
sHelpUseEnvironment = 'Use environment to pass options to compiler.';
|
sHelpUseEnvironment = 'Use environment to pass options to compiler.';
|
||||||
SHelpUseBuildUnit = 'Compile package in Build-unit mode.';
|
SHelpUseBuildUnit = 'Compile package in Build-unit mode.';
|
||||||
sHelpZipPrefix = 'Use indicated prefix for generated archives.';
|
sHelpZipPrefix = 'Use indicated prefix for generated archives.';
|
||||||
|
sHelpPackageVariant1= 'To add a package-variant to all packages:';
|
||||||
|
sHelpPackageVariant2= ' +[variantname]-=[variant1],<variant2>,...';
|
||||||
|
sHelpPackageVariant3= 'To add a package-variant to all packages which other packages will inherit:';
|
||||||
|
sHelpPackageVariant4= ' +[variantname]+=[variant1],<variant2>,...';
|
||||||
|
sHelpPackageVariant5= 'To add specific options for one package-variant:';
|
||||||
|
sHelpPackageVariant6= ' --options_[variantname]_[variant1]=Value';
|
||||||
|
|
||||||
|
|
||||||
Const
|
Const
|
||||||
@ -4872,13 +4882,15 @@ end;
|
|||||||
Function TCustomInstaller.AddPackage(const AName: String) : TPackage;
|
Function TCustomInstaller.AddPackage(const AName: String) : TPackage;
|
||||||
begin
|
begin
|
||||||
result:=Packages.AddPackage(AName);
|
result:=Packages.AddPackage(AName);
|
||||||
|
AddAutoPackageVariantsToPackage(result);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCustomInstaller.AddPackageVariant(AName: string; AIsInheritable: boolean): TPackageVariants;
|
Function TCustomInstaller.AddPackageVariant(AName: string; AIsInheritable: boolean; AutoAddToPackage: Boolean): TPackageVariants;
|
||||||
begin
|
begin
|
||||||
result := TPackageVariants.Create(TPackageVariant);
|
result := TPackageVariants.Create(TPackageVariant);
|
||||||
result.Name:=AName;
|
result.Name:=AName;
|
||||||
result.FIsInheritable:=AIsInheritable;
|
result.FIsInheritable:=AIsInheritable;
|
||||||
|
result.FAutoAddToPackage:=AutoAddToPackage;
|
||||||
FPackageVariants.Add(result);
|
FPackageVariants.Add(result);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -4899,6 +4911,9 @@ procedure TCustomInstaller.AnalyzeOptions;
|
|||||||
O : String;
|
O : String;
|
||||||
BuildModeName: string;
|
BuildModeName: string;
|
||||||
P: integer;
|
P: integer;
|
||||||
|
C: string;
|
||||||
|
PV: TPackageVariants;
|
||||||
|
SL: TStringList;
|
||||||
begin
|
begin
|
||||||
O:=Paramstr(Index);
|
O:=Paramstr(Index);
|
||||||
result := O[1]='+';
|
result := O[1]='+';
|
||||||
@ -4911,7 +4926,32 @@ procedure TCustomInstaller.AnalyzeOptions;
|
|||||||
begin
|
begin
|
||||||
BuildModeName:=copy(o,2,P-2);
|
BuildModeName:=copy(o,2,P-2);
|
||||||
Delete(O,1,P);
|
Delete(O,1,P);
|
||||||
FPackageVariantSettings.Values[BuildModeName] := O;
|
|
||||||
|
c := RightStr(BuildModeName,1);
|
||||||
|
if (c = '*') or (c = '+') then
|
||||||
|
begin
|
||||||
|
// Add a new package-variant
|
||||||
|
BuildModeName := copy(BuildModeName, 1, length(BuildModeName) -1);
|
||||||
|
PV := AddPackageVariant(BuildModeName, (C = '*'), True);
|
||||||
|
SL := TStringList.Create;
|
||||||
|
try
|
||||||
|
SL.CommaText := O;
|
||||||
|
if SL.Count=0 then
|
||||||
|
Error(SErrExpectPkgVariant,[Index,ParamStr(Index)]);
|
||||||
|
for P := 0 to SL.Count -1 do
|
||||||
|
begin
|
||||||
|
PV.Add(SL.ValueFromIndex[P]);
|
||||||
|
end;
|
||||||
|
FPackageVariantSettings.Values[BuildModeName] := SL.ValueFromIndex[0];
|
||||||
|
finally
|
||||||
|
SL.Free;
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
// Set the value of the package-variant.
|
||||||
|
FPackageVariantSettings.Values[BuildModeName] := O;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -4989,6 +5029,39 @@ procedure TCustomInstaller.AnalyzeOptions;
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Function CheckPackageVariantOptionSetValue(Index: Integer): boolean;
|
||||||
|
var
|
||||||
|
O : String;
|
||||||
|
OptionName: string;
|
||||||
|
I,J: integer;
|
||||||
|
P: Integer;
|
||||||
|
PV: TPackageVariants;
|
||||||
|
begin
|
||||||
|
result := false;
|
||||||
|
O:=Paramstr(Index);
|
||||||
|
if copy(O,1,2)<>'--' then
|
||||||
|
Exit;
|
||||||
|
P:=Pos('=',Paramstr(Index));
|
||||||
|
if P > 0 then
|
||||||
|
begin
|
||||||
|
OptionName:=copy(o,3,P-3);
|
||||||
|
Delete(O,1,P);
|
||||||
|
for I := 0 to FPackageVariants.Count -1 do
|
||||||
|
begin
|
||||||
|
PV := TObject(FPackageVariants.Items[I]) as TPackageVariants;
|
||||||
|
for J := 0 to PV.Count-1 do
|
||||||
|
begin
|
||||||
|
if OptionName = 'options_'+PV.Name+'_'+PV.Items[J].Name then
|
||||||
|
begin
|
||||||
|
result := true;
|
||||||
|
while O <> '' do
|
||||||
|
(PV.Items[J] as TPackageVariant).Options.Add(SplitSpaces(O));
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
Var
|
Var
|
||||||
I : Integer;
|
I : Integer;
|
||||||
DefaultsFileName : string;
|
DefaultsFileName : string;
|
||||||
@ -5119,7 +5192,8 @@ begin
|
|||||||
CustomFpMakeCommandlineValues := TStringList.Create;
|
CustomFpMakeCommandlineValues := TStringList.Create;
|
||||||
CustomFpMakeCommandlineValues.Values[CustOptName]:=OptionArg(I, true)
|
CustomFpMakeCommandlineValues.Values[CustOptName]:=OptionArg(I, true)
|
||||||
end
|
end
|
||||||
else if (not CheckBuildOptionSetValue(I)) and (not Defaults.IgnoreInvalidOptions) then
|
else if (not CheckBuildOptionSetValue(I)) and (not CheckPackageVariantOptionSetValue(I))
|
||||||
|
and (not Defaults.IgnoreInvalidOptions) then
|
||||||
begin
|
begin
|
||||||
Usage(SErrInValidArgument,[I,ParamStr(I)]);
|
Usage(SErrInValidArgument,[I,ParamStr(I)]);
|
||||||
end;
|
end;
|
||||||
@ -5201,7 +5275,14 @@ begin
|
|||||||
{$endif NO_THREADING}
|
{$endif NO_THREADING}
|
||||||
if assigned(CustomFpmakeCommandlineOptions) then for i := 0 to CustomFpmakeCommandlineOptions.Count-1 do
|
if assigned(CustomFpmakeCommandlineOptions) then for i := 0 to CustomFpmakeCommandlineOptions.Count-1 do
|
||||||
LogArgOption(' ',CustomFpmakeCommandlineOptions.Names[i],CustomFpmakeCommandlineOptions.ValueFromIndex[i]);
|
LogArgOption(' ',CustomFpmakeCommandlineOptions.Names[i],CustomFpmakeCommandlineOptions.ValueFromIndex[i]);
|
||||||
|
Log(vlInfo, sHelpPackageVariant1);
|
||||||
|
Log(vlInfo, sHelpPackageVariant2);
|
||||||
|
Log(vlInfo, sHelpPackageVariant3);
|
||||||
|
Log(vlInfo, sHelpPackageVariant4);
|
||||||
|
Log(vlInfo, sHelpPackageVariant5);
|
||||||
|
Log(vlInfo, sHelpPackageVariant6);
|
||||||
Log(vlInfo,'');
|
Log(vlInfo,'');
|
||||||
|
|
||||||
If (FMT<>'') then
|
If (FMT<>'') then
|
||||||
halt(1)
|
halt(1)
|
||||||
else
|
else
|
||||||
@ -5272,6 +5353,18 @@ begin
|
|||||||
NotifyEventCollection.CallEvents(neaAfterPkgList, self);
|
NotifyEventCollection.CallEvents(neaAfterPkgList, self);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCustomInstaller.AddAutoPackageVariantsToPackage(APackage: TPackage);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
PV: TPackageVariants;
|
||||||
|
begin
|
||||||
|
for i := 0 to FPackageVariants.Count-1 do
|
||||||
|
begin
|
||||||
|
PV := TObject(FPackageVariants.Items[i]) as TPackageVariants;
|
||||||
|
if PV.AutoAddToPackage then
|
||||||
|
APackage.AddPackageVariant(PV);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCustomInstaller.CheckPackages;
|
procedure TCustomInstaller.CheckPackages;
|
||||||
begin
|
begin
|
||||||
|
Loading…
Reference in New Issue
Block a user