mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 09:02:22 +01:00 
			
		
		
		
	* use TFPVersion internally
* getfilename is now always generated with version like 1.2.3-4 git-svn-id: trunk@10246 -
This commit is contained in:
		
							parent
							
								
									ede7361f04
								
							
						
					
					
						commit
						7725119204
					
				@ -243,6 +243,31 @@ Type
 | 
			
		||||
    Property DefaultAt : TCommandAt Read FDefaultAt Write FDefaultAt;
 | 
			
		||||
  end;
 | 
			
		||||
 | 
			
		||||
  { TFPVersion }
 | 
			
		||||
 | 
			
		||||
  TFPVersion = Class(TPersistent)
 | 
			
		||||
  private
 | 
			
		||||
    FMajor,
 | 
			
		||||
    FMinor,
 | 
			
		||||
    FMicro,
 | 
			
		||||
    FBuild    : Word;
 | 
			
		||||
    function GetAsString: String;
 | 
			
		||||
    function GetEmpty: Boolean;
 | 
			
		||||
    procedure SetAsString(const AValue: String);
 | 
			
		||||
  Public
 | 
			
		||||
   Procedure Clear;
 | 
			
		||||
   Procedure Assign(Source : TPersistent); override;
 | 
			
		||||
   Function CompareVersion(AVersion : TFPVersion) : Integer;
 | 
			
		||||
   Function SameVersion(AVersion : TFPVersion) : Boolean;
 | 
			
		||||
   Property AsString : String Read GetAsString Write SetAsString;
 | 
			
		||||
   Property Empty : Boolean Read GetEmpty;
 | 
			
		||||
  Published
 | 
			
		||||
   Property Major : Word Read FMajor Write FMajor;
 | 
			
		||||
   Property Minor : Word Read FMinor Write FMinor;
 | 
			
		||||
   Property Micro : Word Read FMicro Write FMicro;
 | 
			
		||||
   Property Build : Word Read FBuild Write FBuild;
 | 
			
		||||
  end;
 | 
			
		||||
 | 
			
		||||
  { TConditionalString }
 | 
			
		||||
  TConditionalString = Class
 | 
			
		||||
  private
 | 
			
		||||
@ -250,20 +275,23 @@ Type
 | 
			
		||||
    FCPUs   : TCPUs;
 | 
			
		||||
    FValue  : String;
 | 
			
		||||
  Public
 | 
			
		||||
    Constructor Create;virtual;
 | 
			
		||||
    Property Value : String Read FValue Write FValue;
 | 
			
		||||
    Property OSes  : TOSes Read FOSes Write FOSes;
 | 
			
		||||
    Property CPUs : TCPUs Read FCPUS Write FCPUs;
 | 
			
		||||
  end;
 | 
			
		||||
 | 
			
		||||
  TConditionalStringClass = class of TConditionalString;
 | 
			
		||||
 | 
			
		||||
  { TConditionalStrings }
 | 
			
		||||
 | 
			
		||||
  TConditionalStrings = Class(TFPList)
 | 
			
		||||
  private
 | 
			
		||||
    FCSClass : TClass;
 | 
			
		||||
    FCSClass : TConditionalStringClass;
 | 
			
		||||
    function GetConditionalString(Index : Integer): TConditionalString;
 | 
			
		||||
    procedure SetConditionalString(Index : Integer; const AValue: TConditionalString);
 | 
			
		||||
  Public
 | 
			
		||||
    Constructor Create(AClass:TClass);
 | 
			
		||||
    Constructor Create(AClass:TConditionalStringClass);
 | 
			
		||||
    Function Add(Const Value : String) : TConditionalString;inline;
 | 
			
		||||
    Function Add(Const Value : String;const OSes:TOSes) : TConditionalString;inline;
 | 
			
		||||
{$ifdef cpu_only_overloads}
 | 
			
		||||
