* Move flag to generate config file to project settings

This commit is contained in:
Michaël Van Canneyt 2023-05-15 21:16:15 +02:00
parent 34a99c8781
commit c839f41e37
10 changed files with 239 additions and 51 deletions

View File

@ -38,7 +38,6 @@ Type
procedure Reset;
class property Instance : TDelphiToolOptions Read _Instance;
Property CompilerFileName : String Read FCompilerFileName Write FCompilerFileName;
Property GenerateConfigFile : Boolean Read FGenerateConfigFile Write FGenerateConfigFile;
Property ConfigFileExtension : String Read FConfigFileExtension Write FConfigFileExtension;
Property ConvertPathsToUnix : Boolean Read FConvertPathsToUnix Write FConvertPathsToUnix;
Property AdditionalOptions : String Read FAdditionalOptions Write FAdditionalOptions;
@ -60,19 +59,17 @@ end;
procedure TDelphiToolOptions.LoadFromConfig(Cfg: TConfigStorage);
begin
CompilerFilename:=Cfg.GetValue(KeyCompiler, CompilerFilename);
GenerateConfigFile:=Cfg.GetValue(KeyGenConfigFile, GenerateConfigFile);
ConfigFileExtension:=Cfg.GetValue(KeyConfigFileExt, ConfigFileExtension);
ConvertPathsToUnix:=Cfg.GetValue(KeyConvertPaths, ConvertPathsToUnix);
AdditionalOptions:=Cfg.GetValue(KeyConvertPaths, AdditionalOptions);
AdditionalOptions:=Cfg.GetValue(KeyAdditionalOptions, AdditionalOptions);
end;
procedure TDelphiToolOptions.SaveToConfig(Cfg: TConfigStorage);
begin
Cfg.SetDeleteValue(KeyCompiler, CompilerFilename, DefaultCompilerFileName);
Cfg.SetDeleteValue(KeyGenConfigFile, GenerateConfigFile, DefaultGenConfig);
Cfg.SetDeleteValue(KeyConfigFileExt, ConfigFileExtension, DefaultConfigExtension);
Cfg.SetDeleteValue(KeyConvertPaths, ConvertPathsToUnix, DefaultConvertPathsToUnix);
Cfg.SetDeleteValue(KeyConvertPaths, AdditionalOptions, DefaultAdditionalOptions);
Cfg.SetDeleteValue(KeyAdditionalOptions, AdditionalOptions, DefaultAdditionalOptions);
end;
constructor TDelphiToolOptions.Create;
@ -121,7 +118,6 @@ end;
procedure TDelphiToolOptions.Reset;
begin
CompilerFileName:=DefaultCompilerFileName;
GenerateConfigFile:=DefaultGenConfig;
ConfigFileExtension:=DefaultConfigExtension;
ConvertPathsToUnix:=DefaultConvertPathsToUnix;
AdditionalOptions:=DefaultAdditionalOptions;

View File

