mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 15:29:25 +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)
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user