From 2248ddea17ae8ed33d7305356c8cb3d09aede946 Mon Sep 17 00:00:00 2001 From: mattias Date: Fri, 10 May 2019 08:23:03 +0000 Subject: [PATCH] codetools: added option -M syntaxmode git-svn-id: trunk@61193 - --- .../codetools/examples/sourcecloser.lpr | 77 ++++++++++++++----- 1 file changed, 58 insertions(+), 19 deletions(-) diff --git a/components/codetools/examples/sourcecloser.lpr b/components/codetools/examples/sourcecloser.lpr index d572ece053..f6b00cd2a2 100644 --- a/components/codetools/examples/sourcecloser.lpr +++ b/components/codetools/examples/sourcecloser.lpr @@ -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 , --mode= : delphi|delphiunicode|objfpc|fpc|macpas, default: '+CompilerModeNames[SyntaxMode]); writeln(' -d , --define= :'); writeln(' Define Free Pascal macro. Can be passed multiple times.'); writeln(' -u , --undefine= :');