@ -1,11 +1,14 @@
unit delphitool;
{$mode objfpc}{$H+}
{$modeswitch typehelpers}
interface
uses
Classes, SysUtils, System.UITypes, dialogs, CompOptsIntf, IDEExternToolIntf, MacroDefIntf, MacroIntf, RegExpr, strdelphitool;
Classes, SysUtils, System.UITypes, dialogs,
ProjectIntf, CompOptsIntf, IDEExternToolIntf, MacroDefIntf, MacroIntf, RegExpr,
strdelphitool;
Const
@ -76,6 +79,19 @@ type
Class Property Instance: TDelphiTool read _Instance;
end;
{ TLazProjectDelphiOptions }
TLazProjectDelphiOptions = class helper for TLazProject
private
function GetADO: String;
function GetDCF: Boolean;
procedure SetADO(AValue: String);
procedure SetDCF(AValue: Boolean);
Public
Property GenerateDelphiConfigFile : Boolean Read GetDCF Write SetDCF;
Property AdditionalDelphiOptions : String Read GetADO Write SetADO;
end;
implementation
uses
@ -425,6 +441,7 @@ function TDelphiTool.FPCToDelphiOpts(Opts : TLazCompilerOptions; aDelphiOpts: TS
procedure AddOption(aValue : String; const FlagName : String);
begin
IDEMacros.SubstituteMacros(aValue);
AddOption(aValue<>'',FlagName+aValue);
end;
@ -433,9 +450,8 @@ begin
AddOption(Opts.GetUnitPath(False,coptParsed,True),'U');
AddOPtion(Opts.GetIncludePath(False,coptParsed,True),'I');
AddOption(Opts.GenerateDebugInfo,'V');
AddOption(Opts.UnitOutputDirectory,'NU');
AddOption(Opts.UnitOutputDirectory,'NO');
AddOption(Opts.GetObjectPath(True,coptParsed,True),'O');
AddOption(Opts.GetUnitOutputDirectory(False),'NU');
AddOption(Opts.GetObjectPath(false,coptParsed,True),'O');
AddOption(Opts.ShowWarn,'W');
AddOption(Opts.ShowHints,'H');
AddOption(Opts.DontUseConfigFile,'-no-config');
@ -486,7 +502,7 @@ begin
FMacros[dmConfigFileName].LazbuildValue:=GetCurrentConfigFileName;
FMacros[dmCompileCommand].LazbuildValue:=GetCompileCommand;
FMacros[dmAdditionalArgs].LazbuildValue:=GetCompilerArguments;
if DelphiToolOptions.GenerateConfigFile and assigned(LazarusIDE.ActiveProject) then
if Assigned(LazarusIDE.ActiveProject) and LazarusIDE.ActiveProject.GenerateDelphiConfigFile then
GenerateConfigFilename(GetCurrentConfigFileName(False));
end;
@ -515,7 +531,7 @@ end;
function TDelphiTool.GetCurrentConfigFileName(PrependAt: Boolean = True): String;
begin
if Assigned(LazarusIDE.ActiveProject) and DelphiToolOptions.GenerateConfigFile then
if Assigned(LazarusIDE.ActiveProject) and LazarusIDE.ActiveProject.GenerateDelphiConfigFile then
begin
Result:=ChangeFileExt(LazarusIDE.ActiveProject.ProjectInfoFile,DelphiOptions.DefaultConfigExtension);
if PrependAt then
@ -526,9 +542,21 @@ begin
end;
function TDelphiTool.GetCompilerArguments: string;
var
S : String;
begin
Result:=DelphiToolOptions.AdditionalOptions;
IDEMacros.SubstituteMacros(Result);
if Assigned(LazarusIDE.ActiveProject) then
begin
S:=LazarusIDE.ActiveProject.AdditionalDelphiOptions;
if S<>'' then
IDEMacros.SubstituteMacros(S);
if S<>'' then
Result:=Result+' ';
end;
end;
@ -539,6 +567,28 @@ begin
IDEMacros.SubstituteMacros(Result);
end;
{ TLazProjectDelphiOptions }
function TLazProjectDelphiOptions.GetADO: String;
begin
Result:=CustomData[pKeyAdditionalOptions];
end;
function TLazProjectDelphiOptions.GetDCF: Boolean;
begin
Result:=CustomData[pKeyGenConfigFile]='1';
end;
procedure TLazProjectDelphiOptions.SetADO(AValue: String);
begin
CustomData[pKeyAdditionalOptions]:=aValue
end;
procedure TLazProjectDelphiOptions.SetDCF(AValue: Boolean);
begin
CustomData[pKeyGenConfigFile]:=IntToStr(Ord(aValue));
end;
end.

View File

@ -26,7 +26,7 @@ object DelphiOptionsFrame: TDelphiOptionsFrame
AnchorSideLeft.Control = lblDelphiPath
AnchorSideTop.Control = lblDelphiPath
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Pas2jsPathBrowseButton
AnchorSideRight.Control = DelphiPathBrowseButton
Left = 16
Height = 27
Top = 32
@ -36,7 +36,7 @@ object DelphiOptionsFrame: TDelphiOptionsFrame
ItemHeight = 0
TabOrder = 0
end
object Pas2jsPathBrowseButton: TButton
object DelphiPathBrowseButton: TButton
AnchorSideTop.Control = cbDelphiPath
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
@ -50,41 +50,30 @@ object DelphiOptionsFrame: TDelphiOptionsFrame
AutoSize = True
BorderSpacing.Right = 8
Caption = '...'
OnClick = DelphiPathBrowseButtonClick
ParentShowHint = False
ShowHint = True
TabOrder = 1
end
object cbGenConfig: TCheckBox
AnchorSideLeft.Control = lblDelphiPath
AnchorSideTop.Control = cbDelphiPath
AnchorSideTop.Side = asrBottom
Left = 16
Height = 23
Top = 67
Width = 377
BorderSpacing.Top = 8
Caption = 'Generate Delphi config file based on FPC compiler options'
TabOrder = 2
end
object cbConfigFileExtension: TComboBox
AnchorSideLeft.Control = lblConfigFileExtension
AnchorSideTop.Control = lblConfigFileExtension
AnchorSideTop.Side = asrBottom
Left = 16
Height = 27
Top = 122
Top = 91
Width = 136
BorderSpacing.Top = 8
ItemHeight = 0
TabOrder = 3
TabOrder = 2
end
object lblConfigFileExtension: TLabel
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = cbGenConfig
AnchorSideTop.Control = cbDelphiPath
AnchorSideTop.Side = asrBottom
Left = 16
Height = 16
Top = 98
Top = 67
Width = 170
BorderSpacing.Left = 16
BorderSpacing.Top = 8
@ -99,11 +88,11 @@ object DelphiOptionsFrame: TDelphiOptionsFrame
AnchorSideTop.Side = asrBottom
Left = 16
Height = 23
Top = 157
Top = 126
Width = 306
BorderSpacing.Top = 8
Caption = 'Map filenames from Windows to Unix notation'
TabOrder = 4
TabOrder = 3
end
object lblAdditionalOptions: TLabel
AnchorSideLeft.Control = Owner
@ -111,7 +100,7 @@ object DelphiOptionsFrame: TDelphiOptionsFrame
AnchorSideTop.Side = asrBottom
Left = 16
Height = 16
Top = 188
Top = 157
Width = 167
BorderSpacing.Left = 16
BorderSpacing.Top = 8
@ -124,14 +113,14 @@ object DelphiOptionsFrame: TDelphiOptionsFrame
AnchorSideLeft.Control = lblAdditionalOptions
AnchorSideTop.Control = lblAdditionalOptions
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Pas2jsPathBrowseButton
AnchorSideRight.Control = DelphiPathBrowseButton
Left = 16
Height = 27
Top = 212
Top = 181
Width = 577
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 8
ItemHeight = 0
TabOrder = 5
TabOrder = 4
end
end

View File

@ -19,13 +19,13 @@ type
TDelphiOptionsFrame = class(TAbstractIDEOptionsEditor)
cbConfigFileExtension: TComboBox;
cbAdditionalOptions: TComboBox;
cbGenConfig: TCheckBox;
cbConvertDosToUnix: TCheckBox;
lblConfigFileExtension: TLabel;
lblAdditionalOptions: TLabel;
Pas2jsPathBrowseButton: TButton;
DelphiPathBrowseButton: TButton;
cbDelphiPath: TComboBox;
lblDelphiPath: TLabel;
procedure DelphiPathBrowseButtonClick(Sender: TObject);
private
public
@ -38,12 +38,32 @@ type
implementation
uses strdelphitool;
uses dialogs, strdelphitool;
{$R *.lfm}
{ TDelphiOptionsFrame }
procedure TDelphiOptionsFrame.DelphiPathBrowseButtonClick(Sender: TObject);
var
OpenDialog: TOpenDialog;
AFilename: String;
begin
OpenDialog:=TOpenDialog.Create(nil);
try
//InputHistories.ApplyFileDialogSettings(OpenDialog);
OpenDialog.Options:=OpenDialog.Options+[ofPathMustExist];
OpenDialog.Title:=SSelectDelphiExecutable;
OpenDialog.FileName:=cbDelphiPath.Text;
if OpenDialog.Execute then begin
AFilename:=CleanAndExpandFilename(OpenDialog.Filename);
SetComboBoxText(cbDelphiPath,AFilename,cstFilename,30);
end;
finally
OpenDialog.Free;
end;
end;
function TDelphiOptionsFrame.GetTitle: String;
begin
Result:=SDelphiToolOptionsTitle;
@ -53,7 +73,6 @@ procedure TDelphiOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
begin
lblDelphiPath.Caption:=SDelphiCompilerFileNameCaption;
lblConfigFileExtension.Caption:=SConfigFileExtensionCaption;
cbGenConfig.Caption:=SGenerateConfigFileCaption;
cbConvertDosToUnix.Caption:=SConvertDosToUnixCaption;
cbConvertDosToUnix.Enabled:={$IFDEF UNIX}True{$ELSE}False{$ENDIF};
lblAdditionalOptions.Caption:=SDelphiCompilerArgs;
@ -66,7 +85,6 @@ var
begin
Opts:=DelphiToolOptions;
cbGenConfig.Checked:=Opts.GenerateConfigFile;
cbConvertDosToUnix.Checked:=Opts.ConvertPathsToUnix;
cbDelphiPath.Text:=Opts.CompilerFileName;
cbConfigFileExtension.Text:=Opts.ConfigFileExtension;
@ -79,7 +97,6 @@ var
begin
Opts:=DelphiToolOptions;
Opts.GenerateConfigFile:=cbGenConfig.Checked;
Opts.ConvertPathsToUnix:=cbConvertDosToUnix.Checked;
Opts.CompilerFileName:=cbDelphiPath.Text;
Opts.ConfigFileExtension:=cbConfigFileExtension.Text;

View File

@ -0,0 +1,50 @@
object ProjectDelphiOptionsFrame: TProjectDelphiOptionsFrame
Left = 0
Height = 240
Top = 0
Width = 736
ClientHeight = 240
ClientWidth = 736
TabOrder = 0
DesignLeft = 610
DesignTop = 313
object cbGenConfigFile: TCheckBox
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Owner
Left = 16
Height = 23
Top = 8
Width = 192
BorderSpacing.Left = 16
BorderSpacing.Top = 8
Caption = 'Generate Delphi config file '
TabOrder = 0
end
object lblAdditionalOptions: TLabel
AnchorSideLeft.Control = cbGenConfigFile
AnchorSideTop.Control = cbGenConfigFile
AnchorSideTop.Side = asrBottom
Left = 16
Height = 16
Top = 39
Width = 167
BorderSpacing.Top = 8
Caption = 'Additional compiler options'
ParentColor = False
ParentShowHint = False
ShowHint = True
end
object cbAdditionalOptions: TComboBox
AnchorSideLeft.Control = lblAdditionalOptions
AnchorSideTop.Control = lblAdditionalOptions
AnchorSideTop.Side = asrBottom
Left = 16
Height = 27
Top = 63
Width = 696
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 8
ItemHeight = 0
TabOrder = 1
end
end

View File

@ -0,0 +1,77 @@
unit fraprojectdelphioptions;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, StdCtrls,
LazLoggerBase, LazFileUtils, LazUTF8,
// IdeIntf
LazIDEIntf, ProjectIntf, CompOptsIntf, IDEOptionsIntf, IDEOptEditorIntf,
delphioptions, strdelphitool, delphitool;
type
{ TProjectDelphiOptionsFrame }
TProjectDelphiOptionsFrame = class(TAbstractIDEOptionsEditor)
cbAdditionalOptions: TComboBox;
cbGenConfigFile: TCheckBox;
lblAdditionalOptions: TLabel;
private
public
function GetTitle: string; override;
procedure Setup({%H-}ADialog: TAbstractOptionsEditorDialog); override;
procedure ReadSettings(AOptions: TAbstractIDEOptions); override;
procedure WriteSettings(AOptions: TAbstractIDEOptions); override;
class function SupportedOptionsClass: TAbstractIDEOptionsClass; override;
end;
implementation
{$R *.lfm}
{ TProjectDelphiOptionsFrame }
function TProjectDelphiOptionsFrame.GetTitle: string;
begin
Result:=SDelphiToolOptionsTitle
end;
procedure TProjectDelphiOptionsFrame.Setup(ADialog: TAbstractOptionsEditorDialog);
begin
lblAdditionalOptions.Caption:=SDelphiCompilerArgs;
cbGenConfigFile.Caption:=SGenerateConfigFileCaption;
end;
procedure TProjectDelphiOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
Var
Prj : TLazProject;
begin
if AOptions=nil then ;
Prj:=LazarusIDE.ActiveProject;
cbGenConfigFile.Checked:=Prj.GenerateDelphiConfigFile;
cbAdditionalOptions.Text:=Prj.AdditionalDelphiOptions;
end;
procedure TProjectDelphiOptionsFrame.WriteSettings(AOptions: TAbstractIDEOptions);
Var
Prj : TLazProject;
begin
if AOptions=nil then ;
Prj:=LazarusIDE.ActiveProject;
Prj.GenerateDelphiConfigFile:=cbGenConfigFile.Checked;
Prj.AdditionalDelphiOptions:=cbAdditionalOptions.Text;
end;
class function TProjectDelphiOptionsFrame.SupportedOptionsClass: TAbstractIDEOptionsClass;
begin
Result:=TAbstractIDEProjectOptions;
end;
end.

View File

@ -31,6 +31,10 @@
<Filename Value="delphioptions.pas"/>
<UnitName Value="delphioptions"/>
</Item>
<Item>
<Filename Value="fraprojectdelphioptions.pas"/>
<UnitName Value="fraprojectdelphioptions"/>
</Item>
</Files>
<RequiredPkgs>
<Item>

View File

@ -9,7 +9,7 @@ interface
uses
LazDelphiReg, delphitool, fradelphioptions, strdelphitool, delphioptions,
LazarusPackageIntf;
fraprojectdelphioptions, LazarusPackageIntf;
implementation

View File

@ -5,13 +5,15 @@ unit LazDelphiReg;
interface
uses
Classes, SysUtils, IDEIntf, IDEOptionsIntf, IDEOptEditorIntf, IDEExternToolIntf, delphitool, fradelphioptions;
Classes, SysUtils, IDEIntf, IDEOptionsIntf, IDEOptEditorIntf, IDEExternToolIntf, delphitool,
fradelphioptions, fraprojectdelphioptions;
var
IDEDelphiCompilerParserClass : TDelphiCompilerParserClass = nil;
var
DelphiToolsFrameID: integer = 1001;
DelphiToolsFrameID : integer = 1001;
DelphiToolsOptionsIndex : Integer = ProjectOptionsMisc + 100;
procedure Register;
@ -23,9 +25,10 @@ procedure Register;
begin
if IDEDelphiCompilerParserClass=Nil then
IDEDelphiCompilerParserClass:=TDelphiCompilerParser;
ExternalToolList.RegisterParser(IDEDelphiCompilerParserClass);
DelphiToolsFrameID:=RegisterIDEOptionsEditor( GroupEnvironment,TDelphiOptionsFrame, DelphiToolsFrameID)^.Index;
DelphiToolOptions.Load;
ExternalToolList.RegisterParser(IDEDelphiCompilerParserClass);
DelphiToolsFrameID:=RegisterIDEOptionsEditor(GroupEnvironment,TDelphiOptionsFrame, DelphiToolsFrameID)^.Index;
DelphiToolsOptionsIndex:=RegisterIDEOptionsEditor(GroupProject,TProjectDelphiOptionsFrame, DelphiToolsOptionsIndex)^.Index;
TDelphiTool.Instance.Hook;
end;

View File

@ -18,12 +18,14 @@ const
SSubToolDelphi = 'Delphi';
SDelphiParserName = 'Delphi Compiler';
// Settings
// globoal Settings
KeyCompiler = 'compiler/value';
KeyGenConfigFile = 'genconfigfile/value';
KeyConfigFileExt = 'configfileext/value';
KeyConvertPaths = 'convertunixpath/value';
KeyAdditionalOptions = 'additionaloptions/value';
// Project settings
pKeyAdditionalOptions = 'additionaloptions';
pKeyGenConfigFile = 'genconfigfile';
resourcestring
SDelphiLocalizedParserName = 'Delphi Compiler';
@ -35,7 +37,7 @@ resourcestring
SDelphiCompilerConfigFileName = 'Delphi compiler configuration filename for project';
SDelphiCompileCommand = 'Delphi compile command';
SDelphiCompilerArgs = 'Additional compiler options';
SSelectDelphiExecutable = 'Select Delphi compiler executable';
implementation