File: asis_ul-options.ads

package info (click to toggle)
asis 2015-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 13,640 kB
  • sloc: ada: 140,372; makefile: 260; sh: 50; xml: 48; csh: 10
file content (266 lines) | stat: -rw-r--r-- 12,050 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
------------------------------------------------------------------------------
--                                                                          --
--                     ASIS UTILITY LIBRARY COMPONENTS                      --
--                                                                          --
--                      A S I S _ U L . O P T I O N S                       --
--                                                                          --
--                                 S p e c                                  --
--                                                                          --
--                     Copyright (C) 2004-2014, AdaCore                     --
--                                                                          --
-- Asis Utility Library (ASIS UL) is free software; you can redistribute it --
-- and/or  modify  it  under  terms  of  the  GNU General Public License as --
-- published by the Free Software Foundation; either version 3, or (at your --
-- option)  any later version.  ASIS UL  is distributed in the hope that it --
-- will  be  useful,  but  WITHOUT  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 --
-- COPYING3. If not,  go to http://www.gnu.org/licenses for a complete copy --
-- of the license.                                                          --
--                                                                          --
-- ASIS UL is maintained by AdaCore (http://www.adacore.com).               --
--                                                                          --
------------------------------------------------------------------------------

--  This package defines options that are supposed to be of a common interest
--  for all the tools.

with GNAT.OS_Lib; use GNAT.OS_Lib;

with ASIS_UL.Debug;

package ASIS_UL.Options is

   Print_Version : Boolean := False;
   --  '--version'
   --  Print version info and exit

   Print_Usage : Boolean := False;
   --  '--help'
   --  Print usage info and exit

   Verbose_Mode : Boolean := False;
   --  The verbose mode.
   --  '-v'

   Quiet_Mode       : Boolean := False;
   Fully_Quiet_Mode : Boolean := False;
   --  The quiet mode
   --  '-q'
   --  !!! At some point we have to get rid of this flag and to use only
   --  fine tuned debug options defined by the flags in ASIS_UL.Debug. Most of
   --  the tools are supposed to use Quiet_Mode flag. The Fully_Quiet_Mode flag
   --  is "more quiet than just Quiet_Mode (for example it suppresses the error
   --  message when the tool cannot compile the source for the tree).
   --  Fully_Quiet_Mode is used in Q4A test driver.

   Debug_Mode : Boolean := False;
   --  The debug mode
   --  '-d'

   Progress_Indicator_Mode : Boolean renames ASIS_UL.Debug.Debug_Flag_D;
   --  Generate the output to be used for GPS progress indicator.
   --  '-dd'

   Generate_XML_Help : Boolean := False;
   --  If this file is ON, the tool generates the XML description of the tool
   --  parameters to be used for creating the GUI in GPS.
   --  '-hx'.

   Compute_Timing : Boolean := False;
   --  If this flag is ON, the total execution time (wall clock) of the tool
   --  is computed and printed out.
   --  '-t'

   type Warning_Modes is
     (Quiet,  --  all warnings are suppressed
      Short,
      Normal,
      Full);

   Warning_Mode : Warning_Modes := Normal;
   --  Specifies the warning message level
   --  '-w(q|s|n|f)

   Log_Mode : Boolean := False;
   --  Create the log file and duplicate in this file all the messages
   --  generated by a tool.
   --  '-log'

   Test_Mode : Boolean := False;
   --  Run the tool in a test mode that is suitable for Q4A massive test
   --  driver. The details of the test mode are tool-specific and should be
   --  set in the tool.
   --  '--test'

   Incremental_Mode : Boolean := False;
   --  True if --incremental was given on the command line. In this mode, the
   --  ASIS tool is incremental on a file-by-file basis (e.g. don't run
   --  gnat2xml if the xml file is already up to date).
   --
   --  Incremental_Mode works like this: gnat2xml (or whatever other ASIS tool
   --  that supports this mode) invokes a builder (currently gprbuild, but
   --  could be gnatmake), telling the builder to pretend that gnat2xml is the
   --  "compiler". So the builder invokes gnat2xml once for each relevant
   --  file. So we have an "outer" invocation of gnat2xml, and many "inner"
   --  invocations.
   --
   --  The command-line arguments passed to the outer gnat2xml are modified
   --  before passing them along to the builder. "--incremental" is not passed
   --  to the builder. Project-related arguments are passed to the
   --  builder. Most arguments need to be seen by the inner gnat2xmls, so they
   --  are passed to the builder after "-cargs".
   --  See ASIS_UL.Environment.Builder_Command_Line for details.

   --  In incremental mode, Incremental_Mode is True for the outer invocation,
   --  and Mimic_gcc is True for the inner invocations. In nonincremental mode,
   --  both are False. They are never both True.

   Incremental_Mode_By_Default : constant Boolean := False;
   --  Set this to True to force --incremental mode ON in cases where it is
   --  legal.

   Mimic_gcc : Boolean := False;
   --  True if this is an inner invocation of the tool for incremental mode, so
   --  that the ASIS tool should mimic the gcc compiler in certain ways.
   --
   --  The tool sets Mimic_gcc to True when it is invoked by the builder (see
   --  Pre_Scan_Arguments in ASIS_UL.Environment for how this is detected).
   --
   --  When Mimic_gcc is True, the tool behavior is modified as follows:
   --
   --     - When a library unit body is processed, also process the spec and
   --       all subunits. This is necessary because the builder does not invoke
   --       the "compiler" on specs with bodies, nor on subunits. This involves
   --       setting Add_Needed_Sources ON.
   --
   --     - When the ASIS tool invokes the real compiler on a library unit body
   --       or bodiless spec, it does so in the Tool_Current_Dir, rather than
   --       the usual Tool_Temp_Dir, so that the ALI file will be in the right
   --       place for subsequent runs of the builder.
   --
   --     - When doing cleanup, we set Keep_ALI_Files to True so the .ali files
   --       are kept around for subsequent runs of the builder.
   --
   --  Note that this trick doesn't work with gprbuild because it doesn't
   --  support the GCC= switch.

   Outer_Parallel : Boolean := False;
   --  True if Mimic_gcc is True, and the outer invocation had -j for
   --  parallelism. This indicates that we need to do file locking.

   Incremental_Switches : constant String :=
   --  Switches accepted by ASIS tools that can operate in incremental
   --  mode. Some are used in Incremental_Mode, some in Mimic_gcc.
     "-incremental " &
     "-outer-parallel " &
     "-outer-dir= " &
     "c gnatea gnatez gnatc " & -- switches passed by gnatmake
     "gnatA gnatem! x: " & -- switches passed by gprbuild
     "gnatec! gnateO! ";

   Compiler_Output_Subdir : String_Access := null;
   --  When using incremental mode without a project file (which is not
   --  currently supported!), this is the directory in which the compiler puts
   --  its output (ALI and tree files).  The builder passes "-o
   --  /some/directory/ALI-FILES-toolname/blah.o" to the inner invocation of
   --  the tool, which then sets this to
   --  "/some/directory/ALI-FILES-toolname". The same -o switch is then passed
   --  on to the compiler, which tells it to put blah.ali and blah.adt in
   --  /some/directory/ALI-FILES-toolname. That's where we want the ALI file to
   --  end up, but we need to move the tree file into /some/directory (see
   --  ASIS_UL.Source_Table.Create_Tree).
   --
   --  In all other cases (nonincremental mode, and incremental mode with a
   --  project file), this horsing around is unnecessary, and
   --  Compiler_Output_Subdir is null.

   Outer_Dir : String_Access := null;
   --  If --outer-dir=/some/path was passed on the command line, this is set to
   --  "/some/path". In incremental mode (with a project file), the builder
   --  sets the current directory for the inner invocations to a subdirectory
   --  of the object directory. So the outer invocation passes --outer-dir to
   --  allow the inner one to find the original directory in which the tool was
   --  run. We switch to this directory during command-line processing, so we
   --  can find files based on what the user expects. For example, for
   --
   --     gnatcheck -rules -from-file=rules.txt
   --
   --  we want to look for rules.txt in the directory where gnatcheck was
   --  originally run from.

   Files_Switch_Used : Boolean := False;
   --  True if the files= switch was used

   Out_Dir : String_Access := null;
   --  If the command-line switch "--output-dir=xxx" was given, this is
   --  "xxx". If no --output-dir switch was given, this is null.

   Process_Num : Natural := 1;
   --  The maximal number of parallel tree creations
   --  -jN

   J_Specified : Boolean := False;
   --  True if the -jN option was given. This is used to distinguish -j0 on a
   --  uniprocessor from no -j switch.

   Generate_Representation_Clauses : Boolean := False;
   --  True if gnat2xml should generate representation clauses. This is
   --  controlled by the --rep-clauses switch.

   ----------------------------------------
   -- Flags computed from other settings --
   ----------------------------------------

   --  The flags listed below are not set by some options, but they are
   --  computed from gnatcheck command line and rule options

   No_Argument_File_Specified : Boolean := True;
   --  Flag indicating if no argument file is specified for the tool call.
   --  Usually the tool generated the brief help info in this case.

   Nothing_To_Do : Boolean := False;
   --  Flag indicating if a tool does not have any real work to do - that is,
   --  that there are some argument files specified, and there is at least one
   --  argument file that exists. A tool should not rely on the default setting
   --  of this file.

   ------------------------------------------------------
   -- options related to program global state analysis --
   ------------------------------------------------------

   Process_RTL_Units : Boolean := False;
   --  If this flag is set ON, a tool tries to look into RTL units when
   --  analyzing global properties of the argument sources, even if these RTL
   --  units are not specified as tool arguments
   --  '-a'

   Generate_Global_Structure_Warnings : Boolean := False;
   --  Generate warning messages in case if a problem that prevents the
   --  complete analyzis of the program global structure is detected

   Buld_Call_Graph : Boolean := False;
   --  Flag indicating if we have to collect the call graph information.

   Do_Transitive_Closure : Boolean := False;
   --  Flag indicating if the transitive closure of the call graph is needed.

   Collect_Data_Info : Boolean := False;
   --  Flag indicating if the data information should be included into the
   --  program global structure representation

   Main_Subprogram_Name : String_Access;
   --  -main=<name of the main subprogram>
   --  The name of the source file containing the main subprogram. The name
   --  may or may not contain the suffix. This subprogram is called by the
   --  environment task.

   --  More flags? Flags to represent type?

   Represent_Dispatching_Calls : Boolean := True;
   --  If this flag is ON, the call graph represents the dispatching calls.
   --  This flag should be removed after completing the implementation of
   --  dispatching calls representation in the call graph.

end ASIS_UL.Options;