IDE: fixed command line help

git-svn-id: trunk@42496 -
This commit is contained in:
mattias 2013-08-25 16:43:04 +00:00
parent fc3240996d
commit 02345b4e6a
2 changed files with 33 additions and 17 deletions

View File

@ -1015,17 +1015,22 @@ function TCompilerOptReader.ReadAndParseOptions: TModalResult;
var
Lines: TStringList;
ParsedTarget: String;
t: array[0..5] of TDateTime;
i: Integer;
begin
OptionIdCounter := 0;
fErrorMsg := '';
t[0]:=Now;
if fCompilerExecutable = '' then
fCompilerExecutable := 'fpc'; // Let's hope "fpc" is found in PATH.
ParsedTarget := '-T$(TargetOS) -P$(TargetCPU)';
if not GlobalMacroList.SubstituteStr(ParsedTarget) then
raise Exception.CreateFmt('ReadAndParseOptions: Cannot substitute macros "%s".',
[ParsedTarget]);
t[1]:=Now;
// FPC with option -i
Lines:=RunTool(fCompilerExecutable, ParsedTarget + ' -i');
t[2]:=Now;
try
if Lines = Nil then Exit(mrCancel);
Result := ParseI(Lines);
@ -1033,14 +1038,21 @@ begin
finally
Lines.Free;
end;
t[3]:=Now;
// FPC with option -h
Lines:=RunTool(fCompilerExecutable, ParsedTarget + ' -h');
t[4]:=Now;
try
if Lines = Nil then Exit(mrCancel);
Result := ParseH(Lines);
finally
Lines.Free;
end;
t[5]:=Now;
debugln(['TCompilerOptReader.ReadAndParseOptions ']);
for i:=1 to high(t) do begin
debugln([' ',i,' ',round((t[i]-t[i-1])*86400*1000)]);
end;
end;
function TCompilerOptReader.FilterOptions(aFilter: string; aOnlySelected: Boolean): Boolean;
@ -1203,6 +1215,7 @@ begin
fReader.ErrorMsg := 'Error parsing options: '+E.Message;
end;
fReadTime := Now-StartTime;
debugln(['TCompilerOptThread.Execute ',round(fReadTime*86400*1000)]);
end;

View File

@ -1064,34 +1064,37 @@ var
procedure AddHelp(Args: array of const);
var
i: Integer;
s: String;
begin
s:='';
for i := Low(Args) to High(Args) do
begin
case Args[i].VType of
vtInteger: AHelp.Add(dbgs(Args[i].vinteger));
vtInt64: AHelp.Add(dbgs(Args[i].VInt64^));
vtQWord: AHelp.Add(dbgs(Args[i].VQWord^));
vtBoolean: AHelp.Add(dbgs(Args[i].vboolean));
vtExtended: AHelp.Add(dbgs(Args[i].VExtended^));
vtInteger: s+=dbgs(Args[i].vinteger);
vtInt64: s+=dbgs(Args[i].VInt64^);
vtQWord: s+=dbgs(Args[i].VQWord^);
vtBoolean: s+=dbgs(Args[i].vboolean);
vtExtended: s+=dbgs(Args[i].VExtended^);
{$ifdef FPC_CURRENCY_IS_INT64}
// fpc 2.x has troubles in choosing the right dbgs()
// so we convert here
vtCurrency: AHelp.Add(dbgs(int64(Args[i].vCurrency^)/10000, 4));
vtCurrency: s+=dbgs(int64(Args[i].vCurrency^)/10000, 4);
{$else}
vtCurrency: AHelp.Add(dbgs(Args[i].vCurrency^));
vtCurrency: s+=dbgs(Args[i].vCurrency^);
{$endif}
vtString: AHelp.Add(Args[i].VString^);
vtAnsiString: AHelp.Add(AnsiString(Args[i].VAnsiString));
vtChar: AHelp.Add(Args[i].VChar);
vtPChar: AHelp.Add(Args[i].VPChar);
vtPWideChar: AHelp.Add(Args[i].VPWideChar);
vtWideChar: AHelp.Add(Args[i].VWideChar{%H-});
vtWidestring: AHelp.Add(WideString(Args[i].VWideString){%H-});
vtObject: AHelp.Add(DbgSName(Args[i].VObject));
vtClass: AHelp.Add(DbgSName(Args[i].VClass));
vtPointer: AHelp.Add(Dbgs(Args[i].VPointer));
vtString: s+=Args[i].VString^;
vtAnsiString: s+=AnsiString(Args[i].VAnsiString);
vtChar: s+=Args[i].VChar;
vtPChar: s+=Args[i].VPChar;
vtPWideChar: s+=Args[i].VPWideChar;
vtWideChar: s+=Args[i].VWideChar{%H-};
vtWidestring: s+=WideString(Args[i].VWideString){%H-};
vtObject: s+=DbgSName(Args[i].VObject);
vtClass: s+=DbgSName(Args[i].VClass);
vtPointer: s+=Dbgs(Args[i].VPointer);
end;
end;
AHelp.Add(s);
end;
procedure WriteHelp(const AText: string);