OSDN Git Service

gcc/ada/
[pf3gnuchains/gcc-fork.git] / gcc / ada / vms_data.ads
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                         GNAT COMPILER COMPONENTS                         --
4 --                                                                          --
5 --                             V M S _ D A T A                              --
6 --                                                                          --
7 --                                 S p e c                                  --
8 --                                                                          --
9 --          Copyright (C) 1996-2008, 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 contains, for each of the command of the GNAT driver, one
27 --  constant array; each component of this array is a string that defines,
28 --  in coded form as explained below, the conversion of a VMS qualifier of the
29 --  command to the corresponding switch of the GNAT tool corresponding to the
30 --  command.
31
32 --  This package is used by the GNAT driver to invokes the GNAT tools with the
33 --  switches corresponding to the VMS qualifier and by the Project Manager to
34 --  convert VMS qualifiers in project files to their corresponding switch
35 --  values.
36
37 --  This package is also an input to the tool that generates the VMS GNAT
38 --  help information automatically.
39
40 --  NOTE: the format of this package must follow the following rules, so that
41 --        the VMS GNAT help tool works properly:
42
43 --    - Each command zone (where the eventual qualifiers are declared) must
44 --      begin with a boxed comment of the form:
45
46 --      ---------------------------------
47 --      -- Switches for GNAT <COMMAND> --
48 --      ---------------------------------
49
50 --      where <COMMAND> is the name of a GNAT command in capital letters, for
51 --      example BIND, COMPILE, XREF, ...
52
53 --    - each qualifier declaration must be followed either by
54 --         - a comment starting with "--  NODOC", to indicate that there is
55 --           no documentation for this qualifier, or
56 --         - a contiguous sequence of comments that constitute the
57 --           documentation of the qualifier.
58
59 --    - each command zone ends with the declaration of the constant array
60 --      for the command, of the form:
61
62 --      <Command>__Switches : aliased constant Switches :=
63
64 package VMS_Data is
65
66    ----------------
67    -- QUALIFIERS --
68    ----------------
69
70    --  The syntax of a qualifier declaration is as follows:
71
72    --    SWITCH_STRING ::= "/ command-qualifier-name TRANSLATION"
73
74    --    TRANSLATION ::=
75    --      DIRECT_TRANSLATION
76    --    | DIRECTORIES_TRANSLATION
77    --    | FILE_TRANSLATION
78    --    | NO_SPACE_FILE_TRANSL
79    --    | NUMERIC_TRANSLATION
80    --    | STRING_TRANSLATION
81    --    | OPTIONS_TRANSLATION
82    --    | COMMANDS_TRANSLATION
83    --    | ALPHANUMPLUS_TRANSLATION
84    --    | OTHER_TRANSLATION
85
86    --    DIRECT_TRANSLATION       ::= space UNIX_SWITCHES
87    --    DIRECTORIES_TRANSLATION  ::= =* UNIX_SWITCH *
88    --    DIRECTORY_TRANSLATION    ::= =% UNIX_SWITCH %
89    --    FILE_TRANSLATION         ::= =@ UNIX_SWITCH @
90    --    NO_SPACE_FILE_TRANSL     ::= =< UNIX_SWITCH >
91    --    NUMERIC_TRANSLATION      ::= =# UNIX_SWITCH # | # number #
92    --    STRING_TRANSLATION       ::= =" UNIX_SWITCH "
93    --    OPTIONS_TRANSLATION      ::= =OPTION {space OPTION}
94    --    COMMANDS_TRANSLATION     ::= =? ARGS space command-name
95    --    ALPHANUMPLUS_TRANSLATION ::= =| UNIX_SWITCH |
96
97    --    UNIX_SWITCHES ::= UNIX_SWITCH {, UNIX_SWITCH}
98
99    --    UNIX_SWITCH ::= unix-switch-string | !unix-switch-string | `string'
100
101    --    OPTION ::= option-name space UNIX_SWITCHES
102
103    --    ARGS ::= -cargs | -bargs | -largs
104
105    --  Here command-qual is the name of the switch recognized by the GNATCmd.
106    --  This is always given in upper case in the templates, although in the
107    --  actual commands, either upper or lower case is allowed.
108
109    --  The unix-switch-string always starts with a minus, and has no commas
110    --  or spaces in it. Case is significant in the unix switch string. If a
111    --  unix switch string is preceded by the not sign (!) it means that the
112    --  effect of the corresponding command qualifier is to remove any previous
113    --  occurrence of the given switch in the command line.
114
115    --  The DIRECTORIES_TRANSLATION format is used where a list of directories
116    --  is given. This possible corresponding formats recognized by GNATCmd are
117    --  as shown by the following example for the case of PATH
118
119    --    PATH=direc
120    --    PATH=(direc,direc,direc,direc)
121
122    --  When more than one directory is present for the DIRECTORIES case, then
123    --  multiple instances of the corresponding unix switch are generated,
124    --  with the file name being substituted for the occurrence of *.
125
126    --  The FILE_TRANSLATION format is similar except that only a single
127    --  file is allowed, not a list of files, and only one unix switch is
128    --  generated as a result.
129
130    --  the NO_SPACE_FILE_TRANSL is similar to FILE_TRANSLATION, except that
131    --  no space is inserted between the switch and the file name.
132
133    --  The NUMERIC_TRANSLATION format is similar to the FILE_TRANSLATION case
134    --  except that the parameter is a decimal integer in the range 0 to 999.
135
136    --  For the OPTIONS_TRANSLATION case, GNATCmd similarly permits one or
137    --  more options to appear (although only in some cases does the use of
138    --  multiple options make logical sense). For example, taking the
139    --  case of ERRORS for GCC, the following are all allowed:
140
141    --    /ERRORS=BRIEF
142    --    /ERRORS=(FULL,VERBOSE)
143    --    /ERRORS=(BRIEF IMMEDIATE)
144
145    --  If no option is provided (e.g. just /ERRORS is written), then the
146    --  first option in the list is the default option. For /ERRORS this
147    --  is NORMAL, so /ERRORS with no option is equivalent to /ERRORS=NORMAL.
148
149    --  The COMMANDS_TRANSLATION case is only used for gnatmake, to correspond
150    --  to the use of -cargs, -bargs and -largs (the ARGS string as indicated
151    --  is one of these three possibilities). The name given by COMMAND is the
152    --  corresponding command name to be used to interpret the switches to be
153    --  passed on. Switches of this type set modes, e.g. /COMPILER_QUALIFIERS
154    --  sets the mode so that all subsequent switches, up to another switch
155    --  with COMMANDS_TRANSLATION apply to the corresponding commands issued
156    --  by the make utility. For example
157
158    --    /COMPILER_QUALIFIERS /LIST /BINDER_QUALIFIERS /MAIN
159    --    /COMPILER_QUALIFIERS /NOLIST /COMPILE_CHECKS=SYNTAX
160
161    --  Clearly these switches must come at the end of the list of switches
162    --  since all subsequent switches apply to an issued command.
163
164    --  For the DIRECT_TRANSLATION case, an implicit additional qualifier
165    --  declaration is created by prepending NO to the name of the qualifier,
166    --  and then inverting the sense of the UNIX_SWITCHES string. For example,
167    --  given the qualifier definition:
168
169    --     "/LIST -gnatl"
170
171    --  An implicit qualifier definition is created:
172
173    --     "/NOLIST !-gnatl"
174
175    --  In the case where, a ! is already present, inverting the sense of the
176    --  switch means removing it.
177
178    subtype S is String;
179    --  A synonym to shorten the table
180
181    type String_Ptr is access constant String;
182    --  String pointer type used throughout
183
184    type Switches is array (Natural range <>) of String_Ptr;
185    --  Type used for array of switches
186
187    type Switches_Ptr is access constant Switches;
188
189    ----------------------------
190    -- Switches for GNAT BIND --
191    ----------------------------
192
193    S_Bind_Add     : aliased constant S := "/ADD_PROJECT_SEARCH_DIR=*"      &
194                                             "-aP*";
195    --        /ADD_PROJECT_SEARCH_PATH=(directory[,...])
196    --
197    --   Add directories to the project search path.
198
199    S_Bind_Bind    : aliased constant S := "/BIND_FILE="                    &
200                                             "ADA "                         &
201                                                "-A "                       &
202                                             "C "                           &
203                                                "-C";
204    --        /BIND_FILE[=bind-file-option]
205    --
206    --   Specifies the language of the binder generated file.
207    --
208    --        ADA (D)    Binder file is Ada.
209    --
210    --        C          Binder file is 'C'.
211
212    S_Bind_Build   : aliased constant S := "/BUILD_LIBRARY=|"               &
213                                             "-L|";
214    --        /BUILD_LIBRARY=xxx
215    --
216    --        Binds the units for library building. In this case the adainit and
217    --        adafinal procedures are rename to xxxinit and xxxfinal. Implies
218    --        /NOMAIN.
219
220    S_Bind_Current : aliased constant S := "/CURRENT_DIRECTORY "            &
221                                             "!-I-";
222    --        /CURRENT_DIRECTORY (D)
223    --        /NOCURRENT_DIRECTORY
224    --
225    --        Look for source, library or object files in the default directory.
226
227    S_Bind_Debug   : aliased constant S := "/DEBUG="                        &
228                                             "TRACEBACK "                   &
229                                                "-g2 "                      &
230                                             "ALL "                         &
231                                                "-g3 "                      &
232                                             "NONE "                        &
233                                                "-g0 "                      &
234                                             "SYMBOLS "                     &
235                                                "-g1 "                      &
236                                             "NOSYMBOLS "                   &
237                                                "!-g1 "                     &
238                                             "LINK "                        &
239                                                "-g3 "                      &
240                                             "NOTRACEBACK "                 &
241                                                "!-g2";
242    --        /DEBUG[=debug-level]
243    --        /NODEBUG
244    --
245    --    Specify level of debugging information generated for the elaboration
246    --    routine.  See corresponding qualifier for GNAT COMPILE.
247
248    S_Bind_DebugX  : aliased constant S := "/NODEBUG "                      &
249                                             "!-g";
250    --  NODOC  (see /DEBUG)
251
252    S_Bind_Elab    : aliased constant S := "/ELABORATION_DEPENDENCIES "     &
253                                             "-e";
254    --        /ELABORATION_DEPENDENCIES
255    --        /NOELABORATION_DEPENDENCIES (D)
256    --
257    --   Output complete list of elaboration-order dependencies, showing the
258    --   reason for each dependency. This output can be rather extensive but may
259    --   be useful in diagnosing problems with elaboration order. The output is
260    --   written to SYS$OUTPUT.
261
262    S_Bind_Error   : aliased constant S := "/ERROR_LIMIT=#"                 &
263                                             "-m#";
264    --        /ERROR_LIMIT=nnn
265    --
266    --   Limit number of detected errors to nnn (1-999999).
267
268    S_Bind_Ext     : aliased constant S := "/EXTERNAL_REFERENCE=" & '"'     &
269                                             "-X" & '"';
270    --       /EXTERNAL_REFERENCE="name=val"
271    --
272    --   Specifies an external reference to the project manager. Useful only if
273    --   /PROJECT_FILE is used.
274    --
275    --   Example:
276    --      /EXTERNAL_REFERENCE="DEBUG=TRUE"
277
278    S_Bind_Follow  : aliased constant S := "/FOLLOW_LINKS_FOR_FILES "       &
279                                             "-eL";
280    --        /NOFOLLOW_LINKS_FOR_FILES (D)
281    --        /FOLLOW_LINKS_FOR_FILES
282    --
283    --    Follow links when parsing project files
284
285    S_Bind_Force   : aliased constant S := "/FORCE_ELAB_FLAGS "             &
286                                             "-F";
287    --        /NOFORCE_ELAB_FLAGS (D)
288    --        /FORCE_ELAB_FLAGS
289    --
290    --    Force checking of elaboration Flags
291
292    S_Bind_Help    : aliased constant S := "/HELP "                         &
293                                             "-h";
294    --        /HELP
295    --
296    --   Output usage information.
297
298    S_Bind_Init    : aliased constant S := "/INITIALIZE_SCALARS="           &
299                                             "INVALID "                     &
300                                                "-Sin "                     &
301                                             "LOW "                         &
302                                                "-Slo "                     &
303                                             "HIGH "                        &
304                                                "-Shi";
305    --        /INITIALIZE_SCALARS[=scalar-option]
306    --
307    --   Indicate how uninitialized scalar values for which a pragma
308    --   Initialize_Scalars applies should be initialized.
309    --   scalar-option may be one of the following:
310    --
311    --      INVALID (D)  Initialize with an invalid value.
312    --      LOW          Initialize with the lowest valid value of the subtype.
313    --      HIGH         Initialize with the highest valid value of the subtype.
314
315    S_Bind_Leap    : aliased constant S := "/ENABLE_LEAP_SECONDS "          &
316                                             "-y";
317    --      /ENABLE_LEAP_SECONDS
318    --      /NOENABLE_LEAP_SECONDS (D)
319    --
320    --   Enable leap seconds support in Ada.Calendar and its children.
321
322    S_Bind_Library : aliased constant S := "/LIBRARY_SEARCH=*"              &
323                                             "-aO*";
324    --        /LIBRARY_SEARCH=(direc[,...])
325    --
326    --        When looking for library and object files look also in directories
327    --        specified.
328
329    S_Bind_Linker  : aliased constant S := "/LINKER_OPTION_LIST "           &
330                                             "-K";
331    --        /NOLINKER_OPTION_LIST (D)
332    --        /LINKER_OPTION_LIST
333    --
334    --        Output linker options to SYS$OUTPUT.  Includes library search
335    --        paths, contents of pragmas Ident and Linker_Options, and
336    --        libraries added by GNAT BIND.
337
338    S_Bind_Main    : aliased constant S := "/MAIN "                         &
339                                             "!-n";
340    --        /MAIN (D)
341    --
342    --   The main program is in Ada.
343    --
344    --        /NOMAIN
345    --
346    --   The main program is not in Ada.
347
348    S_Bind_Mess    : aliased constant S := "/MESSAGES_PROJECT_FILE="        &
349                                             "DEFAULT "                     &
350                                                "-vP0 "                     &
351                                             "MEDIUM "                      &
352                                                "-vP1 "                     &
353                                             "HIGH "                        &
354                                                "-vP2";
355    --        /MESSAGES_PROJECT_FILE[=messages-option]
356    --
357    --   Specifies the "verbosity" of the parsing of project files.
358    --   messages-option may be one of the following:
359    --
360    --      DEFAULT (D)  No messages are output if there is no error or warning.
361    --
362    --      MEDIUM       A small number of messages are output.
363    --
364    --      HIGH         A great number of messages are output, most of them not
365    --                   being useful for the user.
366
367    S_Bind_Nostinc : aliased constant S := "/NOSTD_INCLUDES "               &
368                                             "-nostdinc";
369    --        /NOSTD_INCLUDES
370    --
371    --    Do not look for sources the in the system default directory.
372
373    S_Bind_Nostlib : aliased constant S := "/NOSTD_LIBRARIES "              &
374                                             "-nostdlib";
375    --        /NOSTD_LIBRARIES
376    --
377    --    Do not look for library files in the system default directory.
378
379    S_Bind_No_Time : aliased constant S := "/NO_TIME_STAMP_CHECK "          &
380                                             "-t";
381    --  NODOC (see /TIME_STAMP_CHECK)
382
383    S_Bind_Object  : aliased constant S := "/OBJECT_LIST "                  &
384                                             "-O";
385    --        /NOOBJECT_LIST (D)
386    --        /OBJECT_LIST
387    --
388    --    Output full names of all the object files that must be linker to
389    --    provide the Ada component of the program. The output is written to
390    --    SYS$OUTPUT.
391
392    S_Bind_Order   : aliased constant S := "/ORDER_OF_ELABORATION "         &
393                                             "-l";
394    --        /NOORDER_OF_ELABORATION (D)
395    --        /ORDER_OF_ELABORATION
396    --
397    --   Output chosen elaboration order. The output is written to SYS$OUTPUT.
398
399    S_Bind_Output  : aliased constant S := "/OUTPUT=@"                      &
400                                             "-o@";
401    --        /OUTPUT=filename
402    --
403    --   File name to use for the program containing the elaboration code.
404
405    S_Bind_OutputX : aliased constant S := "/NOOUTPUT "                     &
406                                             "-c";
407    --        /NOOUTPUT
408    --
409    --   Check only. Do not generate the binder output file.
410    --
411    --   In this mode the binder performs all error checks but does not generate
412    --   an output file.
413
414    S_Bind_Pess    : aliased constant S := "/PESSIMISTIC_ELABORATION "      &
415                                             "-p";
416    --        /PESSIMISTIC_ELABORATION
417    --
418    --   Causes the binder to choose a "pessimistic" elaboration order, i.e. one
419    --   which is most likely to cause elaboration order problems. This can be
420    --   useful in testing portable code to make sure that there are no missing
421    --   elaborate pragmas.
422
423    S_Bind_Project : aliased constant S := "/PROJECT_FILE=<"                &
424                                             "-P>";
425    --        /PROJECT_FILE=filename
426    --
427    --   Specifies the main project file to be used. The project files rooted
428    --   at the main project file will be parsed before the invocation of the
429    --   binder. The source and object directories to be searched will be
430    --   communicated to the binder through logical names ADA_PRJ_INCLUDE_FILE
431    --   and ADA_PRJ_OBJECTS_FILE.
432
433    S_Bind_Read    : aliased constant S := "/READ_SOURCES="                 &
434                                             "ALL "                         &
435                                                "-s "                       &
436                                             "NONE "                        &
437                                                "-x "                       &
438                                             "AVAILABLE "                   &
439                                                "!-x,!-s";
440    --        /READ_SOURCES[=(keyword[,...])]
441    --        /NOREAD_SOURCES
442    --
443    --   The following keyword are accepted:
444    --
445    --      ALL (D)      Require source files to be present. In this mode, the
446    --                   binder insists on being able to locate all source files
447    --                   that are referenced and checks their consistency.  In
448    --                   normal mode, if a source file cannot be located it is
449    --                   simply ignored. If you specify the ALL keyword, a
450    --                   missing source file is an error.
451    --
452    --      NONE         Exclude source files. In this mode, the binder only
453    --                   checks that ALI files are consistent with one another.
454    --                   source files are not accessed.  The binder runs faster
455    --                   in this mode, and there is still a guarantee that the
456    --                   resulting program is self-consistent.
457    --
458    --                   If a source file has been edited since it was last
459    --                   compiled and you specify the NONE keyword, the binder
460    --                   will not detect that the object file is out of date
461    --                   with the source file.
462    --
463    --                   This is the same as specifying /NOREAD_SOURCES.
464    --
465    --      AVAILABLE    Check that object files are consistent with one
466    --                   another and are consistent with any source files that
467    --                   can be located.
468
469    S_Bind_ReadX   : aliased constant S := "/NOREAD_SOURCES "               &
470                                             "-x";
471    --  NODOC (see /READ_SOURCES)
472
473    S_Bind_Rename  : aliased constant S := "/RENAME_MAIN=<"                 &
474                                             "-M>";
475    --        /RENAME_MAIN=xxx
476    --
477    --   Renames the generated main program from main to xxx.
478    --   This is useful in the case of some cross-building environments, where
479    --   the actual main program is separate from the one generated
480    --   by GNAT BIND.
481
482    S_Bind_Report  : aliased constant S := "/REPORT_ERRORS="                &
483                                             "VERBOSE "                     &
484                                                "-v "                       &
485                                             "BRIEF "                       &
486                                                "-b "                       &
487                                             "DEFAULT "                     &
488                                                "!-b,!-v";
489    --        /REPORT_ERRORS[=(keyword[,...])]
490    --           VERBOSE (D)
491    --           BRIEF
492    --           DEFAULT
493    --        /NOREPORT_ERRORS
494    --
495    --   With the DEFAULT keyword (which is not the default when the binder is
496    --   run from GNAT BIND) or the /NOREPORT_ERRORS qualifier, brief error
497    --   messages are generated to SYS$ERROR.  If the VERBOSE keyword is
498    --   present, a header is written to SYS$OUTPUT and any error messages are
499    --   directed to SYS$OUTPUT  All that is written to SYS$ERROR is a brief
500    --   summary message.
501    --
502    --   If the BRIEF keyword is specified, the binder will generate brief error
503    --   messages to SYS$ERROR even if verbose mode is specified. This is
504    --   relevant only when used together with the VERBOSE keyword or /VERBOSE
505    --   qualifier.
506
507    S_Bind_ReportX : aliased constant S := "/NOREPORT_ERRORS "              &
508                                             "!-b,!-v";
509    --  NODOC (see /REPORT_ERRORS)
510
511    S_Bind_Restr   : aliased constant S := "/RESTRICTION_LIST "             &
512                                             "-r";
513    --        /NORESTRICTION_LIST (D)
514    --        /RESTRICTION_LIST
515    --
516    --   Generate list of pragma Restrictions that could be applied to the
517    --   current unit. This is useful for code audit purposes, and also may be
518    --   used to improve code generation in some cases.
519
520    S_Bind_Return  : aliased constant S := "/RETURN_CODES="                 &
521                                             "POSIX "                       &
522                                                "!-X1 "                     &
523                                             "VMS "                         &
524                                                "-X1";
525    --        /RETURN_CODES=POSIX (D)
526    --        /RETURN_CODES=VMS
527    --
528    --   Specifies the style of default exit code returned. Must be used in
529    --   conjunction with and match the Link qualifier with same name.
530    --
531    --        POSIX (D)   Return Posix success (0) by default.
532    --
533    --        VMS         Return VMS success (1) by default.
534
535    S_Bind_RTS     : aliased constant S := "/RUNTIME_SYSTEM=|"              &
536                                             "--RTS=|";
537    --      /RUNTIME_SYSTEM=xxx
538    --
539    --    Binds against an alternate runtime system named xxx or RTS-xxx.
540
541    S_Bind_Search  : aliased constant S := "/SEARCH=*"                      &
542                                             "-I*";
543    --        /SEARCH=(directory[,...])
544    --
545    --   When looking for source or object files also look in directories
546    --   specified.
547    --
548    --   This is the same as specifying both /LIBRARY_SEARCH and /SOURCE_SEARCH
549    --   for a directory.
550
551    S_Bind_Shared  : aliased constant S := "/SHARED "                       &
552                                             "-shared,!-static";
553    --        /SHARED
554    --        /NOSHARED
555    --
556    --    Link against a shared GNAT run time when available.
557
558    S_Bind_Slice   : aliased constant S := "/TIME_SLICE=#"                  &
559                                             "-T#";
560    --        /TIME_SLICE=nnn
561    --
562    --   Set the time slice value to nnn milliseconds. A value of zero means no
563    --   time slicing and also indicates to the tasking run time to match as
564    --   close as possible to the annex D requirements of the RM.
565
566    S_Bind_Source  : aliased constant S := "/SOURCE_SEARCH=*"               &
567                                             "-aI*";
568    --        /SOURCE_SEARCH=(directory[,...])
569    --
570    --    When looking for source files also look in directories specified.
571
572    S_Bind_Static  : aliased constant S := "/STATIC "                       &
573                                             "-static,!-shared";
574    --        /STATIC
575    --        /NOSTATIC
576    --
577    --    Link against a static GNAT run time.
578
579    S_Bind_Store   : aliased constant S := "/STORE_TRACEBACKS "             &
580                                             "-E";
581    --        /STORE_TRACEBACKS (D)
582    --        /NOSTORE_TRACEBACKS
583    --
584    --   Store tracebacks in exception occurrences.
585    --   This is the default on VMS, with the zero-cost exception mechanism.
586    --   This qualifier has no impact, except when using the setjmp/longjmp
587    --   exception mechanism, with the GNAT COMPILE qualifier /LONGJMP_SETJMP.
588
589    S_Bind_Subdirs : aliased constant S := "/SUBDIRS=<"                     &
590                                             "--subdirs=>";
591    --        /SUBDIRS=dir
592    --
593    --   The actual directories (object, exec, library, ...) are subdirectories
594    --   of the directory specified in the project file. If the subdirectory
595    --   does not exist, it is created automatically.
596
597    S_Bind_Time    : aliased constant S := "/TIME_STAMP_CHECK "             &
598                                             "!-t";
599    --      /TIME_STAMP_CHECK (D)
600    --
601    --   Time stamp errors will be treated as errors.
602    --
603    --      /NOTIME_STAMP_CHECK
604    --
605    --   Ignore time stamp errors. Any time stamp error messages are treated as
606    --   warning messages. This switch essentially disconnects the normal
607    --   consistency checking, and the resulting program may have undefined
608    --   semantics if inconsistent units are present.
609    --
610    --   This means that /NOTIME_STAMP_CHECK should be used only in unusual
611    --   situations, with extreme care.
612
613    S_Bind_Verbose : aliased constant S := "/VERBOSE "                      &
614                                             "-v";
615    --        /VERBOSE (D)
616    --        /NOVERBOSE
617    --
618    --   Equivalent to /REPORT_ERRORS=VERBOSE.
619
620    S_Bind_Warn    : aliased constant S := "/WARNINGS="                     &
621                                             "NORMAL "                      &
622                                                "!-ws,!-we "                &
623                                             "SUPPRESS "                    &
624                                                "-ws "                      &
625                                             "ERROR "                       &
626                                                "-we";
627    --      /WARNINGS[=(keyword[,...])]
628    --      /NOWARNINGS
629    --
630    --   The following keywords are supported:
631    --
632    --        NORMAL (D)    Print warning messages and treat them as warning.
633    --        SUPPRESS      Suppress all warning messages (same as /NOWARNINGS).
634    --        ERROR         Treat any warning messages as fatal errors
635
636    S_Bind_WarnX   : aliased constant S := "/NOWARNINGS "                   &
637                                             "-ws";
638    --  NODOC (see /WARNINGS)
639
640    S_Bind_Wide    : aliased constant S := "/WIDE_CHARACTER_ENCODING="      &
641                                             "BRACKETS "                    &
642                                                "-gnatWb "                  &
643                                             "HEX "                         &
644                                                "-gnatWh "                  &
645                                             "UPPER "                       &
646                                                "-gnatWu "                  &
647                                             "SHIFT_JIS "                   &
648                                                "-gnatWs "                  &
649                                             "UTF8 "                        &
650                                                "-gnatW8 "                  &
651                                             "EUC "                         &
652                                                "-gnatWe";
653    --        /NOWIDE_CHARACTER_ENCODING (D)
654    --        /WIDE_CHARACTER_ENCODING[=encode-type]
655    --
656    --   Specifies the mechanism used to encode wide characters, overriding
657    --   the default as set by the /WIDE_CHARACTER_ENCODING option for the
658    --   compilation of the main program.
659
660    S_Bind_Zero    : aliased constant S := "/ZERO_MAIN "                    &
661                                             "-z";
662    --        /NOZERO_MAIN (D)
663    --        /ZERO_MAIN
664    --
665    --   Normally the binder checks that the unit name given on the command line
666    --   corresponds to a suitable main subprogram. When /ZERO_MAIN is used,
667    --   a list of ALI files can be given, and the execution of the program
668    --   consists of elaboration of these units in an appropriate order.
669
670    Bind_Switches : aliased constant Switches :=
671                      (S_Bind_Add     'Access,
672                       S_Bind_Bind    'Access,
673                       S_Bind_Build   'Access,
674                       S_Bind_Current 'Access,
675                       S_Bind_Debug   'Access,
676                       S_Bind_DebugX  'Access,
677                       S_Bind_Elab    'Access,
678                       S_Bind_Error   'Access,
679                       S_Bind_Ext     'Access,
680                       S_Bind_Follow  'Access,
681                       S_Bind_Force   'Access,
682                       S_Bind_Help    'Access,
683                       S_Bind_Init    'Access,
684                       S_Bind_Leap    'Access,
685                       S_Bind_Library 'Access,
686                       S_Bind_Linker  'Access,
687                       S_Bind_Main    'Access,
688                       S_Bind_Mess    'Access,
689                       S_Bind_Nostinc 'Access,
690                       S_Bind_Nostlib 'Access,
691                       S_Bind_No_Time 'Access,
692                       S_Bind_Object  'Access,
693                       S_Bind_Order   'Access,
694                       S_Bind_Output  'Access,
695                       S_Bind_OutputX 'Access,
696                       S_Bind_Pess    'Access,
697                       S_Bind_Project 'Access,
698                       S_Bind_Read    'Access,
699                       S_Bind_ReadX   'Access,
700                       S_Bind_Rename  'Access,
701                       S_Bind_Report  'Access,
702                       S_Bind_ReportX 'Access,
703                       S_Bind_Restr   'Access,
704                       S_Bind_Return  'Access,
705                       S_Bind_RTS     'Access,
706                       S_Bind_Search  'Access,
707                       S_Bind_Shared  'Access,
708                       S_Bind_Slice   'Access,
709                       S_Bind_Source  'Access,
710                       S_Bind_Static  'Access,
711                       S_Bind_Store   'Access,
712                       S_Bind_Subdirs 'Access,
713                       S_Bind_Time    'Access,
714                       S_Bind_Verbose 'Access,
715                       S_Bind_Warn    'Access,
716                       S_Bind_WarnX   'Access,
717                       S_Bind_Wide    'Access,
718                       S_Bind_Zero    'Access);
719
720    -----------------------------
721    -- Switches for GNAT CHECK --
722    -----------------------------
723
724    S_Check_Add    : aliased constant S := "/ADD_PROJECT_SEARCH_DIR=*"      &
725                                             "-aP*";
726    --        /ADD_PROJECT_SEARCH_PATH=(directory[,...])
727    --
728    --   Add directories to the project search path.
729
730    S_Check_All    : aliased constant S := "/ALL "                          &
731                                             "-a";
732    --        /NOALL (D)
733    --        /ALL
734    --
735    --   Also check the components of the GNAT run time and process the needed
736    --  components of the GNAT RTL when building and analyzing the global
737    --  structure for checking the global rules.
738
739    S_Check_Ext     : aliased constant S := "/EXTERNAL_REFERENCE=" & '"'    &
740                                              "-X" & '"';
741    --       /EXTERNAL_REFERENCE="name=val"
742    --
743    --   Specifies an external reference to the project manager. Useful only if
744    --   /PROJECT_FILE is used.
745    --
746    --   Example:
747    --      /EXTERNAL_REFERENCE="DEBUG=TRUE"
748
749    S_Check_Files  : aliased constant S := "/FILES=@"                       &
750                                              "-files=@";
751    --      /FILES=filename
752    --
753    --   Take as arguments the files that are listed in the specified
754    --   text file.
755
756    S_Check_Follow : aliased constant S := "/FOLLOW_LINKS_FOR_FILES "       &
757                                             "-eL";
758    --        /NOFOLLOW_LINKS_FOR_FILES (D)
759    --        /FOLLOW_LINKS_FOR_FILES
760    --
761    --    Follow links when parsing project files
762
763    S_Check_Help   : aliased constant S := "/HELP "                         &
764                                             "-h";
765    --        /NOHELP (D)
766    --        /HELP
767    --
768    --   Print information about currently implemented checks.
769
770    S_Check_Locs   : aliased constant S := "/LOCS "                         &
771                                             "-l";
772    --        /NOLOCS (D)
773    --        /LOCS
774    --
775    --   Use full source locations references in the report file.
776
777    S_Check_Mess    : aliased constant S := "/MESSAGES_PROJECT_FILE="       &
778                                              "DEFAULT "                    &
779                                                 "-vP0 "                    &
780                                              "MEDIUM "                     &
781                                                 "-vP1 "                    &
782                                              "HIGH "                       &
783                                                 "-vP2";
784    --        /MESSAGES_PROJECT_FILE[=messages-option]
785    --
786    --   Specifies the "verbosity" of the parsing of project files.
787    --   messages-option may be one of the following:
788    --
789    --      DEFAULT (D)  No messages are output if there is no error or warning.
790    --
791    --      MEDIUM       A small number of messages are output.
792    --
793    --      HIGH         A great number of messages are output, most of them not
794    --                   being useful for the user.
795
796    S_Check_Project : aliased constant S := "/PROJECT_FILE=<"               &
797                                              "-P>";
798    --        /PROJECT_FILE=filename
799    --
800    --   Specifies the main project file to be used. The project files rooted
801    --   at the main project file will be parsed before the invocation of the
802    --   gnatcheck. The source directories to be searched will be communicated
803    --   to gnatcheck through logical name ADA_PRJ_INCLUDE_FILE.
804
805    S_Check_Quiet  : aliased constant S := "/QUIET "                        &
806                                             "-q";
807    --        /NOQUIET (D)
808    --        /QUIET
809    --
810    --   Work quietly, only output warnings and errors.
811
812    S_Check_Sections : aliased constant S := "/SECTIONS="                   &
813                                             "DEFAULT "                     &
814                                                "-s123 "                    &
815                                             "COMPILER_STYLE "              &
816                                                "-s1 "                      &
817                                             "BY_RULES "                    &
818                                                "-s2 "                      &
819                                             "BY_FILES_BY_RULES "           &
820                                                "-s3";
821    --        /SECTIONS[=section-option, section-option, ...]
822    --
823    --   Specify what sections should be included into the report file.
824    --   By default, all three section (diagnoses in the format corresponding
825    --   to compiler error and warning messages, diagnoses grouped by rules and
826    --   then - by files, diagnoses grouped by files and then - by rules) are
827    --   included in the report file.
828    --
829    --   section-option may be one of the following:
830    --
831    --      COMPILER_STYLE      Include diagnostics in compile-style format
832    --                          (diagnoses are grouped by files, for each file
833    --                          they are ordered according to the references
834    --                          into the source)
835    --      BY_RULES            Include diagnostics grouped first by rules and
836    --                          then by files
837    --      BY_FILES_BY_RULES   Include diagnostics grouped first by files and
838    --                          then by rules
839    --
840    --   If one of these options is specified, then the report file contains
841    --   only sections set by these options
842
843    S_Check_Short  : aliased constant S := "/SHORT "                        &
844                                             "-s";
845    --        /NOSHORT (D)
846    --        /SHORT
847    --
848    --   Generate a short form of the report file.
849
850    S_Check_Subdirs : aliased constant S := "/SUBDIRS=<"                    &
851                                              "--subdirs=>";
852    --        /SUBDIRS=dir
853    --
854    --   The actual directories (object, exec, library, ...) are subdirectories
855    --   of the directory specified in the project file. If the subdirectory
856    --   does not exist, it is created automatically.
857
858    S_Check_Verb   : aliased constant S := "/VERBOSE "                      &
859                                             "-v";
860    --        /NOVERBOSE (D)
861    --        /VERBOSE
862    --
863    --   The version number and copyright notice are output, as well as exact
864    --   copies of the gnat1 commands spawned to obtain the chop control
865    --   information.
866
867    Check_Switches : aliased constant Switches :=
868                       (S_Check_Add      'Access,
869                        S_Check_All      'Access,
870                        S_Check_Ext      'Access,
871                        S_Check_Files    'Access,
872                        S_Check_Follow   'Access,
873                        S_Check_Help     'Access,
874                        S_Check_Locs     'Access,
875                        S_Check_Mess     'Access,
876                        S_Check_Project  'Access,
877                        S_Check_Quiet    'Access,
878                        S_Check_Sections 'Access,
879                        S_Check_Short    'Access,
880                        S_Check_Subdirs  'Access,
881                        S_Check_Verb     'Access);
882
883    ----------------------------
884    -- Switches for GNAT SYNC --
885    ----------------------------
886
887    S_Sync_Add    : aliased constant S := "/ADD_PROJECT_SEARCH_DIR=*"       &
888                                             "-aP*";
889    --        /ADD_PROJECT_SEARCH_PATH=(directory[,...])
890    --
891    --   Add directories to the project search path.
892
893    S_Sync_All    : aliased constant S := "/ALL "                           &
894                                             "-a";
895    --        /NOALL (D)
896    --        /ALL
897    --
898    --   Also check the components of the GNAT run time and process the needed
899    --  components of the GNAT RTL when building and analyzing the global
900    --  structure for checking the global rules.
901
902    S_Sync_Ext     : aliased constant S := "/EXTERNAL_REFERENCE=" & '"'     &
903                                              "-X" & '"';
904    --       /EXTERNAL_REFERENCE="name=val"
905    --
906    --   Specifies an external reference to the project manager. Useful only if
907    --   /PROJECT_FILE is used.
908    --
909    --   Example:
910    --      /EXTERNAL_REFERENCE="DEBUG=TRUE"
911
912    S_Sync_Files  : aliased constant S := "/FILES=@"                        &
913                                              "-files=@";
914    --      /FILES=filename
915    --
916    --   Take as arguments the files that are listed in the specified
917    --   text file.
918
919    S_Sync_Follow  : aliased constant S := "/FOLLOW_LINKS_FOR_FILES "       &
920                                             "-eL";
921    --        /NOFOLLOW_LINKS_FOR_FILES (D)
922    --        /FOLLOW_LINKS_FOR_FILES
923    --
924    --    Follow links when parsing project files
925
926    S_Sync_Mess    : aliased constant S := "/MESSAGES_PROJECT_FILE="        &
927                                              "DEFAULT "                    &
928                                                 "-vP0 "                    &
929                                              "MEDIUM "                     &
930                                                 "-vP1 "                    &
931                                              "HIGH "                       &
932                                                 "-vP2";
933    --        /MESSAGES_PROJECT_FILE[=messages-option]
934    --
935    --   Specifies the "verbosity" of the parsing of project files.
936    --   messages-option may be one of the following:
937    --
938    --      DEFAULT (D)  No messages are output if there is no error or warning.
939    --
940    --      MEDIUM       A small number of messages are output.
941    --
942    --      HIGH         A great number of messages are output, most of them not
943    --                   being useful for the user.
944
945    S_Sync_Project : aliased constant S := "/PROJECT_FILE=<"                &
946                                              "-P>";
947    --        /PROJECT_FILE=filename
948    --
949    --   Specifies the main project file to be used. The project files rooted
950    --   at the main project file will be parsed before the invocation of the
951    --   gnatcheck. The source directories to be searched will be communicated
952    --   to gnatcheck through logical name ADA_PRJ_INCLUDE_FILE.
953
954    S_Sync_Quiet  : aliased constant S := "/QUIET "                         &
955                                             "-q";
956    --        /NOQUIET (D)
957    --        /QUIET
958    --
959    --   Work quietly, only output warnings and errors.
960
961    S_Sync_Subdirs : aliased constant S := "/SUBDIRS=<"                     &
962                                              "--subdirs=>";
963    --        /SUBDIRS=dir
964    --
965    --   The actual directories (object, exec, library, ...) are subdirectories
966    --   of the directory specified in the project file. If the subdirectory
967    --   does not exist, it is created automatically.
968
969    S_Sync_Verb   : aliased constant S := "/VERBOSE "                       &
970                                             "-v";
971    --        /NOVERBOSE (D)
972    --        /VERBOSE
973    --
974    --   The version number and copyright notice are output, as well as exact
975    --   copies of the gnat1 commands spawned to obtain the chop control
976    --   information.
977
978    S_Sync_Exec   : aliased constant S := "/EXECUTION_TIME "                &
979                                             "-t";
980    --        /NOEXECUTION_TIME (D)
981    --        /EXECUTION_TIME
982    --
983    --   Output the execution time
984
985    S_Sync_Details : aliased constant S := "/DETAILs="                      &
986                                              "MEDIUM "                     &
987                                                "-om "                      &
988                                              "SHORT "                      &
989                                                "-os "                      &
990                                              "FULL "                       &
991                                                "-of";
992    --         /DETAILS[=options]
993    --
994    --   Specifies the details of the output.
995    --   Options may be one of the following:
996    --
997    --       MEDIUM (D)
998    --       SHORT
999    --       FULL
1000
1001    S_Sync_Warnoff : aliased constant S := "/WARNINGS_OFF "                 &
1002                                              "-wq";
1003    --
1004    --         /WARNINGS_OFF
1005    --
1006    --   Turn warnings off
1007
1008    S_Sync_Output  : aliased constant S := "/OUTPUT_FILE=<"                 &
1009                                              "-out_file=>";
1010    --
1011    --        /OUTPUT_FILE=filename
1012    --
1013    --   Redirect output to a text file
1014
1015    Sync_Switches : aliased constant Switches :=
1016                       (S_Sync_Add      'Access,
1017                        S_Sync_All      'Access,
1018                        S_Sync_Ext      'Access,
1019                        S_Sync_Follow   'Access,
1020                        S_Sync_Files    'Access,
1021                        S_Sync_Mess     'Access,
1022                        S_Sync_Project  'Access,
1023                        S_Sync_Quiet    'Access,
1024                        S_Sync_Subdirs  'Access,
1025                        S_Sync_Verb     'Access,
1026                        S_Sync_Exec     'Access,
1027                        S_Sync_Details  'Access,
1028                        S_Sync_Warnoff  'Access,
1029                        S_Sync_Output   'Access);
1030
1031    ----------------------------
1032    -- Switches for GNAT CHOP --
1033    ----------------------------
1034
1035    S_Chop_Comp   : aliased constant S := "/COMPILATION "                   &
1036                                             "-c";
1037    --        /NOCOMPILATION (D)
1038    --        /COMPILATION
1039    --
1040    --   Compilation mode, handle configuration pragmas strictly according to
1041    --   RM rules.
1042
1043    S_Chop_File   : aliased constant S := "/FILE_NAME_MAX_LENGTH=#"         &
1044                                             "-k#";
1045    --        /FILE_NAME_MAX_LENGTH[=nnn]
1046    --
1047    --   Limit generated file names to NNN (default of 8) characters. This is
1048    --   useful if the resulting set of files is required to be interoperable
1049    --   with systems like MS-DOS which limit the length of file names.
1050
1051    S_Chop_Help   : aliased constant S := "/HELP "                          &
1052                                             "-h";
1053    --        /NOHELP (D)
1054    --        /HELP
1055    --
1056    --   Print usage information.
1057
1058    S_Chop_Over   : aliased constant S := "/OVERWRITE "                     &
1059                                             "-w";
1060    --        /NOOVERWRITE (D)
1061    --        /OVERWRITE
1062    --
1063    --   Overwrite existing file names. Normally GNAT CHOP regards it as a
1064    --   fatal error situation if there is already a file with the same name as
1065    --   a file it would otherwise output. The /OVERWRITE qualifier bypasses
1066    --   this check, and any such existing files will be silently overwritten.
1067
1068    S_Chop_Pres   : aliased constant S := "/PRESERVE "                      &
1069                                             "-p";
1070    --        /NOPRESERVE (D)
1071    --        /PRESERVE
1072    --
1073    --   Causes the file modification time stamp of the input file to be
1074    --   preserved and used for the time stamp of the output file(s). This may
1075    --   be useful for preserving coherency of time stamps in an environment
1076    --   where gnatchop is used as part of a standard build process.
1077
1078    S_Chop_Quiet  : aliased constant S := "/QUIET "                         &
1079                                             "-q";
1080    --        /NOQUIET (D)
1081    --        /QUIET
1082    --
1083    --   Work quietly, only output warnings and errors.
1084
1085    S_Chop_Ref    : aliased constant S := "/REFERENCE "                     &
1086                                             "-r";
1087    --        /NOREFERENCE (D)
1088    --        /REFERENCE
1089    --
1090    --   Generate "Source_Reference" pragmas. Use this qualifier if the output
1091    --   files are regarded as temporary and development is to be done in terms
1092    --   of the original unchopped file. The /REFERENCE qualifier causes
1093    --   "Source_Reference" pragmas to be inserted into each of the generated
1094    --   files to refers back to the original file name and line number.  The
1095    --   result is that all error messages refer back to the original unchopped
1096    --   file.
1097    --
1098    --   In addition, the debugging information placed into the object file
1099    --   (when the /DEBUG qualifier of GNAT COMPILE or GNAT MAKE is specified)
1100    --   also refers back to this original file so that tools like profilers
1101    --   and debuggers will give information in terms of the original unchopped
1102    --   file.
1103
1104    S_Chop_Verb   : aliased constant S := "/VERBOSE "                       &
1105                                             "-v";
1106    --        /NOVERBOSE (D)
1107    --        /VERBOSE
1108    --
1109    --   The version number and copyright notice are output, as well as exact
1110    --   copies of the gnat1 commands spawned to obtain the chop control
1111    --   information.
1112
1113    Chop_Switches : aliased constant Switches :=
1114                      (S_Chop_Comp   'Access,
1115                       S_Chop_File   'Access,
1116                       S_Chop_Help   'Access,
1117                       S_Chop_Over   'Access,
1118                       S_Chop_Pres   'Access,
1119                       S_Chop_Quiet  'Access,
1120                       S_Chop_Ref    'Access,
1121                       S_Chop_Verb   'Access);
1122
1123    -----------------------------
1124    -- Switches for GNAT CLEAN --
1125    -----------------------------
1126
1127    S_Clean_Add    : aliased constant S := "/ADD_PROJECT_SEARCH_DIR=*"      &
1128                                             "-aP*";
1129    --        /ADD_PROJECT_SEARCH_PATH=(directory[,...])
1130    --
1131    --   Add directories to the project search path.
1132
1133    S_Clean_Compil  : aliased constant S := "/COMPILER_FILES_ONLY "         &
1134                                              "-c";
1135    --        /NOCOMPILER_FILES_ONLY (D)
1136    --        /COMPILER_FILES_ONLY
1137    --
1138    --   Only attempt to delete the files produced by the compiler, not those
1139    --   produced by the binder or the linker. The files that are not to be
1140    --   deleted are library files, interface copy files, binder generated files
1141    --   and executable files.
1142
1143    S_Clean_Current : aliased constant S := "/CURRENT_DIRECTORY "           &
1144                                             "!-I-";
1145    --        /CURRENT_DIRECTORY (D)
1146    --
1147    --   Look for ALI or object files in the directory where GNAT CLEAN was
1148    --   invoked.
1149    --
1150    --        /NOCURRENT_DIRECTORY
1151    --
1152    --   Do not look for ALI or object files in the directory where GNAT CLEAN
1153    --   was invoked.
1154
1155    S_Clean_Delete  : aliased constant S := "/DELETE "                      &
1156                                             "!-n";
1157    --        /DELETE (D)
1158    --
1159    --   Delete the files that are not read-only.
1160    --
1161    --        /NODELETE
1162    --
1163    --   Informative-only mode. Do not delete any files. Output the list of the
1164    --   files that would have been deleted if this switch was not specified.
1165
1166    S_Clean_Dirobj  : aliased constant S := "/DIRECTORY_OBJECTS=@"          &
1167                                             "-D@";
1168    --        /DIRECTORY_OBJECTS=<file>
1169    --
1170    --   Find the object files and .ALI files in <file>.
1171    --   This qualifier is not compatible with /PROJECT_FILE.
1172
1173    S_Clean_Ext     : aliased constant S := "/EXTERNAL_REFERENCE=" & '"'    &
1174                                             "-X" & '"';
1175    --        /EXTERNAL_REFERENCE="name=val"
1176    --
1177    --   Specifies an external reference to the project manager. Useful only if
1178    --   /PROJECT_FILE is used.
1179    --
1180    --   Example:
1181    --      /EXTERNAL_REFERENCE="DEBUG=TRUE"
1182
1183    S_Clean_Follow : aliased constant S := "/FOLLOW_LINKS_FOR_FILES "       &
1184                                             "-eL";
1185    --        /NOFOLLOW_LINKS_FOR_FILES (D)
1186    --        /FOLLOW_LINKS_FOR_FILES
1187    --
1188    --    Follow links when parsing project files
1189
1190    S_Clean_Full    : aliased constant S := "/FULL_PATH_IN_BRIEF_MESSAGES " &
1191                                             "-F";
1192    --        /NOFULL_PATH_IN_BRIEF_MESSAGES (D)
1193    --        /FULL_PATH_IN_BRIEF_MESSAGES
1194    --
1195    --   When using project files, if some errors or warnings are detected
1196    --   during parsing and verbose mode is not in effect (no use of qualifier
1197    --   /VERBOSE), then error lines start with the full path name of the
1198    --   project file, rather than its simple file name.
1199
1200    S_Clean_Help    : aliased constant S := "/HELP "                        &
1201                                             "-h";
1202    --        /NOHELP (D)
1203    --        /HELP
1204    --
1205    --   Output a message explaining the usage of gnatclean.
1206
1207    S_Clean_Index   : aliased constant S := "/SOURCE_INDEX=#"               &
1208                                              "-i#";
1209    --        /SOURCE_INDEX=nnn
1210    --
1211    --   Specifies the index of the units in the source file
1212    --   By default, source files are mono-unit and there is no index
1213
1214    S_Clean_Mess    : aliased constant S := "/MESSAGES_PROJECT_FILE="       &
1215                                             "DEFAULT "                     &
1216                                                "-vP0 "                     &
1217                                             "MEDIUM "                      &
1218                                                "-vP1 "                     &
1219                                             "HIGH "                        &
1220                                                "-vP2";
1221    --        /MESSAGES_PROJECT_FILE[=messages-option]
1222    --
1223    --   Specifies the "verbosity" of the parsing of project files.
1224    --   messages-option may be one of the following:
1225    --
1226    --      DEFAULT (D) No messages are output if there is no error or warning.
1227    --
1228    --      MEDIUM      A small number of messages are output.
1229    --
1230    --      HIGH        A great number of messages are output, most of them not
1231    --                  being useful for the user.
1232
1233    S_Clean_Object  : aliased constant S := "/OBJECT_SEARCH=*"              &
1234                                             "-aO*";
1235    --        /OBJECT_SEARCH=(directory,...)
1236    --
1237    --   When searching for library and object files, look in the specified
1238    --   directories. The order in which library files are searched is the same
1239    --   as for MAKE.
1240
1241    S_Clean_Project : aliased constant S := "/PROJECT_FILE=<"               &
1242                                             "-P>";
1243    --        /PROJECT_FILE=filename
1244    --
1245    --   Specifies the main project file to be used. The project files rooted
1246    --   at the main project file will be parsed before the invocation of the
1247    --   compiler. The source and object directories to be searched will be
1248    --   communicated to gnatclean through logical names ADA_PRJ_INCLUDE_FILE
1249    --   and ADA_PRJ_OBJECTS_FILE.
1250
1251    S_Clean_Quiet   : aliased constant S := "/QUIET "                       &
1252                                             "-q";
1253    --        /NOQUIET (D)
1254    --        /QUIET
1255    --
1256    --   Quiet output. If there are no error, do not output anything, except in
1257    --   verbose mode (qualifier /VERBOSE) or in informative-only mode
1258    --  (qualifier /NODELETE).
1259
1260    S_Clean_Recurs  : aliased constant S := "/RECURSIVE "                   &
1261                                             "-r";
1262    --        /NORECURSIVE (D)
1263    --        /RECURSIVE
1264    --
1265    --   When a project file is specified (using switch -P), clean all imported
1266    --   and extended project files, recursively. If this qualifier is not
1267    --   specified, only the files related to the main project file are to be
1268    --   deleted. This qualifier has no effect if no project file is specified.
1269
1270    S_Clean_Search  : aliased constant S := "/SEARCH=*"                     &
1271                                             "-I*";
1272    --        /SEARCH=(directory,...)
1273    --
1274    --   Equivalent to /OBJECT_SEARCH=(directory,...).
1275
1276    S_Clean_Subdirs : aliased constant S := "/SUBDIRS=<"                    &
1277                                               "--subdirs=>";
1278    --        /SUBDIRS=dir
1279    --
1280    --   The actual directories (object, exec, library, ...) are subdirectories
1281    --   of the directory specified in the project file. If the subdirectory
1282    --   does not exist, it is created automatically.
1283
1284    S_Clean_Verbose : aliased constant S := "/VERBOSE "                     &
1285                                             "-v";
1286    --        /NOVERBOSE (D)
1287    --        /VERBOSE
1288    --
1289    --   Verbose mode.
1290
1291    Clean_Switches : aliased constant Switches :=
1292                       (S_Clean_Add    'Access,
1293                        S_Clean_Compil 'Access,
1294                        S_Clean_Current'Access,
1295                        S_Clean_Delete 'Access,
1296                        S_Clean_Dirobj 'Access,
1297                        S_Clean_Ext    'Access,
1298                        S_Clean_Follow 'Access,
1299                        S_Clean_Full   'Access,
1300                        S_Clean_Help   'Access,
1301                        S_Clean_Index  'Access,
1302                        S_Clean_Mess   'Access,
1303                        S_Clean_Object 'Access,
1304                        S_Clean_Project'Access,
1305                        S_Clean_Quiet  'Access,
1306                        S_Clean_Recurs 'Access,
1307                        S_Clean_Search 'Access,
1308                        S_Clean_Subdirs'Access,
1309                        S_Clean_Verbose'Access);
1310
1311    -------------------------------
1312    -- Switches for GNAT COMPILE --
1313    -------------------------------
1314
1315    S_GCC_Ada_83  : aliased constant S := "/83 "                            &
1316                                              "-gnat83";
1317    --        /NO83 (D)
1318    --        /83
1319    --
1320    --   Although GNAT is primarily an Ada 95 compiler, it accepts this
1321    --   qualifier to specify that an Ada 83 mode program is being compiled. If
1322    --   you specify this qualifier, GNAT rejects Ada 95 extensions and applies
1323    --   Ada 83 semantics. It is not possible to guarantee this qualifier does
1324    --   a perfect job; for example, some subtle tests of pathological cases,
1325    --   such as are found in ACVC tests that have been removed from the ACVC
1326    --   suite for Ada 95, may not compile correctly. However for practical
1327    --   purposes, using this qualifier should ensure that programs that
1328    --   compile correctly under the /83 qualifier can be ported reasonably
1329    --   easily to an Ada 83 compiler. This is the main use of this qualifier.
1330    --
1331    --   With few exceptions (most notably the need to use "<>" on
1332    --   unconstrained generic formal parameters), it is not necessary to use
1333    --   this qualifier switch when compiling Ada 83 programs, because, with
1334    --   rare and obscure exceptions, Ada 95 is upwardly compatible with Ada
1335    --   83. This means that a correct Ada 83 program is usually also a correct
1336    --   Ada 95 program.
1337
1338    S_GCC_Ada_95  : aliased constant S := "/95 "                            &
1339                                              "-gnat95";
1340    --        /95 (D)
1341    --
1342    --   Allows GNAT to recognize the full range of Ada 95 constructs.
1343    --   This is the normal default for GNAT Pro.
1344
1345    S_GCC_Ada_05 : aliased constant S := "/05 "                             &
1346                                              "-gnat05";
1347    --        /05 (D)
1348    --
1349    --   Allows GNAT to recognize all implemented proposed Ada 2005
1350    --   extensions. See features file for list of implemented features.
1351
1352    S_GCC_Add     : aliased constant S := "/ADD_PROJECT_SEARCH_DIR=*"       &
1353                                             "-aP*";
1354    --        /ADD_PROJECT_SEARCH_PATH=(directory[,...])
1355    --
1356    --   Add directories to the project search path.
1357
1358    S_GCC_Asm     : aliased constant S := "/ASM "                           &
1359                                              "-S,!-c";
1360    --        /NOASM (D)
1361    --        /ASM
1362    --
1363    --   Use to cause the assembler source file to be generated, using S as the
1364    --   filetype, instead of the object file. This may be useful if you need
1365    --   to examine the generated assembly code.
1366
1367    S_GCC_Checks  : aliased constant S := "/CHECKS="                        &
1368                                              "FULL "                       &
1369                                                 "-gnato,!-gnatE,!-gnatp "  &
1370                                              "OVERFLOW "                   &
1371                                                 "-gnato "                  &
1372                                              "ELABORATION "                &
1373                                                 "-gnatE "                  &
1374                                              "ASSERTIONS "                 &
1375                                                 "-gnata "                  &
1376                                              "DEFAULT "                    &
1377                                                 "!-gnato,!-gnatp "         &
1378                                              "STACK "                      &
1379                                                 "-fstack-check "           &
1380                                              "SUPPRESS_ALL "               &
1381                                                 "-gnatp";
1382    --        /NOCHECKS
1383    --        /CHECKS[=(keyword[,...])]
1384    --
1385    --   If you compile with the default options, GNAT will insert many runtime
1386    --   checks into the compiled code, including code that performs range
1387    --   checking against constraints, but not arithmetic overflow checking for
1388    --   integer operations (including division by zero) or checks for access
1389    --   before elaboration on subprogram calls.  All other runtime checks, as
1390    --   required by the Ada 95 Reference Manual, are generated by default.
1391    --
1392    --   You may specify one or more of the following keywords to the /CHECKS
1393    --   qualifier to modify this behavior:
1394    --
1395    --     DEFAULT       The behavior described above. This is the default
1396    --                   if the /CHECKS qualifier is not present on the
1397    --                   command line. Same as /NOCHECKS.
1398    --
1399    --     OVERFLOW      Enables overflow checking for integer operations and
1400    --                   checks for access before elaboration on subprogram
1401    --                   calls. This causes GNAT to generate slower and larger
1402    --                   executable programs by adding code to check for both
1403    --                   overflow and division by zero (resulting in raising
1404    --                   "Constraint_Error" as required by Ada semantics).
1405    --                   Similarly, GNAT does not generate elaboration check
1406    --                   by default, and you must specify this keyword to
1407    --                   enable them.
1408    --
1409    --                   Note that this keyword does not affect the code
1410    --                   generated for any floating-point operations; it
1411    --                   applies only to integer operations. For floating-point,
1412    --                   GNAT has the "Machine_Overflows" attribute set to
1413    --                   "False" and the normal mode of operation is to generate
1414    --                   IEEE NaN and infinite values on overflow or invalid
1415    --                   operations (such as dividing 0.0 by 0.0).
1416    --
1417    --     ELABORATION   Enables dynamic checks for access-before-elaboration
1418    --                   on subprogram calls and generic instantiations.
1419    --
1420    --     ASSERTIONS    The pragmas "Assert" and "Debug" normally have no
1421    --                   effect and are ignored. This keyword causes "Assert"
1422    --                   and "Debug" pragmas to be activated, as well as
1423    --                   "Check", "Precondition" and "Postcondition" pragmas.
1424    --
1425    --     SUPPRESS_ALL  Suppress all runtime checks as though you have "pragma
1426    --                   Suppress (all_checks)" in your source. Use this switch
1427    --                   to improve the performance of the code at the expense
1428    --                   of safety in the presence of invalid data or program
1429    --                   bugs.
1430    --
1431    --     DEFAULT       Suppress the effect of any option OVERFLOW or
1432    --                   ASSERTIONS.
1433    --
1434    --     FULL (D)      Similar to OVERFLOW, but suppress the effect of any
1435    --                   option ELABORATION or SUPPRESS_ALL.
1436    --
1437    --   These keywords only control the default setting of the checks.  You
1438    --   may modify them using either "Suppress" (to remove checks) or
1439    --   "Unsuppress" (to add back suppressed checks) pragmas in your program
1440    --   source.
1441
1442    S_GCC_ChecksX : aliased constant S := "/NOCHECKS "                      &
1443                                              "-gnatp,!-gnato,!-gnatE";
1444    --  NODOC (see /CHECKS)
1445
1446    S_GCC_Compres : aliased constant S := "/COMPRESS_NAMES "                &
1447                                              "-gnatC";
1448    --        /NOCOMPRESS_NAMES (D)
1449    --        /COMPRESS_NAMES
1450    --
1451    --   Compress debug information and external symbol name table entries.
1452    --   In the generated debugging information, and also in the case of long
1453    --   external names, the compiler uses a compression mechanism if the name
1454    --   is very long.  This compression method uses a checksum, and avoids
1455    --   trouble on some operating systems which have difficulty with very long
1456    --   names.
1457
1458    S_GCC_Config  : aliased constant S := "/CONFIGURATION_PRAGMAS_FILE=<"   &
1459                                              "-gnatec>";
1460    --        /CONFIGURATION_PRAGMAS_FILE=file
1461    --
1462    --   Specify a configuration pragmas file that need to be taken into account
1463
1464    S_GCC_Current : aliased constant S := "/CURRENT_DIRECTORY "             &
1465                                              "!-I-";
1466    --        /CURRENT_DIRECTORY (D)
1467    --        /NOCURRENT_DIRECTORY
1468    --
1469    --   Look for source files in the default directory.
1470
1471    S_GCC_Data    : aliased constant S := "/DATA_PREPROCESSING=<"           &
1472                                             "-gnatep>";
1473    --        /DATA_PREPROCESSING=file_name
1474    --
1475    --   This qualifier indicates to the compiler the file name (without
1476    --   directory information) of the preprocessor data file to use.
1477    --   The preprocessor data file should be found in the source directories.
1478    --
1479    --   A preprocessing data file is a text file with significant lines
1480    --   indicating how should be preprocessed either a specific source or all
1481    --   sources not mentioned in other lines. A significant line is a non
1482    --   empty, non comment line. Comments are similar to Ada comments.
1483    --
1484    --  Each significant line starts with either a literal string or the
1485    --  character '*'. A literal string is the file name (without directory
1486    --  information) of the source to preprocess. A character '*' indicates the
1487    --  preprocessing for all the sources that are not specified explicitly on
1488    --  other lines. It is an error to have two lines with the same file name
1489    --  or two lines starting with the character '*'.
1490    --
1491    --  After the file name or the character '*', another optional literal
1492    --  string indicating the file name of the definition file to be used for
1493    --  preprocessing. (see 15.3 Form of Definitions File. The definition files
1494    --  are found by the compiler in one of the source directories. In some
1495    --  cases, when compiling a source in a directory other than the current
1496    --  directory, if the definition file is in the current directory, it may
1497    --  be necessary to add the current directory as a source directory through
1498    --  qualifier "/SEARCH=[]", otherwise the compiler would not find the
1499    --  definition file.
1500    --
1501    --  Then, optionally, switches similar to those of gnatprep may be found.
1502    --  Those switches are:
1503    --
1504    --   -b              Causes both preprocessor lines and the lines deleted by
1505    --                   preprocessing to be replaced by blank lines, preserving
1506    --                   the line number. This switch is always implied;
1507    --                   however, if specified after `-c' it cancels the effect
1508    --                   of `-c'.
1509    --
1510    --   -c              Causes both preprocessor lines and the lines deleted by
1511    --                   preprocessing to be retained as comments marked with
1512    --                   the special string "--! ".
1513    --
1514    --   -Dsymbol=value  Define or redefine a symbol, associated with value.
1515    --                   A symbol is an Ada identifier, or an Ada reserved word,
1516    --                   with the exception of "if", "else", "elsif", "end",
1517    --                   "and", "or" and "then". value is either a literal
1518    --                   string, an Ada identifier or any Ada reserved word.
1519    --                   A symbol declared with this switch replaces a symbol
1520    --                   with the same name defined in a definition file.
1521    --
1522    --   -s              Causes a sorted list of symbol names and values to be
1523    --                   listed on the standard output file.
1524    --
1525    --   -u              Causes undefined symbols to be treated as having the
1526    --                   value FALSE in the context of a preprocessor test.
1527    --                   In the absence of this option, an undefined symbol
1528    --                   in a #if or #elsif test will be treated as an error.
1529    --
1530    --   Examples of valid lines in a preprocessor data file:
1531    --
1532    --     "toto.adb"  "prep.def" -u
1533    --     --  preprocess "toto.adb", using definition file "prep.def",
1534    --     --  undefined symbol are False.
1535    --
1536    --     * -c -DVERSION=V101
1537    --     --  preprocess all other sources without a definition file;
1538    --     --  suppressed lined are commented; symbol VERSION has the value
1539    --     --  V101.
1540    --
1541    --     "titi.adb" "prep2.def" -s
1542    --     --  preprocess "titi.adb", using definition file "prep2.def";
1543    --     --  list all symbols with their values.
1544
1545    S_GCC_Debug   : aliased constant S := "/DEBUG="                         &
1546                                             "SYMBOLS "                     &
1547                                                "-g2 "                      &
1548                                             "NOSYMBOLS "                   &
1549                                                "!-g2 "                     &
1550                                             "TRACEBACK "                   &
1551                                                "-g1 "                      &
1552                                             "ALL "                         &
1553                                                "-g3 "                      &
1554                                             "NONE "                        &
1555                                                "-g0 "                      &
1556                                             "NOTRACEBACK "                 &
1557                                                "-g0";
1558    --        /DEBUG[=debug-level]
1559    --        /NODEBUG
1560    --
1561    --   Specifies how much debugging information is to be included in
1562    --   the resulting object fie.
1563    --
1564    --   'debug-level' is one of the following:
1565    --
1566    --        SYMBOLS (D)    Include both debugger symbol records and traceback
1567    --                       in the object file.
1568    --
1569    --        ALL            Include debugger symbol records, traceback plus
1570    --                       extra debug information in the object file.
1571    --
1572    --        NONE           Excludes both debugger symbol records and traceback
1573    --                       from the object file.  Same as /NODEBUG.
1574    --
1575    --        TRACEBACK      Includes only traceback records in the object
1576    --                       file. This is the default when /DEBUG is not used.
1577
1578    S_GCC_DebugX  : aliased constant S := "/NODEBUG "                       &
1579                                              "!-g";
1580    --  NODOC (see /Debug)
1581
1582    S_GCC_Dist    : aliased constant S := "/DISTRIBUTION_STUBS="            &
1583                                             "RECEIVER "                    &
1584                                                "-gnatzr "                  &
1585                                             "CALLER "                      &
1586                                               "-gnatzc";
1587    --        /NODISTRIBUTION_STUBS (D)
1588    --        /DISTRIBUTION_STUBS[=dist-opt]
1589    --
1590    --   'dist-opt' is either RECEIVER (the default) or SENDER and indicates
1591    --   that stubs for use in distributed programs (see the Distributed
1592    --   Systems Annex of the Ada RM) should be generated.
1593
1594    S_GCC_DistX   : aliased constant S := "/NODISTRIBUTION_STUBS "          &
1595                                             "!-gnatzr,!-gnatzc";
1596    --  NODOC (see /DISTRIBUTION_STUBS)
1597
1598    S_GCC_Error   : aliased constant S := "/ERROR_LIMIT=#"                  &
1599                                             "-gnatm#";
1600    --        /NOERROR_LIMIT (D)
1601    --        /ERROR_LIMIT=nnn
1602    --
1603    --   NNN is a decimal integer in the range of 1 to 999999 and limits the
1604    --   number of error messages to be generated to that number.  Once that
1605    --   number has been reached, the compilation is abandoned.
1606    --   Specifying 999999 is equivalent to /NOERROR_LIMIT.
1607
1608    S_GCC_ErrorX  : aliased constant S := "/NOERROR_LIMIT "                 &
1609                                             "-gnatm999999";
1610    --  NODOC (see /ERROR_LIMIT)
1611
1612    S_GCC_Expand  : aliased constant S := "/EXPAND_SOURCE "                 &
1613                                             "-gnatG";
1614    --        /NOEXPAND_SOURCE (D)
1615    --        /EXPAND_SOURCE
1616    --
1617    --   Produces a listing of the expanded code in Ada source form. For
1618    --   example, all tasking constructs are reduced to appropriate run-time
1619    --   library calls.
1620
1621    S_GCC_Extend  : aliased constant S := "/EXTENSIONS_ALLOWED "            &
1622                                             "-gnatX";
1623    --        /NOEXTENSIONS_ALLOWED (D)
1624    --        /EXTENSIONS_ALLOWED
1625    --
1626    --   GNAT specific language extensions allowed.
1627
1628    S_GCC_Ext     : aliased constant S := "/EXTERNAL_REFERENCE=" & '"'      &
1629                                             "-X" & '"';
1630    --        /EXTERNAL_REFERENCE="name=val"
1631    --
1632    --   Specifies an external reference to the project manager. Useful only if
1633    --   /PROJECT_FILE is used.
1634    --
1635    --   Example:
1636    --      /EXTERNAL_REFERENCE="DEBUG=TRUE"
1637
1638    S_GCC_File    : aliased constant S := "/FILE_NAME_MAX_LENGTH=#"         &
1639                                             "-gnatk#";
1640    --        /FILE_NAME_MAX_LENGTH=nnn
1641    --
1642    --   Activates file name "krunching". NNN, a decimal integer in the range
1643    --   1-999, indicates the maximum allowable length of a file name (not
1644    --   including the ADS or ADB filetype. The default is not to enable file
1645    --   name krunching.
1646
1647    S_GCC_Follow : aliased constant S := "/FOLLOW_LINKS_FOR_FILES "       &
1648                                             "-eL";
1649    --        /NOFOLLOW_LINKS_FOR_FILES (D)
1650    --        /FOLLOW_LINKS_FOR_FILES
1651    --
1652    --    Follow links when parsing project files
1653
1654    S_GCC_Force   : aliased constant S := "/FORCE_ALI "                     &
1655                                             "-gnatQ";
1656    --        /NOFORCE_ALI (D)
1657    --        /FORCE_ALI
1658    --
1659    --   In normal operation mode, the .ALI file is not generated if any
1660    --   illegalities are detected in the program. The use of this qualifier
1661    --   forces generation of the .ALI file. This file is marked as being
1662    --   in error, so it cannot be used for binding purposes, but it does
1663    --   contain reasonably complete cross-reference information, and thus may
1664    --   be useful for use by tools (e.g. semantic browsing tools or integrated
1665    --   development environments) that are driven from the .ALI file.
1666
1667    S_GCC_Full    : aliased constant S := "/FULL_PATH_IN_BRIEF_MESSAGES "   &
1668                                             "-gnatef";
1669    --        /NOFULL_PATH_IN_BRIEF_MESSAGES (D)
1670    --        /FULL_PATH_IN_BRIEF_MESSAGES
1671    --
1672    --   When using project files, if some errors or warnings are detected
1673    --   during parsing and verbose mode is not in effect (no use of qualifier
1674    --   /VERBOSE), then error lines start with the full path name of the
1675    --   project file, rather than its simple file name.
1676
1677    S_GCC_GNAT    : aliased constant S := "/GNAT_INTERNAL "                 &
1678                                             "-gnatg";
1679    --        /NOGNAT_INTERNAL (D)
1680    --        /GNAT_INTERNAL
1681    --
1682    --        Internal GNAT implementation mode. This should not be used for
1683    --        applications programs, it is intended only for use by the compiler
1684    --        and its run-time library. For documentation, see the GNAT sources.
1685    --        Note that it implies /WARNINGS=ALL,ERRORS and /STYLE_CHECKS=GNAT
1686    --        so that all standard warnings and all standard style options are
1687    --        turned on. All warnings and style error messages are treated as
1688    --        errors.
1689
1690    S_GCC_Help    : aliased constant S := "/HELP "                          &
1691                                             "-gnath";
1692    --        /NOHELP (D)
1693    --        /HELP
1694    --
1695    --   Output usage information.
1696
1697    S_GCC_Ident   : aliased constant S := "/IDENTIFIER_CHARACTER_SET="      &
1698                                              "DEFAULT "                    &
1699                                                 "-gnati1 "                 &
1700                                              "1 "                          &
1701                                                 "-gnati1 "                 &
1702                                              "2 "                          &
1703                                                 "-gnati2 "                 &
1704                                              "3 "                          &
1705                                                 "-gnati3 "                 &
1706                                              "4 "                          &
1707                                                 "-gnati4 "                 &
1708                                              "5 "                          &
1709                                                 "-gnati5 "                 &
1710                                              "PC "                         &
1711                                                 "-gnatip "                 &
1712                                              "PC850 "                      &
1713                                                 "-gnati8 "                 &
1714                                              "FULL_UPPER "                 &
1715                                                 "-gnatif "                 &
1716                                              "NO_UPPER "                   &
1717                                                 "-gnatin "                 &
1718                                              "WIDE "                       &
1719                                                 "-gnatiw";
1720    --        /NOIDENTIFIER_CHARACTER_SET (D)
1721    --        /IDENTIFIER_CHARACTER_SET=char-set
1722    --
1723    --   Normally GNAT recognizes the Latin-1 character set in source program
1724    --   identifiers, as described in the reference manual. This qualifier
1725    --   causes GNAT to recognize alternate character sets in identifiers.
1726    --   'char-set' is one of the following strings indicating the character
1727    --   set:
1728    --
1729    --        DEFAULT (D) Equivalent to 1, below. Also equivalent to
1730    --                    /NOIDENTIFIER_CHARACTER_SET.
1731    --
1732    --        1           The basic character set is Latin-1. This character
1733    --                    set is defined by ISO standard 8859, part 1. The lower
1734    --                    half (character codes 16#00# ... 16#7F#) is identical
1735    --                    to standard ASCII coding, but the upper half is used
1736    --                    to represent additional characters. This includes
1737    --                    extended letters used by European languages, such as
1738    --                    the umlaut used in German.
1739    --
1740    --                    You may use any of these extended characters freely
1741    --                    in character or string literals. In addition, the
1742    --                    extended characters that represent letters can be
1743    --                    used in identifiers.
1744    --
1745    --        2           Latin-2 letters allowed in identifiers, with uppercase
1746    --                    and lowercase equivalence.
1747    --
1748    --        3           Latin-3 letters allowed in identifiers, with uppercase
1749    --                    and lower case equivalence.
1750    --
1751    --        4           Latin-4 letters allowed in identifiers, with uppercase
1752    --                    and lower case equivalence.
1753    --
1754    --        PC          IBM PC code page 437.  This code page is the normal
1755    --                    default for PCs in the U.S. It corresponds to the
1756    --                    original IBM PC character set. This set has some, but
1757    --                    not all, of the extended Latin-1 letters, but these
1758    --                    letters do not have the same encoding as Latin-1. In
1759    --                    this mode, these letters are allowed in identifiers
1760    --                    with uppercase and lowercase equivalence.
1761    --
1762    --        PC850       This code page (850) is a modification of 437 extended
1763    --                    to include all the Latin-1 letters, but still not with
1764    --                    the usual Latin-1 encoding. In this mode, all these
1765    --                    letters are allowed in identifiers with uppercase and
1766    --                    lower case equivalence.
1767    --
1768    --        FULL_UPPER  Any character in the range 80-FF allowed in
1769    --                    identifiers, and all are considered distinct.  In
1770    --                    other words, there are no uppercase and lower case
1771    --                    equivalences in this range.
1772    --
1773    --        NO_UPPER    No upper-half characters in the range 80-FF are
1774    --                    allowed in identifiers.  This gives Ada 95
1775    --                    compatibility for identifier names.
1776    --
1777    --        WIDE        GNAT allows wide character codes to appear in
1778    --                    character and string literals, and also optionally
1779    --                    in identifiers.  See the /WIDE_CHARACTER_ENCODING
1780    --                    qualifier for information on encoding formats.
1781
1782    S_GCC_IdentX  : aliased constant S := "/NOIDENTIFIER_CHARACTER_SET "    &
1783                                              "-gnati1";
1784    --  NODOC (see /IDENTIFIER_CHARACTER_SET)
1785
1786    S_GCC_Ignore  : aliased constant S := "/IGNORE_REP_CLAUSES "            &
1787                                              "-gnatI";
1788    --        /IGNORE_REP_CLAUSES
1789    --
1790    --   Causes all representation clauses to be ignored and treated as
1791    --   comments. Useful when compiling foreign code (for example when ASIS
1792    --   is used to analyze such code).
1793
1794    S_GCC_Immed   : aliased constant S := "/IMMEDIATE_ERRORS "              &
1795                                              "-gnatdO";
1796    --        /NOIMMEDIATE_ERRORS (D)
1797    --        /IMMEDIATE_ERRORS
1798    --
1799    --   Causes errors to be displayed as soon as they are encountered, rather
1800    --   than after compilation is terminated. If GNAT terminates prematurely
1801    --   or goes into an infinite loop, the last error message displayed may
1802    --   help to pinpoint the culprit.
1803
1804    S_GCC_Inline  : aliased constant S := "/INLINE="                        &
1805                                             "PRAGMA "                      &
1806                                               "-gnatn "                    &
1807                                             "FULL "                        &
1808                                               "-gnatN "                    &
1809                                             "SUPPRESS "                    &
1810                                               "-fno-inline";
1811    --        /NOINLINE (D)
1812    --        /INLINE[=keyword]
1813    --
1814    --   Selects the level of inlining for your program.  In the absence of this
1815    --   qualifier, GNAT does not attempt inlining across units and does not
1816    --   need to access the bodies of subprograms for which "pragma Inline" is
1817    --   specified if they are not in the current unit.
1818    --
1819    --   The supported keywords are as follows:
1820    --
1821    --        PRAGMA (D)  Recognize and process "Inline" pragmas.  However,
1822    --                    for the inlining to actually occur, optimization
1823    --                    must be enabled.  This enables inlining across unit
1824    --                    boundaries, that is, inlining a call in one unit of
1825    --                    a subprogram declared in a with'ed unit. The compiler
1826    --                    will access these bodies, creating an extra source
1827    --                    dependency for the resulting object file, and where
1828    --                    possible, the call will be inlined.
1829    --
1830    --                    This qualifier also turns on full optimization and
1831    --                    requests GNAT to try to attempt automatic inlining
1832    --                    of small subprograms within a unit.
1833    --
1834    --                    Specifying /OPTIMIZE=NONE will disable the main effect
1835    --                    of this qualifier, but you may specify other
1836    --                    optimization options, to get either lower
1837    --                    (/OPTIMIZE=SOME) or higher (/OPTIMIZE=UNROLL_LOOPS)
1838    --                    levels of optimization.
1839    --
1840    --        FULL        Front end inlining. The front end inlining activated
1841    --                    by this switch is generally more extensive, and quite
1842    --                    often more effective than the standard PRAGMA inlining
1843    --                    mode. It will also generate additional dependencies.
1844    --
1845    --        SUPPRESS    Suppresses all inlining, even if other optimization
1846    --                        or inlining switches are set.
1847
1848    S_GCC_InlineX : aliased constant S := "/NOINLINE "                      &
1849                                              "!-gnatn,!-gnatN";
1850    --  NODOC (see /INLINE)
1851
1852    S_GCC_Intsrc  : aliased constant S := "/INTERSPERSE_SOURCE "            &
1853                                              "-gnatL";
1854
1855    --        /NO_INTERSPERSE_SOURCE (D)
1856    --        /INTERSPERSE_SOURCE
1857    --
1858    --   Causes output from /XDEBUG or /EXPAND_SOURCE to be interspersed with
1859    --   lines from the original source file, output as comment lines with the
1860    --   associated line number.
1861
1862    S_GCC_Just   : aliased constant S := "/JUSTIFY_MESSAGES=#"              &
1863                                              "-gnatj#";
1864
1865    --        /NO_JUSTIFY_MESSAGES (D)
1866    --        /JUSTIFY_MESSAGES=nnn
1867    --
1868    --   Causes error messages to be reformatted so that a message and all its
1869    --   continuation lines count as one warning or error in the statistics on
1870    --   total errors, and the message is broken down into lines (justified) so
1871    --   that no line is longer than nnn characters. The default message
1872    --   behavior (each message counted separately and not reformatted to fit
1873    --   a particular line length) can be obtained using /NO_JUSTIFY_MESSAGES.
1874
1875    S_GCC_JustX  : aliased constant S := "/NO_JUSTIFY_MESSAGES "            &
1876                                              "-gnatj0";
1877
1878    --  NODOC (see /JUSTIFY_MESSAGES)
1879
1880    S_GCC_Length  : aliased constant S := "/MAX_LINE_LENGTH=#"              &
1881                                              "-gnatyM#";
1882    --        /MAX_LINE_LENGTH=nnn
1883    --
1884    --   Set maximum line length.
1885    --   The length of lines must not exceed the given value nnn.
1886
1887    S_GCC_List    : aliased constant S := "/LIST "                          &
1888                                              "-gnatl";
1889    --        /NOLIST (D)
1890    --        /LIST
1891    --
1892    --   Cause a full listing of the file to be generated. In the case where
1893    --   a body is compiled, the corresponding spec is also listed, along
1894    --   with any subunits.
1895
1896    S_GCC_Mapping : aliased constant S := "/MAPPING_FILE=<"                 &
1897                                             "-gnatem>";
1898    --        /MAPPING_FILE=file_name
1899    --
1900    --   Use mapping file file_name
1901    --
1902    --   A mapping file is a way to communicate to the compiler two mappings:
1903    --   from unit names to file names (without any directory information) and
1904    --   from file names to path names (with full directory information).
1905    --   These mappings are used by the compiler to short-circuit the path
1906    --   search.
1907    --
1908    --   The use of mapping files is not required for correct operation of the
1909    --   compiler, but mapping files can improve efficiency, particularly when
1910    --   sources are read over a slow network connection. In normal operation,
1911    --   you need not be concerned with the format or use of mapping files,
1912    --   and /MAPPING_FILE is not a qualifier that you would use explicitly.
1913    --   It is intended only for use by automatic tools such as GNAT MAKE
1914    --   running under the project file facility. The description here of the
1915    --   format of mapping files is provided for completeness and for possible
1916    --   use by other tools.
1917    --
1918    --   A mapping file is a sequence of sets of three lines. In each set, the
1919    --   first line is the unit name, in lower case, with "%s" appended for
1920    --   specifications and "%b" appended for bodies; the second line is the
1921    --   file name; and the third line is the path name.
1922    --
1923    --   Example:
1924    --
1925    --      main%b
1926    --      main.2_ada
1927    --      /gnat/project1/sources/main.2_ada
1928    --
1929    --   When qualifier ?MAPPING_FILE is specified, the compiler will create in
1930    --   memory the two mappings from the specified file. If there is any
1931    --   problem (non existent file, truncated file or duplicate entries),
1932    --   no mapping will be created.
1933    --
1934    --   Several /MAPPING_FILE qualifiers may be specified; however, only the
1935    --   last one on the command line will be taken into account.
1936    --
1937    --   When using a project file, GNAT MAKE creates a temporary mapping file
1938    --   and communicates it to the compiler using this switch.
1939
1940    S_GCC_Mess    : aliased constant S := "/MESSAGES_PROJECT_FILE="         &
1941                                             "DEFAULT "                     &
1942                                                "-vP0 "                     &
1943                                             "MEDIUM "                      &
1944                                                "-vP1 "                     &
1945                                             "HIGH "                        &
1946                                                "-vP2";
1947    --        /MESSAGES_PROJECT_FILE[=messages-option]
1948    --
1949    --   Specifies the "verbosity" of the parsing of project files.
1950    --   messages-option may be one of the following:
1951    --
1952    --      DEFAULT (D) No messages are output if there is no error or warning.
1953    --
1954    --      MEDIUM      A small number of messages are output.
1955    --
1956    --      HIGH        A great number of messages are output, most of them not
1957    --                  being useful for the user.
1958
1959    S_GCC_Nesting  : aliased constant S := "/MAX_NESTING=#"                 &
1960                                              "-gnatyL#";
1961    --        /MAX_NESTING=nnn
1962    --
1963    --   Set maximum level of nesting of constructs (including subprograms,
1964    --   loops, blocks, packages, and conditionals).
1965    --   The level of nesting must not exceed the given value nnn.
1966    --   A value of zero disable this style check (not enabled by default).
1967
1968    S_GCC_Noadc   : aliased constant S := "/NO_GNAT_ADC "                   &
1969                                              "-gnatA";
1970    --        /NO_GNAT_ADC
1971    --
1972    --   Cause the compiler to ignore any configuration pragmas file GNAT.ADC
1973    --   in the default directory. Implied by qualifier /PROJECT_FILE.
1974    --   Often used in conjunction with qualifier /CONFIGURATION_PRAGMAS_FILE.
1975
1976    S_GCC_Noload  : aliased constant S := "/NOLOAD "                        &
1977                                              "-gnatc";
1978    --        /NOLOAD
1979    --
1980    --   Cause the compiler to operate in semantic check mode with full
1981    --   checking for all illegalities specified in the reference manual, but
1982    --   without generation of any source code (no object or ALI file
1983    --   generated).
1984    --
1985    --   Since dependent files must be accessed, you must follow the GNAT
1986    --   semantic restrictions on file structuring to operate in this mode:
1987    --
1988    --   o The needed source files must be accessible.
1989    --   o Each file must contain only one compilation unit.
1990    --   o The file name and unit name must match.
1991    --
1992    --   The output consists of error messages as appropriate. No object file
1993    --   or ALI file is generated. The checking corresponds exactly to the
1994    --   notion of legality in the Ada reference manual.
1995    --
1996    --   Any unit can be compiled in semantics-checking-only mode, including
1997    --   units that would not normally be compiled (generic library units,
1998    --   subunits, and specifications where a separate body is present).
1999
2000    S_GCC_Nostinc : aliased constant S := "/NOSTD_INCLUDES "                &
2001                                              "-nostdinc";
2002    --        /NOSTD_INCLUDES
2003    --
2004    --   Do not look in the default directory for source files of the runtime.
2005
2006    S_GCC_Nostlib : aliased constant S := "/NOSTD_LIBRARIES "               &
2007                                             "-nostdlib";
2008    --        /NOSTD_LIBRARIES
2009    --
2010    --    Do not look for library files in the system default directory.
2011
2012    S_GCC_Opt     : aliased constant S := "/OPTIMIZE="                      &
2013                                             "ALL "                         &
2014                                                "-O2,!-O0,!-O1,!-O3 "       &
2015                                             "NONE "                        &
2016                                                "-O0,!-O1,!-O2,!-O3 "       &
2017                                             "SOME "                        &
2018                                                "-O1,!-O0,!-O2,!-O3 "       &
2019                                             "SPACE "                       &
2020                                                "-Os,!-O0,!-O1,!-O2,!-O3 "  &
2021                                             "DEVELOPMENT "                 &
2022                                                "-O1,!-O0,!-O2,!-O3 "       &
2023                                             "UNROLL_LOOPS "                &
2024                                                "-funroll-loops "           &
2025                                             "NO_STRICT_ALIASING "          &
2026                                                "-fno-strict-aliasing "     &
2027                                             "INLINING "                    &
2028                                                "-O3,!-O0,!-O1,!-O2";
2029    --        /NOOPTIMIZE (D)
2030    --        /OPTIMIZE[=(keyword[,...])]
2031    --
2032    --   Selects the level of optimization for your program.  The supported
2033    --   keywords are as follows:
2034    --
2035    --      ALL (D)       Perform most optimizations, including those that
2036    --                    may be expensive.
2037    --
2038    --      NONE          Do not do any optimizations. Same as /NOOPTIMIZE.
2039    --
2040    --      SOME          Perform some optimizations, but omit ones that
2041    --                    are costly in compilation time.
2042    --
2043    --      SPACE         Optimize space usage
2044    --
2045    --      DEVELOPMENT   Same as SOME.
2046    --
2047    --      INLINING      Full optimization, and also attempt automatic inlining
2048    --                    of small subprograms within a unit
2049    --
2050    --      UNROLL_LOOPS  Try to unroll loops. This keyword may be specified
2051    --                    with any keyword above other than NONE. Loop
2052    --                    unrolling usually, but not always, improves the
2053    --                    performance of programs.
2054    --
2055    --      NO_STRICT_ALIASING
2056    --                    Suppress aliasing analysis. When optimization is
2057    --                    enabled (ALL or SOME above), the compiler assumes
2058    --                    that pointers do in fact point to legitimate values
2059    --                    of the pointer type (allocated from the proper pool).
2060    --                    If this assumption is violated, e.g. by the use of
2061    --                    unchecked conversion, then it may be necessary to
2062    --                    suppress this assumption using this keyword (which
2063    --                    may be specified only in conjunction with any
2064    --                    keyword above, other than NONE).
2065
2066    S_GCC_OptX    : aliased constant S := "/NOOPTIMIZE "                    &
2067                                             "-O0,!-O1,!-O2,!-O3";
2068    --  NODOC (see /OPTIMIZE)
2069
2070    S_GCC_Output  : aliased constant S := "/OUTPUT_FILE=<"                  &
2071                                             "-gnatl=>";
2072    --        /OUTPUT_FILE=fname
2073    --
2074    --   This has the same effect as /LIST except that the output is written
2075    --   to a file instead of to standard output. If the given fname
2076    --   does not start with a period, then it is the full name of the file
2077    --   to be written. If fname starts with a period, the name of the file
2078    --   is the concatenation of to the name of the file being compiled with
2079    --   fname where the period is replace by an underline. For example, if
2080    --   file xyz.adb is compiled with -gnatl=.lst, then the output is written
2081    --   to file xyz.adb_lst.
2082
2083    S_GCC_Polling : aliased constant S := "/POLLING "                       &
2084                                             "-gnatP";
2085    --        /NOPOLLING (D)
2086    --        /POLLING
2087    --
2088    --   Enable polling. See the description of pragma Polling in the GNAT
2089    --   Reference Manual for full details.
2090
2091    S_GCC_Project : aliased constant S := "/PROJECT_FILE=<"                 &
2092                                             "-P>";
2093    --        /PROJECT_FILE=filename
2094    --
2095    --   Specifies the main project file to be used. The project files rooted
2096    --   at the main project file will be parsed before the invocation of the
2097    --   compiler. The source and object directories to be searched will be
2098    --   communicated to the compiler through logical names
2099    --   ADA_PRJ_INCLUDE_FILE and ADA_PRJ_OBJECTS_FILE.
2100
2101    S_GCC_Psta    : aliased constant S := "/PRINT_STANDARD "                &
2102                                             "-gnatS";
2103    --        /PRINT_STANDARD
2104    --
2105    --   cause the compiler to output a representation of package Standard
2106    --   in a form very close to standard Ada. It is not quite possible to
2107    --   do this and remain entirely Standard (since new numeric base types
2108    --   cannot be created in standard Ada), but the output is easily
2109    --   readable to any Ada programmer, and is useful to determine the
2110    --   characteristics of target dependent types in package Standard.
2111
2112    S_GCC_Report  : aliased constant S := "/REPORT_ERRORS="                 &
2113                                             "VERBOSE "                     &
2114                                                "-gnatv "                   &
2115                                             "BRIEF "                       &
2116                                                "-gnatb "                   &
2117                                             "FULL "                        &
2118                                                "-gnatf "                   &
2119                                             "IMMEDIATE "                   &
2120                                                "-gnatdO "                  &
2121                                             "DEFAULT "                     &
2122                                                "!-gnatb,!-gnatv";
2123    --        /NOREPORT_ERRORS (D)
2124    --        /REPORT_ERRORS[=(keyword[,...])]
2125    --
2126    --   Change the way errors are reported.  The following keywords are
2127    --   supported:
2128    --
2129    --        VERBOSE (D)  Verbose mode. Full error output with source lines
2130    --                     to SYS$OUTPUT.
2131    --
2132    --        BRIEF        Generate the brief format error messages to
2133    --                     SYS$OUTPUT as well as the verbose format message or
2134    --                     full listing.
2135    --
2136    --        FULL         Normally, the compiler suppresses error messages that
2137    --                     are likely to be redundant. This keyword causes all
2138    --                     error messages to be generated. One particular effect
2139    --                     is for the case of references to undefined variables.
2140    --                     If a given variable is referenced several times, the
2141    --                     normal format of messages produces one error.  With
2142    --                     FULL, each undefined reference produces a separate
2143    --                     error message.
2144    --
2145    --        IMMEDIATE    Normally, the compiler saves up error messages and
2146    --                     generates them at the end of compilation in proper
2147    --                     sequence.  This keyword causes error messages to be
2148    --                     generated as soon as they are detected. The use of
2149    --                     IMMEDIATE usually causes error messages to be
2150    --                     generated out of sequence. Use it when the compiler
2151    --                     blows up due to an internal error.  In this case, the
2152    --                     error messages may be lost. Sometimes blowups are
2153    --                     the result of mishandled error messages, so you may
2154    --                     want to run with this keyword to determine whether
2155    --                     any error messages were generated.
2156    --
2157    --      DEFAULT        Turn off VERBOSE and BRIEF. Same as /NOREPORT_ERRORS.
2158
2159    S_GCC_ReportX : aliased constant S := "/NOREPORT_ERRORS "               &
2160                                             "!-gnatb,!-gnatv";
2161    --  NODOC (see /REPORT_ERRORS)
2162
2163    S_GCC_Repinfo : aliased constant S := "/REPRESENTATION_INFO="           &
2164                                             "DEFAULT "                     &
2165                                                "-gnatR "                   &
2166                                             "NONE "                        &
2167                                                "-gnatR0 "                  &
2168                                             "ARRAYS "                      &
2169                                                "-gnatR1 "                  &
2170                                             "ARRAYS_FILE "                 &
2171                                                "-gnatR1s "                 &
2172                                             "OBJECTS "                     &
2173                                                "-gnatR2 "                  &
2174                                             "OBJECTS_FILE "                &
2175                                                "-gnatR2s "                 &
2176                                             "SYMBOLIC "                    &
2177                                                "-gnatR3 "                  &
2178                                             "SYMBOLIC_FILE "               &
2179                                                "-gnatR3s";
2180    --        /NOREPRESENTATION_INFO (D)
2181    --        /REPRESENTATION_INFO[=(keyword[,...])]
2182    --
2183    --   This qualifier controls output from the compiler of a listing showing
2184    --   representation information for declared types and objects.
2185    --
2186    --        ARRAYS (D)      Size and alignment information is listed for
2187    --                        declared array and record types.
2188    --
2189    --        ARRAYS_FILE     Similar to ARRAYS, but the output is to a file
2190    --                        with the name 'file_rep' where 'file' is the name
2191    --                        of the corresponding source file.
2192    --
2193    --        NONE            no information is output (equivalent to omitting
2194    --                        the /REPRESENTATION_INFO qualifiers).
2195    --
2196    --        OBJECTS         Size and alignment information is listed for all
2197    --                        declared types and objects.
2198    --
2199    --        OBJECTS_FILE    Similar to OBJECTS, but the output is to a file
2200    --                        with the name 'file_rep' where 'file' is the name
2201    --                        of the corresponding source file.
2202    --
2203    --        SYMBOLIC        Symbolic expression information for values that
2204    --                        are computed at run time for variant records.
2205    --
2206    --        SYMBOLIC_FILE   Similar to SYMBOLIC, but the output is to a file
2207    --                        with the name 'file_rep' where 'file' is the name
2208    --                        of the corresponding source file.
2209    --
2210    --        DEFAULT         Equivalent to ARRAYS.
2211
2212    S_GCC_RepinfX : aliased constant S := "/NOREPRESENTATION_INFO "         &
2213                                             "!-gnatR";
2214    --  NODOC (see /REPRESENTATION_INFO)
2215
2216    S_GCC_RTS     : aliased constant S := "/RUNTIME_SYSTEM=|"               &
2217                                             "--RTS=|";
2218    --        /RUNTIME_SYSTEM=xxx
2219    --
2220    --    Build against an alternate runtime system named xxx or RTS-xxx.
2221
2222    S_GCC_Search  : aliased constant S := "/SEARCH=*"                       &
2223                                             "-I*";
2224    --        /SEARCH=(directory[,...])
2225    --
2226    --    When looking for source files also look in directories specified.
2227
2228    S_GCC_Style   : aliased constant S := "/STYLE_CHECKS="                  &
2229                                             "ALL_BUILTIN "                 &
2230                                                "-gnatyy "                  &
2231                                             "0 "                           &
2232                                                "-gnaty0 "                  &
2233                                             "1 "                           &
2234                                                "-gnaty1 "                  &
2235                                             "2 "                           &
2236                                                "-gnaty2 "                  &
2237                                             "3 "                           &
2238                                                "-gnaty3 "                  &
2239                                             "4 "                           &
2240                                                "-gnaty4 "                  &
2241                                             "5 "                           &
2242                                                "-gnaty5 "                  &
2243                                             "6 "                           &
2244                                                "-gnaty6 "                  &
2245                                             "7 "                           &
2246                                                "-gnaty7 "                  &
2247                                             "8 "                           &
2248                                                "-gnaty8 "                  &
2249                                             "9 "                           &
2250                                                "-gnaty9 "                  &
2251                                             "ATTRIBUTE "                   &
2252                                                "-gnatya "                  &
2253                                             "NOATTRIBUTE "                 &
2254                                                "-gnaty-a "                 &
2255                                             "ARRAY_INDEXES "               &
2256                                                "-gnatyA "                  &
2257                                             "NOARRAY_INDEXES "             &
2258                                                "-gnaty-A "                 &
2259                                             "BLANKS "                      &
2260                                                "-gnatyb "                  &
2261                                             "NOBLANKS "                    &
2262                                                "-gnaty-b "                 &
2263                                             "COMMENTS "                    &
2264                                                "-gnatyc "                  &
2265                                             "NOCOMMENTS "                  &
2266                                                "-gnaty-c "                 &
2267                                             "DOS_LINE_ENDINGS "            &
2268                                                "-gnatyd "                  &
2269                                             "NODOS_LINE_ENDINGS "          &
2270                                                "-gnaty-d "                 &
2271                                             "END "                         &
2272                                                "-gnatye "                  &
2273                                             "NOEND "                       &
2274                                                "-gnaty-e "                 &
2275                                             "VTABS "                       &
2276                                                "-gnatyf "                  &
2277                                             "NOVTABS "                     &
2278                                                "-gnaty-f "                 &
2279                                             "GNAT "                        &
2280                                                "-gnatyg "                  &
2281                                             "HTABS "                       &
2282                                                "-gnatyh "                  &
2283                                             "NOHTABS "                     &
2284                                                "-gnaty-h "                 &
2285                                             "IF_THEN "                     &
2286                                                "-gnatyi "                  &
2287                                             "NOIF_THEN "                   &
2288                                                "-gnaty-i "                 &
2289                                             "KEYWORD "                     &
2290                                                "-gnatyk "                  &
2291                                             "NOKEYWORD "                   &
2292                                                "-gnaty-k "                 &
2293                                             "LAYOUT "                      &
2294                                                "-gnatyl "                  &
2295                                             "NOLAYOUT "                    &
2296                                                "-gnaty-l "                 &
2297                                             "LINE_LENGTH "                 &
2298                                                "-gnatym "                  &
2299                                             "NOLINE_LENGTH "               &
2300                                                "-gnaty-m "                 &
2301                                             "MODE_IN "                     &
2302                                                "-gnatyI "                  &
2303                                             "NOMODE_IN "                   &
2304                                                "-gnaty-I "                 &
2305                                             "NONE "                        &
2306                                                "-gnatyN "                  &
2307                                             "STANDARD_CASING "             &
2308                                                "-gnatyn "                  &
2309                                             "NOSTANDARD_CASING "           &
2310                                                "-gnaty-n "                 &
2311                                             "ORDERED_SUBPROGRAMS "         &
2312                                                "-gnatyo "                  &
2313                                             "NOORDERED_SUBPROGRAMS "       &
2314                                                "-gnaty-o "                 &
2315                                             "PRAGMA "                      &
2316                                                "-gnatyp "                  &
2317                                             "NOPRAGMA "                    &
2318                                                "-gnaty-p "                 &
2319                                             "REFERENCES "                  &
2320                                                "-gnatyr "                  &
2321                                             "NOREFERENCES "                &
2322                                                "-gnaty-r "                 &
2323                                             "SPECS "                       &
2324                                                "-gnatys "                  &
2325                                             "NOSPECS "                     &
2326                                                "-gnaty-s "                 &
2327                                             "STATEMENTS_AFTER_THEN_ELSE "  &
2328                                                "-gnatyS "                  &
2329                                             "NOSTATEMENTS_AFTER_THEN_ELSE " &
2330                                                "-gnaty-S "                 &
2331                                             "TOKEN "                       &
2332                                                "-gnatyt "                  &
2333                                             "NOTOKEN "                     &
2334                                                "-gnaty-t "                 &
2335                                             "UNNECESSARY_BLANK_LINES "     &
2336                                                "-gnatyu "                  &
2337                                             "NOUNNECESSARY_BLANK_LINES "   &
2338                                                "-gnaty-u "                 &
2339                                             "XTRA_PARENS "                 &
2340                                                "-gnaty-x "                 &
2341                                             "NOXTRA_PARENS "               &
2342                                                "-gnaty-x ";
2343    --        /NOSTYLE_CHECKS (D)
2344    --        /STYLE_CHECKS[=(keyword,[...])]
2345    --
2346    --   Normally, GNAT permits any code layout consistent with the reference
2347    --   manual requirements.  This qualifier imposes style checking on the
2348    --   input source code.  The following keywords are supported:
2349    --
2350    --      ALL_BUILTIN (D)      Equivalent to the following list of options:
2351    --                           3, ATTRIBUTE, BLANKS, COMMENTS, END, VTABS,
2352    --                           HTABS, IF_THEN, KEYWORD, LAYOUT, LINE_LENGTH,
2353    --                           PRAGMA, REFERENCES, SPECS, TOKEN.
2354    --
2355    --      1 .. 9               Specify indentation level from 1 to 9.
2356    --                           The general style of required indentation is as
2357    --                           specified by the examples in the Ada Reference
2358    --                           Manual. Full line comments must be aligned with
2359    --                           the -- starting on a column that is a multiple
2360    --                           of the alignment level.
2361    --
2362    --      ATTRIBUTE            Check attribute casing.
2363    --                           Attribute names, including the case of keywords
2364    --                           such as digits used as attributes names,
2365    --                           must be written in mixed case, that is,
2366    --                           the initial letter and any letter following an
2367    --                           underscore must be uppercase.
2368    --                           All other letters must be lowercase.
2369    --
2370    --      ARRAY_INDEXES        Check indexes of array attributes.
2371    --                           For array attributes First, Last, Range,
2372    --                           or Length, the index number must be omitted
2373    --                           for one-dimensional arrays and is required
2374    --                           for multi-dimensional arrays.
2375    --
2376    --      BLANKS               Blanks not allowed at statement end.
2377    --                           Trailing blanks are not allowed at the end of
2378    --                           statements. The purpose of this rule, together
2379    --                           with option HTABS (no horizontal tabs), is to
2380    --                           enforce a canonical format for the use of
2381    --                           blanks to separate source tokens.
2382    --
2383    --      COMMENTS             Check comments.
2384    --                           Comments must meet the following set of rules:
2385    --
2386    --                             * The "--" that starts the column must either
2387    --                               start in column one, or else at least one
2388    --                               blank must precede this sequence.
2389    --
2390    --                             * Comments that follow other tokens on a line
2391    --                               must have at least one blank following the
2392    --                               "--" at the start of the comment.
2393    --
2394    --                             * Full line comments must have two blanks
2395    --                               following the "--" that starts the comment,
2396    --                               with the following exceptions.
2397    --
2398    --                             * A line consisting only of the "--"
2399    --                               characters, possibly preceded by blanks is
2400    --                               permitted.
2401    --
2402    --                             * A comment starting with "--x" where x is
2403    --                               a special character is permitted. This
2404    --                               allows proper processing of the output
2405    --                               generated by specialized tools including
2406    --                               gnatprep (where --! is used) and the SPARK
2407    --                               annotation language (where --# is used).
2408    --                               For the purposes of this rule, a special
2409    --                               character is defined as being in one of the
2410    --                               ASCII ranges 16#21#..16#2F# or
2411    --                               16#3A#..16#3F#.
2412    --
2413    --                             * A line consisting entirely of minus signs,
2414    --                               possibly preceded by blanks, is permitted.
2415    --                               This allows the construction of box
2416    --                               comments where lines of minus signs are
2417    --                               used to form the top and bottom of the box.
2418    --
2419    --                             * If a comment starts and ends with "--" is
2420    --                               permitted as long as at least one blank
2421    --                               follows the initial "--". Together with
2422    --                               the preceding rule, this allows the
2423    --                               construction of box comments, as shown in
2424    --                               the following example:
2425    --
2426    --                               ---------------------------
2427    --                               -- This is a box comment --
2428    --                               ---------------------------
2429    --
2430    --      DOS_LINE_ENDINGS     Check that no DOS line terminators are present
2431    --                           All lines must be terminated by a single
2432    --                           ASCII.LF character. In particular the DOS line
2433    --                           terminator sequence CR / LF is not allowed).
2434    --
2435    --      END                  Check end/exit labels.
2436    --                           Optional labels on end statements ending
2437    --                           subprograms and on exit statements exiting
2438    --                           named loops, are required to be present.
2439    --
2440    --      GNAT                 Enforces a set of style conventions that
2441    --                           match the style used in the GNAT source code.
2442    --                           This maybe useful when developing code that
2443    --                           is eventually intended to be incorporated into
2444    --                           GNAT. For further details, see GNAT sources.
2445    --
2446    --      HTABS                No horizontal tabs.
2447    --                           Horizontal tab characters are not permitted in
2448    --                           the source text. Together with the BLANKS
2449    --                           (no blanks at end of line) option, this
2450    --                           enforces a canonical form for the use of blanks
2451    --                           to separate source tokens.
2452    --
2453    --      IF_THEN              Check if-then layout.
2454    --                           The keyword then must appear either on the
2455    --                           same line as the corresponding if, or on a line
2456    --                           on its own, lined up under the if with at least
2457    --                           one non-blank line in between containing all or
2458    --                           part of the condition to be tested.
2459    --
2460    --      KEYWORD              Check keyword casing.
2461    --                           All keywords must be in lower case (with the
2462    --                           exception of keywords such as digits used as
2463    --                           attribute names to which this check does not
2464    --                           apply).
2465    --
2466    --      LAYOUT               Check layout.
2467    --                           Layout of statement and declaration constructs
2468    --                           must follow the recommendations in the Ada
2469    --                           Reference Manual, as indicated by the form of
2470    --                           the syntax rules. For example an else keyword
2471    --                           must be lined up with the corresponding if
2472    --                           keyword.
2473    --
2474    --                           There are two respects in which the style rule
2475    --                           enforced by this check option are more liberal
2476    --                           than those in the Ada Reference Manual.
2477    --                           First in the case of record declarations,
2478    --                           it is permissible to put the record keyword on
2479    --                           the same line as the type keyword, and then
2480    --                           the end in end record must line up under type.
2481    --                           For example, either of the following two
2482    --                           layouts is acceptable:
2483    --
2484    --                           type q is record
2485    --                              a : integer;
2486    --                              b : integer;
2487    --                           end record;
2488    --
2489    --                           type q is
2490    --                              record
2491    --                                 a : integer;
2492    --                                 b : integer;
2493    --                              end record;
2494    --
2495    --                           Second, in the case of a block statement,
2496    --                           a permitted alternative is to put the block
2497    --                           label on the same line as the declare or begin
2498    --                           keyword, and then line the end keyword up under
2499    --                           the block label. For example both the following
2500    --                           are permitted:
2501    --
2502    --
2503    --
2504    --                           Block : declare
2505    --                              A : Integer := 3;
2506    --                           begin
2507    --                              Proc (A, A);
2508    --                           end Block;
2509    --
2510    --                           Block :
2511    --                              declare
2512    --                                 A : Integer := 3;
2513    --                              begin
2514    --                                 Proc (A, A);
2515    --                              end Block;
2516    --
2517    --                           The same alternative format is allowed for
2518    --                           loops. For example, both of the following are
2519    --                           permitted:
2520    --
2521    --
2522    --
2523    --                           Clear : while J < 10 loop
2524    --                              A (J) := 0;
2525    --                           end loop Clear;
2526    --
2527    --                           Clear :
2528    --                              while J < 10 loop
2529    --                                 A (J) := 0;
2530    --                              end loop Clear;
2531    --
2532    --
2533    --
2534    --      LINE_LENGTH          Check maximum line length.
2535    --                           The length of source lines must not exceed 79
2536    --                           characters, including any trailing blanks
2537    --                           The value of 79 allows convenient display on
2538    --                           an 80 character wide device or window, allowing
2539    --                           for possible special treatment of 80 character
2540    --                           lines.
2541    --
2542    --      NONE                 Clear any previously set style checks.
2543    --
2544    --      ORDERED_SUBPROGRAMS  Check order of subprogram bodies.
2545    --                           All subprogram bodies in a given scope (e.g.
2546    --                           a package body) must be in alphabetical order.
2547    --                           The ordering rule uses normal Ada rules for
2548    --                           comparing strings, ignoring casing of letters,
2549    --                           except that if there is a trailing numeric
2550    --                           suffix, then the value of this suffix is used
2551    --                           in the ordering (e.g. Junk2 comes before
2552    --                           Junk10).
2553    --
2554    --      PRAGMA               Check pragma casing.
2555    --                           Pragma names must be written in mixed case,
2556    --                           that is, the initial letter and any letter
2557    --                           following an underscore must be uppercase.
2558    --                           All other letters must be lowercase.
2559    --
2560    --      REFERENCES           Check references.
2561    --                           All identifier references must be cased in the
2562    --                           same way as the corresponding declaration.
2563    --                           No specific casing style is imposed on
2564    --                           identifiers. The only requirement is for
2565    --                           consistency of references with declarations.
2566    --
2567    --      SPECS                Check separate specs.
2568    --                           Separate declarations ("specs") are required
2569    --                           for subprograms (a body is not allowed to serve
2570    --                           as its own declaration). The only exception is
2571    --                           that parameterless library level procedures are
2572    --                           not required to have a separate declaration.
2573    --                           This exception covers the most frequent form of
2574    --                           main program procedures.
2575    --
2576    --      STANDARD_CASING      Check casing of entities in Standard.
2577    --                           Any identifier from Standard must be cased to
2578    --                           match the presentation in the Ada Reference
2579    --                           Manual (for example, Integer and ASCII.NUL).
2580    --
2581    --      TOKEN                Check token spacing.
2582    --                           The following token spacing rules are enforced:
2583    --
2584    --                             * The keywords abs and not must be followed
2585    --                               by a space.
2586    --
2587    --                             * The token => must be surrounded by spaces.
2588    --
2589    --                             * The token <> must be preceded by a space or
2590    --                               a left parenthesis.
2591    --
2592    --                             * Binary operators other than ** must be
2593    --                               surrounded by spaces. There is no
2594    --                               restriction on the layout of the ** binary
2595    --                               operator.
2596    --
2597    --                             * Colon must be surrounded by spaces.
2598    --
2599    --                             * Colon-equal (assignment) must be surrounded
2600    --                               by spaces.
2601    --
2602    --                             * Comma must be the first non-blank character
2603    --                               on the line, or be immediately preceded by
2604    --                               a non-blank character, and must be followed
2605    --                               by a space.
2606    --
2607    --                             * If the token preceding a left paren ends
2608    --                               with a letter or digit, then a space must
2609    --                               separate the two tokens.
2610    --
2611    --                             * A right parenthesis must either be the
2612    --                               first non-blank character on a line, or it
2613    --                               must be preceded by a non-blank character.
2614    --
2615    --                             * A semicolon must not be preceded by
2616    --                               a space, and must not be followed by
2617    --                               a non-blank character.
2618    --
2619    --                             * A unary plus or minus may not be followed
2620    --                               by a space.
2621    --
2622    --                             * A vertical bar must be surrounded by
2623    --                               spaces.
2624    --
2625    --                           In the above rules, appearing in column one is
2626    --                           always permitted, that is, counts as meeting
2627    --                           either a requirement for a required preceding
2628    --                           space, or as meeting a requirement for no
2629    --                           preceding space.
2630    --
2631    --                           Appearing at the end of a line is also always
2632    --                           permitted, that is, counts as meeting either
2633    --                           a requirement for a following space,
2634    --                           or as meeting a requirement for no following
2635    --                           space.
2636    --
2637    --      UNNECESSARY_BLANK_LINES
2638    --                           Check for unnecessary blank lines.
2639    --                           A blank line is considered unnecessary if it
2640    --                           appears at the end of the file, or if more
2641    --                           than one blank line occurs in sequence.
2642    --
2643    --      VTABS                No form feeds or vertical tabs.
2644    --                           Form feeds or vertical tab characters are not
2645    --                           permitted in the source text.
2646    --
2647    --      XTRA_PARENS          Check for the use of an unnecessary extra
2648    --