| ------------------------------------------------------------------------------ |
| -- -- |
| -- GNAT COMPILER COMPONENTS -- |
| -- -- |
| -- S W I T C H -- |
| -- -- |
| -- S p e c -- |
| -- -- |
| -- Copyright (C) 1992-2019, 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- -- |
| -- ware Foundation; either version 3, or (at your option) any later ver- -- |
| -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- |
| -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- |
| -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- |
| -- for more details. You should have received a copy of the GNU General -- |
| -- Public License distributed with GNAT; see file COPYING3. If not, go to -- |
| -- http://www.gnu.org/licenses for a complete copy of the license. -- |
| -- -- |
| -- GNAT was originally developed by the GNAT team at New York University. -- |
| -- Extensive contributions were provided by Ada Core Technologies Inc. -- |
| -- -- |
| ------------------------------------------------------------------------------ |
| |
| -- This package together with a child package appropriate to the client tool |
| -- scans switches. Note that the body of the appropriate Usage package must be |
| -- coordinated with the switches that are recognized by this package. These |
| -- Usage packages also act as the official documentation for the switches |
| -- that are recognized. In addition, package Debug documents the otherwise |
| -- undocumented debug switches that are also recognized. |
| |
| with Gnatvsn; |
| with Types; use Types; |
| |
| ------------ |
| -- Switch -- |
| ------------ |
| |
| package Switch is |
| |
| -- Common switches for GNU tools |
| |
| Version_Switch : constant String := "--version"; |
| Help_Switch : constant String := "--help"; |
| |
| ----------------- |
| -- Subprograms -- |
| ----------------- |
| |
| generic |
| with procedure Usage; |
| -- Print tool-specific part of --help message |
| procedure Check_Version_And_Help_G |
| (Tool_Name : String; |
| Initial_Year : String; |
| 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 |
| |
| procedure Display_Usage_Version_And_Help; |
| -- Output the two lines of usage for switches --version and --help |
| |
| function Is_Switch (Switch_Chars : String) return Boolean; |
| -- Returns True iff Switch_Chars is at least two characters long, 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, i.e. it |
| -- starts with -I, -gnat or -?RTS. |
| |
| function Is_Internal_GCC_Switch (Switch_Chars : String) return Boolean; |
| -- Returns True iff Switch_Chars represents an internal GCC switch to be |
| -- followed by a single argument, such as -dumpbase, --param or -auxbase. |
| -- Even though passed by the "gcc" driver, these need not be stored in ALI |
| -- files and may safely be ignored by non GCC back-ends. |
| |
| function Switch_Last (Switch_Chars : String) return Natural; |
| -- Index in Switch_Chars of the last relevant character for later string |
| -- comparison purposes. This is typically 'Last, minus one if there is a |
| -- terminating ASCII.NUL. |
| |
| private |
| -- This section contains some common routines used by the tool dependent |
| -- child packages (there is one such child package for each tool that uses |
| -- Switches to scan switches - Compiler/gnatbind/gnatmake/. |
| |
| Switch_Max_Value : constant := 999_999; |
| -- Maximum value permitted in switches that take a value |
| |
| function Nat_Present |
| (Switch_Chars : String; |
| Max : Integer; |
| Ptr : Integer) return Boolean; |
| -- Returns True if an integer is at the current scan location or an equal |
| -- sign. This is used as a guard for calling Scan_Nat. Switch_Chars is the |
| -- string containing the switch, and Ptr points just past the switch |
| -- character. Max is the maximum allowed value of Ptr. |
| |
| procedure Scan_Nat |
| (Switch_Chars : String; |
| Max : Integer; |
| Ptr : in out Integer; |
| Result : out Nat; |
| Switch : Character); |
| -- Scan natural integer parameter for switch. On entry, Ptr points just |
| -- past the switch character, on exit it points past the last digit of the |
| -- integer value. Max is the maximum allowed value of Ptr, so the scan is |
| -- restricted to Switch_Chars (Ptr .. Max). It is possible for Ptr to be |
| -- one greater than Max on return if the entire string is digits. Scan_Nat |
| -- will skip an optional equal sign if it is present. Nat_Present must be |
| -- True, or an error will be signalled. |
| |
| procedure Scan_Pos |
| (Switch_Chars : String; |
| Max : Integer; |
| Ptr : in out Integer; |
| Result : out Pos; |
| Switch : Character); |
| -- Scan positive integer parameter for switch. Identical to Scan_Nat with |
| -- same parameters except that zero is considered out of range. |
| |
| procedure Bad_Switch (Switch : Character); |
| procedure Bad_Switch (Switch : String); |
| pragma No_Return (Bad_Switch); |
| -- Fail with an appropriate message when a switch is not recognized |
| |
| end Switch; |