* Added a wizard to create fppkgs basic configuration files

git-svn-id: trunk@55127 -
This commit is contained in:
joost 2017-05-30 22:12:52 +00:00
parent 48dbf5c56d
commit 618a14fb45
8 changed files with 540 additions and 21 deletions

2
.gitattributes vendored
View File

@ -1446,6 +1446,8 @@ components/fppkg/src/fppkg_aboutfrm.pas svneol=native#text/plain
components/fppkg/src/fppkg_const.pas svneol=native#text/plain
components/fppkg/src/fppkg_details.lfm svneol=native#text/plain
components/fppkg/src/fppkg_details.pas svneol=native#text/plain
components/fppkg/src/fppkg_initializeoptionsfrm.lfm svneol=native#text/plain
components/fppkg/src/fppkg_initializeoptionsfrm.pas svneol=native#text/pascal
components/fppkg/src/fppkg_lpk.pas svneol=native#text/plain
components/fppkg/src/fppkg_mainfrm.lfm svneol=native#text/plain
components/fppkg/src/fppkg_mainfrm.lrj svneol=native#text/plain

View File

@ -200,3 +200,49 @@ msgstr ""
msgid "Update packages list"
msgstr ""
#: tinitializeoptionsform.advancedcheckbox.caption
msgid "Advanced"
msgstr ""
#: tinitializeoptionsform.buttonpanel.closebutton.caption
msgctxt "tinitializeoptionsform.buttonpanel.closebutton.caption"
msgid "&Close"
msgstr ""
#: tinitializeoptionsform.buttonpanel.okbutton.caption
msgctxt "tinitializeoptionsform.buttonpanel.okbutton.caption"
msgid "&Write Fppkg configuration files"
msgstr ""
#: tinitializeoptionsform.caption
msgid "Create configuration files"
msgstr ""
#: tinitializeoptionsform.compilerlabel.caption
msgid "Compiler:"
msgstr ""
#: tinitializeoptionsform.edit1.text
msgid "Edit1"
msgstr ""
#: tinitializeoptionsform.fpcdirectoryedit.texthint
msgid "This location normally contains the compiler-executable along with a 'units' and 'fpmkinst' directory."
msgstr ""
#: tinitializeoptionsform.initializefppkglabel.caption
msgid "Create new configuration files for fppkg."
msgstr ""
#: tinitializeoptionsform.label1.caption
msgid "Please give the location where FPC is installed."
msgstr ""
#: tinitializeoptionsform.pathlabel.caption
msgid "Path:"
msgstr ""
#: tinitializeoptionsform.prefixlabel.caption
msgid "Prefix:"
msgstr ""

View File

@ -213,3 +213,49 @@ msgstr "Обновить"
msgid "Update packages list"
msgstr "Обновить список пакетов"
#: tinitializeoptionsform.advancedcheckbox.caption
msgid "Advanced"
msgstr ""
#: tinitializeoptionsform.buttonpanel.closebutton.caption
msgctxt "tinitializeoptionsform.buttonpanel.closebutton.caption"
msgid "&Close"
msgstr ""
#: tinitializeoptionsform.buttonpanel.okbutton.caption
msgctxt "tinitializeoptionsform.buttonpanel.okbutton.caption"
msgid "&Write Fppkg configuration files"
msgstr ""
#: tinitializeoptionsform.caption
msgid "Create configuration files"
msgstr ""
#: tinitializeoptionsform.compilerlabel.caption
msgid "Compiler:"
msgstr ""
#: tinitializeoptionsform.edit1.text
msgid "Edit1"
msgstr ""
#: tinitializeoptionsform.fpcdirectoryedit.texthint
msgid "This location normally contains the compiler-executable along with a 'units' and 'fpmkinst' directory."
msgstr ""
#: tinitializeoptionsform.initializefppkglabel.caption
msgid "Create new configuration files for fppkg."
msgstr ""
#: tinitializeoptionsform.label1.caption
msgid "Please give the location where FPC is installed."
msgstr ""
#: tinitializeoptionsform.pathlabel.caption
msgid "Path:"
msgstr ""
#: tinitializeoptionsform.prefixlabel.caption
msgid "Prefix:"
msgstr ""

