[Ada] change verbosity in library builder

Arnaud Charlet charlet@adacore.com
Mon Apr 9 08:19:00 GMT 2007


Tested on i686-linux, committed on trunk

The output in default mode when building a library, static or shared,
was found too verbose. This patch reduces the output in default mode.
The output in verbose mode is not modified. In default mode, the lists
of object files and ALI files are not displayed and if there is more than
one object files in the library, only the first object files in displayed
in the linking display line, the others being replaced by an "...".
The test for this is to build a library with more than one object file
in default mode and in verbose mode and to witnessed the differences
described above.

2007-04-06  Vincent Celier  <celier@adacore.com>

	* mlib.adb (Building_Library): Only output "building a library..." in
	verbose mode

	* mlib-prj.adb (Build_Library): Only output lists of object and ALI
	files in verbose mode.

	* mlib-utl.adb (Ar): Only output the first object files when not in
	verbose mode.
	(Gcc): Do not display all the object files if not in verbose mode, only
	the first one.

-------------- next part --------------
Index: mlib.adb
===================================================================
--- mlib.adb	(revision 123291)
+++ mlib.adb	(working copy)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                     Copyright (C) 1999-2005, AdaCore                     --
+--                     Copyright (C) 1999-2006, AdaCore                     --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -53,7 +53,7 @@ package body MLib is
       pragma Warnings (Off, Afiles);
 
    begin
-      if not Opt.Quiet_Output then
+      if Opt.Verbose_Mode and not Opt.Quiet_Output then
          Write_Line ("building a library...");
          Write_Str  ("   make ");
          Write_Line (Output_File);
Index: mlib-prj.adb
===================================================================
--- mlib-prj.adb	(revision 123291)
+++ mlib-prj.adb	(working copy)
@@ -1393,30 +1393,35 @@ package body MLib.Prj is
             Write_Str  (" library for project ");
             Write_Line (Project_Name);
 
-            Write_Eol;
+            --  Only output the list of object files and ALI files in verbose
+            --  mode.
 
-            Write_Line ("object files:");
+            if Opt.Verbose_Mode then
+               Write_Eol;
 
-            for Index in Object_Files'Range loop
-               Write_Str  ("   ");
-               Write_Line (Object_Files (Index).all);
-            end loop;
+               Write_Line ("object files:");
 
-            Write_Eol;
+               for Index in Object_Files'Range loop
+                  Write_Str  ("   ");
+                  Write_Line (Object_Files (Index).all);
+               end loop;
 
-            if Ali_Files'Length = 0 then
-               Write_Line ("NO ALI files");
+               Write_Eol;
 
-            else
-               Write_Line ("ALI files:");
+               if Ali_Files'Length = 0 then
+                  Write_Line ("NO ALI files");
 
-               for Index in Ali_Files'Range loop
-                  Write_Str  ("   ");
-                  Write_Line (Ali_Files (Index).all);
-               end loop;
-            end if;
+               else
+                  Write_Line ("ALI files:");
+
+                  for Index in Ali_Files'Range loop
+                     Write_Str  ("   ");
+                     Write_Line (Ali_Files (Index).all);
+                  end loop;
+               end if;
 
-            Write_Eol;
+               Write_Eol;
+            end if;
          end if;
 
          --  We check that all object files are regular files
Index: mlib-utl.adb
===================================================================
--- mlib-utl.adb	(revision 123291)
+++ mlib-utl.adb	(working copy)
@@ -124,6 +124,14 @@ package body MLib.Utl is
             end if;
 
             Write_Char (' ');
+
+            --  Only output the first object files when not in verbose mode
+
+            if (not Opt.Verbose_Mode) and then J = Ar_Options'Length + 3 then
+               Write_Str ("...");
+               exit;
+            end if;
+
             Write_Str  (Arguments (J).all);
             Line_Length := Line_Length + 1 + Arguments (J)'Length;
          end loop;
@@ -209,6 +217,10 @@ package body MLib.Utl is
 
       Driver    : String_Access;
 
+      type Object_Position is (First, Second, Last);
+
+      Position : Object_Position;
+
    begin
       if Driver_Name = No_Name then
          if Gcc_Exec = null then
@@ -246,12 +258,6 @@ package body MLib.Utl is
       A := A + Options'Length;
       Arguments (A - Options'Length + 1 .. A) := Options;
 
-      A := A + Objects'Length;
-      Arguments (A - Objects'Length + 1 .. A) := Objects;
-
-      A := A + Options_2'Length;
-      Arguments (A - Options_2'Length + 1 .. A) := Options_2;
-
       if not Opt.Quiet_Output then
          Write_Str (Driver.all);
 
@@ -260,9 +266,36 @@ package body MLib.Utl is
             Write_Str  (Arguments (J).all);
          end loop;
 
+         --  Do not display all the object files if not in verbose mode, only
+         --  the first one.
+
+         Position := First;
+         for J in Objects'Range loop
+            if Opt.Verbose_Mode or else Position = First then
+               Write_Char (' ');
+               Write_Str (Objects (J).all);
+               Position := Second;
+
+            elsif Position = Second then
+               Write_Str (" ...");
+               Position := Last;
+            end if;
+         end loop;
+
+         for J in Options_2'Range loop
+            Write_Char (' ');
+            Write_Str (Options_2 (J).all);
+         end loop;
+
          Write_Eol;
       end if;
 
+      A := A + Objects'Length;
+      Arguments (A - Objects'Length + 1 .. A) := Objects;
+
+      A := A + Options_2'Length;
+      Arguments (A - Options_2'Length + 1 .. A) := Options_2;
+
       OS_Lib.Spawn (Driver.all, Arguments (1 .. A), Success);
 
       if not Success then


More information about the Gcc-patches mailing list