re PR ada/4720 (GNAT programs do not support --help and --version)
authorVincent Celier <celier@adacore.com>
Fri, 31 Aug 2007 10:19:18 +0000 (12:19 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 31 Aug 2007 10:19:18 +0000 (12:19 +0200)
2007-08-30  Vincent Celier  <celier@adacore.com>

PR ada/4720

* gnatchop.adb, gnatfind.adb, gnatlink.adb, gnatls.adb,
gnatname.adb, gnatxref.adb, gprep.adb, clean.adb gnatbind.adb
(Check_Version_And_Help): New procedure in package Switch to process
switches --version and --help.
Use Check_Version_And_Help in GNAT tools

* make.adb:  Ditto.
(Compile_Sources): Make sure that sources that are "excluded" are not
compiled.
(Gnatmake): Do not issue -aO. to gnatbind and only issue -I- if a
project file is used.
(Version_Switch): Remove, moved to Switch
(Help_Switch): Remove, moved to Switch
(Display_Version): Remove, moved to Switch

* switch.ads, switch.adb (Check_Version_And_Help): New procedure in
package Switch to process switches --version and --help.
(Display_Version): New procedure

* gnatvsn.ads, gnatvsn.adb (Copyright_Holder): New function.

From-SVN: r127967

14 files changed:
gcc/ada/clean.adb
gcc/ada/gnatbind.adb
gcc/ada/gnatchop.adb
gcc/ada/gnatfind.adb
gcc/ada/gnatlink.adb
gcc/ada/gnatls.adb
gcc/ada/gnatname.adb
gcc/ada/gnatvsn.adb
gcc/ada/gnatvsn.ads
gcc/ada/gnatxref.adb
gcc/ada/gprep.adb
gcc/ada/make.adb
gcc/ada/switch.adb
gcc/ada/switch.ads

index d4692ba65c5926c7b875c776147365b0d9fc185a..e3f8541263bf87f0a15146be24cb95ba0224541d 100644 (file)
@@ -26,7 +26,6 @@
 
 with ALI;      use ALI;
 with Csets;
-with Gnatvsn;  use Gnatvsn;
 with Makeutl;
 with MLib.Tgt; use MLib.Tgt;
 with Namet;    use Namet;
@@ -39,6 +38,7 @@ with Prj.Ext;
 with Prj.Pars;
 with Prj.Util; use Prj.Util;
 with Snames;
+with Switch;   use Switch;
 with Table;
 with Targparm; use Targparm;
 with Types;    use Types;
@@ -1342,11 +1342,7 @@ package body Clean is
    begin
       if not Copyright_Displayed then
          Copyright_Displayed := True;
-         Put_Line
-           ("GNATCLEAN " & Gnatvsn.Gnat_Version_String
-            & " Copyright 2003-"
-            & Current_Year
-            & " Free Software Foundation, Inc.");
+         Display_Version ("GNATCLEAN", "2003");
       end if;
    end Display_Copyright;
 
@@ -1640,9 +1636,14 @@ package body Clean is
    procedure Parse_Cmd_Line is
       Last         : constant Natural := Argument_Count;
       Source_Index : Int := 0;
-      Index        : Positive := 1;
+      Index        : Positive;
 
    begin
+      --  First, check for --version and --help
+
+      Check_Version_And_Help ("GNATCLEAN", "2003", Usage'Access);
+
+      Index := 1;
       while Index <= Last loop
          declare
             Arg : constant String := Argument (Index);
index 758613da504e8abf6ab7e8b9c2f74b301d9b448f..3445672f1d487f838daaaea989d85637177643e6 100644 (file)
@@ -37,7 +37,6 @@ with Csets;
 with Debug;    use Debug;
 with Fmap;
 with Fname;    use Fname;
-with Gnatvsn;  use Gnatvsn;
 with Namet;    use Namet;
 with Opt;      use Opt;
 with Osint;    use Osint;
@@ -423,6 +422,12 @@ begin
       Shared_Libgnat := (Shared_Libgnat_Default = SHARED);
    end;
 
+   --  Scan the switches and arguments
+
+   --  First, scan to detect --version and/or --help
+
+   Check_Version_And_Help ("GNATBIND", "1995", Bindusg.Display'Access);
+
    --  Use low level argument routines to avoid dragging in the secondary stack
 
    Next_Arg := 1;
@@ -553,13 +558,7 @@ begin
 
    if Verbose_Mode then
       Write_Eol;
-      Write_Str ("GNATBIND ");
-      Write_Str (Gnat_Version_String);
-      Write_Eol;
-      Write_Str ("Copyright 1995-" &
-                 Current_Year &
-                 ", Free Software Foundation, Inc.");
-      Write_Eol;
+      Display_Version ("GNATBIND", "1995");
    end if;
 
    --  Output usage information if no files
index 8db06e233a6b28eca7243dc83337ddce55055137..9bd1736d3e35491fc74f093c7f2af51173eadea1 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                     Copyright (C) 1998-2007, AdaCore                     --
+--          Copyright (C) 1998-2007, Free Software Foundation, Inc.         --
 --                                                                          --
 -- 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- --
@@ -36,8 +36,8 @@ with GNAT.OS_Lib;                use GNAT.OS_Lib;
 with GNAT.Heap_Sort_G;
 with GNAT.Table;
 
-with Gnatvsn;
 with Hostparm;
+with Switch;   use Switch;
 with Types;
 
 procedure Gnatchop is
@@ -1158,14 +1158,7 @@ procedure Gnatchop is
 
             when 'v' =>
                Verbose_Mode := True;
-
-               --  Why is following written to standard error. Most other
-               --  tools write to standard output ???
-
-               Put (Standard_Error, "GNATCHOP ");
-               Put_Line (Standard_Error, Gnatvsn.Gnat_Version_String);
-               Put_Line
-                 (Standard_Error, "Copyright 1998-2005, AdaCore");
+               Display_Version ("GNATCHOP", "1998");
 
             when 'w' =>
                Overwrite_Files := True;
@@ -1767,6 +1760,10 @@ begin
 
    --  Process command line options and initialize global variables
 
+   --  First, scan to detect --version and/or --help
+
+   Check_Version_And_Help ("GNATCHOP", "1998", Usage'Unrestricted_Access);
+
    if not Scan_Arguments then
       Set_Exit_Status (Failure);
       return;
index 3becc8809000c8e69be69d8ed78aa40915b5c85f..bc6f423dfd542aca7dbc62bce730c0693073e87b 100644 (file)
 --                                                                          --
 ------------------------------------------------------------------------------
 
-with Xr_Tabls; use Xr_Tabls;
-with Xref_Lib; use Xref_Lib;
+with Opt;
 with Osint;    use Osint;
+with Switch;   use Switch;
 with Types;    use Types;
-
-with Gnatvsn;
-with Opt;
+with Xr_Tabls; use Xr_Tabls;
+with Xref_Lib; use Xref_Lib;
 
 with Ada.Strings.Fixed; use Ada.Strings.Fixed;
 with Ada.Text_IO;       use Ada.Text_IO;
@@ -69,8 +68,11 @@ procedure Gnatfind is
    procedure Parse_Cmd_Line;
    --  Parse every switch on the command line
 
+   procedure Usage;
+   --  Display the usage
+
    procedure Write_Usage;
-   --  Print a small help page for program usage
+   --  Print a small help page for program usage and exit program
 
    --------------------
    -- Parse_Cmd_Line --
@@ -78,6 +80,14 @@ procedure Gnatfind is
 
    procedure Parse_Cmd_Line is
    begin
+      --  First check for --version or --help
+
+      Check_Version_And_Help ("GNATFIND", "1998", Usage'Unrestricted_Access);
+
+      --  Now scan the other switches
+
+      GNAT.Command_Line.Initialize_Option_Scan;
+
       loop
          case
            GNAT.Command_Line.Getopt
@@ -232,14 +242,12 @@ procedure Gnatfind is
          Write_Usage;
    end Parse_Cmd_Line;
 
-   -----------------
-   -- Write_Usage --
-   -----------------
+   -----------
+   -- Usage --
+   -----------
 
-   procedure Write_Usage is
+   procedure Usage is
    begin
-      Put_Line ("GNATFIND " & Gnatvsn.Gnat_Version_String);
-      Put_Line ("Copyright 1998-2005, AdaCore");
       Put_Line ("Usage: gnatfind pattern[:sourcefile[:line[:column]]] "
                 & "[file1 file2 ...]");
       New_Line;
@@ -276,8 +284,19 @@ procedure Gnatfind is
                 & " only)");
       Put_Line ("   -s        Print source line");
       Put_Line ("   -t        Print type hierarchy");
+   end Usage;
+
+   -----------------
+   -- Write_Usage --
+   -----------------
+
+   procedure Write_Usage is
+   begin
+      Display_Version ("GNATFIND", "1998");
       New_Line;
 
+      Usage;
+
       raise Usage_Error;
    end Write_Usage;
 
index 9d79b0a91ced35efa8b8c43948eda9d5052fce53..2170f5b25672872c6a4d7c9ffe311769df18c1ff 100644 (file)
@@ -205,6 +205,9 @@ procedure Gnatlink is
    procedure Process_Binder_File (Name : String);
    --  Reads the binder file and extracts linker arguments
 
+   procedure Usage;
+   --  Display usage
+
    procedure Write_Header;
    --  Show user the program name, version and copyright
 
@@ -291,6 +294,10 @@ procedure Gnatlink is
       --  linker's argument without parsing it.
 
    begin
+      --  First, check for --version and --help
+
+      Check_Version_And_Help ("GNATLINK", "1995", Usage'Unrestricted_Access);
+
       --  Loop through arguments of gnatlink command
 
       Next_Arg := 1;
@@ -1329,32 +1336,12 @@ procedure Gnatlink is
       Status := fclose (Fd);
    end Process_Binder_File;
 
-   ------------------
-   -- Write_Header --
-   ------------------
+   -----------
+   -- Usage --
+   -----------
 
-   procedure Write_Header is
+   procedure Usage is
    begin
-      if Verbose_Mode then
-         Write_Eol;
-         Write_Str ("GNATLINK ");
-         Write_Str (Gnat_Version_String);
-         Write_Eol;
-         Write_Str ("Copyright 1995-" &
-                    Current_Year &
-                    ", Free Software Foundation, Inc");
-         Write_Eol;
-      end if;
-   end Write_Header;
-
-   -----------------
-   -- Write_Usage --
-   -----------------
-
-   procedure Write_Usage is
-   begin
-      Write_Header;
-
       Write_Str ("Usage: ");
       Write_Str (Base_Name (Command_Name));
       Write_Str (" switches mainprog.ali [non-Ada-objects] [linker-options]");
@@ -1385,6 +1372,28 @@ procedure Gnatlink is
       Write_Eol;
       Write_Line ("  [non-Ada-objects]  list of non Ada object files");
       Write_Line ("  [linker-options]   other options for the linker");
+   end Usage;
+
+   ------------------
+   -- Write_Header --
+   ------------------
+
+   procedure Write_Header is
+   begin
+      if Verbose_Mode then
+         Write_Eol;
+         Display_Version ("GNATLINK", "1995");
+      end if;
+   end Write_Header;
+
+   -----------------
+   -- Write_Usage --
+   -----------------
+
+   procedure Write_Usage is
+   begin
+      Write_Header;
+      Usage;
    end Write_Usage;
 
 --  Start of processing for Gnatlink
index bd6af56f9c67fb572d500ad4565cc724b570cd10..1bee17980af599949895cb89a817558a794843ca 100644 (file)
@@ -40,6 +40,7 @@ with Output;      use Output;
 with Rident;      use Rident;
 with Sdefault;
 with Snames;
+with Switch;      use Switch;
 with Targparm;    use Targparm;
 with Types;       use Types;
 
@@ -1528,6 +1529,10 @@ begin
    Csets.Initialize;
    Snames.Initialize;
 
+   --  First check for --version or --help
+
+   Check_Version_And_Help ("GNATLS", "1997", Usage'Unrestricted_Access);
+
    --  Loop to scan out arguments
 
    Next_Arg := 1;
@@ -1572,13 +1577,7 @@ begin
       Targparm.Get_Target_Parameters;
 
       Write_Eol;
-      Write_Str ("GNATLS ");
-      Write_Str (Gnat_Version_String);
-      Write_Eol;
-      Write_Str ("Copyright 1997-" &
-                 Current_Year &
-                 ", Free Software Foundation, Inc.");
-      Write_Eol;
+      Display_Version ("GNATLS", "1997");
       Write_Eol;
       Write_Str ("Source Search Path:");
       Write_Eol;
index 2e040fa5b1bc490c062f84ebe1e47a296b8fccdf..84bea96f81b9c342b0cc251862d63c409a741418 100644 (file)
 --                                                                          --
 ------------------------------------------------------------------------------
 
-with Gnatvsn;  use Gnatvsn;
 with Hostparm;
 with Opt;
 with Osint;    use Osint;
 with Output;   use Output;
 with Prj.Makr;
+with Switch;   use Switch;
 with Table;
 
 with Ada.Command_Line;  use Ada.Command_Line;
@@ -169,12 +169,7 @@ procedure Gnatname is
       if not Version_Output then
          Version_Output := True;
          Output.Write_Eol;
-         Output.Write_Str ("GNATNAME ");
-         Output.Write_Line (Gnatvsn.Gnat_Version_String);
-         Output.Write_Line
-           ("Copyright 2001-" &
-            Current_Year &
-            ", Free Software Foundation, Inc.");
+         Display_Version ("GNATNAME", "2001");
       end if;
    end Output_Version;
 
@@ -184,6 +179,12 @@ procedure Gnatname is
 
    procedure Scan_Args is
    begin
+      --  First check for --version or --help
+
+      Check_Version_And_Help ("GNATNAME", "2001", Usage'Unrestricted_Access);
+
+      --  Now scan the other switches
+
       Initialize_Option_Scan;
 
       --  Scan options first
index 3b9fb07f0946a4d2fd76c7df3a6e8e39d43fd2c6..dadcda157e2407656aff7b259560122acf55af3c 100644 (file)
 
 package body Gnatvsn is
 
+   ----------------------
+   -- Copyright_Holder --
+   ----------------------
+
+   function Copyright_Holder return String is
+   begin
+      return "Free Software Foundation, Inc.";
+   end Copyright_Holder;
+
    ------------------------
    -- Gnat_Free_Software --
    ------------------------
index c3c17a30cefa68504d03f3f38cc8341fd34b9e34..1b1398920baab51e92b24866543f57714a042ee5 100644 (file)
@@ -68,6 +68,10 @@ package Gnatvsn is
    --  Text to be displayed by the different GNAT tools when switch --version
    --  is used. This text depends on the GNAT build type.
 
+   function Copyright_Holder return String;
+   --  Return the name of the Copyright holder to be displayed by the different
+   --  GNAT tools when switch --version is used.
+
    Ver_Len_Max : constant := 64;
    --  Longest possible length for Gnat_Version_String in this or any
    --  other version of GNAT. This is used by the binder to establish
index 840587dfd28d927ddd4cce56510c633144b0c5df..859b984c418ebe1dac09a833a5a4f0e6bd5e4b08 100644 (file)
 --                                                                          --
 ------------------------------------------------------------------------------
 
-with Xr_Tabls; use Xr_Tabls;
-with Xref_Lib; use Xref_Lib;
+with Opt;
 with Osint;    use Osint;
 with Types;    use Types;
-
-with Gnatvsn;
-with Opt;
+with Switch;   use Switch;
+with Xr_Tabls; use Xr_Tabls;
+with Xref_Lib; use Xref_Lib;
 
 with Ada.Strings.Fixed; use Ada.Strings.Fixed;
 with Ada.Text_IO;       use Ada.Text_IO;
@@ -57,6 +56,9 @@ procedure Gnatxref is
    procedure Parse_Cmd_Line;
    --  Parse every switch on the command line
 
+   procedure Usage;
+   --  Display the usage
+
    procedure Write_Usage;
    --  Print a small help page for program usage
 
@@ -66,6 +68,10 @@ procedure Gnatxref is
 
    procedure Parse_Cmd_Line is
    begin
+      --  First check for --version or --help
+
+      Check_Version_And_Help ("GNATXREF", "1998", Usage'Unrestricted_Access);
+
       loop
          case
            GNAT.Command_Line.Getopt
@@ -205,14 +211,12 @@ procedure Gnatxref is
          Write_Usage;
    end Parse_Cmd_Line;
 
-   -----------------
-   -- Write_Usage --
-   -----------------
+   -----------
+   -- Usage --
+   -----------
 
-   procedure Write_Usage is
+   procedure Usage is
    begin
-      Put_Line ("GNATXREF " & Gnatvsn.Gnat_Version_String);
-      Put_Line ("Copyright 1998-2005, AdaCore");
       Put_Line ("Usage: gnatxref [switches] file1 file2 ...");
       New_Line;
       Put_Line ("  file ... list of source files to xref, " &
@@ -238,6 +242,17 @@ procedure Gnatxref is
       Put_Line ("   -v        Print a 'tags' file for vi");
       New_Line;
 
+   end Usage;
+
+   -----------------
+   -- Write_Usage --
+   -----------------
+
+   procedure Write_Usage is
+   begin
+      Display_Version ("GNATXREF", "1998");
+      New_Line;
+      Usage;
       raise Usage_Error;
    end Write_Usage;
 
index a951b5a5a54414d8cc397f926abb88a6ce12f541..26194aed796c51afbfa6cf707d317f9ec98edd75 100644 (file)
@@ -27,7 +27,6 @@
 with Csets;
 with Err_Vars; use Err_Vars;
 with Errutil;
-with Gnatvsn;  use Gnatvsn;
 with Namet;    use Namet;
 with Opt;
 with Osint;    use Osint;
@@ -37,15 +36,16 @@ with Scng;
 with Sinput.C;
 with Snames;
 with Stringt;  use Stringt;
+with Switch;   use Switch;
 with Types;    use Types;
 
-with Ada.Text_IO;               use Ada.Text_IO;
+with Ada.Text_IO;     use Ada.Text_IO;
 
 with GNAT.Case_Util;            use GNAT.Case_Util;
 with GNAT.Command_Line;
 with GNAT.Directory_Operations; use GNAT.Directory_Operations;
 
-with System.OS_Lib;             use System.OS_Lib;
+with System.OS_Lib; use System.OS_Lib;
 
 package body GPrep is
 
@@ -138,10 +138,7 @@ package body GPrep is
    procedure Display_Copyright is
    begin
       if not Copyright_Displayed then
-         Write_Line ("GNAT Preprocessor " & Gnatvsn.Gnat_Version_String);
-         Write_Line ("Copyright 1996-" &
-                     Current_Year &
-                     ", Free Software Foundation, Inc.");
+         Display_Version ("GNAT Preprocessor", "1996");
          Copyright_Displayed := True;
       end if;
    end Display_Copyright;
@@ -704,7 +701,13 @@ package body GPrep is
       Switch : Character;
 
    begin
-      --  Parse the switches
+      --  First check for --version or --help
+
+      Check_Version_And_Help ("GNATPREP", "1996", Usage'Access);
+
+      --  Now scan the other switches
+
+      GNAT.Command_Line.Initialize_Option_Scan;
 
       loop
          begin
index ee45873e8855883406cc16af1b9a1154329e2d99..6d13179d525efe3507dd0082a1d876d1e4ddd4e4 100644 (file)
@@ -392,8 +392,6 @@ package body Make is
 
    Shared_String           : aliased String := "-shared";
    Force_Elab_Flags_String : aliased String := "-F";
-   Version_Switch          : constant String := "--version";
-   Help_Switch             : constant String := "--help";
 
    No_Shared_Switch : aliased Argument_List := (1 .. 0 => null);
    Shared_Switch    : aliased Argument_List := (1 => Shared_String'Access);
@@ -509,9 +507,6 @@ package body Make is
    -- Misc Routines --
    -------------------
 
-   procedure Display_Version;
-   --  Display version when switch --version is used
-
    procedure List_Depend;
    --  Prints to standard output the list of object dependencies. This list
    --  can be used directly in a Makefile. A call to Compile_Sources must
@@ -3562,15 +3557,22 @@ package body Make is
                               if Uid /= Prj.No_Unit_Index then
                                  Udata := Project_Tree.Units.Table (Uid);
 
-                                 if Udata.File_Names (Body_Part).Name /=
-                                                                     No_File
+                                 if
+                                    Udata.File_Names (Body_Part).Name /=
+                                                                       No_File
+                                   and then
+                                     Udata.File_Names (Body_Part).Path /= Slash
                                  then
                                     Sfile := Udata.File_Names (Body_Part).Name;
                                     Source_Index :=
                                       Udata.File_Names (Body_Part).Index;
 
-                                 elsif Udata.File_Names (Specification).Name /=
-                                                                     No_File
+                                 elsif
+                                    Udata.File_Names (Specification).Name /=
+                                                                        No_File
+                                   and then
+                                    Udata.File_Names (Specification).Path /=
+                                                                          Slash
                                  then
                                     Sfile :=
                                       Udata.File_Names (Specification).Name;
@@ -4063,26 +4065,6 @@ package body Make is
       Display_Executed_Programs := Display;
    end Display_Commands;
 
-   ---------------------
-   -- Display_Version --
-   ---------------------
-
-   procedure Display_Version is
-   begin
-      Write_Str ("GNATMAKE ");
-      Write_Str (Gnatvsn.Gnat_Version_String);
-      Write_Eol;
-
-      Write_Str ("Copyright (C) 1995-");
-      Write_Str (Gnatvsn.Current_Year);
-      Write_Str (", Free Software Foundation, Inc.");
-      Write_Eol;
-
-      Write_Str (Gnatvsn.Gnat_Free_Software);
-      Write_Eol;
-      Write_Eol;
-   end Display_Version;
-
    -------------
    -- Empty_Q --
    -------------
@@ -4821,14 +4803,7 @@ package body Make is
 
       if Verbose_Mode then
          Write_Eol;
-         Write_Str ("GNATMAKE ");
-         Write_Str (Gnatvsn.Gnat_Version_String);
-         Write_Eol;
-         Write_Str
-           ("Copyright 1995-" &
-            Current_Year &
-            ", Free Software Foundation, Inc.");
-         Write_Eol;
+         Display_Version ("GNATMAKE ", "1995");
       end if;
 
       if Main_Project /= No_Project
@@ -4901,7 +4876,6 @@ package body Make is
          Main_Index := Current_File_Index;
       end if;
 
-      Add_Switch ("-I-", Binder, And_Save => True);
       Add_Switch ("-I-", Compiler, And_Save => True);
 
       if Main_Project = No_Project then
@@ -4914,10 +4888,6 @@ package body Make is
                Compiler, Append_Switch => False,
                And_Save => False);
 
-            Add_Switch ("-aO" & Normalized_CWD,
-                        Binder,
-                        Append_Switch => False,
-                        And_Save => False);
          end if;
 
       else
@@ -4930,6 +4900,7 @@ package body Make is
          --  projects.
 
          Look_In_Primary_Dir := False;
+         Add_Switch ("-I-", Binder, And_Save => True);
       end if;
 
       --  If the user wants a program without a main subprogram, add the
@@ -6670,49 +6641,16 @@ package body Make is
 
       --  Scan the switches and arguments
 
-      declare
-         Args                   : Argument_List (1 .. Argument_Count);
-         Version_Switch_Present : Boolean := False;
-         Help_Switch_Present    : Boolean := False;
+      --  First, scan to detect --version and/or --help
 
-      begin
-         --  First, scan to detect --version and/or --help
-
-         for Next_Arg in 1 .. Argument_Count loop
-            Args (Next_Arg) := new String'(Argument (Next_Arg));
-
-            if Args (Next_Arg).all = Version_Switch then
-               Version_Switch_Present := True;
-            elsif Args (Next_Arg).all = Help_Switch then
-               Help_Switch_Present := True;
-            end if;
-         end loop;
+      Check_Version_And_Help ("GNATMAKE", "1995", Makeusg'Access);
 
-         --  If --version was used, display version and exit
-
-         if Version_Switch_Present then
-            Set_Standard_Output;
-            Display_Version;
-            Exit_Program (E_Success);
-         end if;
+      --  Scan again the switch and arguments, now that we are sure that
+      --  they do not include --version or --help.
 
-         --  If --help was used, display help and exit
-
-         if Help_Switch_Present then
-            Set_Standard_Output;
-            Makeusg;
-            Write_Eol;
-            Write_Line ("Report bugs to report@adacore.com");
-            Exit_Program (E_Success);
-         end if;
-
-         --  Scan again the switch and arguments, now that we are sure that
-         --  they do not include --version or --help.
-
-         Scan_Args : for Next_Arg in Args'Range loop
-            Scan_Make_Arg (Args (Next_Arg).all, And_Save => True);
-         end loop Scan_Args;
-      end;
+      Scan_Args : for Next_Arg in 1 .. Argument_Count loop
+         Scan_Make_Arg (Argument (Next_Arg), And_Save => True);
+      end loop Scan_Args;
 
       if Commands_To_Stdout then
          Set_Standard_Output;
index 7692f589f989f46c98fe9cf3cc74e0087b865c2f..fcbcbbbc2f8d54e4382fea2a9414e26062f40f51 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2007, Free Software Foundation, Inc.         --
 --                                                                          --
 -- 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- --
@@ -24,7 +24,8 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
-with Osint;
+with Osint;  use Osint;
+with Output; use Output;
 
 package body Switch is
 
@@ -42,6 +43,87 @@ package body Switch is
       Osint.Fail ("invalid switch: ", Switch);
    end Bad_Switch;
 
+   ----------------------------
+   -- Check_Version_And_Help --
+   ----------------------------
+
+   procedure Check_Version_And_Help
+     (Tool_Name      : String;
+      Initial_Year   : String;
+      Usage          : Procedure_Ptr;
+      Version_String : String := Gnatvsn.Gnat_Version_String)
+   is
+      Version_Switch_Present : Boolean := False;
+      Help_Switch_Present    : Boolean := False;
+      Next_Arg               : Natural;
+
+   begin
+      --  First check for --version or --help
+
+      Next_Arg := 1;
+      while Next_Arg < Arg_Count loop
+         declare
+            Next_Argv : String (1 .. Len_Arg (Next_Arg));
+         begin
+            Fill_Arg (Next_Argv'Address, Next_Arg);
+
+            if Next_Argv = Version_Switch then
+               Version_Switch_Present := True;
+
+            elsif Next_Argv = Help_Switch then
+               Help_Switch_Present := True;
+            end if;
+
+            Next_Arg := Next_Arg + 1;
+         end;
+      end loop;
+
+      --  If --version was used, display version and exit
+
+      if Version_Switch_Present then
+         Set_Standard_Output;
+         Display_Version (Tool_Name, Initial_Year, Version_String);
+         Write_Str (Gnatvsn.Gnat_Free_Software);
+         Write_Eol;
+         Write_Eol;
+         Exit_Program (E_Success);
+      end if;
+
+      --  If --help was used, display help and exit
+
+      if Help_Switch_Present then
+         Set_Standard_Output;
+         Usage.all;
+         Write_Eol;
+         Write_Line ("Report bugs to report@adacore.com");
+         Exit_Program (E_Success);
+      end if;
+   end Check_Version_And_Help;
+
+   ---------------------
+   -- Display_Version --
+   ---------------------
+
+   procedure Display_Version
+     (Tool_Name      : String;
+      Initial_Year   : String;
+      Version_String : String := Gnatvsn.Gnat_Version_String)
+   is
+   begin
+      Write_Str (Tool_Name);
+      Write_Char (' ');
+      Write_Str (Version_String);
+      Write_Eol;
+
+      Write_Str ("Copyright (C) ");
+      Write_Str (Initial_Year);
+      Write_Char ('-');
+      Write_Str (Gnatvsn.Current_Year);
+      Write_Str (", ");
+      Write_Str (Gnatvsn.Copyright_Holder);
+      Write_Eol;
+   end Display_Version;
+
    -------------------------
    -- Is_Front_End_Switch --
    -------------------------
index dce2f12d8f81648a5adb51734ea7bf659c6cf134..470ea93c48edf4eb7cca0a1611055e57b02a9ff0 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2007, Free Software Foundation, Inc.         --
 --                                                                          --
 -- 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- --
 --  switches that are recognized. In addition, package Debug documents
 --  the otherwise undocumented debug switches that are also recognized.
 
+with Gnatvsn;
 with Types; use Types;
 
 package Switch is
 
-   --  Note: The default switch character is indicated by Switch_Character,
-   --  but regardless of what it is, a hyphen is always allowed as an
-   --  (alternative) switch character.
+   --  Common switches for GNU tools
 
-   --  Note: In GNAT, the case of switches is not significant if
-   --  Switches_Case_Sensitive is False. If this is the case, switch
-   --  characters, or letters appearing in the parameter to a switch, may be
-   --  either upper case or lower case.
+   Version_Switch : constant String := "--version";
+   Help_Switch    : constant String := "--help";
 
    -----------------
    -- Subprograms --
    -----------------
 
+   type Procedure_Ptr is access procedure;
+
+   procedure Check_Version_And_Help
+     (Tool_Name      : String;
+      Initial_Year   : String;
+      Usage          : Procedure_Ptr;
+      Version_String : String := Gnatvsn.Gnat_Version_String);
+   --  Check if switches --version or --help is used. If one of this switch
+   --  is used, issue the proper messages and end the process.
+
+   procedure Display_Version
+     (Tool_Name      : String;
+      Initial_Year   : String;
+      Version_String : String := Gnatvsn.Gnat_Version_String);
+   --  Display version of a tool when switch --version is used
+
    function Is_Switch (Switch_Chars : String) return Boolean;
    --  Returns True iff Switch_Chars is at least two characters long,
-   --  and the first character indicates it is a switch.
+   --  and the first character is an hyphen ('-').
 
    function Is_Front_End_Switch (Switch_Chars : String) return Boolean;
    --  Returns True iff Switch_Chars represents a front-end switch,
-   --  ie. it starts with -I or -gnat.
+   --  ie. it starts with -I, -gnat or -?RTS.
 
 private