View File

@ -0,0 +1,190 @@
object InitializeOptionsForm: TInitializeOptionsForm
Left = 2095
Height = 451
Top = 274
Width = 473
Caption = 'Create configuration files'
ClientHeight = 451
ClientWidth = 473
LCLVersion = '1.9.0.0'
object FppkgConfigPanel: TPanel
Left = 0
Height = 451
Top = 0
Width = 473
Align = alClient
BevelOuter = bvNone
ClientHeight = 451
ClientWidth = 473
TabOrder = 0
Visible = False
object InitializeFppkgLabel: TLabel
Left = 5
Height = 20
Top = 5
Width = 463
Align = alTop
BorderSpacing.Around = 5
Caption = 'Create new configuration files for fppkg.'
ParentColor = False
end
object Label1: TLabel
Left = 30
Height = 20
Top = 40
Width = 438
Align = alTop
BorderSpacing.Left = 25
BorderSpacing.Top = 10
BorderSpacing.Around = 5
Caption = 'Please give the location where FPC is installed.'
ParentColor = False
end
object Edit1: TEdit
Left = -2368
Height = 37
Top = 119
Width = 80
TabOrder = 0
Text = 'Edit1'
end
object FPCDirectoryEdit: TDirectoryEdit
Left = 30
Height = 37
Top = 65
Width = 413
ShowHidden = False
ButtonWidth = 23
NumGlyphs = 1
Align = alTop
BorderSpacing.Left = 25
BorderSpacing.Right = 25
BorderSpacing.Around = 5
BorderSpacing.CellAlignHorizontal = ccaCenter
MaxLength = 0
TabOrder = 1
OnChange = FPCDirectoryEditChange
TextHint = 'This location normally contains the compiler-executable along with a ''units'' and ''fpmkinst'' directory.'
end
object FPCDirValidationLabel: TLabel
Left = 30
Height = 20
Top = 107
Width = 438
Align = alTop
AutoSize = False
BorderSpacing.Left = 25
BorderSpacing.Around = 5
Font.Color = clMaroon
ParentColor = False
ParentFont = False
end
object ButtonPanel: TButtonPanel
Left = 6
Height = 46
Top = 399
Width = 461
OKButton.Name = 'OKButton'
OKButton.Caption = '&Write Fppkg configuration files'
OKButton.DefaultCaption = False
OKButton.Enabled = False
OKButton.OnClick = OKButtonClick
HelpButton.Name = 'HelpButton'
HelpButton.DefaultCaption = True
CloseButton.Name = 'CloseButton'
CloseButton.Caption = '&Close'
CloseButton.DefaultCaption = False
CloseButton.OnClick = CloseButtonClick
CancelButton.Name = 'CancelButton'
CancelButton.DefaultCaption = True
TabOrder = 2
ShowButtons = [pbOK, pbClose]
end
object AdvancedCheckbox: TCheckBox
Left = 5
Height = 24
Top = 132
Width = 463
Align = alTop
BorderSpacing.Around = 5
Caption = 'Advanced'
OnChange = AdvancedCheckboxChange
TabOrder = 3
end
object PathLabel: TLabel
Left = 30
Height = 20
Top = 171
Width = 438
Align = alTop
BorderSpacing.Left = 25
BorderSpacing.Top = 10
BorderSpacing.Around = 5
Caption = 'Path:'
Enabled = False
ParentColor = False
end
object PathEdit: TEdit
Left = 30
Height = 37
Top = 196
Width = 413
Align = alTop
BorderSpacing.Left = 25
BorderSpacing.Right = 25
BorderSpacing.Around = 5
Enabled = False
TabOrder = 4
end
object PrefixLabel: TLabel
Left = 30
Height = 20
Top = 248
Width = 438
Align = alTop
BorderSpacing.Left = 25
BorderSpacing.Top = 10
BorderSpacing.Around = 5
Caption = 'Prefix:'
Enabled = False
ParentColor = False
end
object PrefixEdit: TEdit
Left = 30
Height = 37
Top = 273
Width = 413
Align = alTop
BorderSpacing.Left = 25
BorderSpacing.Right = 25
BorderSpacing.Around = 5
Enabled = False
TabOrder = 5
end
object CompilerLabel: TLabel
Left = 30
Height = 20
Top = 325
Width = 438
Align = alTop
BorderSpacing.Left = 25
BorderSpacing.Top = 10
BorderSpacing.Around = 5
Caption = 'Compiler:'
Enabled = False
ParentColor = False
end
object CompilerEdit: TEdit
Left = 30
Height = 37
Top = 350
Width = 413
Align = alTop
BorderSpacing.Left = 25
BorderSpacing.Right = 25
BorderSpacing.Around = 5
Enabled = False
TabOrder = 6
end
end
end

