[Lazarus] Lazarus IDE - "Build many Modes" and "Automatically increase build number" issue with patch

Sandro Cumerlato sandro.cumerlato at gmail.com
Thu Apr 9 18:05:27 CEST 2015


Hello,
while building many modes the build number should not increase after every
single build, but it should increase at the end only.

In my case I release both 32 and 64 bit versions of my softwares and I'd
like to obtain the same build number for both executables.

Test project attached too, you should obtain the same build number for all
the 4 modes.

I've attached a patch to solve this issue, please review and apply.

Thank you.

Sandro Cumerlato
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20150409/c708e73a/attachment-0002.html>
-------------- next part --------------
Index: components/ideintf/lazideintf.pas
===================================================================
--- components/ideintf/lazideintf.pas	(revisione 48686)
+++ components/ideintf/lazideintf.pas	(copia locale)
@@ -247,7 +247,8 @@
     function DoPublishProject(Flags: TSaveFlags;
                               ShowDialog: boolean): TModalResult; virtual; abstract;
     function DoBuildProject(const AReason: TCompileReason;
-                            Flags: TProjectBuildFlags): TModalResult; virtual; abstract;
+                            Flags: TProjectBuildFlags;
+                            LastMode: boolean): TModalResult; virtual; abstract;
     function GetProjectFileForProjectEditor(AEditor: TSourceEditorInterface): TLazProjectFile; virtual; abstract;
     function DoCallProjectChangedHandler(HandlerType: TLazarusIDEHandlerType;
                                          AProject: TLazProject): TModalResult;
Index: ide/main.pp
===================================================================
--- ide/main.pp	(revisione 48686)
+++ ide/main.pp	(copia locale)
@@ -775,7 +775,8 @@
     function DoWarnAmbiguousFiles: TModalResult;
     function DoSaveForBuild(AReason: TCompileReason): TModalResult; override;
     function DoBuildProject(const AReason: TCompileReason;
-                            Flags: TProjectBuildFlags): TModalResult; override;
+                            Flags: TProjectBuildFlags;
+                            LastMode: boolean = True): TModalResult; override;
     function UpdateProjectPOFile(AProject: TProject): TModalResult;
     function DoAbortBuild(Interactive: boolean): TModalResult;
     procedure DoCompile;
@@ -6487,7 +6488,7 @@
 end;
 
 function TMainIDE.DoBuildProject(const AReason: TCompileReason;
-  Flags: TProjectBuildFlags): TModalResult;
+  Flags: TProjectBuildFlags; LastMode: boolean): TModalResult;
 var
   SrcFilename: string;
   ToolBefore: TProjectCompilationToolOptions;
@@ -6784,7 +6785,8 @@
       end;
     end;
 
-    Project1.ProjResources.DoAfterBuild(AReason, Project1.IsVirtual);
+    if LastMode then
+      Project1.ProjResources.DoAfterBuild(AReason, Project1.IsVirtual);
   finally
     // check sources
     DoCheckFilesOnDisk;
Index: ide/sourcefilemanager.pas
===================================================================
--- ide/sourcefilemanager.pas	(revisione 48686)
+++ ide/sourcefilemanager.pas	(copia locale)
@@ -4021,13 +4021,13 @@
 var
   ModeCnt: Integer;
 
-  function BuildOneMode: Boolean;
+  function BuildOneMode(LastMode: boolean): Boolean;
   begin
     Inc(ModeCnt);
     DebugLn('');
     DebugLn(Format('Building mode %d: %s ...', [ModeCnt, Project1.ActiveBuildMode.Identifier]));
     DebugLn('');
-    Result := MainIDE.DoBuildProject(crBuild,[]) = mrOK;
+    Result := MainIDE.DoBuildProject(crBuild,[],LastMode) = mrOK;
   end;
 
 var
@@ -4035,6 +4035,7 @@
   md, ActiveMode: TProjectBuildMode;
   BuildActiveMode: Boolean;
   i: Integer;
+  LastMode: boolean;
 begin
   Result := False;
   ModeCnt := 0;
@@ -4057,12 +4058,16 @@
     end;
     // Build first the active mode so we don't have to switch many times.
     if BuildActiveMode then
-      if not BuildOneMode then Exit;
+    begin
+      LastMode := (ModeList.Count=0);
+      if not BuildOneMode(LastMode) then Exit;
+    end;
     // Build rest of the modes.
     for i := 0 to ModeList.Count-1 do
     begin
+      LastMode := (i=(ModeList.Count-1));
       Project1.ActiveBuildMode := TProjectBuildMode(ModeList[i]);
-      if not BuildOneMode then Exit;
+      if not BuildOneMode(LastMode) then Exit;
     end;
     // Switch back to original mode.
     Project1.ActiveBuildMode := ActiveMode;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.zip
Type: application/zip
Size: 1940 bytes
Desc: not available
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20150409/c708e73a/attachment-0002.zip>


More information about the Lazarus mailing list