Added the option --unit-prefix to gir2pascal so that you can add a prefix to the generated units names.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2878 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
drewski207
2014-01-06 04:58:26 +00:00
parent ae7df38f31
commit e5985bac85
3 changed files with 31 additions and 15 deletions

View File

@ -41,6 +41,7 @@ type
FPaths: TStringList; FPaths: TStringList;
FOutPutDirectory : String; FOutPutDirectory : String;
FFileToConvert: String; FFileToConvert: String;
FUnitPrefix: String;
FOverWriteFiles: Boolean; FOverWriteFiles: Boolean;
FOptions: TgirOptions; FOptions: TgirOptions;
procedure AddDefaultPaths; procedure AddDefaultPaths;
@ -178,7 +179,7 @@ begin
girFile.ParseXMLDocument(Doc); girFile.ParseXMLDocument(Doc);
Doc.Free; Doc.Free;
Writer := TgirPascalWriter.Create(girFile.NameSpaces, FOptions); Writer := TgirPascalWriter.Create(girFile.NameSpaces, FOptions, FUnitPrefix);
Writer.OnUnitWriteEvent:= @WriteFile; Writer.OnUnitWriteEvent:= @WriteFile;
Writer.GenerateUnits; Writer.GenerateUnits;
@ -259,6 +260,9 @@ begin
FFileToConvert:=FCmdOptions.OptionValue('input'); FFileToConvert:=FCmdOptions.OptionValue('input');
AddPaths(ExtractFilePath(FFileToConvert)); AddPaths(ExtractFilePath(FFileToConvert));
if FCmdOptions.HasOption('unit-prefix') then
FUnitPrefix := FCmdOptions.OptionValue('unit-prefix');
if FCmdOptions.HasOption('paths') then if FCmdOptions.HasOption('paths') then
AddPaths(FCmdOptions.OptionValue('paths')); AddPaths(FCmdOptions.OptionValue('paths'));

View File

@ -33,12 +33,13 @@ type
TgirPascalWriter = class TgirPascalWriter = class
private private
FDefaultUnitExtension: String; FDefaultUnitExtension: String;
FUnitPrefix: String;
FOnUnitWriteEvent: TgirWriteEvent; FOnUnitWriteEvent: TgirWriteEvent;
FNameSpaces: TgirNamespaces; FNameSpaces: TgirNamespaces;
FUnits: TList; FUnits: TList;
FOptions: TgirOptions; FOptions: TgirOptions;
public public
constructor Create(ANameSpaces: TgirNamespaces; AOptions: TgirOptions); constructor Create(ANameSpaces: TgirNamespaces; AOptions: TgirOptions; AUnitPrefix: String);
procedure GenerateUnits; procedure GenerateUnits;
property OnUnitWriteEvent: TgirWriteEvent read FOnUnitWriteEvent write FOnUnitWriteEvent; property OnUnitWriteEvent: TgirWriteEvent read FOnUnitWriteEvent write FOnUnitWriteEvent;
property DefaultUnitExtension: String read FDefaultUnitExtension write FDefaultUnitExtension; // is .pas by default property DefaultUnitExtension: String read FDefaultUnitExtension write FDefaultUnitExtension; // is .pas by default
@ -52,9 +53,10 @@ uses girCTypesMapping;
{ TgirPascalWriter } { TgirPascalWriter }
constructor TgirPascalWriter.Create(ANameSpaces: TgirNamespaces; AOptions: TgirOptions); constructor TgirPascalWriter.Create(ANameSpaces: TgirNamespaces; AOptions: TgirOptions; AUnitPrefix: String);
begin begin
FNameSpaces := ANameSpaces; FNameSpaces := ANameSpaces;
FUnitPrefix := AUnitPrefix;
FUnits := TList.Create; FUnits := TList.Create;
FDefaultUnitExtension:='.pas'; FDefaultUnitExtension:='.pas';
FOptions:=AOptions; FOptions:=AOptions;
@ -70,7 +72,7 @@ begin
for i := 0 to FNameSpaces.Count-1 do for i := 0 to FNameSpaces.Count-1 do
begin begin
WriteLn(Format('Converting %s', [FNameSpaces.NameSpace[i].NameSpace])); WriteLn(Format('Converting %s', [FNameSpaces.NameSpace[i].NameSpace]));
UnitGroup := TPascalUnitGroup.Create(Self, FNameSpaces.NameSpace[i], FOptions); UnitGroup := TPascalUnitGroup.Create(Self, FNameSpaces.NameSpace[i], FOptions, FUnitPrefix);
UnitGroup.GenerateUnits; UnitGroup.GenerateUnits;
end; end;
end; end;

View File