View File

@ -0,0 +1,206 @@
unit fppkg_initializeoptionsfrm;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, EditBtn,
ButtonPanel,
// fppkg
pkgglobals, pkgFppkg, pkgoptions;
type
{ TInitializeOptionsForm }
TInitializeOptionsForm = class(TForm)
ButtonPanel: TButtonPanel;
AdvancedCheckbox: TCheckBox;
CompilerEdit: TEdit;
PrefixLabel: TLabel;
PathEdit: TEdit;
FPCDirectoryEdit: TDirectoryEdit;
Edit1: TEdit;
FppkgConfigPanel: TPanel;
InitializeFppkgLabel: TLabel;
Label1: TLabel;
FPCDirValidationLabel: TLabel;
PathLabel: TLabel;
PrefixEdit: TEdit;
CompilerLabel: TLabel;
procedure AdvancedCheckboxChange(Sender: TObject);
procedure CloseButtonClick(Sender: TObject);
procedure FPCDirectoryEditChange(Sender: TObject);
procedure OKButtonClick(Sender: TObject);
private
function IsVersionStr(AString: string): Boolean;
public
class function CheckInitialConfiguration: Boolean;
class function RecreateFppkgConfiguration: Boolean;
end;
var
InitializeOptionsForm: TInitializeOptionsForm;
implementation
{$R *.lfm}
{ TInitializeOptionsForm }
procedure TInitializeOptionsForm.FPCDirectoryEditChange(Sender: TObject);
var
SR: TSearchRec;
Dir: string;
Prefix, s: RawByteString;
begin
Dir := IncludeTrailingPathDelimiter(FPCDirectoryEdit.Text);
if not DirectoryExists(Dir) then
FPCDirValidationLabel.Caption := 'Directory does not exist'
else
begin
if FindFirst(Dir+'ppc*'+ExeExt, faAnyFile-faDirectory, SR) = 0 then
begin
FindClose(SR);
if FileExists(Dir+'units') and FileExists(Dir+'fpmkinst') then
begin
FPCDirValidationLabel.Caption := '';
ButtonPanel.OKButton.Enabled := True;
s := ExtractFileName(ExcludeTrailingPathDelimiter(Dir));
Prefix := ExtractFilePath(ExcludeTrailingPathDelimiter(Dir));
if IsVersionStr(s) then
PathEdit.Text := Prefix + '{CompilerVersion}' + PathDelim
else
PathEdit.Text := Dir;
Prefix := ExtractFilePath(ExcludeTrailingPathDelimiter(Prefix));
Prefix := ExtractFilePath(ExcludeTrailingPathDelimiter(Prefix));
PrefixEdit.Text := Prefix;
s := ConcatPaths([Prefix, 'bin', 'fpc'+ExeExt]);
if FileExists(s) then
CompilerEdit.Text := s
else
CompilerEdit.Text := ExeSearch('fpc'+ExeExt,GetEnvironmentVariable('PATH'));
end
else
FPCDirValidationLabel.Caption := 'This location does not seems to contain a valid fpc-installation'
end
else
begin
FPCDirValidationLabel.Caption := 'Compiler not found at given location'
end;
end
end;
procedure TInitializeOptionsForm.CloseButtonClick(Sender: TObject);
begin
ModalResult := mrClose;
end;
procedure TInitializeOptionsForm.AdvancedCheckboxChange(Sender: TObject);
begin
PathLabel.Enabled := AdvancedCheckbox.Checked;
PrefixLabel.Enabled := AdvancedCheckbox.Checked;
PathEdit.Enabled := AdvancedCheckbox.Checked;
PrefixEdit.Enabled := AdvancedCheckbox.Checked;
end;
procedure TInitializeOptionsForm.OKButtonClick(Sender: TObject);
var
FPpkg: TpkgFPpkg;
FileName: string;
CurrentSection: TFppkgRepositoryOptionSection;
Dir: string;
begin
Dir := IncludeTrailingPathDelimiter(FPCDirectoryEdit.Text);
FPpkg := TpkgFPpkg.Create(Self);
try
CurrentSection := FPpkg.Options.AddRepositoryOptionSection(TFppkgRepositoryOptionSection);
CurrentSection.RepositoryName := 'fpc';
CurrentSection.Description := 'Packages which are installed along with the Free Pascal Compiler';
CurrentSection.Path := PathEdit.Text;
CurrentSection.Prefix := PrefixEdit.Text;
FPpkg.Options.AddIncludeFilesOptionSection('{LocalRepository}config/conf.d/*.conf');
CurrentSection := FPpkg.Options.AddRepositoryOptionSection(TFppkgRepositoryOptionSection);
CurrentSection.RepositoryName := 'user';
CurrentSection.Description := 'User-installed packages';
CurrentSection.Path := '{LocalRepository}lib/fpc/{CompilerVersion}/';
CurrentSection.Prefix := '{LocalRepository}';
FileName := GetFppkgConfigFile(False, False);
ForceDirectories(ExtractFilePath(FileName));
FPpkg.Options.SaveToFile(FileName);
// Load the just created configuration-file.
FPpkg.InitializeGlobalOptions(FileName);
FPpkg.CompilerOptions.Compiler := CompilerEdit.Text;
// Remove the default configuration-file, so a new one will be generated
FileName:=FPpkg.Options.GlobalSection.CompilerConfigDir+FPpkg.Options.CommandLineSection.CompilerConfig;
if FileExists(FileName) then
DeleteFile(FileName);
// This will create the compiler-configuration file
FPpkg.InitializeCompilerOptions;
finally
FPpkg.Free;
end;
end;
function TInitializeOptionsForm.IsVersionStr(AString: string): Boolean;
var
i: Integer;
begin
Result := length(AString) > 0;
for i := 1 to length(AString) do
begin
// only allow digits or a dot.
if AString[i] in ['0'..'9'] then
Continue
// allow dots, but not as first or last character
else if (AString[i] = '.') and (i > 1) and (i < length(AString)) then
begin
// do not allow two consecutive dots
if (i > 1) and (AString[i-1]='.') then
Result := False;
end
else
begin
Result := False;
Exit;
end;
end;
end;
class function TInitializeOptionsForm.CheckInitialConfiguration: Boolean;
begin
Result := true;
if not FileExists(GetFppkgConfigFile(False, False)) and
not FileExists(GetFppkgConfigFile(True, False)) then
begin
Result := RecreateFppkgConfiguration;
end;
end;
class function TInitializeOptionsForm.RecreateFppkgConfiguration: Boolean;
var
Frm: TInitializeOptionsForm;
begin
Frm := TInitializeOptionsForm.Create(nil);
try
Frm.FppkgConfigPanel.Visible := True;
if Frm.ShowModal in [mrClose, mrCancel] then
Result := False
else
Result := True;
finally
Frm.Free;
end;
end;
end.

