mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-08 00:02:03 +02:00
codetools: added option -M syntaxmode
git-svn-id: trunk@61193 -
This commit is contained in:
parent
416f2defec
commit
2248ddea17
@ -38,7 +38,7 @@ uses
|
||||
AvgLvlTree, LazLogger, LazFileUtils, Laz2_XMLCfg, LazUTF8,
|
||||
// CodeTools
|
||||
FileProcs, BasicCodeTools, CodeToolManager, CodeCache, SourceChanger,
|
||||
CodeTree, DefineTemplates;
|
||||
CodeTree, DefineTemplates, LinkScanner;
|
||||
|
||||
type
|
||||
|
||||
@ -62,6 +62,7 @@ type
|
||||
FIncludePath: string;
|
||||
FLPKFilenames: TStrings;
|
||||
FRemovePrivateSections: boolean;
|
||||
FSyntaxMode: TCompilerMode;
|
||||
FUndefines: TStringToStringTree;
|
||||
FUnitFilenames: TStrings;
|
||||
FVerbosity: integer;
|
||||
@ -79,6 +80,7 @@ type
|
||||
destructor Destroy; override;
|
||||
procedure WriteHelp; virtual;
|
||||
property Verbosity: integer read FVerbosity write FVerbosity;
|
||||
property SyntaxMode: TCompilerMode read FSyntaxMode write FSyntaxMode;
|
||||
property Defines: TStringToStringTree read FDefines;
|
||||
property Undefines: TStringToStringTree read FUndefines;
|
||||
property IncludePath: string read FIncludePath write FIncludePath;
|
||||
@ -159,8 +161,8 @@ end;
|
||||
|
||||
procedure TSourceCloser.DoRun;
|
||||
const
|
||||
ShortOpts = 'hvqc:pd:u:i:ke:';
|
||||
LongOpts = 'help verbose quiet compileroptions: disablecompile define: undefine: includepath: keepprivate error:';
|
||||
ShortOpts = 'hvqc:pM:d:u:i:ke:';
|
||||
LongOpts = 'help verbose quiet compileroptions: disablecompile mode: define: undefine: includepath: keepprivate error:';
|
||||
var
|
||||
ErrMsgIsDefault: Boolean;
|
||||
|
||||
@ -174,6 +176,8 @@ var
|
||||
end;
|
||||
|
||||
procedure ParseValueParam(ShortOpt: char; Value: string);
|
||||
var
|
||||
m: TCompilerMode;
|
||||
begin
|
||||
case ShortOpt of
|
||||
'c':
|
||||
@ -198,6 +202,15 @@ var
|
||||
Value:=';'+Value;
|
||||
fIncludePath+=Value;
|
||||
end;
|
||||
'M':
|
||||
begin
|
||||
for m in TCompilerMode do
|
||||
if SameText(CompilerModeNames[m],Value) then begin
|
||||
SyntaxMode:=m;
|
||||
exit;
|
||||
end;
|
||||
E('invalid syntaxmode "'+Value+'"');
|
||||
end;
|
||||
'd':
|
||||
begin
|
||||
if not IsValidIdent(Value) then
|
||||
@ -310,6 +323,7 @@ begin
|
||||
Option:=copy(Param,3,p-3);
|
||||
delete(Param,1,p);
|
||||
if Option='compileroptions' then Option:='c'
|
||||
else if Option='mode' then Option:='M'
|
||||
else if Option='define' then Option:='d'
|
||||
else if Option='undefine' then Option:='u'
|
||||
else if Option='includepath' then Option:='i'
|
||||
@ -347,11 +361,39 @@ begin
|
||||
end;
|
||||
|
||||
procedure TSourceCloser.ApplyDefines;
|
||||
|
||||
procedure AddDefine(const MacroName, Value: string);
|
||||
var
|
||||
DefTemplate: TDefineTemplate;
|
||||
begin
|
||||
DefTemplate:=TDefineTemplate.Create('Define '+MacroName,
|
||||
'Define '+MacroName,
|
||||
MacroName,Value,da_DefineRecurse);
|
||||
CodeToolBoss.DefineTree.Add(DefTemplate);
|
||||
end;
|
||||
|
||||
procedure AddUndefine(const MacroName: string);
|
||||
var
|
||||
DefTemplate: TDefineTemplate;
|
||||
begin
|
||||
DefTemplate:=TDefineTemplate.Create('Undefine '+MacroName,
|
||||
'Undefine '+MacroName,
|
||||
MacroName,'',da_UndefineRecurse);
|
||||
CodeToolBoss.DefineTree.Add(DefTemplate);
|
||||
end;
|
||||
|
||||
procedure AddDefineUndefine(const AName: string; Define: boolean);
|
||||
begin
|
||||
if Define then
|
||||
AddDefine(AName,'')
|
||||
else
|
||||
AddUndefine(AName);
|
||||
end;
|
||||
|
||||
var
|
||||
IncPathTemplate: TDefineTemplate;
|
||||
S2SItem: PStringToStringItem;
|
||||
MacroName: String;
|
||||
DefTemplate: TDefineTemplate;
|
||||
m: Integer;
|
||||
begin
|
||||
if fDefinesApplied then exit;
|
||||
fDefinesApplied:=true;
|
||||
@ -367,20 +409,15 @@ begin
|
||||
);
|
||||
CodeToolBoss.DefineTree.Add(IncPathTemplate);
|
||||
end;
|
||||
for S2SItem in Defines do begin
|
||||
MacroName:=S2SItem^.Name;
|
||||
DefTemplate:=TDefineTemplate.Create('Define '+MacroName,
|
||||
'Define '+MacroName,
|
||||
MacroName,S2SItem^.Value,da_DefineRecurse);
|
||||
CodeToolBoss.DefineTree.Add(DefTemplate);
|
||||
end;
|
||||
for S2SItem in Undefines do begin
|
||||
MacroName:=S2SItem^.Name;
|
||||
DefTemplate:=TDefineTemplate.Create('Undefine '+MacroName,
|
||||
'Undefine '+MacroName,
|
||||
MacroName,'',da_UndefineRecurse);
|
||||
CodeToolBoss.DefineTree.Add(DefTemplate);
|
||||
end;
|
||||
|
||||
for m:=low(FPCSyntaxModes) to high(FPCSyntaxModes) do
|
||||
AddDefineUndefine('FPC_'+FPCSyntaxModes[m],
|
||||
SameText(CompilerModeNames[SyntaxMode],FPCSyntaxModes[m]));
|
||||
|
||||
for S2SItem in Defines do
|
||||
AddDefine(S2SItem^.Name,S2SItem^.Value);
|
||||
for S2SItem in Undefines do
|
||||
AddUndefine(S2SItem^.Name);
|
||||
end;
|
||||
|
||||
procedure TSourceCloser.ConvertLPK(LPKFilename: string);
|
||||
@ -541,6 +578,7 @@ constructor TSourceCloser.Create(TheOwner: TComponent);
|
||||
begin
|
||||
inherited Create(TheOwner);
|
||||
StopOnException:=True;
|
||||
FSyntaxMode:=cmOBJFPC;
|
||||
fDefines:=TStringToStringTree.Create(false);
|
||||
FUndefines:=TStringToStringTree.Create(false);
|
||||
FLPKFilenames:=TStringList.Create;
|
||||
@ -589,6 +627,7 @@ begin
|
||||
writeln(' -p, --disablecompile');
|
||||
writeln(' Remove all compile commands from lpk.');
|
||||
writeln('Unit options:');
|
||||
writeln(' -M <SyntaxMode>, --mode=<SyntaxMode> : delphi|delphiunicode|objfpc|fpc|macpas, default: '+CompilerModeNames[SyntaxMode]);
|
||||
writeln(' -d <MacroName>, --define=<MacroName> :');
|
||||
writeln(' Define Free Pascal macro. Can be passed multiple times.');
|
||||
writeln(' -u <MacroName>, --undefine=<MacroName> :');
|
||||
|
Loading…
Reference in New Issue
Block a user