Build profiles: Added Tools menu item to build selected profiles. Refactoring.

git-svn-id: trunk@28002 -
This commit is contained in:
juha 2010-10-31 09:37:32 +00:00
parent f85cea3158
commit 4c3454ad79
4 changed files with 93 additions and 60 deletions

View File

@ -400,6 +400,7 @@ resourcestring
lisMenuConvertDelphiPackage = 'Convert Delphi package to Lazarus package ...';
lisMenuConvertEncoding = 'Convert encoding of projects/packages ...';
lisMenuBuildLazarus = 'Build Lazarus';
lisMenuBuildLazarusAll = 'Build Lazarus with selected profiles';
lisMenuConfigureBuildLazarus = 'Configure "Build Lazarus" ...';
lisMenuGeneralOptions = 'Options ...';

View File

@ -323,6 +323,7 @@ type
procedure mnuToolConvertDelphiPackageClicked(Sender: TObject);
procedure mnuToolConvertEncodingClicked(Sender: TObject);
procedure mnuToolBuildLazarusClicked(Sender: TObject);
procedure mnuToolBuildLazarusAllClicked(Sender: TObject);
procedure mnuToolConfigBuildLazClicked(Sender: TObject);
procedure mnuCustomExtToolClick(Sender: TObject);
@ -869,6 +870,7 @@ type
function DoRunExternalTool(Index: integer): TModalResult;
function DoSaveBuildIDEConfigs(Flags: TBuildLazarusFlags): TModalResult; override;
function DoBuildLazarus(Flags: TBuildLazarusFlags): TModalResult; override;
function DoBuildLazarusAll(Flags: TBuildLazarusFlags): TModalResult;
function DoBuildFile: TModalResult;
function DoRunFile: TModalResult;
function DoConfigBuildFile: TModalResult;
@ -2503,6 +2505,7 @@ begin
itmToolConvertDelphiPackage.OnClick := @mnuToolConvertDelphiPackageClicked;
itmToolConvertEncoding.OnClick := @mnuToolConvertEncodingClicked;
itmToolBuildLazarus.OnClick := @mnuToolBuildLazarusClicked;
itmToolBuildLazarusAll.OnClick := @mnuToolBuildLazarusAllClicked;
itmToolConfigureBuildLazarus.OnClick := @mnuToolConfigBuildLazClicked;
// Set initial caption for Build Lazarus item. Will be changed in BuildLazDialog.
if Assigned(MiscellaneousOptions) then
@ -4234,78 +4237,38 @@ begin
DoBuildLazarus([]);
end;
procedure TMainIDE.mnuToolBuildLazarusAllClicked(Sender: TObject);
begin
DoBuildLazarusAll([]);
end;
procedure TMainIDE.mnuToolConfigBuildLazClicked(Sender: TObject);
var
CmdLineDefines: TDefineTemplate;
LazSrcTemplate: TDefineTemplate;
LazSrcDirTemplate: TDefineTemplate;
procedure ChangeCmd;
begin
if Assigned(LazSrcTemplate) and Assigned(LazSrcDirTemplate) then begin
CmdLineDefines:=CodeToolBoss.DefinePool.CreateFPCCommandLineDefines(
StdDefTemplLazarusBuildOpts,
MiscellaneousOptions.BuildLazProfiles.Current.ExtraOptions,
true,CodeToolsOpts);
CodeToolBoss.DefineTree.ReplaceChild(LazSrcDirTemplate,CmdLineDefines,
StdDefTemplLazarusBuildOpts);
end;
end;
var
DlgResult, BuildResult: TModalResult;
i, RealCurInd: Integer;
NeedRestart, FoundProfToBuild: Boolean;
s: String;
DlgResult: TModalResult;
begin
DlgResult:=ShowConfigureBuildLazarusDlg(MiscellaneousOptions.BuildLazProfiles);
if DlgResult in [mrOk,mrYes,mrAll] then begin
MiscellaneousOptions.Save;
LazSrcTemplate:=CodeToolBoss.DefineTree.FindDefineTemplateByName(
StdDefTemplLazarusSources,true);
LazSrcDirTemplate:=LazSrcTemplate.FindChildByName(StdDefTemplLazarusSrcDir);
if DlgResult=mrAll then begin
with MiscellaneousOptions do begin
NeedRestart:=False;
RealCurInd:=BuildLazProfiles.CurrentIndex;
try
FoundProfToBuild:=False;
s:=sLineBreak+sLineBreak;
for i:=0 to BuildLazProfiles.Count-1 do
if BuildLazProfiles[i].BuildWithAll then begin
s:=s+BuildLazProfiles[i].Name+sLineBreak;
FoundProfToBuild:=True;
end;
if not FoundProfToBuild then begin
ShowMessage(lisNoBuildProfilesSelected);
exit;
end;
if MessageDlg(Format(lisConfirmBuildAllProfiles, [s+sLineBreak]),
mtConfirmation, mbYesNo, 0)<>mrYes then
exit;
for i:=0 to BuildLazProfiles.Count-1 do begin
if BuildLazProfiles[i].BuildWithAll then begin
IDEMessagesWindow.AddMsg('Building: '+BuildLazProfiles.Current.Name,'',-1);
BuildLazProfiles.CurrentIndex:=i; // Set current profile temporarily.
ChangeCmd;
BuildResult:=DoBuildLazarusSub([]);
if (BuildResult=mrOK) and BuildLazProfiles.Current.RestartAfterBuild then
NeedRestart:=True
else
if BuildResult<>mrIgnore then exit;
end;
end;
finally
BuildLazProfiles.CurrentIndex:=RealCurInd;
end;
if NeedRestart then begin
CompileProgress.Close;
mnuRestartClicked(nil);
end;
end;
DoBuildLazarusAll([]);
end
else if DlgResult=mrYes then begin
ChangeCmd;
LazSrcTemplate:=
CodeToolBoss.DefineTree.FindDefineTemplateByName(StdDefTemplLazarusSources,true);
if Assigned(LazSrcTemplate) then begin
LazSrcDirTemplate:=LazSrcTemplate.FindChildByName(StdDefTemplLazarusSrcDir);
if Assigned(LazSrcDirTemplate) then begin
CmdLineDefines:=CodeToolBoss.DefinePool.CreateFPCCommandLineDefines(
StdDefTemplLazarusBuildOpts,
MiscellaneousOptions.BuildLazProfiles.Current.ExtraOptions,
true,CodeToolsOpts);
CodeToolBoss.DefineTree.ReplaceChild(LazSrcDirTemplate,CmdLineDefines,
StdDefTemplLazarusBuildOpts);
end;
end;
DoBuildLazarus([]);
end;
end;
@ -11550,6 +11513,72 @@ begin
Result:=mrOK;
end;
function TMainIDE.DoBuildLazarusAll(Flags: TBuildLazarusFlags): TModalResult;
var
CmdLineDefines: TDefineTemplate;
LazSrcTemplate: TDefineTemplate;
LazSrcDirTemplate: TDefineTemplate;
BuildResult: TModalResult;
i, RealCurInd: Integer;
NeedRestart, FoundProfToBuild: Boolean;
s: String;
begin
LazSrcTemplate:=
CodeToolBoss.DefineTree.FindDefineTemplateByName(StdDefTemplLazarusSources,true);
with MiscellaneousOptions do begin
NeedRestart:=False;
RealCurInd:=BuildLazProfiles.CurrentIndex;
try
FoundProfToBuild:=False;
s:=sLineBreak+sLineBreak;
for i:=0 to BuildLazProfiles.Count-1 do
if BuildLazProfiles[i].BuildWithAll then begin
s:=s+BuildLazProfiles[i].Name+sLineBreak;
FoundProfToBuild:=True;
end;
if not FoundProfToBuild then begin
ShowMessage(lisNoBuildProfilesSelected);
exit;
end;
if MessageDlg(Format(lisConfirmBuildAllProfiles, [s+sLineBreak]),
mtConfirmation, mbYesNo, 0)<>mrYes then
exit;
for i:=0 to BuildLazProfiles.Count-1 do begin
if BuildLazProfiles[i].BuildWithAll then begin
// does not show message: IDEMessagesWindow.AddMsg('Building: '+BuildLazProfiles.Current.Name,'',-1);
BuildLazProfiles.CurrentIndex:=i; // Set current profile temporarily.
//
if Assigned(LazSrcTemplate) then begin
LazSrcDirTemplate:=LazSrcTemplate.FindChildByName(StdDefTemplLazarusSrcDir);
if Assigned(LazSrcDirTemplate) then begin
CmdLineDefines:=CodeToolBoss.DefinePool.CreateFPCCommandLineDefines(
StdDefTemplLazarusBuildOpts,
MiscellaneousOptions.BuildLazProfiles.Current.ExtraOptions,
true,CodeToolsOpts);
CodeToolBoss.DefineTree.ReplaceChild(LazSrcDirTemplate,CmdLineDefines,
StdDefTemplLazarusBuildOpts);
end;
end
else
raise Exception.Create('CodeToolBoss.DefineTree.FindDefineTemplateByName('
+'StdDefTemplLazarusSources,true) returned Nil.');
BuildResult:=DoBuildLazarusSub([]);
if (BuildResult=mrOK) and BuildLazProfiles.Current.RestartAfterBuild then
NeedRestart:=True
else
if BuildResult<>mrIgnore then exit;
end;
end;
finally
BuildLazProfiles.CurrentIndex:=RealCurInd;
end;
if NeedRestart then begin
CompileProgress.Close;
mnuRestartClicked(nil);
end;
end;
end;
function TMainIDE.DoBuildFile: TModalResult;
var
ActiveSrcEdit: TSourceEditor;