@ -279,14 +307,18 @@ Type
 | 
			
		||||
    FDependencyType : TDependencyType;
 | 
			
		||||
    // Package, Unit
 | 
			
		||||
    FTarget : TObject;
 | 
			
		||||
    FVersion : String;
 | 
			
		||||
    FVersion : TFPVersion;
 | 
			
		||||
    // Filenames, Includes
 | 
			
		||||
    FTargetFileName : String;
 | 
			
		||||
    Function GetVersion : string;
 | 
			
		||||
    Procedure SetVersion(const V : string);
 | 
			
		||||
  Public
 | 
			
		||||
    Constructor Create;override;
 | 
			
		||||
    Destructor Destroy;override;
 | 
			
		||||
    Property Target : TObject Read FTarget Write FTarget;
 | 
			
		||||
    Property DependencyType : TDependencyType Read FDependencyType;
 | 
			
		||||
    Property TargetFileName : String Read FTargetFileName Write FTargetFileName;
 | 
			
		||||
    Property Version : String Read FVersion Write FVersion;
 | 
			
		||||
    Property Version : String Read GetVersion Write SetVersion;
 | 
			
		||||
  end;
 | 
			
		||||
 | 
			
		||||
  TDependencies = Class(TConditionalStrings)
 | 
			
		||||
@ -486,7 +518,7 @@ Type
 | 
			
		||||
    FAuthor: String;
 | 
			
		||||
    FLicense: String;
 | 
			
		||||
    FExternalURL: String;
 | 
			
		||||
    FVersion: String;
 | 
			
		||||
    FVersion: TFPVersion;
 | 
			
		||||
    FEmail : String;
 | 
			
		||||
    FNeedLibC : Boolean;
 | 
			
		||||
    FCommands : TCommands;
 | 
			
		||||
@ -496,6 +528,8 @@ Type
 | 
			
		||||
    FUnitDir : String;
 | 
			
		||||
    Function GetDescription : string;
 | 
			
		||||
    Function GetFileName : string;
 | 
			
		||||
    Function GetVersion : string;
 | 
			
		||||
    Procedure SetVersion(const V : string);
 | 
			
		||||
  Protected
 | 
			
		||||
    procedure SetName(const AValue: String);override;
 | 
			
		||||
    procedure LoadUnitConfigFromFile(Const AFileName: String);
 | 
			
		||||
@ -509,7 +543,7 @@ Type
 | 
			
		||||
    procedure GetInstallFiles(List: TStrings;Types : TTargetTypes;ACPU:TCPU; AOS : TOS);
 | 
			
		||||
    Procedure GetArchiveFiles(List : TStrings; ACPU:TCPU; AOS : TOS); virtual;
 | 
			
		||||
    Procedure GetManifest(Manifest : TStrings);
 | 
			
		||||
    Property Version : String Read FVersion Write FVersion;
 | 
			
		||||
    Property Version : String Read GetVersion Write SetVersion;
 | 
			
		||||
    Property FileName : String Read GetFileName Write FFileName;
 | 
			
		||||
    Property ExternalURL : String Read FExternalURL Write FExternalURL;
 | 
			
		||||
    Property Email : String Read FEmail Write FEmail;
 | 
			
		||||
@ -1032,37 +1066,6 @@ Const
 | 
			
		||||
****************************************************************************}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Procedure SplitVersion(AValue: String; Var Major,Minor,Micro,Build : Word);
 | 
			
		||||
 | 
			
		||||
  Function NextDigit(sep : Char; var V : string) : integer;
 | 
			
		||||
  Var
 | 
			
		||||
    P : Integer;
 | 
			
		||||
  begin
 | 
			
		||||
    P:=Pos(Sep,V);
 | 
			
		||||
    If (P=0) then
 | 
			
		||||
      P:=Length(V)+1;
 | 
			
		||||
    Result:=StrToIntDef(Copy(V,1,P-1),0);
 | 
			
		||||
    If Result<>-1 then
 | 
			
		||||
      Delete(V,1,P)
 | 
			
		||||
    else
 | 
			
		||||
      Result:=0;
 | 
			
		||||
  end;
 | 
			
		||||
 | 
			
		||||