@ -152,12 +152,13 @@ type
FSimpleUnit: Boolean; FSimpleUnit: Boolean;
FOptions: TgirOptions; FOptions: TgirOptions;
FNameSpace: TgirNamespace; FNameSpace: TgirNamespace;
FUnitPrefix: String;
FWriter: TObject;//girPascalWriter; FWriter: TObject;//girPascalWriter;
FUnits: TFPList; FUnits: TFPList;
//Units: array[TPascalUnitType] of TPascalUnit; //Units: array[TPascalUnitType] of TPascalUnit;
function GetUnitForType(AType: TPascalUnitType): TPascalUnit; function GetUnitForType(AType: TPascalUnitType): TPascalUnit;
public public
constructor Create(AWriter: TObject{TgirPascalWriter}; ANameSpace: TgirNamespace; AOptions: TgirOptions); constructor Create(AWriter: TObject{TgirPascalWriter}; ANameSpace: TgirNamespace; AOptions: TgirOptions; AUnitPrefix: String);
destructor Destroy; override; destructor Destroy; override;
procedure GenerateUnits; procedure GenerateUnits;
property UnitForType[AType: TPascalUnitType]: TPascalUnit read GetUnitForType; property UnitForType[AType: TPascalUnitType]: TPascalUnit read GetUnitForType;
@ -170,6 +171,7 @@ type
private private
FDynamicLoadUnloadSection: TPCodeText; FDynamicLoadUnloadSection: TPCodeText;
FDynamicEntryNames: TStringList; FDynamicEntryNames: TStringList;
FUnitPrefix: String;
FGroup : TPascalUnitGroup; FGroup : TPascalUnitGroup;
FOptions: TgirOptions; FOptions: TgirOptions;
FFinalizeSection: TPFinialization; FFinalizeSection: TPFinialization;
@ -187,6 +189,7 @@ type
function GetUnitFileName: String; function GetUnitFileName: String;
function GetUnitName: String; function GetUnitName: String;
function GetUnitPostfix: String; function GetUnitPostfix: String;
function UnitPrefix: String;
// functions to ensure the type is being written in the correct declaration // functions to ensure the type is being written in the correct declaration
function WantTypeSection: TPDeclarationType; function WantTypeSection: TPDeclarationType;
@ -241,7 +244,7 @@ type
procedure ResolveFuzzyTypes; procedure ResolveFuzzyTypes;
procedure AddTestType(AGType: TgirGType); procedure AddTestType(AGType: TgirGType);
public public
constructor Create(AGroup: TPascalUnitGroup; ANameSpace: TgirNamespace; AOptions: TgirOptions; AUnitType: TPascalUnitTypes); constructor Create(AGroup: TPascalUnitGroup; ANameSpace: TgirNamespace; AOptions: TgirOptions; AUnitType: TPascalUnitTypes; AUnitPrefix: String);
destructor Destroy; override; destructor Destroy; override;
procedure ProcessConsts(AList:TList); // of TgirBaseType descandants procedure ProcessConsts(AList:TList); // of TgirBaseType descandants
procedure ProcessTypes(AList:TFPHashObjectList); // of TgirBaseType descandants procedure ProcessTypes(AList:TFPHashObjectList); // of TgirBaseType descandants
@ -324,17 +327,18 @@ begin
end; end;
constructor TPascalUnitGroup.Create(AWriter:TObject{TgirPascalWriter}; ANameSpace: TgirNamespace; constructor TPascalUnitGroup.Create(AWriter:TObject{TgirPascalWriter}; ANameSpace: TgirNamespace;
AOptions: TgirOptions); AOptions: TgirOptions; AUnitPrefix: String);
begin begin
FWriter := AWriter; FWriter := AWriter;
FNameSpace := ANameSpace; FNameSpace := ANameSpace;
FOptions := AOptions; FOptions := AOptions;
FUnits := TFPList.Create; FUnits := TFPList.Create;
FUnitPrefix:=AUnitPrefix;
FSimpleUnit := ([goSeperateConsts, goClasses, goObjects] * AOptions ) = []; FSimpleUnit := ([goSeperateConsts, goClasses, goObjects] * AOptions ) = [];
if FSimpleUnit then if FSimpleUnit then
begin begin
FUnits.Add(TPascalUnit.Create(Self, FNameSpace, FOptions, PascalUnitTypeAll)); FUnits.Add(TPascalUnit.Create(Self, FNameSpace, FOptions, PascalUnitTypeAll, FUnitPrefix));
//Units[utSimple] := TPascalUnit.Create(Self, FNameSpace, FOptions, [utSimple]) //Units[utSimple] := TPascalUnit.Create(Self, FNameSpace, FOptions, [utSimple])
end end
@ -343,11 +347,11 @@ begin
//Units[utConsts] := TPascalUnit.Create(Self, FNameSpace, FOptions, [utConsts]); //Units[utConsts] := TPascalUnit.Create(Self, FNameSpace, FOptions, [utConsts]);
//Units[utTypes] := TPascalUnit.Create(Self, FNameSpace, FOptions, [utTypes]); //Units[utTypes] := TPascalUnit.Create(Self, FNameSpace, FOptions, [utTypes]);
//Units[utFunctions] := TPascalUnit.Create(Self, FNameSpace, FOptions, [utFunctions]); //Units[utFunctions] := TPascalUnit.Create(Self, FNameSpace, FOptions, [utFunctions]);
FUnits.Add(TPascalUnit.Create(Self, FNameSpace, FOptions, PascalUnitTypeCommon)); FUnits.Add(TPascalUnit.Create(Self, FNameSpace, FOptions, PascalUnitTypeCommon, FUnitPrefix));
if goClasses in FOptions then if goClasses in FOptions then
FUnits.Add(TPascalUnit.Create(Self, FNameSpace, FOptions, [utClasses])) FUnits.Add(TPascalUnit.Create(Self, FNameSpace, FOptions, [utClasses], FUnitPrefix))
else else
FUnits.Add(TPascalUnit.Create(Self, FNameSpace, FOptions, [utObjects])) FUnits.Add(TPascalUnit.Create(Self, FNameSpace, FOptions, [utObjects], FUnitPrefix))
end; end;
end; end;
@ -560,7 +564,7 @@ end;
function TPascalUnit.GetUnitFileName: String; function TPascalUnit.GetUnitFileName: String;
begin begin
Result := UnitName+GetUnitPostfix; Result := UnitPrefix+UnitName+GetUnitPostfix;
end; end;
function TPascalUnit.GetUnitPostfix: String; function TPascalUnit.GetUnitPostfix: String;
@ -803,6 +807,11 @@ begin
FTestPascalBody.Add(Format('Test_%s;',[AGType.CType])); //call pascal testproc FTestPascalBody.Add(Format('Test_%s;',[AGType.CType])); //call pascal testproc
end; end;
function TPascalUnit.UnitPrefix: String;
begin
Result := FUnitPrefix;
end;
function TPascalUnit.WantTypeSection: TPDeclarationType; function TPascalUnit.WantTypeSection: TPDeclarationType;
begin begin
if (InterfaceSection.Declarations.Count = 0) if (InterfaceSection.Declarations.Count = 0)
@ -2160,7 +2169,7 @@ begin
end; end;
end; end;
constructor TPascalUnit.Create(AGroup: TPascalUnitGroup; ANameSpace: TgirNamespace; AOptions: TgirOptions; AUnitType: TPascalUnitTypes); constructor TPascalUnit.Create(AGroup: TPascalUnitGroup; ANameSpace: TgirNamespace; AOptions: TgirOptions; AUnitType: TPascalUnitTypes; AUnitPrefix: String);
const const
//CBasic = '#include <%s>'+LineEnding; //CBasic = '#include <%s>'+LineEnding;
PBasic = 'program %s_test;'+LineEnding+ PBasic = 'program %s_test;'+LineEnding+
@ -2182,6 +2191,7 @@ begin
FGroup := AGroup; FGroup := AGroup;
FOptions := AOptions; FOptions := AOptions;
FUnitType:=AUnitType; FUnitType:=AUnitType;
FUnitPrefix := AUnitPrefix;
FFinalizeSection := TPFinialization.Create(Self); FFinalizeSection := TPFinialization.Create(Self);
FImplementationSection := TPImplementation.Create(Self); FImplementationSection := TPImplementation.Create(Self);
FInitializeSection := TPInitialize.Create(Self); FInitializeSection := TPInitialize.Create(Self);
@ -2310,7 +2320,7 @@ begin
for i := 0 to FNameSpace.RequiredNameSpaces.Count-1 do for i := 0 to FNameSpace.RequiredNameSpaces.Count-1 do
begin begin
NS := TgirNamespace(FNameSpace.RequiredNameSpaces.Items[i]); NS := TgirNamespace(FNameSpace.RequiredNameSpaces.Items[i]);
NeedUnit:=CalculateUnitName(NS.NameSpace,NS.Version); NeedUnit:=UnitPrefix+CalculateUnitName(NS.NameSpace,NS.Version);
if FUnitType = PascalUnitTypeAll then if FUnitType = PascalUnitTypeAll then
InterfaceSection.UsesSection.Units.Add(' '+NeedUnit) InterfaceSection.UsesSection.Units.Add(' '+NeedUnit)
@ -2377,7 +2387,7 @@ begin
Libs := GetLibs; Libs := GetLibs;
Result := TStringStream.Create(''); Result := TStringStream.Create('');
Str.WriteString(IndentText('{ This is an autogenerated unit using gobject introspection (gir2pascal). Do not Edit. }',0,1)); Str.WriteString(IndentText('{ This is an autogenerated unit using gobject introspection (gir2pascal). Do not Edit. }',0,1));
Str.WriteString(IndentText('unit '+ UnitFileName+';',0,2)); Str.WriteString(IndentText('unit '+ UnitPrefix+UnitFileName+';',0,2));
Str.WriteString(IndentText('{$MODE OBJFPC}{$H+}',0,2)); Str.WriteString(IndentText('{$MODE OBJFPC}{$H+}',0,2));
if utTypes in FUnitType then if utTypes in FUnitType then
Str.WriteString(IndentText('{$PACKRECORDS C}',0,1)); Str.WriteString(IndentText('{$PACKRECORDS C}',0,1));