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-2018, 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 33with Gnatvsn; 34with Types; use Types; 35 36------------ 37-- Switch -- 38------------ 39 40package 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 89private 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 134end Switch; 135