You've already forked lazarus-ccr
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2802 8e941d3f-bd1b-0410-a28a-d453659cc2b4
127 lines
2.8 KiB
ObjectPascal
127 lines
2.8 KiB
ObjectPascal
unit cfgcompoptreg;
|
|
|
|
{$mode delphi}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, Forms, Dialogs
|
|
, LazIDEIntf, MenuIntf
|
|
, cmdlinecfg, cmdlinecfgutils
|
|
, cmdlinecfgjson, cmdlinecfgui, cmdlinecfguijson
|
|
, optviewform
|
|
, XMLConf;
|
|
|
|
procedure Register;
|
|
|
|
var
|
|
listOfOpt : TList;
|
|
listOfLayout : TList;
|
|
|
|
CompOptVers : string; // the version of fpc compiler used
|
|
CompOptCfg : TCmdLineCfg; // fpc compiler options
|
|
CfgLayout : TCmdLineLayoutInfo; // compiler options layout hints
|
|
|
|
implementation
|
|
|
|
resourcestring
|
|
mnuViewCfgCompilerOpt = 'Review Compiler Options';
|
|
|
|
function GetCompilerPath: string;
|
|
var
|
|
path : string;
|
|
xml : TXMLConfig;
|
|
begin
|
|
//appears to be a hack, but is there a better way to do that?
|
|
path := LazarusIDE.GetPrimaryConfigPath;
|
|
xml := TXMLConfig.Create(nil);
|
|
try
|
|
xml.RootName:='CONFIG';
|
|
xml.Filename:=IncludeTrailingPathDelimiter(path)+'environmentoptions.xml';
|
|
Result:=xml.GetValue('EnvironmentOptions/CompilerFilename/Value', '');
|
|
finally
|
|
xml.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure ReviewCompOpt(Sender: TObject);
|
|
var
|
|
cmp : string;
|
|
begin
|
|
if not Assigned(CompOptCfg) then begin
|
|
cmp:=GetCompilerPath;
|
|
if cmp<>'' then
|
|
CompOptCfg:=CmdLineCfgDetect(listOfOpt, ExtractFileDir(cmp), cmp);
|
|
end;
|
|
|
|
//todo: better selection of default options
|
|
if not Assigned(CompOptCfg) and (listOfOpt.Count>0) then
|
|
CompOptCfg:=TCmdLineCfg(listOfOpt[0]);
|
|
|
|
if not Assigned(CompOptCfg) then begin
|
|
ShowMessage('Unable to detect the compiler version.');
|
|
Exit;
|
|
end;
|
|
|
|
if Assigned(LazarusIDE.ActiveProject) then begin
|
|
if not Assigned(OptView) then OptView:=TOptView.Create(Application);
|
|
ReviewOpts(CompOptCfg, CfgLayout);
|
|
end;
|
|
end;
|
|
|
|
procedure DoRegister;
|
|
var
|
|
cmd : TIDEMenuCommand;
|
|
begin
|
|
cmd := RegisterIDEMenuCommand(itmProjectWindowSection, 'showCfgCompOpt',
|
|
mnuViewCfgCompilerOpt, nil, ReviewCompOpt, nil, '');
|
|
end;
|
|
|
|
procedure ReadConfig;
|
|
var
|
|
path : string;
|
|
begin
|
|
path:=ExcludeTrailingPathDelimiter(LazarusIDE.GetPrimaryConfigPath);
|
|
if not DirectoryExists( path ) then path:=ExcludeTrailingPathDelimiter(LazarusIDE.GetSecondaryConfigPath );
|
|
CmdLineCfgJSONLoadFilesFromDir( path , listOfOpt );
|
|
CmdLineCfgUIJSONLoadFilesFromDir( path , listOfLayout );
|
|
|
|
|
|
//todo: make a smarter layout selection
|
|
if listOfLayout.Count>0 then CfgLayout:=TCmdLineLayoutInfo(listOfLayout[0]);
|
|
end;
|
|
|
|
procedure Register;
|
|
begin
|
|
try
|
|
DoRegister;
|
|
ReadConfig;
|
|
except
|
|
end;
|
|
end;
|
|
|
|
procedure Init;
|
|
begin
|
|
listOfOpt := TList.Create;
|
|
listOfLayout := TList.Create;
|
|
end;
|
|
|
|
procedure Release;
|
|
var
|
|
i : integer;
|
|
begin
|
|
for i:=0 to listOfOpt.Count-1 do TObject(listOfOpt[i]).Free;
|
|
listOfOpt.Free;
|
|
for i:=0 to listOfLayout.Count-1 do TObject(listOfLayout[i]).Free;
|
|
listOfLayout.Free;
|
|
end;
|
|
|
|
initialization
|
|
Init;
|
|
|
|
finalization
|
|
Release;
|
|
|
|
end.
|
|
|