View File

@ -312,6 +312,7 @@ type
itmToolConvertEncoding: TIDEMenuCommand;
//itmBuildingLazarus: TIDEMenuSection;
itmToolBuildLazarus: TIDEMenuCommand;
itmToolBuildLazarusAll: TIDEMenuCommand;
itmToolConfigureBuildLazarus: TIDEMenuCommand;
// environment menu

View File

@ -748,6 +748,7 @@ begin
ParentMI:=itmBuildingLazarus;
CreateMenuItem(ParentMI,itmToolBuildLazarus,'itmToolBuildLazarus',lisMenuBuildLazarus,'menu_build_lazarus');
CreateMenuItem(ParentMI,itmToolBuildLazarusAll,'itmToolBuildLazarusAll',lisMenuBuildLazarusAll,'menu_build_all');
CreateMenuItem(ParentMI,itmToolConfigureBuildLazarus,'itmToolConfigureBuildLazarus',lisMenuConfigureBuildLazarus, 'menu_configure_build_lazarus');
end;
end;
@ -987,6 +988,7 @@ begin
itmToolConvertDelphiPackage.Command:=GetCommand(ecConvertDelphiPackage);
itmToolConvertEncoding.Command:=GetCommand(ecConvertEncoding);
itmToolBuildLazarus.Command:=GetCommand(ecBuildLazarus);
// itmToolBuildLazarusAll.Command:=GetCommand(ecBuildLazarusAll);
itmToolConfigureBuildLazarus.Command:=GetCommand(ecConfigBuildLazarus);
// environment menu