Var
 | 
			
		||||
  V : String;
 | 
			
		||||
begin
 | 
			
		||||
  Major:=0;
 | 
			
		||||
  Minor:=0;
 | 
			
		||||
  Micro:=0;
 | 
			
		||||
  Build:=0;
 | 
			
		||||
  V:=AValue;
 | 
			
		||||
  Major:=NextDigit('.',V);
 | 
			
		||||
  Minor:=NextDigit('.',V);
 | 
			
		||||
  Micro:=NextDigit('-',V);
 | 
			
		||||
  Build:=NextDigit(#0,V);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Function QuoteXML(S : String) : string;
 | 
			
		||||
 | 
			
		||||
  Procedure W(Var J : Integer; Var R : String; T : String);
 | 
			
		||||
@ -1836,6 +1839,7 @@ end;
 | 
			
		||||
constructor TPackage.Create(ACollection: TCollection);
 | 
			
		||||
begin
 | 
			
		||||
  inherited Create(ACollection);
 | 
			
		||||
  FVersion:=TFPVersion.Create;
 | 
			
		||||
  FTargets:=TTargets.Create(TTarget);
 | 
			
		||||
  FSources:=TSources.Create(TSource);
 | 
			
		||||
  FDependencies:=TDependencies.Create(TDependency);
 | 
			
		||||
@ -1868,6 +1872,7 @@ begin
 | 
			
		||||
  FreeAndNil(FUnitPath);
 | 
			
		||||
  FreeAndNil(FSources);
 | 
			
		||||
  FreeAndNil(FTargets);
 | 
			
		||||
  FreeAndNil(FVersion);
 | 
			
		||||
  inherited destroy;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
@ -1961,13 +1966,25 @@ begin
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Function TPackage.GetVersion : string;
 | 
			
		||||
begin
 | 
			
		||||
  result:=FVersion.AsString;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Procedure TPackage.SetVersion(const V : string);
 | 
			
		||||
begin
 | 
			
		||||
  FVersion.AsString:=V;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Function TPackage.GetFileName : string;
 | 
			
		||||
begin
 | 
			
		||||
  If (FFileName<>'') then
 | 
			
		||||
    Result:=FFileName
 | 
			
		||||
  else
 | 
			
		||||
    if Version <> '' then
 | 
			
		||||
      Result := Name + '-' + Version
 | 
			
		||||
    if not FVersion.Empty then
 | 
			
		||||
      Result := Name + '-' + FVersion.AsString
 | 
			
		||||
    else
 | 
			
		||||
      Result := Name;
 | 
			
		||||
end;
 | 
			
		||||
@ -2003,15 +2020,13 @@ Procedure TPackage.GetManifest(Manifest : TStrings);
 | 
			
		||||
 | 
			
		||||
Var
 | 
			
		||||
  S : String;
 | 
			
		||||
  Micro,Minor,Major,Build : Word;
 | 
			
		||||
  i : Integer;
 | 
			
		||||
  D : TDependency;
 | 
			
		||||
begin
 | 
			
		||||
  With Manifest do
 | 
			
		||||
    begin
 | 
			
		||||
    Add(Format('<package name="%s">',[QuoteXml(Name)]));
 | 
			
		||||
    SplitVersion(Version,Major,Minor,Micro,Build);
 | 
			
		||||
    Add(Format(' <version major="%d" minor="%d" micro="%d" build="%d"/>',[Major,Minor,Micro,Build]));
 | 
			
		||||
    Add(Format(' <version major="%d" minor="%d" micro="%d" build="%d"/>',[FVersion.Major,FVersion.Minor,FVersion.Micro,FVersion.Build]));
 | 
			
		||||
    AddOSes(' ',OSes);
 | 
			
		||||
    AddCPUs(' ',CPUs);
 | 
			
		||||
    Add(Format(' <filename>%s</filename>',[QuoteXml(FileName + ZipExt)]));
 | 
			
		||||
@ -2031,11 +2046,8 @@ begin
 | 
			
		||||
            D:=Dependencies[i];
 | 
			
		||||
            Add('  <dependency>');
 | 
			
		||||
            Add(Format('   <package packagename="%s"/>',[QuoteXML(D.Value)]));
 | 
			
		||||
            if D.Version<>'' then
 | 
			
		||||
              begin
 | 
			
		||||
                SplitVersion(D.Version,Major,Minor,Micro,Build);
 | 
			
		||||
                Add(Format('   <version major="%d" minor="%d" micro="%d" build="%d"/>',[Major,Minor,Micro,Build]));
 | 
			
		||||
              end;
 | 
			
		||||
            if not D.FVersion.Empty then
 | 
			
		||||
              Add(Format('   <version major="%d" minor="%d" micro="%d" build="%d"/>',[D.FVersion.Major,D.FVersion.Minor,D.FVersion.Micro,D.FVersion.Build]));
 | 
			
		||||
            AddOSes('   ',D.OSes);
 | 
			
		||||
            AddCPUs('   ',D.CPUs);
 | 
			
		||||
            Add('  </dependency>');
 | 
			
		||||
@ -4290,6 +4302,102 @@ begin
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{****************************************************************************
 | 
			
		||||
                               TFPVersion
 | 
			
		||||
****************************************************************************}
 | 
			
		||||
 | 
			
		||||
function TFPVersion.GetAsString: String;
 | 
			
		||||
begin
 | 
			
		||||
  if Empty then
 | 
			
		||||
    Result:='<none>'
 | 
			
		||||
  else
 | 
			
		||||
    Result:=Format('%d.%d.%d-%d',[Major,Minor,Micro,Build]);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
function TFPVersion.GetEmpty: Boolean;
 | 
			
		||||
begin
 | 
			
		||||
  Result:=(Major=0) and (Minor=0) and (Micro=0) and (Build=0);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TFPVersion.SetAsString(const AValue: String);
 | 
			
		||||
 | 
			
		||||
  Function NextDigit(sep : Char; var V : string) : integer;
 | 
			
		||||
 | 
			
		||||
  Var
 | 
			
		||||
    P : Integer;
 | 
			
		||||
 | 
			
		||||
  begin
 | 
			
		||||
    P:=Pos(Sep,V);
 | 
			
		||||
    If (P=0) then
 | 
			
		||||
      P:=Length(V)+1;
 | 
			
		||||
    Result:=StrToIntDef(Copy(V,1,P-1),-1);
 | 
			
		||||
    If Result<>-1 then
 | 
			
		||||
      Delete(V,1,P)
 | 
			
		||||
    else
 | 
			
		||||
      Result:=0;
 | 
			
		||||
  end;
 | 
			
		||||
 | 
			
		||||
Var
 | 
			
		||||
  V : String;
 | 
			
		||||
begin
 | 
			
		||||
  Clear;
 | 
			
		||||
  // Special support for empty version string
 | 
			
		||||
  if (AValue='') or (AValue='<none>') then
 | 
			
		||||
    exit;
 | 
			
		||||
  V:=AValue;
 | 
			
		||||
  Major:=NextDigit('.',V);
 | 
			
		||||
  Minor:=NextDigit('.',V);
 | 
			
		||||
  Micro:=NextDigit('-',V);
 | 
			
		||||
  Build:=NextDigit(#0,V);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TFPVersion.Clear;
 | 
			
		||||
begin
 | 
			
		||||
  Micro:=0;
 | 
			
		||||
  Major:=0;
 | 
			
		||||
  Minor:=0;
 | 
			
		||||
  Build:=0;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TFPVersion.Assign(Source: TPersistent);
 | 
			
		||||
 | 
			
		||||
Var
 | 
			
		||||
  V : TFPVersion;
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  if Source is TFPVersion then
 | 
			
		||||
    begin
 | 
			
		||||
    V:=Source as TFPVersion;
 | 
			
		||||
    Major:=V.Major;
 | 
			
		||||
    Minor:=V.Minor;
 | 
			
		||||
    Micro:=V.Micro;
 | 
			
		||||
    Build:=V.Build;
 | 
			
		||||
    end
 | 
			
		||||
  else
 | 
			
		||||
    inherited Assign(Source);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
function TFPVersion.CompareVersion(AVersion: TFPVersion): Integer;
 | 
			
		||||
begin
 | 
			
		||||
  Result:=Major-AVersion.Major;
 | 
			
		||||
  If (Result=0) then
 | 
			
		||||
    begin
 | 
			
		||||
      Result:=Minor-AVersion.Minor;
 | 
			
		||||
      if (Result=0) then
 | 
			
		||||
        begin
 | 
			
		||||
          Result:=Micro-AVersion.Micro;
 | 
			
		||||
          If (Result=0) then
 | 
			
		||||
            Result:=Build-AVersion.Build;
 | 
			
		||||
        end;
 | 
			
		||||
    end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
function TFPVersion.SameVersion(AVersion: TFPVersion): Boolean;
 | 
			
		||||
begin
 | 
			
		||||
  Result:=CompareVersion(AVersion)=0;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{****************************************************************************
 | 
			
		||||
                                 TTarget
 | 
			
		||||
****************************************************************************}
 | 
			
		||||
@ -4505,11 +4613,21 @@ begin
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{****************************************************************************
 | 
			
		||||
                           TConditionalString
 | 
			
		||||
****************************************************************************}
 | 
			
		||||
 | 
			
		||||
Constructor TConditionalString.Create;
 | 
			
		||||
begin
 | 
			
		||||
  inherited Create;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{****************************************************************************
 | 
			
		||||
                           TConditionalStrings
 | 
			
		||||
****************************************************************************}
 | 
			
		||||
 | 
			
		||||
Constructor TConditionalStrings.Create(AClass:TClass);
 | 
			
		||||
Constructor TConditionalStrings.Create(AClass:TConditionalStringClass);
 | 
			
		||||
begin
 | 
			
		||||
  inherited Create;
 | 
			
		||||
  FCSClass:=AClass;
 | 
			
		||||
@ -4550,7 +4668,7 @@ end;
 | 
			
		||||
 | 
			
		||||
Function TConditionalStrings.Add(Const Value : String;const CPUs:TCPUs;const OSes:TOSes) : TConditionalString;
 | 
			
		||||
begin
 | 
			
		||||
  Result:=FCSClass.Create as TConditionalString;
 | 
			
		||||
  Result:=FCSClass.Create;
 | 
			
		||||
  Result.Value:=Value;
 | 
			
		||||
  Result.OSes:=OSes;
 | 
			
		||||
  Result.CPUs:=CPUs;
 | 
			
		||||
@ -4558,6 +4676,35 @@ begin
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{****************************************************************************
 | 
			
		||||
                                TDependency
 | 
			
		||||
****************************************************************************}
 | 
			
		||||
 | 
			
		||||
Constructor TDependency.Create;
 | 
			
		||||
begin
 | 
			
		||||
  inherited Create;
 | 
			
		||||
  FVersion:=TFPVersion.Create;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Destructor TDependency.Destroy;
 | 
			
		||||
begin
 | 
			
		||||
  FreeAndNil(FVersion);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Function TDependency.GetVersion : string;
 | 
			
		||||
begin
 | 
			
		||||
  result:=FVersion.AsString;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Procedure TDependency.SetVersion(const V : string);
 | 
			
		||||
begin
 | 
			
		||||
  FVersion.AsString:=V;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{****************************************************************************
 | 
			
		||||
                                TDependencies
 | 
			
		||||
****************************************************************************}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user