mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-22 19:08:19 +02:00
389 lines
13 KiB
ObjectPascal
389 lines
13 KiB
ObjectPascal
{
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
Author: Mattias Gaertner
|
|
|
|
Abstract:
|
|
Defines the TBuildLazarusOptions which stores the settings for the
|
|
"Build Lazarus" function of the IDE.
|
|
TConfigureBuildLazarusDlg is used to edit TBuildLazarusOptions.
|
|
|
|
The BuildLazarus function will build the lazarus parts.
|
|
}
|
|
unit BuildLazDialog;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, Forms, Controls, StdCtrls, ExtCtrls, Buttons, LResources,
|
|
XMLCfg, ExtToolDialog, ExtToolEditDlg, TransferMacros;
|
|
|
|
type
|
|
TMakeMode = (mmNone, mmBuild, mmCleanBuild);
|
|
|
|
TBuildLazarusOptions = class
|
|
private
|
|
fBuildLCL: TMakeMode;
|
|
fBuildSynEdit: TMakeMode;
|
|
fBuildCodeTools: TMakeMode;
|
|
fBuildIDE: TMakeMode;
|
|
fBuildExamples: TMakeMode;
|
|
fCleanAll: boolean;
|
|
fMakeFilename: string;
|
|
public
|
|
constructor Create;
|
|
procedure Load(XMLConfig: TXMLConfig; const Path: string);
|
|
procedure Save(XMLConfig: TXMLConfig; const Path: string);
|
|
property BuildLCL: TMakeMode read fBuildLCL write fBuildLCL;
|
|
property BuildSynEdit: TMakeMode read fBuildSynEdit write fBuildSynEdit;
|
|
property BuildCodeTools: TMakeMode read fBuildCodeTools write fBuildCodeTools;
|
|
property BuildIDE: TMakeMode read fBuildIDE write fBuildIDE;
|
|
property BuildExamples: TMakeMode read fBuildExamples write fBuildExamples;
|
|
property CleanAll: boolean read fCleanAll write fCleanAll;
|
|
property MakeFilename: string read fMakeFilename write fMakeFilename;
|
|
end;
|
|
|
|
TConfigureBuildLazarusDlg = class(TForm)
|
|
CleanAllCheckBox: TCheckBox;
|
|
BuildLCLRadioGroup: TRadioGroup;
|
|
BuildSynEditRadioGroup: TRadioGroup;
|
|
BuildCodeToolsRadioGroup: TRadioGroup;
|
|
BuildIDERadioGroup: TRadioGroup;
|
|
BuildExamplesRadioGroup: TRadioGroup;
|
|
OkButton: TButton;
|
|
CancelButton: TButton;
|
|
procedure OkButtonClick(Sender: TObject);
|
|
procedure CancelButtonClick(Sender: TObject);
|
|
private
|
|
function MakeModeToInt(MakeMode: TMakeMode): integer;
|
|
function IntToMakeMode(i: integer): TMakeMode;
|
|
public
|
|
procedure Load(Options: TBuildLazarusOptions);
|
|
procedure Save(Options: TBuildLazarusOptions);
|
|
constructor Create(AnOwner: TComponent); override;
|
|
end;
|
|
|
|
function ShowConfigureBuildLazarusDlg(
|
|
Options: TBuildLazarusOptions): TModalResult;
|
|
|
|
function BuildLazarus(Options: TBuildLazarusOptions;
|
|
ExternalTools: TExternalToolList; Macros: TTransferMacroList): TModalResult;
|
|
|
|
implementation
|
|
|
|
|
|
const
|
|
MakeModeNames: array[TMakeMode] of string = (
|
|
'None', 'Build', 'Clean & Build'
|
|
);
|
|
|
|
|
|
function StrToMakeMode(const s: string): TMakeMode;
|
|
begin
|
|
for Result:=Succ(mmNone) to High(TMakeMode) do
|
|
if AnsiCompareText(s,MakeModeNames[Result])=0 then exit;
|
|
Result:=mmNone;
|
|
end;
|
|
|
|
function ShowConfigureBuildLazarusDlg(
|
|
Options: TBuildLazarusOptions): TModalResult;
|
|
var ConfigBuildLazDlg: TConfigureBuildLazarusDlg;
|
|
begin
|
|
Result:=mrCancel;
|
|
ConfigBuildLazDlg:=TConfigureBuildLazarusDlg.Create(Application);
|
|
try
|
|
ConfigBuildLazDlg.Load(Options);
|
|
Result:=ConfigBuildLazDlg.ShowModal;
|
|
if Result=mrOk then
|
|
ConfigBuildLazDlg.Save(Options);
|
|
finally
|
|
ConfigBuildLazDlg.Free;
|
|
end;
|
|
Result:=mrOk;
|
|
end;
|
|
|
|
function BuildLazarus(Options: TBuildLazarusOptions;
|
|
ExternalTools: TExternalToolList; Macros: TTransferMacroList): TModalResult;
|
|
var
|
|
Tool: TExternalToolOptions;
|
|
begin
|
|
Result:=mrCancel;
|
|
Tool:=TExternalToolOptions.Create;
|
|
try
|
|
Tool.Filename:=Options.MakeFilename;
|
|
Tool.ScanOutputForFPCMessages:=true;
|
|
Tool.ScanOutputForMakeMessages:=true;
|
|
if Options.CleanAll then begin
|
|
// clean lazarus source directories
|
|
Tool.Title:='Clean Lazarus Source';
|
|
Tool.WorkingDirectory:='$(LazarusDir)';
|
|
Tool.CmdLineParams:='cleanall';
|
|
Result:=ExternalTools.Run(Tool,Macros);
|
|
if Result<>mrOk then exit;
|
|
end;
|
|
if Options.BuildLCL<>mmNone then begin
|
|
// build lcl
|
|
Tool.Title:='Build LCL';
|
|
Tool.WorkingDirectory:='$(LazarusDir)/lcl';
|
|
if Options.BuildLCL=mmBuild then
|
|
Tool.CmdLineParams:=''
|
|
else
|
|
Tool.CmdLineParams:='clean all';
|
|
Result:=ExternalTools.Run(Tool,Macros);
|
|
if Result<>mrOk then exit;
|
|
end;
|
|
if Options.BuildSynEdit<>mmNone then begin
|
|
// build SynEdit
|
|
Tool.Title:='Build SynEdit';
|
|
Tool.WorkingDirectory:='$(LazarusDir)/components/synedit';
|
|
if Options.BuildSynEdit=mmBuild then
|
|
Tool.CmdLineParams:=''
|
|
else
|
|
Tool.CmdLineParams:='clean all';
|
|
Result:=ExternalTools.Run(Tool,Macros);
|
|
if Result<>mrOk then exit;
|
|
end;
|
|
if Options.BuildCodeTools<>mmNone then begin
|
|
// build CodeTools
|
|
Tool.Title:='Build CodeTools';
|
|
Tool.WorkingDirectory:='$(LazarusDir)/components/codetools';
|
|
if Options.BuildCodeTools=mmBuild then
|
|
Tool.CmdLineParams:=''
|
|
else
|
|
Tool.CmdLineParams:='clean all';
|
|
Result:=ExternalTools.Run(Tool,Macros);
|
|
if Result<>mrOk then exit;
|
|
end;
|
|
if Options.BuildIDE<>mmNone then begin
|
|
// build IDE
|
|
Tool.Title:='Build IDE';
|
|
Tool.WorkingDirectory:='$(LazarusDir)';
|
|
if Options.BuildIDE=mmBuild then
|
|
Tool.CmdLineParams:='ide'
|
|
else
|
|
// ToDo: the Makefile needs a 'cleanide'
|
|
Tool.CmdLineParams:='clean all';
|
|
Result:=ExternalTools.Run(Tool,Macros);
|
|
if Result<>mrOk then exit;
|
|
end;
|
|
if Options.BuildExamples<>mmNone then begin
|
|
// build Examples
|
|
Tool.Title:='Build Examples';
|
|
Tool.WorkingDirectory:='$(LazarusDir)/examples';
|
|
if Options.BuildExamples=mmBuild then
|
|
Tool.CmdLineParams:=''
|
|
else
|
|
Tool.CmdLineParams:='clean all';
|
|
Result:=ExternalTools.Run(Tool,Macros);
|
|
if Result<>mrOk then exit;
|
|
end;
|
|
Result:=mrOk;
|
|
finally
|
|
Tool.Free;
|
|
end;
|
|
end;
|
|
|
|
{ TConfigureBuildLazarusDlg }
|
|
|
|
constructor TConfigureBuildLazarusDlg.Create(AnOwner: TComponent);
|
|
var MakeMode: TMakeMode;
|
|
begin
|
|
inherited Create(AnOwner);
|
|
if LazarusResources.Find(Classname)=nil then begin
|
|
SetBounds((Screen.Width-350) div 2,(Screen.Height-320) div 2,350,320);
|
|
Caption:='Configure "Build Lazarus"';
|
|
|
|
CleanAllCheckBox:=TCheckBox.Create(Self);
|
|
with CleanAllCheckBox do begin
|
|
Parent:=Self;
|
|
Name:='CleanAllCheckBox';
|
|
SetBounds(10,10,Self.ClientWidth-24,20);
|
|
Caption:='Clean all';
|
|
Visible:=true;
|
|
end;
|
|
|
|
BuildLCLRadioGroup:=TRadioGroup.Create(Self);
|
|
with BuildLCLRadioGroup do begin
|
|
Parent:=Self;
|
|
Name:='BuildLCLRadioGroup';
|
|
SetBounds(10,CleanAllCheckBox.Top+CleanAllCheckBox.Height+5,
|
|
CleanAllCheckBox.Width,40);
|
|
Caption:='Build LCL';
|
|
for MakeMode:=Low(TMakeMode) to High(TMakeMode) do
|
|
Items.Add(MakeModeNames[MakeMode]);
|
|
Columns:=3;
|
|
Visible:=true;
|
|
end;
|
|
|
|
BuildSynEditRadioGroup:=TRadioGroup.Create(Self);
|
|
with BuildSynEditRadioGroup do begin
|
|
Parent:=Self;
|
|
Name:='BuildSynEditRadioGroup';
|
|
SetBounds(10,BuildLCLRadioGroup.Top+BuildLCLRadioGroup.Height+5,
|
|
BuildLCLRadioGroup.Width,BuildLCLRadioGroup.Height);
|
|
Caption:='Build SynEdit';
|
|
for MakeMode:=Low(TMakeMode) to High(TMakeMode) do
|
|
Items.Add(MakeModeNames[MakeMode]);
|
|
Columns:=3;
|
|
Visible:=true;
|
|
end;
|
|
|
|
BuildCodeToolsRadioGroup:=TRadioGroup.Create(Self);
|
|
with BuildCodeToolsRadioGroup do begin
|
|
Parent:=Self;
|
|
Name:='BuildCodeToolsRadioGroup';
|
|
SetBounds(10,BuildSynEditRadioGroup.Top+BuildSynEditRadioGroup.Height+5,
|
|
BuildLCLRadioGroup.Width,BuildLCLRadioGroup.Height);
|
|
Caption:='Build CodeTools';
|
|
for MakeMode:=Low(TMakeMode) to High(TMakeMode) do
|
|
Items.Add(MakeModeNames[MakeMode]);
|
|
Columns:=3;
|
|
Visible:=true;
|
|
end;
|
|
|
|
BuildIDERadioGroup:=TRadioGroup.Create(Self);
|
|
with BuildIDERadioGroup do begin
|
|
Parent:=Self;
|
|
Name:='BuildIDERadioGroup';
|
|
SetBounds(10,BuildCodeToolsRadioGroup.Top+BuildCodeToolsRadioGroup.Height+5,
|
|
BuildLCLRadioGroup.Width,BuildLCLRadioGroup.Height);
|
|
Caption:='Build IDE';
|
|
for MakeMode:=Low(TMakeMode) to High(TMakeMode) do
|
|
Items.Add(MakeModeNames[MakeMode]);
|
|
Columns:=3;
|
|
Visible:=true;
|
|
end;
|
|
|
|
BuildExamplesRadioGroup:=TRadioGroup.Create(Self);
|
|
with BuildExamplesRadioGroup do begin
|
|
Parent:=Self;
|
|
Name:='BuildExamplesRadioGroup';
|
|
SetBounds(10,BuildIDERadioGroup.Top+BuildIDERadioGroup.Height+5,
|
|
BuildLCLRadioGroup.Width,BuildLCLRadioGroup.Height);
|
|
Caption:='Build Examples';
|
|
for MakeMode:=Low(TMakeMode) to High(TMakeMode) do
|
|
Items.Add(MakeModeNames[MakeMode]);
|
|
Columns:=3;
|
|
Visible:=true;
|
|
end;
|
|
|
|
OkButton:=TButton.Create(Self);
|
|
with OkButton do begin
|
|
Parent:=Self;
|
|
Name:='OkButton';
|
|
SetBounds(Self.ClientWidth-180,Self.ClientHeight-38,80,25);
|
|
Caption:='Ok';
|
|
OnClick:=@OkButtonClick;
|
|
Visible:=true;
|
|
end;
|
|
|
|
CancelButton:=TButton.Create(Self);
|
|
with CancelButton do begin
|
|
Parent:=Self;
|
|
Name:='CancelButton';
|
|
SetBounds(Self.ClientWidth-90,OkButton.Top,OkButton.Width,OkButton.Height);
|
|
Caption:='Cancel';
|
|
OnClick:=@CancelButtonClick;
|
|
Visible:=true;
|
|
end;
|
|
|
|
end;
|
|
end;
|
|
|
|
procedure TConfigureBuildLazarusDlg.OkButtonClick(Sender: TObject);
|
|
begin
|
|
ModalResult:=mrOk;
|
|
end;
|
|
|
|
procedure TConfigureBuildLazarusDlg.CancelButtonClick(Sender: TObject);
|
|
begin
|
|
ModalResult:=mrCancel;
|
|
end;
|
|
|
|
procedure TConfigureBuildLazarusDlg.Load(Options: TBuildLazarusOptions);
|
|
begin
|
|
CleanAllCheckBox.Checked:=Options.CleanAll;
|
|
BuildLCLRadioGroup.ItemIndex:=MakeModeToInt(Options.BuildLCL);
|
|
BuildSynEditRadioGroup.ItemIndex:=MakeModeToInt(Options.BuildSynEdit);
|
|
BuildCodeToolsRadioGroup.ItemIndex:=MakeModeToInt(Options.BuildCodeTools);
|
|
BuildIDERadioGroup.ItemIndex:=MakeModeToInt(Options.BuildIDE);
|
|
BuildExamplesRadioGroup.ItemIndex:=MakeModeToInt(Options.BuildExamples);
|
|
end;
|
|
|
|
procedure TConfigureBuildLazarusDlg.Save(Options: TBuildLazarusOptions);
|
|
begin
|
|
Options.CleanAll:=CleanAllCheckBox.Checked;
|
|
Options.BuildLCL:=IntToMakeMode(BuildLCLRadioGroup.ItemIndex);
|
|
Options.BuildSynEdit:=IntToMakeMode(BuildSynEditRadioGroup.ItemIndex);
|
|
Options.BuildCodeTools:=IntToMakeMode(BuildCodeToolsRadioGroup.ItemIndex);
|
|
Options.BuildIDE:=IntToMakeMode(BuildIDERadioGroup.ItemIndex);
|
|
Options.BuildExamples:=IntToMakeMode(BuildExamplesRadioGroup.ItemIndex);
|
|
end;
|
|
|
|
function TConfigureBuildLazarusDlg.MakeModeToInt(MakeMode: TMakeMode): integer;
|
|
begin
|
|
case MakeMode of
|
|
mmBuild: Result:=1;
|
|
mmCleanBuild: Result:=2;
|
|
else Result:=0;
|
|
end;
|
|
end;
|
|
|
|
function TConfigureBuildLazarusDlg.IntToMakeMode(i: integer): TMakeMode;
|
|
begin
|
|
case i of
|
|
1: Result:=mmBuild;
|
|
2: Result:=mmCleanBuild;
|
|
else Result:=mmNone;
|
|
end;
|
|
end;
|
|
|
|
{ TBuildLazarusOptions }
|
|
|
|
procedure TBuildLazarusOptions.Save(XMLConfig: TXMLConfig; const Path: string);
|
|
begin
|
|
XMLConfig.SetValue(Path+'BuildLCL/Value',MakeModeNames[fBuildLCL]);
|
|
XMLConfig.SetValue(Path+'BuildSynEdit/Value',MakeModeNames[fBuildSynEdit]);
|
|
XMLConfig.SetValue(Path+'BuildCodeTools/Value',MakeModeNames[fBuildCodeTools]);
|
|
XMLConfig.SetValue(Path+'BuildIDE/Value',MakeModeNames[fBuildIDE]);
|
|
XMLConfig.SetValue(Path+'BuildExamples/Value',MakeModeNames[fBuildExamples]);
|
|
XMLConfig.SetValue(Path+'CleanAll/Value',fCleanAll);
|
|
XMLConfig.SetValue(Path+'MakeFilename/Value',fMakeFilename);
|
|
end;
|
|
|
|
procedure TBuildLazarusOptions.Load(XMLConfig: TXMLConfig; const Path: string);
|
|
begin
|
|
fBuildLCL:=StrToMakeMode(XMLConfig.GetValue(Path+'BuildLCL/Value',
|
|
MakeModeNames[fBuildLCL]));
|
|
fBuildSynEdit:=StrToMakeMode(XMLConfig.GetValue(Path+'BuildSynEdit/Value',
|
|
MakeModeNames[fBuildSynEdit]));
|
|
fBuildCodeTools:=StrToMakeMode(XMLConfig.GetValue(Path+'BuildCodeTools/Value',
|
|
MakeModeNames[fBuildCodeTools]));
|
|
fBuildIDE:=StrToMakeMode(XMLConfig.GetValue(Path+'BuildIDE/Value',
|
|
MakeModeNames[fBuildIDE]));
|
|
fBuildExamples:=StrToMakeMode(XMLConfig.GetValue(Path+'BuildExamples/Value',
|
|
MakeModeNames[fBuildExamples]));
|
|
fCleanAll:=XMLConfig.GetValue(Path+'CleanAll/Value',fCleanAll);
|
|
fMakeFilename:=XMLConfig.GetValue(Path+'MakeFilename/Value',fMakeFilename);
|
|
end;
|
|
|
|
constructor TBuildLazarusOptions.Create;
|
|
begin
|
|
inherited Create;
|
|
fMakeFilename:='/usr/bin/make';
|
|
end;
|
|
|
|
|
|
end.
|
|
|
|
|