+ initial (and so far experimental) implementation of -ix to output -i in xml format for further automated processing

git-svn-id: trunk@48897 -
This commit is contained in:
florian 2021-03-07 14:11:09 +00:00
parent 9fbaa28df7
commit b0772ae749

View File

@ -212,6 +212,7 @@ var
p : pchar;
hs,hs1,hs3,s : TCmdStr;
J: longint;
xmloutput: Text;
const
NewLineStr = '$\n';
OSTargetsPlaceholder = '$OSTARGETS';
@ -407,6 +408,17 @@ const
end;
end;
procedure ListOptimizationsXML;
var
opt: toptimizerswitch;
begin
WriteLn(xmloutput,'<optimizations>');
for opt:=low(toptimizerswitch) to high(toptimizerswitch) do
if OptimizerSwitchStr[opt]<>'' then
WriteLn(xmloutput,'<optimization name="',OptimizerSwitchStr[opt],'"/>');
WriteLn(xmloutput,'</optimizations>');
end;
procedure ListWPOptimizations (OrigString: TCmdStr);
var
wpopt: twpoptimizerswitch;
@ -502,6 +514,23 @@ const
{$POP}
end;
procedure ListControllerTypesXML;
var
controllertype : tcontrollertype;
begin
{$PUSH}
{$WARN 6018 OFF} (* Unreachable code due to compile time evaluation *)
if (ControllerSupport) then
begin
WriteLn(xmloutput,'<controllertypes>');
for controllertype:=low(tcontrollertype) to high(tcontrollertype) do
if embedded_controllers[controllertype].ControllerTypeStr<>'' then
WriteLn(xmloutput,'<controllertype name="',embedded_controllers[controllertype].ControllerTypeStr,'"/>');
WriteLn(xmloutput,'</controllertypes>');
end;
{$POP}
end;
procedure ListFeatures (OrigString: TCmdStr);
var
Feature: TFeature;
@ -627,31 +656,44 @@ begin
Comment(V_Normal,s);
end;
end
else if Copy(More,1,1) = 'x' then
begin
Assign(xmloutput,Copy(More,2,length(More)-1));
Rewrite(xmloutput);
WriteLn(xmloutput,'<?xml version="1.0" encoding="utf-8"?>');
WriteLn(xmloutput,'<fpcoutput>');
WriteLn(xmloutput,'<info>');
ListOptimizationsXML;
ListControllerTypesXML;
WriteLn(xmloutput,'</info>');
WriteLn(xmloutput,'</fpcoutput>');
Close(xmloutput);
end
else
begin
J := 1;
while J <= Length (More) do
begin
if J > 1 then
Comment(V_Normal,''); (* Put empty line between multiple sections *)
case More [J] of
'a': ListABITargets ('');
'b': Comment(V_Normal, cgbackend2str[cgbackend]);
'c': ListCPUInstructionSets ('');
'f': ListFPUInstructionSets ('');
'i': ListAsmModes ('');
'm': ListModeswitches ('');
'o': ListOptimizations ('');
'r': ListFeatures ('');
't': ListOSTargets ('');
'u': ListControllerTypes ('');
'w': ListWPOptimizations ('');
else
IllegalPara ('-i' + More);
J := 1;
while J <= Length (More) do
begin
if J > 1 then
Comment(V_Normal,''); (* Put empty line between multiple sections *)
case More [J] of
'a': ListABITargets ('');
'b': Comment(V_Normal, cgbackend2str[cgbackend]);
'c': ListCPUInstructionSets ('');
'f': ListFPUInstructionSets ('');
'i': ListAsmModes ('');
'm': ListModeswitches ('');
'o': ListOptimizations ('');
'r': ListFeatures ('');
't': ListOSTargets ('');
'u': ListControllerTypes ('');
'w': ListWPOptimizations ('');
else
IllegalPara ('-i' + More);
end;
Inc (J);
end;
Inc (J);
end;
end;
end;
StopOptions(0);
end;
@ -1952,7 +1994,7 @@ begin
'i' :
begin
if (More='') or
(More [1] in ['a', 'b', 'c', 'f', 'i', 'm', 'o', 'r', 't', 'u', 'w']) then
(More [1] in ['a', 'b', 'c', 'f', 'i', 'm', 'o', 'r', 't', 'u', 'w', 'x']) then
WriteInfo (More)
else
QuickInfo:=QuickInfo+More;