2. IntroductionΒΆ
The gnatcheck tool is an ASIS-based utility that checks properties of Ada source files according to a given set of semantic rules.
In order to check compliance with a given rule, gnatcheck has to semantically analyze the Ada sources. Therefore, checks can only be performed on legal Ada units. Moreover, when a unit depends semantically upon units located outside the current directory, the source search path has to be provided when calling gnatcheck, either through a specified project file or through gnatcheck switches as described below.
If the set of sources to be processed by gnatcheck
contains sources with
preprocessing directives
then the needed options should be provided to run preprocessor as a part of
the gnatcheck call, and detected rule violations
will correspond to preprocessed sources.
A number of rules are predefined in gnatcheck and are described later in this chapter. You can also add new rules, by modifying the gnatcheck code and rebuilding the tool. In order to add a simple rule making some local checks, a small amount of straightforward ASIS-based programming is usually needed.
Invoking gnatcheck on the command line has the form:
$ gnatcheck [switches] {filename}
[-files={arg_list_filename}]
[-cargs gcc_switches] -rules rule_options
where
- switches specify the general tool options
- Each filename is the name (including the extension) of a source file to process. ‘Wildcards’ are allowed, and the file name may contain path information.
- Each arg_list_filename is the name (including the extension) of a text file containing the names of the source files to process, separated by spaces or line breaks.
- gcc_switches is a list of switches for
gcc. They will be passed on to all compiler invocations made by
gnatcheck to generate the ASIS trees. Here you can provide
-I
switches to form the source search path, and use the-gnatec
switch to set the configuration file, etc. - rule_options is a list of options for controlling a set of rules to be checked by gnatcheck (gnatcheck Rule Options).
Either a filename
or an arg_list_filename
must be
supplied.