* Added ability to add package-variants on the command-line

git-svn-id: trunk@35814 -
This commit is contained in:
joost 2017-04-16 22:21:30 +00:00
parent 0f8751c9e6
commit efd5aace57

View File

@ -537,6 +537,7 @@ Type
TPackageVariants = class(TNamedCollection)
private
FActivePackageVariantName: string;
FAutoAddToPackage: boolean;
FDefaultPackageVariantName: string;
FIsInheritable: boolean;
FMasterPackage: TPackage;
@ -554,6 +555,7 @@ Type
property DefaultPackageVariantName: string read FDefaultPackageVariantName write SetDefaultPackageVariantName;
property ActivePackageVariantName: string read FActivePackageVariantName write SetActivePackageVariantName;
property IsInheritable: boolean read FIsInheritable;
property AutoAddToPackage: boolean read FAutoAddToPackage;
end;
@ -1274,11 +1276,12 @@ Type
Procedure Archive; virtual;
Procedure Manifest; virtual;
Procedure PkgList; virtual;
procedure AddAutoPackageVariantsToPackage(APackage: TPackage); virtual;
Public
Constructor Create(AOwner : TComponent); virtual;
Destructor destroy; override;
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;
Property FPMakeOptionsString: string read FFPMakeOptionsString;
Property BuildEngine : TBuildEngine Read FBuildEngine;
@ -1632,6 +1635,7 @@ ResourceString
SErrEventNotSupported = 'Unsupported event type';
SErrorPkgNotInstalled = 'Package "%s" is not installed, can not uninstall.';
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';
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.';
SHelpUseBuildUnit = 'Compile package in Build-unit mode.';
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
@ -4872,13 +4882,15 @@ end;
Function TCustomInstaller.AddPackage(const AName: String) : TPackage;
begin
result:=Packages.AddPackage(AName);
AddAutoPackageVariantsToPackage(result);
end;
function TCustomInstaller.AddPackageVariant(AName: string; AIsInheritable: boolean): TPackageVariants;
Function TCustomInstaller.AddPackageVariant(AName: string; AIsInheritable: boolean; AutoAddToPackage: Boolean): TPackageVariants;
begin
result := TPackageVariants.Create(TPackageVariant);
result.Name:=AName;
result.FIsInheritable:=AIsInheritable;
result.FAutoAddToPackage:=AutoAddToPackage;
FPackageVariants.Add(result);
end;
@ -4899,6 +4911,9 @@ procedure TCustomInstaller.AnalyzeOptions;
O : String;
BuildModeName: string;
P: integer;
C: string;
PV: TPackageVariants;
SL: TStringList;
begin
O:=Paramstr(Index);
result := O[1]='+';
@ -4911,7 +4926,32 @@ procedure TCustomInstaller.AnalyzeOptions;
begin
BuildModeName:=copy(o,2,P-2);
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;
@ -4989,6 +5029,39 @@ procedure TCustomInstaller.AnalyzeOptions;
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
I : Integer;
DefaultsFileName : string;
@ -5119,7 +5192,8 @@ begin
CustomFpMakeCommandlineValues := TStringList.Create;
CustomFpMakeCommandlineValues.Values[CustOptName]:=OptionArg(I, true)
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
Usage(SErrInValidArgument,[I,ParamStr(I)]);
end;
@ -5201,7 +5275,14 @@ begin
{$endif NO_THREADING}
if assigned(CustomFpmakeCommandlineOptions) then for i := 0 to CustomFpmakeCommandlineOptions.Count-1 do
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,'');
If (FMT<>'') then
halt(1)
else
@ -5272,6 +5353,18 @@ begin
NotifyEventCollection.CallEvents(neaAfterPkgList, self);
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;
begin