File : switch.ads


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT COMPILER COMPONENTS                         --
   4 --                                                                          --
   5 --                               S W I T C H                                --
   6 --                                                                          --
   7 --                                 S p e c                                  --
   8 --                                                                          --
   9 --          Copyright (C) 1992-2012, Free Software Foundation, Inc.         --
  10 --                                                                          --
  11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  12 -- terms of the  GNU General Public License as published  by the Free Soft- --
  13 -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
  14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  16 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
  17 -- for  more details.  You should have  received  a copy of the GNU General --
  18 -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
  19 -- http://www.gnu.org/licenses for a complete copy of the license.          --
  20 --                                                                          --
  21 -- GNAT was originally developed  by the GNAT team at  New York University. --
  22 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  23 --                                                                          --
  24 ------------------------------------------------------------------------------
  25 
  26 --  This package together with a child package appropriate to the client tool
  27 --  scans switches. Note that the body of the appropriate Usage package must be
  28 --  coordinated with the switches that are recognized by this package. These
  29 --  Usage packages also act as the official documentation for the switches
  30 --  that are recognized. In addition, package Debug documents the otherwise
  31 --  undocumented debug switches that are also recognized.
  32 
  33 with Gnatvsn;
  34 with Types; use Types;
  35 
  36 ------------
  37 -- Switch --
  38 ------------
  39 
  40 package Switch is
  41 
  42    --  Common switches for GNU tools
  43 
  44    Version_Switch : constant String := "--version";
  45    Help_Switch    : constant String := "--help";
  46 
  47    -----------------
  48    -- Subprograms --
  49    -----------------
  50 
  51    generic
  52       with procedure Usage;
  53       --  Print tool-specific part of --help message
  54    procedure Check_Version_And_Help_G
  55      (Tool_Name      : String;
  56       Initial_Year   : String;
  57       Version_String : String := Gnatvsn.Gnat_Version_String);
  58    --  Check if switches --version or --help is used. If one of this switch is
  59    --  used, issue the proper messages and end the process.
  60 
  61    procedure Display_Version
  62      (Tool_Name      : String;
  63       Initial_Year   : String;
  64       Version_String : String := Gnatvsn.Gnat_Version_String);
  65    --  Display version of a tool when switch --version is used
  66 
  67    procedure Display_Usage_Version_And_Help;
  68    --  Output the two lines of usage for switches --version and --help
  69 
  70    function Is_Switch (Switch_Chars : String) return Boolean;
  71    --  Returns True iff Switch_Chars is at least two characters long, and the
  72    --  first character is an hyphen ('-').
  73 
  74    function Is_Front_End_Switch (Switch_Chars : String) return Boolean;
  75    --  Returns True iff Switch_Chars represents a front-end switch, i.e. it
  76    --  starts with -I, -gnat or -?RTS.
  77 
  78    function Is_Internal_GCC_Switch (Switch_Chars : String) return Boolean;
  79    --  Returns True iff Switch_Chars represents an internal GCC switch to be
  80    --  followed by a single argument, such as -dumpbase, --param or -auxbase.
  81    --  Even though passed by the "gcc" driver, these need not be stored in ALI
  82    --  files and may safely be ignored by non GCC back-ends.
  83 
  84    function Switch_Last (Switch_Chars : String) return Natural;
  85    --  Index in Switch_Chars of the last relevant character for later string
  86    --  comparison purposes. This is typically 'Last, minus one if there is a
  87    --  terminating ASCII.NUL.
  88 
  89 private
  90    --  This section contains some common routines used by the tool dependent
  91    --  child packages (there is one such child package for each tool that uses
  92    --  Switches to scan switches - Compiler/gnatbind/gnatmake/.
  93 
  94    Switch_Max_Value : constant := 999_999;
  95    --  Maximum value permitted in switches that take a value
  96 
  97    function Nat_Present
  98      (Switch_Chars : String;
  99       Max          : Integer;
 100       Ptr          : Integer) return Boolean;
 101    --  Returns True if an integer is at the current scan location or an equal
 102    --  sign. This is used as a guard for calling Scan_Nat. Switch_Chars is the
 103    --  string containing the switch, and Ptr points just past the switch
 104    --  character. Max is the maximum allowed value of Ptr.
 105 
 106    procedure Scan_Nat
 107      (Switch_Chars : String;
 108       Max          : Integer;
 109       Ptr          : in out Integer;
 110       Result       : out Nat;
 111       Switch       : Character);
 112    --  Scan natural integer parameter for switch. On entry, Ptr points just
 113    --  past the switch character, on exit it points past the last digit of the
 114    --  integer value. Max is the maximum allowed value of Ptr, so the scan is
 115    --  restricted to Switch_Chars (Ptr .. Max). It is possible for Ptr to be
 116    --  one greater than Max on return if the entire string is digits. Scan_Nat
 117    --  will skip an optional equal sign if it is present. Nat_Present must be
 118    --  True, or an error will be signalled.
 119 
 120    procedure Scan_Pos
 121      (Switch_Chars : String;
 122       Max          : Integer;
 123       Ptr          : in out Integer;
 124       Result       : out Pos;
 125       Switch       : Character);
 126    --  Scan positive integer parameter for switch. Identical to Scan_Nat with
 127    --  same parameters except that zero is considered out of range.
 128 
 129    procedure Bad_Switch (Switch : Character);
 130    procedure Bad_Switch (Switch : String);
 131    pragma No_Return (Bad_Switch);
 132    --  Fail with an appropriate message when a switch is not recognized
 133 
 134 end Switch;