2005-12-05 Vincent Celier <celier@adacore.com> * gnatcmd.adb (GNATCmd): GNAT CHECK accepts switch -U If GNAT CHECK is called with a project file, but with no source on the command line, call gnatcheck with all the compilable sources of the project. Take into account the new command Check, for gnatcheck. Treat as for other ASIS tools: take into account project, specific package Check and Compiler switches. For ASIS tools, add the switches in package Compiler for the invocation of the compiler. * prj-attr.adb: Add package Check and its attributes * vms_conv.ads (Command_Type): New command Check, for gnatcheck * vms_conv.adb (Initialize): Change Params of command Check to unlimited files. Change some Hostparm.OpenVMS checks to Targparm.OpenVMS_On_Target. Add data for new command Check * vms_data.ads: Add project related qualifiers for GNAT CHECK and GNAT ELIM. Add qualifiers for Check command options (Command_Type): New command Check From-SVN: r108297
312 lines
11 KiB
Ada
312 lines
11 KiB
Ada
------------------------------------------------------------------------------
|
|
-- --
|
|
-- GNAT COMPILER COMPONENTS --
|
|
-- --
|
|
-- V M S _ C O N V --
|
|
-- --
|
|
-- S p e c --
|
|
-- --
|
|
-- Copyright (C) 2003-2005, Free Software Foundation, Inc. --
|
|
-- --
|
|
-- GNAT is free software; you can redistribute it and/or modify it under --
|
|
-- terms of the GNU General Public License as published by the Free Soft- --
|
|
-- ware Foundation; either version 2, or (at your option) any later ver- --
|
|
-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
|
|
-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
|
|
-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
|
|
-- for more details. You should have received a copy of the GNU General --
|
|
-- Public License distributed with GNAT; see file COPYING. If not, write --
|
|
-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --
|
|
-- Boston, MA 02110-1301, USA. --
|
|
-- --
|
|
-- GNAT was originally developed by the GNAT team at New York University. --
|
|
-- Extensive contributions were provided by Ada Core Technologies Inc. --
|
|
-- --
|
|
------------------------------------------------------------------------------
|
|
|
|
-- This package is part of the GNAT driver. It contains the procedure
|
|
-- VMS_Conversion to convert a VMS command line to the equivalent command
|
|
-- line with switches for the GNAT tools that the GNAT driver will invoke.
|
|
-- The qualifier declarations are contained in package VMS_Data.
|
|
|
|
with Table;
|
|
with VMS_Data; use VMS_Data;
|
|
|
|
with GNAT.OS_Lib; use GNAT.OS_Lib;
|
|
|
|
package VMS_Conv is
|
|
|
|
-- A table to keep the switches on the command line
|
|
|
|
package Last_Switches is new Table.Table
|
|
(Table_Component_Type => String_Access,
|
|
Table_Index_Type => Integer,
|
|
Table_Low_Bound => 1,
|
|
Table_Initial => 20,
|
|
Table_Increment => 100,
|
|
Table_Name => "Gnatcmd.Last_Switches");
|
|
|
|
Normal_Exit : exception;
|
|
-- Raise this exception for normal program termination
|
|
|
|
Error_Exit : exception;
|
|
-- Raise this exception if error detected
|
|
|
|
Errors : Natural := 0;
|
|
-- Count errors detected
|
|
|
|
Display_Command : Boolean := False;
|
|
-- Set true if /? switch causes display of generated command (on VMS)
|
|
|
|
-------------------
|
|
-- Command Table --
|
|
-------------------
|
|
|
|
-- The command table contains an entry for each command recognized by
|
|
-- GNATCmd. The entries are represented by an array of records.
|
|
|
|
type Parameter_Type is
|
|
-- A parameter is defined as a whitespace bounded string, not begining
|
|
-- with a slash. (But see note under FILES_OR_WILDCARD).
|
|
(File,
|
|
-- A required file or directory parameter
|
|
|
|
Optional_File,
|
|
-- An optional file or directory parameter
|
|
|
|
Other_As_Is,
|
|
-- A parameter that's passed through as is (not canonicalized)
|
|
|
|
Unlimited_Files,
|
|
-- An unlimited number of whitespace separate file or directory
|
|
-- parameters including wildcard specifications.
|
|
|
|
Unlimited_As_Is,
|
|
-- Un unlimited number of whitespace separated paameters that are
|
|
-- passed through as is (not canonicalized).
|
|
|
|
Files_Or_Wildcard);
|
|
-- A comma separated list of files and/or wildcard file specifications.
|
|
-- A comma preceded by or followed by whitespace is considered as a
|
|
-- single comma character w/o whitespace.
|
|
|
|
type Parameter_Array is array (Natural range <>) of Parameter_Type;
|
|
type Parameter_Ref is access all Parameter_Array;
|
|
|
|
type Command_Type is
|
|
(Bind,
|
|
Chop,
|
|
Clean,
|
|
Compile,
|
|
Check,
|
|
Elim,
|
|
Find,
|
|
Krunch,
|
|
Link,
|
|
List,
|
|
Make,
|
|
Metric,
|
|
Name,
|
|
Preprocess,
|
|
Pretty,
|
|
Setup,
|
|
Shared,
|
|
Stub,
|
|
Xref,
|
|
Undefined);
|
|
|
|
type Alternate_Command is (Comp, Ls, Kr, Pp, Prep);
|
|
-- Alternate command label for non VMS system use
|
|
|
|
Corresponding_To : constant array (Alternate_Command) of Command_Type :=
|
|
(Comp => Compile,
|
|
Ls => List,
|
|
Kr => Krunch,
|
|
Prep => Preprocess,
|
|
Pp => Pretty);
|
|
-- Mapping of alternate commands to commands
|
|
|
|
subtype Real_Command_Type is Command_Type range Bind .. Xref;
|
|
|
|
type Command_Entry is record
|
|
Cname : String_Ptr;
|
|
-- Command name for GNAT xxx command
|
|
|
|
Usage : String_Ptr;
|
|
-- A usage string, used for error messages
|
|
|
|
Unixcmd : String_Ptr;
|
|
-- Corresponding Unix command
|
|
|
|
Unixsws : Argument_List_Access;
|
|
-- Switches for the Unix command
|
|
|
|
VMS_Only : Boolean;
|
|
-- When True, the command can only be used on VMS
|
|
|
|
Switches : Switches_Ptr;
|
|
-- Pointer to array of switch strings
|
|
|
|
Params : Parameter_Ref;
|
|
-- Describes the allowable types of parameters.
|
|
-- Params (1) is the type of the first parameter, etc.
|
|
-- An empty parameter array means this command takes no parameters.
|
|
|
|
Defext : String (1 .. 3);
|
|
-- Default extension. If non-blank, then this extension is supplied by
|
|
-- default as the extension for any file parameter which does not have
|
|
-- an extension already.
|
|
end record;
|
|
|
|
-------------------------
|
|
-- Internal Structures --
|
|
-------------------------
|
|
|
|
-- The switches and commands are defined by strings in the previous
|
|
-- section so that they are easy to modify, but internally, they are
|
|
-- kept in a more conveniently accessible form described in this
|
|
-- section.
|
|
|
|
-- Commands, command qualifers and options have a similar common format
|
|
-- so that searching for matching names can be done in a common manner.
|
|
|
|
type Item_Id is (Id_Command, Id_Switch, Id_Option);
|
|
|
|
type Translation_Type is
|
|
(
|
|
T_Direct,
|
|
-- A qualifier with no options.
|
|
-- Example: GNAT MAKE /VERBOSE
|
|
|
|
T_Directories,
|
|
-- A qualifier followed by a list of directories
|
|
-- Example: GNAT COMPILE /SEARCH=([], [.FOO], [.BAR])
|
|
|
|
T_Directory,
|
|
-- A qualifier followed by one directory
|
|
-- Example: GNAT LIBRARY /SET=[.VAXFLOATLIB]
|
|
|
|
T_File,
|
|
-- A qualifier followed by a filename
|
|
-- Example: GNAT LINK /EXECUTABLE=FOO.EXE
|
|
|
|
T_No_Space_File,
|
|
-- A qualifier followed by a filename
|
|
-- Example: GNAT MAKE /PROJECT_FILE=PRJ.GPR
|
|
|
|
T_Numeric,
|
|
-- A qualifier followed by a numeric value.
|
|
-- Example: GNAT CHOP /FILE_NAME_MAX_LENGTH=39
|
|
|
|
T_String,
|
|
-- A qualifier followed by a quoted string. Only used by
|
|
-- /IDENTIFICATION qualifier.
|
|
-- Example: GNAT LINK /IDENTIFICATION="3.14a1 version"
|
|
|
|
T_Options,
|
|
-- A qualifier followed by a list of options.
|
|
-- Example: GNAT COMPILE /REPRESENTATION_INFO=(ARRAYS,OBJECTS)
|
|
|
|
T_Commands,
|
|
-- A qualifier followed by a list. Only used for
|
|
-- MAKE /COMPILER_QUALIFIERS /BINDER_QUALIFIERS /LINKER_QUALIFIERS
|
|
-- (gnatmake -cargs -bargs -largs )
|
|
-- Example: GNAT MAKE ... /LINKER_QUALIFIERS /VERBOSE FOOBAR.OBJ
|
|
|
|
T_Other,
|
|
-- A qualifier passed directly to the linker. Only used
|
|
-- for LINK and SHARED if no other match is found.
|
|
-- Example: GNAT LINK FOO.ALI /SYSSHR
|
|
|
|
T_Alphanumplus
|
|
-- A qualifier followed by a legal linker symbol prefix. Only used
|
|
-- for BIND /BUILD_LIBRARY (gnatbind -Lxyz).
|
|
-- Example: GNAT BIND /BUILD_LIBRARY=foobar
|
|
);
|
|
|
|
type Item (Id : Item_Id);
|
|
type Item_Ptr is access all Item;
|
|
|
|
type Item (Id : Item_Id) is record
|
|
Name : String_Ptr;
|
|
-- Name of the command, switch (with slash) or option
|
|
|
|
Next : Item_Ptr;
|
|
-- Pointer to next item on list, always has the same Id value
|
|
|
|
Command : Command_Type := Undefined;
|
|
|
|
Unix_String : String_Ptr := null;
|
|
-- Corresponding Unix string. For a command, this is the unix command
|
|
-- name and possible default switches. For a switch or option it is
|
|
-- the unix switch string.
|
|
|
|
case Id is
|
|
|
|
when Id_Command =>
|
|
|
|
Switches : Item_Ptr;
|
|
-- Pointer to list of switch items for the command, linked
|
|
-- through the Next fields with null terminating the list.
|
|
|
|
Usage : String_Ptr;
|
|
-- Usage information, used only for errors and the default
|
|
-- list of commands output.
|
|
|
|
Params : Parameter_Ref;
|
|
-- Array of parameters
|
|
|
|
Defext : String (1 .. 3);
|
|
-- Default extension. If non-blank, then this extension is
|
|
-- supplied by default as the extension for any file parameter
|
|
-- which does not have an extension already.
|
|
|
|
when Id_Switch =>
|
|
|
|
Translation : Translation_Type;
|
|
-- Type of switch translation. For all cases, except Options,
|
|
-- this is the only field needed, since the Unix translation
|
|
-- is found in Unix_String.
|
|
|
|
Options : Item_Ptr;
|
|
-- For the Options case, this field is set to point to a list
|
|
-- of options item (for this case Unix_String is null in the
|
|
-- main switch item). The end of the list is marked by null.
|
|
|
|
when Id_Option =>
|
|
|
|
null;
|
|
-- No special fields needed, since Name and Unix_String are
|
|
-- sufficient to completely described an option.
|
|
|
|
end case;
|
|
end record;
|
|
|
|
subtype Command_Item is Item (Id_Command);
|
|
subtype Switch_Item is Item (Id_Switch);
|
|
subtype Option_Item is Item (Id_Option);
|
|
|
|
-------------------
|
|
-- Switch Tables --
|
|
-------------------
|
|
|
|
-- The switch tables contain an entry for each switch recognized by the
|
|
-- command processor. It is initialized by procedure Initialize.
|
|
|
|
Command_List : array (Real_Command_Type) of Command_Entry;
|
|
|
|
----------------
|
|
-- Procedures --
|
|
----------------
|
|
|
|
procedure Initialize;
|
|
-- Initialized the switch table Command_List
|
|
|
|
procedure Output_Version;
|
|
-- Output the version of this program
|
|
|
|
procedure VMS_Conversion (The_Command : out Command_Type);
|
|
-- Converts VMS command line to equivalent Unix command line
|
|
|
|
end VMS_Conv;
|