Next: The Development Environments, Previous: gnatmake and Project Files, Up: Tools Supporting Project Files [Contents][Index]
A number of GNAT tools, other than gnatmake
can benefit from project files:
(gnatbind
,
gnatcheck
,
gnatclean
,
gnatelim
,
gnatfind
,
gnatlink
,
gnatls
,
gnatmetric
,
gnatpp
,
gnatstub
,
and gnatxref
). However, none of these tools can be invoked
directly with a project file switch (-P).
They must be invoked through the gnat
driver.
The gnat
driver is a wrapper that accepts a number of commands and
calls the corresponding tool. It was designed initially for VMS platforms (to
convert VMS qualifiers to Unix-style switches), but it is now available on all
GNAT platforms.
On non-VMS platforms, the gnat
driver accepts the following commands
(case insensitive):
gnatbind
gnatchop
gnatclean
gnatelim
gnatfind
gnatkr
gnatlink
gnatls
gnatmake
gnatname
gnatprep
gnatpp
gnatmetric
gnatstub
gnatxref
(note that the compiler is invoked using the command
gnatmake -f -u -c
).
On non-VMS platforms, between gnat
and the command, two
special switches may be used:
-v
to display the invocation of the tool.
-dn
to prevent the gnat
driver from removing
the temporary files it has created. These temporary files are
configuration files and temporary file list files.
The command may be followed by switches and arguments for the invoked tool.
gnat bind -C main.ali gnat ls -a main gnat chop foo.txt
Switches may also be put in text files, one switch per line, and the text files may be specified with their path name preceded by ’@’.
gnat bind @args.txt main.ali
In addition, for commands BIND, COMP or COMPILE, FIND, ELIM, LS or LIST, LINK, METRIC, PP or PRETTY, STUB and XREF, the project file related switches (-P, -X and -vPx) may be used in addition to the switches of the invoking tool.
When GNAT PP or GNAT PRETTY is used with a project file, but with no source
specified on the command line, it invokes gnatpp
with all
the immediate sources of the specified project file.
When GNAT METRIC is used with a project file, but with no source
specified on the command line, it invokes gnatmetric
with all the immediate sources of the specified project file and with
-d with the parameter pointing to the object directory
of the project.
In addition, when GNAT PP, GNAT PRETTY or GNAT METRIC is used with a project file, no source is specified on the command line and switch -U is specified on the command line, then the underlying tool (gnatpp or gnatmetric) is invoked for all sources of all projects, not only for the immediate sources of the main project. (-U stands for Universal or Union of the project files of the project tree)
For each of the following commands, there is optionally a corresponding package in the main project.
Binder
for command BIND (invoking gnatbind
)
Check
for command CHECK (invoking
gnatcheck
)
Compiler
for command COMP or COMPILE (invoking the compiler)
Cross_Reference
for command XREF (invoking
gnatxref
)
Eliminate
for command ELIM (invoking
gnatelim
)
Finder
for command FIND (invoking gnatfind
)
Gnatls
for command LS or LIST (invoking gnatls
)
Gnatstub
for command STUB
(invoking gnatstub
)
Linker
for command LINK (invoking gnatlink
)
Check
for command CHECK
(invoking gnatcheck
)
Metrics
for command METRIC
(invoking gnatmetric
)
Pretty_Printer
for command PP or PRETTY
(invoking gnatpp
)
Package Gnatls
has a unique attribute Switches
,
a simple variable with a string list value. It contains switches
for the invocation of gnatls
.
project Proj1 is package gnatls is for Switches use ("-a", "-v"); end gnatls; end Proj1;
All other packages have two attribute Switches
and
Default_Switches
.
Switches
is an indexed attribute, indexed by the
source file name, that has a string list value: the switches to be
used when the tool corresponding to the package is invoked for the specific
source file.
Default_Switches
is an attribute,
indexed by the programming language that has a string list value.
Default_Switches ("Ada")
contains the
switches for the invocation of the tool corresponding
to the package, except if a specific Switches
attribute
is specified for the source file.
project Proj is for Source_Dirs use ("**"); package gnatls is for Switches use ("-a", "-v"); end gnatls;
package Compiler is for Default_Switches ("Ada") use ("-gnatv", "-gnatwa"); end Binder;
package Binder is for Default_Switches ("Ada") use ("-C", "-e"); end Binder;
package Linker is for Default_Switches ("Ada") use ("-C"); for Switches ("main.adb") use ("-C", "-v", "-v"); end Linker;
package Finder is for Default_Switches ("Ada") use ("-a", "-f"); end Finder;
package Cross_Reference is for Default_Switches ("Ada") use ("-a", "-f", "-d", "-u"); end Cross_Reference; end Proj;
With the above project file, commands such as
gnat comp -Pproj main gnat ls -Pproj main gnat xref -Pproj main gnat bind -Pproj main.ali gnat link -Pproj main.ali
will set up the environment properly and invoke the tool with the switches
found in the package corresponding to the tool:
Default_Switches ("Ada")
for all tools,
except Switches ("main.adb")
for gnatlink
.
It is also possible to invoke some of the tools,
(gnatcheck
,
gnatmetric
,
and gnatpp
)
on a set of project units thanks to the combination of the switches
-P, -U and possibly the main unit when one is interested
in its closure. For instance,
gnat metric -Pproj
will compute the metrics for all the immediate units of project
proj
.
gnat metric -Pproj -U
will compute the metrics for all the units of the closure of projects
rooted at proj
.
gnat metric -Pproj -U main_unit
will compute the metrics for the closure of units rooted at
main_unit
. This last possibility relies implicitly
on gnatbind
’s option -R. But if the argument files for the
tool invoked by the the gnat
driver are explicitly specified
either directly or through the tool -files option, then the tool
is called only for these explicitly specified files.