View File

@ -154,6 +154,7 @@ type
procedure UpdatePackageListView;
procedure ListPackages;
procedure LoadFppkgConfiguration;
procedure RescanPackages;
procedure SetupColumns;
@ -172,7 +173,7 @@ implementation
{$R *.lfm}
uses
Masks, fppkg_aboutfrm;
Masks, fppkg_aboutfrm, fppkg_initializeoptionsfrm;
resourcestring
SErrActionFailed = 'Failed to %s: ' + sLineBreak + sLineBreak + '%s';
@ -333,8 +334,6 @@ begin
end;
procedure TFppkgForm.FormCreate(Sender: TObject);
var
i: Integer;
begin
//setup log callback function
@ -351,24 +350,15 @@ begin
//setup error callback function
ErrorHandler := @LazError;
if not TInitializeOptionsForm.CheckInitialConfiguration then
begin
Application.Terminate;
Exit;
end;
FFPpkg := TpkgFPpkg.Create(Self);
FFPpkg.InitializeGlobalOptions('');
FFPpkg.Options.GlobalSection.Downloader := 'FPC';
SetLength(FPMKUnitDeps,FPMKUnitDepDefaultCount);
for i := 0 to FPMKUnitDepDefaultCount-1 do
FPMKUnitDeps[i]:=FPMKUnitDepsDefaults[i];
FFPpkg.InitializeCompilerOptions;
FFPpkg.CompilerOptions.InitCompilerDefaults;
FFPpkg.FpmakeCompilerOptions.InitCompilerDefaults;
FFPpkg.CompilerOptions.CheckCompilerValues;
FFPpkg.FpmakeCompilerOptions.CheckCompilerValues;
FFPpkg.LoadLocalAvailableMirrors;
LoadFppkgConfiguration;
Caption := rsFreePascalPackageManagerForLazarus;
@ -834,6 +824,37 @@ begin
CategoryCheckListBox.Checked[i] := True;
end;
procedure TFppkgForm.LoadFppkgConfiguration;
var
i: Integer;
begin
FFPpkg.InitializeGlobalOptions('');
FFPpkg.Options.GlobalSection.Downloader := 'FPC';
SetLength(FPMKUnitDeps,FPMKUnitDepDefaultCount);
for i := 0 to FPMKUnitDepDefaultCount-1 do
FPMKUnitDeps[i]:=FPMKUnitDepsDefaults[i];
FFPpkg.InitializeCompilerOptions;
FFPpkg.CompilerOptions.CheckCompilerValues;
FFPpkg.FpmakeCompilerOptions.CheckCompilerValues;
FFPpkg.ScanPackages;
if not Assigned(FFPpkg.FindPackage('rtl', pkgpkInstalled)) then
begin
ShowMessage('Fppkg seems to be configured, but the RTL could not be found. Please fix the Fppkg-configuration with the wizard or manualy.');
if TInitializeOptionsForm.RecreateFppkgConfiguration then
begin
LoadFppkgConfiguration;
end;
end
else
FFPpkg.LoadLocalAvailableMirrors;
end;
procedure TFppkgForm.RescanPackages;
begin
FFPpkg.ScanAvailablePackages;

View File

@ -47,7 +47,7 @@
<PackageName Value="LCL"/>
</Item3>
</RequiredPackages>
<Units Count="4">
<Units Count="5">
<Unit0>
<Filename Value="lazarusfppkg.pas"/>
<IsPartOfProject Value="True"/>
@ -67,6 +67,13 @@
<Filename Value="..\src\fppkg_lpk.pas"/>
<IsPartOfProject Value="True"/>
</Unit3>
<Unit4>
<Filename Value="..\src\fppkg_initializeoptionsfrm.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="InitializeOptionsForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
</Unit4>
</Units>
</ProjectOptions>
<CompilerOptions>

View File

@ -11,7 +11,8 @@ uses
pkgDownload,
fppkg_lpk,
pkgfpmake,
pkgfphttp;
pkgfphttp,
fppkg_initializeoptionsfrm;
{$R *.res}