annotate gcc/ada/gnatls.adb @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ------------------------------------------------------------------------------
kono
parents:
diff changeset
2 -- --
kono
parents:
diff changeset
3 -- GNAT COMPILER COMPONENTS --
kono
parents:
diff changeset
4 -- --
kono
parents:
diff changeset
5 -- G N A T L S --
kono
parents:
diff changeset
6 -- --
kono
parents:
diff changeset
7 -- B o d y --
kono
parents:
diff changeset
8 -- --
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
9 -- Copyright (C) 1992-2019, Free Software Foundation, Inc. --
111
kono
parents:
diff changeset
10 -- --
kono
parents:
diff changeset
11 -- GNAT is free software; you can redistribute it and/or modify it under --
kono
parents:
diff changeset
12 -- terms of the GNU General Public License as published by the Free Soft- --
kono
parents:
diff changeset
13 -- ware Foundation; either version 3, or (at your option) any later ver- --
kono
parents:
diff changeset
14 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
kono
parents:
diff changeset
15 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
kono
parents:
diff changeset
16 -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
kono
parents:
diff changeset
17 -- for more details. You should have received a copy of the GNU General --
kono
parents:
diff changeset
18 -- Public License distributed with GNAT; see file COPYING3. If not, go to --
kono
parents:
diff changeset
19 -- http://www.gnu.org/licenses for a complete copy of the license. --
kono
parents:
diff changeset
20 -- --
kono
parents:
diff changeset
21 -- GNAT was originally developed by the GNAT team at New York University. --
kono
parents:
diff changeset
22 -- Extensive contributions were provided by Ada Core Technologies Inc. --
kono
parents:
diff changeset
23 -- --
kono
parents:
diff changeset
24 ------------------------------------------------------------------------------
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 pragma Ada_2012;
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 with ALI; use ALI;
kono
parents:
diff changeset
29 with ALI.Util; use ALI.Util;
kono
parents:
diff changeset
30 with Binderr; use Binderr;
kono
parents:
diff changeset
31 with Butil; use Butil;
kono
parents:
diff changeset
32 with Csets;
kono
parents:
diff changeset
33 with Fname; use Fname;
kono
parents:
diff changeset
34 with Gnatvsn; use Gnatvsn;
kono
parents:
diff changeset
35 with Make_Util; use Make_Util;
kono
parents:
diff changeset
36 with Namet; use Namet;
kono
parents:
diff changeset
37 with Opt; use Opt;
kono
parents:
diff changeset
38 with Osint; use Osint;
kono
parents:
diff changeset
39 with Osint.L; use Osint.L;
kono
parents:
diff changeset
40 with Output; use Output;
kono
parents:
diff changeset
41 with Rident; use Rident;
kono
parents:
diff changeset
42 with Sdefault;
kono
parents:
diff changeset
43 with Snames;
kono
parents:
diff changeset
44 with Stringt;
kono
parents:
diff changeset
45 with Switch; use Switch;
kono
parents:
diff changeset
46 with Types; use Types;
kono
parents:
diff changeset
47
kono
parents:
diff changeset
48 with GNAT.Case_Util; use GNAT.Case_Util;
kono
parents:
diff changeset
49 with GNAT.Command_Line; use GNAT.Command_Line;
kono
parents:
diff changeset
50 with GNAT.Directory_Operations; use GNAT.Directory_Operations;
kono
parents:
diff changeset
51 with GNAT.OS_Lib; use GNAT.OS_Lib;
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 procedure Gnatls is
kono
parents:
diff changeset
54 pragma Ident (Gnat_Static_Version_String);
kono
parents:
diff changeset
55
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
56 -- NOTE : The following string may be used by other tools, such as
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
57 -- GNAT Studio. So it can only be modified if these other uses are checked
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
58 -- and coordinated.
111
kono
parents:
diff changeset
59
kono
parents:
diff changeset
60 Project_Search_Path : constant String := "Project Search Path:";
kono
parents:
diff changeset
61 -- Label displayed in verbose mode before the directories in the project
kono
parents:
diff changeset
62 -- search path. Do not modify without checking NOTE above.
kono
parents:
diff changeset
63
kono
parents:
diff changeset
64 Prj_Path : String_Access;
kono
parents:
diff changeset
65
kono
parents:
diff changeset
66 Max_Column : constant := 80;
kono
parents:
diff changeset
67
kono
parents:
diff changeset
68 No_Obj : aliased String := "<no_obj>";
kono
parents:
diff changeset
69
kono
parents:
diff changeset
70 No_Runtime : Boolean := False;
kono
parents:
diff changeset
71 -- Set to True if there is no default runtime and --RTS= is not specified
kono
parents:
diff changeset
72
kono
parents:
diff changeset
73 type File_Status is (
kono
parents:
diff changeset
74 OK, -- matching timestamp
kono
parents:
diff changeset
75 Checksum_OK, -- only matching checksum
kono
parents:
diff changeset
76 Not_Found, -- file not found on source PATH
kono
parents:
diff changeset
77 Not_Same, -- neither checksum nor timestamp matching
kono
parents:
diff changeset
78 Not_First_On_PATH); -- matching file hidden by Not_Same file on path
kono
parents:
diff changeset
79
kono
parents:
diff changeset
80 type Dir_Data;
kono
parents:
diff changeset
81 type Dir_Ref is access Dir_Data;
kono
parents:
diff changeset
82
kono
parents:
diff changeset
83 type Dir_Data is record
kono
parents:
diff changeset
84 Value : String_Access;
kono
parents:
diff changeset
85 Next : Dir_Ref;
kono
parents:
diff changeset
86 end record;
kono
parents:
diff changeset
87 -- Simply linked list of dirs
kono
parents:
diff changeset
88
kono
parents:
diff changeset
89 First_Source_Dir : Dir_Ref;
kono
parents:
diff changeset
90 Last_Source_Dir : Dir_Ref;
kono
parents:
diff changeset
91 -- The list of source directories from the command line.
kono
parents:
diff changeset
92 -- These directories are added using Osint.Add_Src_Search_Dir
kono
parents:
diff changeset
93 -- after those of the GNAT Project File, if any.
kono
parents:
diff changeset
94
kono
parents:
diff changeset
95 First_Lib_Dir : Dir_Ref;
kono
parents:
diff changeset
96 Last_Lib_Dir : Dir_Ref;
kono
parents:
diff changeset
97 -- The list of object directories from the command line.
kono
parents:
diff changeset
98 -- These directories are added using Osint.Add_Lib_Search_Dir
kono
parents:
diff changeset
99 -- after those of the GNAT Project File, if any.
kono
parents:
diff changeset
100
kono
parents:
diff changeset
101 Main_File : File_Name_Type;
kono
parents:
diff changeset
102 Ali_File : File_Name_Type;
kono
parents:
diff changeset
103 Text : Text_Buffer_Ptr;
kono
parents:
diff changeset
104 Next_Arg : Positive;
kono
parents:
diff changeset
105
kono
parents:
diff changeset
106 Too_Long : Boolean := False;
kono
parents:
diff changeset
107 -- When True, lines are too long for multi-column output and each
kono
parents:
diff changeset
108 -- item of information is on a different line.
kono
parents:
diff changeset
109
kono
parents:
diff changeset
110 Selective_Output : Boolean := False;
kono
parents:
diff changeset
111 Print_Usage : Boolean := False;
kono
parents:
diff changeset
112 Print_Unit : Boolean := True;
kono
parents:
diff changeset
113 Print_Source : Boolean := True;
kono
parents:
diff changeset
114 Print_Object : Boolean := True;
kono
parents:
diff changeset
115 -- Flags controlling the form of the output
kono
parents:
diff changeset
116
kono
parents:
diff changeset
117 Also_Predef : Boolean := False; -- -a
kono
parents:
diff changeset
118 Dependable : Boolean := False; -- -d
kono
parents:
diff changeset
119 License : Boolean := False; -- -l
kono
parents:
diff changeset
120 Very_Verbose_Mode : Boolean := False; -- -V
kono
parents:
diff changeset
121 -- Command line flags
kono
parents:
diff changeset
122
kono
parents:
diff changeset
123 Unit_Start : Integer;
kono
parents:
diff changeset
124 Unit_End : Integer;
kono
parents:
diff changeset
125 Source_Start : Integer;
kono
parents:
diff changeset
126 Source_End : Integer;
kono
parents:
diff changeset
127 Object_Start : Integer;
kono
parents:
diff changeset
128 Object_End : Integer;
kono
parents:
diff changeset
129 -- Various column starts and ends
kono
parents:
diff changeset
130
kono
parents:
diff changeset
131 Spaces : constant String (1 .. Max_Column) := (others => ' ');
kono
parents:
diff changeset
132
kono
parents:
diff changeset
133 RTS_Specified : String_Access := null;
kono
parents:
diff changeset
134 -- Used to detect multiple use of --RTS= switch
kono
parents:
diff changeset
135
kono
parents:
diff changeset
136 Exit_Status : Exit_Code_Type := E_Success;
kono
parents:
diff changeset
137 -- Reset to E_Fatal if bad error found
kono
parents:
diff changeset
138
kono
parents:
diff changeset
139 -----------------------
kono
parents:
diff changeset
140 -- Local Subprograms --
kono
parents:
diff changeset
141 -----------------------
kono
parents:
diff changeset
142
kono
parents:
diff changeset
143 procedure Add_Lib_Dir (Dir : String);
kono
parents:
diff changeset
144 -- Add an object directory in the list First_Lib_Dir-Last_Lib_Dir
kono
parents:
diff changeset
145
kono
parents:
diff changeset
146 procedure Add_Source_Dir (Dir : String);
kono
parents:
diff changeset
147 -- Add a source directory in the list First_Source_Dir-Last_Source_Dir
kono
parents:
diff changeset
148
kono
parents:
diff changeset
149 procedure Find_General_Layout;
kono
parents:
diff changeset
150 -- Determine the structure of the output (multi columns or not, etc)
kono
parents:
diff changeset
151
kono
parents:
diff changeset
152 procedure Find_Status
kono
parents:
diff changeset
153 (FS : in out File_Name_Type;
kono
parents:
diff changeset
154 Stamp : Time_Stamp_Type;
kono
parents:
diff changeset
155 Checksum : Word;
kono
parents:
diff changeset
156 Status : out File_Status);
kono
parents:
diff changeset
157 -- Determine the file status (Status) of the file represented by FS with
kono
parents:
diff changeset
158 -- the expected Stamp and checksum given as argument. FS will be updated
kono
parents:
diff changeset
159 -- to the full file name if available.
kono
parents:
diff changeset
160
kono
parents:
diff changeset
161 function Corresponding_Sdep_Entry (A : ALI_Id; U : Unit_Id) return Sdep_Id;
kono
parents:
diff changeset
162 -- Give the Sdep entry corresponding to the unit U in ali record A
kono
parents:
diff changeset
163
kono
parents:
diff changeset
164 procedure Output_Object (O : File_Name_Type);
kono
parents:
diff changeset
165 -- Print out the name of the object when requested
kono
parents:
diff changeset
166
kono
parents:
diff changeset
167 procedure Output_Source (Sdep_I : Sdep_Id);
kono
parents:
diff changeset
168 -- Print out the name and status of the source corresponding to this
kono
parents:
diff changeset
169 -- sdep entry.
kono
parents:
diff changeset
170
kono
parents:
diff changeset
171 procedure Output_Status (FS : File_Status; Verbose : Boolean);
kono
parents:
diff changeset
172 -- Print out FS either in a coded form if verbose is false or in an
kono
parents:
diff changeset
173 -- expanded form otherwise.
kono
parents:
diff changeset
174
kono
parents:
diff changeset
175 procedure Output_Unit (ALI : ALI_Id; U_Id : Unit_Id);
kono
parents:
diff changeset
176 -- Print out information on the unit when requested
kono
parents:
diff changeset
177
kono
parents:
diff changeset
178 procedure Reset_Print;
kono
parents:
diff changeset
179 -- Reset Print flags properly when selective output is chosen
kono
parents:
diff changeset
180
kono
parents:
diff changeset
181 procedure Scan_Ls_Arg (Argv : String);
kono
parents:
diff changeset
182 -- Scan and process user specific arguments (Argv is a single argument)
kono
parents:
diff changeset
183
kono
parents:
diff changeset
184 procedure Search_RTS (Name : String);
kono
parents:
diff changeset
185 -- Find include and objects path for the RTS name.
kono
parents:
diff changeset
186
kono
parents:
diff changeset
187 procedure Usage;
kono
parents:
diff changeset
188 -- Print usage message
kono
parents:
diff changeset
189
kono
parents:
diff changeset
190 procedure Output_License_Information;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
191 pragma No_Return (Output_License_Information);
111
kono
parents:
diff changeset
192 -- Output license statement, and if not found, output reference to COPYING
kono
parents:
diff changeset
193
kono
parents:
diff changeset
194 function Image (Restriction : Restriction_Id) return String;
kono
parents:
diff changeset
195 -- Returns the capitalized image of Restriction
kono
parents:
diff changeset
196
kono
parents:
diff changeset
197 function Normalize (Path : String) return String;
kono
parents:
diff changeset
198 -- Returns a normalized path name. On Windows, the directory separators are
kono
parents:
diff changeset
199 -- set to '\' in Normalize_Pathname.
kono
parents:
diff changeset
200
kono
parents:
diff changeset
201 ------------------------------------------
kono
parents:
diff changeset
202 -- GNATDIST specific output subprograms --
kono
parents:
diff changeset
203 ------------------------------------------
kono
parents:
diff changeset
204
kono
parents:
diff changeset
205 package GNATDIST is
kono
parents:
diff changeset
206
kono
parents:
diff changeset
207 -- Any modification to this subunit requires synchronization with the
kono
parents:
diff changeset
208 -- GNATDIST sources.
kono
parents:
diff changeset
209
kono
parents:
diff changeset
210 procedure Output_ALI (A : ALI_Id);
kono
parents:
diff changeset
211 -- Comment required saying what this routine does ???
kono
parents:
diff changeset
212
kono
parents:
diff changeset
213 procedure Output_No_ALI (Afile : File_Name_Type);
kono
parents:
diff changeset
214 -- Comments required saying what this routine does ???
kono
parents:
diff changeset
215
kono
parents:
diff changeset
216 end GNATDIST;
kono
parents:
diff changeset
217
kono
parents:
diff changeset
218 ------------------------------
kono
parents:
diff changeset
219 -- Support for project path --
kono
parents:
diff changeset
220 ------------------------------
kono
parents:
diff changeset
221
kono
parents:
diff changeset
222 package Prj_Env is
kono
parents:
diff changeset
223
kono
parents:
diff changeset
224 procedure Initialize_Default_Project_Path
kono
parents:
diff changeset
225 (Self : in out String_Access;
kono
parents:
diff changeset
226 Target_Name : String;
kono
parents:
diff changeset
227 Runtime_Name : String := "");
kono
parents:
diff changeset
228 -- Initialize Self. It will then contain the default project path on
kono
parents:
diff changeset
229 -- the given target and runtime (including directories specified by the
kono
parents:
diff changeset
230 -- environment variables GPR_PROJECT_PATH_FILE, GPR_PROJECT_PATH and
kono
parents:
diff changeset
231 -- ADA_PROJECT_PATH). If one of the directory or Target_Name is "-",
kono
parents:
diff changeset
232 -- then the path contains only those directories specified by the
kono
parents:
diff changeset
233 -- environment variables (except "-"). This does nothing if Self has
kono
parents:
diff changeset
234 -- already been initialized.
kono
parents:
diff changeset
235
kono
parents:
diff changeset
236 procedure Add_Directories
kono
parents:
diff changeset
237 (Self : in out String_Access;
kono
parents:
diff changeset
238 Path : String;
kono
parents:
diff changeset
239 Prepend : Boolean := False);
kono
parents:
diff changeset
240 -- Add one or more directories to the path. Directories added with this
kono
parents:
diff changeset
241 -- procedure are added in order after the current directory and before
kono
parents:
diff changeset
242 -- the path given by the environment variable GPR_PROJECT_PATH. A value
kono
parents:
diff changeset
243 -- of "-" will remove the default project directory from the project
kono
parents:
diff changeset
244 -- path.
kono
parents:
diff changeset
245 --
kono
parents:
diff changeset
246 -- Calls to this subprogram must be performed before the first call to
kono
parents:
diff changeset
247 -- Find_Project below, or PATH will be added at the end of the search
kono
parents:
diff changeset
248 -- path.
kono
parents:
diff changeset
249
kono
parents:
diff changeset
250 function Get_Runtime_Path
kono
parents:
diff changeset
251 (Self : String_Access;
kono
parents:
diff changeset
252 Path : String) return String_Access;
kono
parents:
diff changeset
253 -- Compute the full path for the project-based runtime name.
kono
parents:
diff changeset
254 -- Path is simply searched on the project path.
kono
parents:
diff changeset
255
kono
parents:
diff changeset
256 end Prj_Env;
kono
parents:
diff changeset
257
kono
parents:
diff changeset
258 -----------------
kono
parents:
diff changeset
259 -- Add_Lib_Dir --
kono
parents:
diff changeset
260 -----------------
kono
parents:
diff changeset
261
kono
parents:
diff changeset
262 procedure Add_Lib_Dir (Dir : String) is
kono
parents:
diff changeset
263 begin
kono
parents:
diff changeset
264 if First_Lib_Dir = null then
kono
parents:
diff changeset
265 First_Lib_Dir :=
kono
parents:
diff changeset
266 new Dir_Data'
kono
parents:
diff changeset
267 (Value => new String'(Dir),
kono
parents:
diff changeset
268 Next => null);
kono
parents:
diff changeset
269 Last_Lib_Dir := First_Lib_Dir;
kono
parents:
diff changeset
270
kono
parents:
diff changeset
271 else
kono
parents:
diff changeset
272 Last_Lib_Dir.Next :=
kono
parents:
diff changeset
273 new Dir_Data'
kono
parents:
diff changeset
274 (Value => new String'(Dir),
kono
parents:
diff changeset
275 Next => null);
kono
parents:
diff changeset
276 Last_Lib_Dir := Last_Lib_Dir.Next;
kono
parents:
diff changeset
277 end if;
kono
parents:
diff changeset
278 end Add_Lib_Dir;
kono
parents:
diff changeset
279
kono
parents:
diff changeset
280 --------------------
kono
parents:
diff changeset
281 -- Add_Source_Dir --
kono
parents:
diff changeset
282 --------------------
kono
parents:
diff changeset
283
kono
parents:
diff changeset
284 procedure Add_Source_Dir (Dir : String) is
kono
parents:
diff changeset
285 begin
kono
parents:
diff changeset
286 if First_Source_Dir = null then
kono
parents:
diff changeset
287 First_Source_Dir :=
kono
parents:
diff changeset
288 new Dir_Data'
kono
parents:
diff changeset
289 (Value => new String'(Dir),
kono
parents:
diff changeset
290 Next => null);
kono
parents:
diff changeset
291 Last_Source_Dir := First_Source_Dir;
kono
parents:
diff changeset
292
kono
parents:
diff changeset
293 else
kono
parents:
diff changeset
294 Last_Source_Dir.Next :=
kono
parents:
diff changeset
295 new Dir_Data'
kono
parents:
diff changeset
296 (Value => new String'(Dir),
kono
parents:
diff changeset
297 Next => null);
kono
parents:
diff changeset
298 Last_Source_Dir := Last_Source_Dir.Next;
kono
parents:
diff changeset
299 end if;
kono
parents:
diff changeset
300 end Add_Source_Dir;
kono
parents:
diff changeset
301
kono
parents:
diff changeset
302 ------------------------------
kono
parents:
diff changeset
303 -- Corresponding_Sdep_Entry --
kono
parents:
diff changeset
304 ------------------------------
kono
parents:
diff changeset
305
kono
parents:
diff changeset
306 function Corresponding_Sdep_Entry
kono
parents:
diff changeset
307 (A : ALI_Id;
kono
parents:
diff changeset
308 U : Unit_Id) return Sdep_Id
kono
parents:
diff changeset
309 is
kono
parents:
diff changeset
310 begin
kono
parents:
diff changeset
311 for D in ALIs.Table (A).First_Sdep .. ALIs.Table (A).Last_Sdep loop
kono
parents:
diff changeset
312 if Sdep.Table (D).Sfile = Units.Table (U).Sfile then
kono
parents:
diff changeset
313 return D;
kono
parents:
diff changeset
314 end if;
kono
parents:
diff changeset
315 end loop;
kono
parents:
diff changeset
316
kono
parents:
diff changeset
317 Error_Msg_Unit_1 := Units.Table (U).Uname;
kono
parents:
diff changeset
318 Error_Msg_File_1 := ALIs.Table (A).Afile;
kono
parents:
diff changeset
319 Write_Eol;
kono
parents:
diff changeset
320 Error_Msg ("wrong ALI format, can't find dependency line for $ in {");
kono
parents:
diff changeset
321 Exit_Program (E_Fatal);
kono
parents:
diff changeset
322 return No_Sdep_Id;
kono
parents:
diff changeset
323 end Corresponding_Sdep_Entry;
kono
parents:
diff changeset
324
kono
parents:
diff changeset
325 -------------------------
kono
parents:
diff changeset
326 -- Find_General_Layout --
kono
parents:
diff changeset
327 -------------------------
kono
parents:
diff changeset
328
kono
parents:
diff changeset
329 procedure Find_General_Layout is
kono
parents:
diff changeset
330 Max_Unit_Length : Integer := 11;
kono
parents:
diff changeset
331 Max_Src_Length : Integer := 11;
kono
parents:
diff changeset
332 Max_Obj_Length : Integer := 11;
kono
parents:
diff changeset
333
kono
parents:
diff changeset
334 Len : Integer;
kono
parents:
diff changeset
335 FS : File_Name_Type;
kono
parents:
diff changeset
336
kono
parents:
diff changeset
337 begin
kono
parents:
diff changeset
338 -- Compute maximum of each column
kono
parents:
diff changeset
339
kono
parents:
diff changeset
340 for Id in ALIs.First .. ALIs.Last loop
kono
parents:
diff changeset
341 Get_Name_String (Units.Table (ALIs.Table (Id).First_Unit).Uname);
kono
parents:
diff changeset
342 if Also_Predef or else not Is_Internal_Unit then
kono
parents:
diff changeset
343
kono
parents:
diff changeset
344 if Print_Unit then
kono
parents:
diff changeset
345 Len := Name_Len - 1;
kono
parents:
diff changeset
346 Max_Unit_Length := Integer'Max (Max_Unit_Length, Len);
kono
parents:
diff changeset
347 end if;
kono
parents:
diff changeset
348
kono
parents:
diff changeset
349 if Print_Source then
kono
parents:
diff changeset
350 FS := Full_Source_Name (ALIs.Table (Id).Sfile);
kono
parents:
diff changeset
351
kono
parents:
diff changeset
352 if FS = No_File then
kono
parents:
diff changeset
353 Get_Name_String (ALIs.Table (Id).Sfile);
kono
parents:
diff changeset
354 Name_Len := Name_Len + 13;
kono
parents:
diff changeset
355 else
kono
parents:
diff changeset
356 Get_Name_String (FS);
kono
parents:
diff changeset
357 end if;
kono
parents:
diff changeset
358
kono
parents:
diff changeset
359 Max_Src_Length := Integer'Max (Max_Src_Length, Name_Len + 1);
kono
parents:
diff changeset
360 end if;
kono
parents:
diff changeset
361
kono
parents:
diff changeset
362 if Print_Object then
kono
parents:
diff changeset
363 if ALIs.Table (Id).No_Object then
kono
parents:
diff changeset
364 Max_Obj_Length :=
kono
parents:
diff changeset
365 Integer'Max (Max_Obj_Length, No_Obj'Length);
kono
parents:
diff changeset
366 else
kono
parents:
diff changeset
367 Get_Name_String (ALIs.Table (Id).Ofile_Full_Name);
kono
parents:
diff changeset
368 Max_Obj_Length := Integer'Max (Max_Obj_Length, Name_Len + 1);
kono
parents:
diff changeset
369 end if;
kono
parents:
diff changeset
370 end if;
kono
parents:
diff changeset
371 end if;
kono
parents:
diff changeset
372 end loop;
kono
parents:
diff changeset
373
kono
parents:
diff changeset
374 -- Verify is output is not wider than maximum number of columns
kono
parents:
diff changeset
375
kono
parents:
diff changeset
376 Too_Long :=
kono
parents:
diff changeset
377 Verbose_Mode
kono
parents:
diff changeset
378 or else
kono
parents:
diff changeset
379 (Max_Unit_Length + Max_Src_Length + Max_Obj_Length) > Max_Column;
kono
parents:
diff changeset
380
kono
parents:
diff changeset
381 -- Set start and end of columns
kono
parents:
diff changeset
382
kono
parents:
diff changeset
383 Object_Start := 1;
kono
parents:
diff changeset
384 Object_End := Object_Start - 1;
kono
parents:
diff changeset
385
kono
parents:
diff changeset
386 if Print_Object then
kono
parents:
diff changeset
387 Object_End := Object_Start + Max_Obj_Length;
kono
parents:
diff changeset
388 end if;
kono
parents:
diff changeset
389
kono
parents:
diff changeset
390 Unit_Start := Object_End + 1;
kono
parents:
diff changeset
391 Unit_End := Unit_Start - 1;
kono
parents:
diff changeset
392
kono
parents:
diff changeset
393 if Print_Unit then
kono
parents:
diff changeset
394 Unit_End := Unit_Start + Max_Unit_Length;
kono
parents:
diff changeset
395 end if;
kono
parents:
diff changeset
396
kono
parents:
diff changeset
397 Source_Start := Unit_End + 1;
kono
parents:
diff changeset
398
kono
parents:
diff changeset
399 if Source_Start > Spaces'Last then
kono
parents:
diff changeset
400 Source_Start := Spaces'Last;
kono
parents:
diff changeset
401 end if;
kono
parents:
diff changeset
402
kono
parents:
diff changeset
403 Source_End := Source_Start - 1;
kono
parents:
diff changeset
404
kono
parents:
diff changeset
405 if Print_Source then
kono
parents:
diff changeset
406 Source_End := Source_Start + Max_Src_Length;
kono
parents:
diff changeset
407 end if;
kono
parents:
diff changeset
408 end Find_General_Layout;
kono
parents:
diff changeset
409
kono
parents:
diff changeset
410 -----------------
kono
parents:
diff changeset
411 -- Find_Status --
kono
parents:
diff changeset
412 -----------------
kono
parents:
diff changeset
413
kono
parents:
diff changeset
414 procedure Find_Status
kono
parents:
diff changeset
415 (FS : in out File_Name_Type;
kono
parents:
diff changeset
416 Stamp : Time_Stamp_Type;
kono
parents:
diff changeset
417 Checksum : Word;
kono
parents:
diff changeset
418 Status : out File_Status)
kono
parents:
diff changeset
419 is
kono
parents:
diff changeset
420 Tmp1 : File_Name_Type;
kono
parents:
diff changeset
421 Tmp2 : File_Name_Type;
kono
parents:
diff changeset
422
kono
parents:
diff changeset
423 begin
kono
parents:
diff changeset
424 Tmp1 := Full_Source_Name (FS);
kono
parents:
diff changeset
425
kono
parents:
diff changeset
426 if Tmp1 = No_File then
kono
parents:
diff changeset
427 Status := Not_Found;
kono
parents:
diff changeset
428
kono
parents:
diff changeset
429 elsif File_Stamp (Tmp1) = Stamp then
kono
parents:
diff changeset
430 FS := Tmp1;
kono
parents:
diff changeset
431 Status := OK;
kono
parents:
diff changeset
432
kono
parents:
diff changeset
433 elsif Checksums_Match (Get_File_Checksum (FS), Checksum) then
kono
parents:
diff changeset
434 FS := Tmp1;
kono
parents:
diff changeset
435 Status := Checksum_OK;
kono
parents:
diff changeset
436
kono
parents:
diff changeset
437 else
kono
parents:
diff changeset
438 Tmp2 := Matching_Full_Source_Name (FS, Stamp);
kono
parents:
diff changeset
439
kono
parents:
diff changeset
440 if Tmp2 = No_File then
kono
parents:
diff changeset
441 Status := Not_Same;
kono
parents:
diff changeset
442 FS := Tmp1;
kono
parents:
diff changeset
443
kono
parents:
diff changeset
444 else
kono
parents:
diff changeset
445 Status := Not_First_On_PATH;
kono
parents:
diff changeset
446 FS := Tmp2;
kono
parents:
diff changeset
447 end if;
kono
parents:
diff changeset
448 end if;
kono
parents:
diff changeset
449 end Find_Status;
kono
parents:
diff changeset
450
kono
parents:
diff changeset
451 --------------
kono
parents:
diff changeset
452 -- GNATDIST --
kono
parents:
diff changeset
453 --------------
kono
parents:
diff changeset
454
kono
parents:
diff changeset
455 package body GNATDIST is
kono
parents:
diff changeset
456
kono
parents:
diff changeset
457 N_Flags : Natural;
kono
parents:
diff changeset
458 N_Indents : Natural := 0;
kono
parents:
diff changeset
459
kono
parents:
diff changeset
460 type Token_Type is
kono
parents:
diff changeset
461 (T_No_ALI,
kono
parents:
diff changeset
462 T_ALI,
kono
parents:
diff changeset
463 T_Unit,
kono
parents:
diff changeset
464 T_With,
kono
parents:
diff changeset
465 T_Source,
kono
parents:
diff changeset
466 T_Afile,
kono
parents:
diff changeset
467 T_Ofile,
kono
parents:
diff changeset
468 T_Sfile,
kono
parents:
diff changeset
469 T_Name,
kono
parents:
diff changeset
470 T_Main,
kono
parents:
diff changeset
471 T_Kind,
kono
parents:
diff changeset
472 T_Flags,
kono
parents:
diff changeset
473 T_Preelaborated,
kono
parents:
diff changeset
474 T_Pure,
kono
parents:
diff changeset
475 T_Has_RACW,
kono
parents:
diff changeset
476 T_Remote_Types,
kono
parents:
diff changeset
477 T_Shared_Passive,
kono
parents:
diff changeset
478 T_RCI,
kono
parents:
diff changeset
479 T_Predefined,
kono
parents:
diff changeset
480 T_Internal,
kono
parents:
diff changeset
481 T_Is_Generic,
kono
parents:
diff changeset
482 T_Procedure,
kono
parents:
diff changeset
483 T_Function,
kono
parents:
diff changeset
484 T_Package,
kono
parents:
diff changeset
485 T_Subprogram,
kono
parents:
diff changeset
486 T_Spec,
kono
parents:
diff changeset
487 T_Body);
kono
parents:
diff changeset
488
kono
parents:
diff changeset
489 Image : constant array (Token_Type) of String_Access :=
kono
parents:
diff changeset
490 (T_No_ALI => new String'("No_ALI"),
kono
parents:
diff changeset
491 T_ALI => new String'("ALI"),
kono
parents:
diff changeset
492 T_Unit => new String'("Unit"),
kono
parents:
diff changeset
493 T_With => new String'("With"),
kono
parents:
diff changeset
494 T_Source => new String'("Source"),
kono
parents:
diff changeset
495 T_Afile => new String'("Afile"),
kono
parents:
diff changeset
496 T_Ofile => new String'("Ofile"),
kono
parents:
diff changeset
497 T_Sfile => new String'("Sfile"),
kono
parents:
diff changeset
498 T_Name => new String'("Name"),
kono
parents:
diff changeset
499 T_Main => new String'("Main"),
kono
parents:
diff changeset
500 T_Kind => new String'("Kind"),
kono
parents:
diff changeset
501 T_Flags => new String'("Flags"),
kono
parents:
diff changeset
502 T_Preelaborated => new String'("Preelaborated"),
kono
parents:
diff changeset
503 T_Pure => new String'("Pure"),
kono
parents:
diff changeset
504 T_Has_RACW => new String'("Has_RACW"),
kono
parents:
diff changeset
505 T_Remote_Types => new String'("Remote_Types"),
kono
parents:
diff changeset
506 T_Shared_Passive => new String'("Shared_Passive"),
kono
parents:
diff changeset
507 T_RCI => new String'("RCI"),
kono
parents:
diff changeset
508 T_Predefined => new String'("Predefined"),
kono
parents:
diff changeset
509 T_Internal => new String'("Internal"),
kono
parents:
diff changeset
510 T_Is_Generic => new String'("Is_Generic"),
kono
parents:
diff changeset
511 T_Procedure => new String'("procedure"),
kono
parents:
diff changeset
512 T_Function => new String'("function"),
kono
parents:
diff changeset
513 T_Package => new String'("package"),
kono
parents:
diff changeset
514 T_Subprogram => new String'("subprogram"),
kono
parents:
diff changeset
515 T_Spec => new String'("spec"),
kono
parents:
diff changeset
516 T_Body => new String'("body"));
kono
parents:
diff changeset
517
kono
parents:
diff changeset
518 procedure Output_Name (N : Name_Id);
kono
parents:
diff changeset
519 -- Remove any encoding info (%b and %s) and output N
kono
parents:
diff changeset
520
kono
parents:
diff changeset
521 procedure Output_Afile (A : File_Name_Type);
kono
parents:
diff changeset
522 procedure Output_Ofile (O : File_Name_Type);
kono
parents:
diff changeset
523 procedure Output_Sfile (S : File_Name_Type);
kono
parents:
diff changeset
524 -- Output various names. Check that the name is different from no name.
kono
parents:
diff changeset
525 -- Otherwise, skip the output.
kono
parents:
diff changeset
526
kono
parents:
diff changeset
527 procedure Output_Token (T : Token_Type);
kono
parents:
diff changeset
528 -- Output token using specific format. That is several indentations and:
kono
parents:
diff changeset
529 --
kono
parents:
diff changeset
530 -- T_No_ALI .. T_With : <token> & " =>" & NL
kono
parents:
diff changeset
531 -- T_Source .. T_Kind : <token> & " => "
kono
parents:
diff changeset
532 -- T_Flags : <token> & " =>"
kono
parents:
diff changeset
533 -- T_Preelab .. T_Body : " " & <token>
kono
parents:
diff changeset
534
kono
parents:
diff changeset
535 procedure Output_Sdep (S : Sdep_Id);
kono
parents:
diff changeset
536 procedure Output_Unit (U : Unit_Id);
kono
parents:
diff changeset
537 procedure Output_With (W : With_Id);
kono
parents:
diff changeset
538 -- Output this entry as a global section (like ALIs)
kono
parents:
diff changeset
539
kono
parents:
diff changeset
540 ------------------
kono
parents:
diff changeset
541 -- Output_Afile --
kono
parents:
diff changeset
542 ------------------
kono
parents:
diff changeset
543
kono
parents:
diff changeset
544 procedure Output_Afile (A : File_Name_Type) is
kono
parents:
diff changeset
545 begin
kono
parents:
diff changeset
546 if A /= No_File then
kono
parents:
diff changeset
547 Output_Token (T_Afile);
kono
parents:
diff changeset
548 Write_Name (A);
kono
parents:
diff changeset
549 Write_Eol;
kono
parents:
diff changeset
550 end if;
kono
parents:
diff changeset
551 end Output_Afile;
kono
parents:
diff changeset
552
kono
parents:
diff changeset
553 ----------------
kono
parents:
diff changeset
554 -- Output_ALI --
kono
parents:
diff changeset
555 ----------------
kono
parents:
diff changeset
556
kono
parents:
diff changeset
557 procedure Output_ALI (A : ALI_Id) is
kono
parents:
diff changeset
558 begin
kono
parents:
diff changeset
559 Output_Token (T_ALI);
kono
parents:
diff changeset
560 N_Indents := N_Indents + 1;
kono
parents:
diff changeset
561
kono
parents:
diff changeset
562 Output_Afile (ALIs.Table (A).Afile);
kono
parents:
diff changeset
563 Output_Ofile (ALIs.Table (A).Ofile_Full_Name);
kono
parents:
diff changeset
564 Output_Sfile (ALIs.Table (A).Sfile);
kono
parents:
diff changeset
565
kono
parents:
diff changeset
566 -- Output Main
kono
parents:
diff changeset
567
kono
parents:
diff changeset
568 if ALIs.Table (A).Main_Program /= None then
kono
parents:
diff changeset
569 Output_Token (T_Main);
kono
parents:
diff changeset
570
kono
parents:
diff changeset
571 if ALIs.Table (A).Main_Program = Proc then
kono
parents:
diff changeset
572 Output_Token (T_Procedure);
kono
parents:
diff changeset
573 else
kono
parents:
diff changeset
574 Output_Token (T_Function);
kono
parents:
diff changeset
575 end if;
kono
parents:
diff changeset
576
kono
parents:
diff changeset
577 Write_Eol;
kono
parents:
diff changeset
578 end if;
kono
parents:
diff changeset
579
kono
parents:
diff changeset
580 -- Output Units
kono
parents:
diff changeset
581
kono
parents:
diff changeset
582 for U in ALIs.Table (A).First_Unit .. ALIs.Table (A).Last_Unit loop
kono
parents:
diff changeset
583 Output_Unit (U);
kono
parents:
diff changeset
584 end loop;
kono
parents:
diff changeset
585
kono
parents:
diff changeset
586 -- Output Sdeps
kono
parents:
diff changeset
587
kono
parents:
diff changeset
588 for S in ALIs.Table (A).First_Sdep .. ALIs.Table (A).Last_Sdep loop
kono
parents:
diff changeset
589 Output_Sdep (S);
kono
parents:
diff changeset
590 end loop;
kono
parents:
diff changeset
591
kono
parents:
diff changeset
592 N_Indents := N_Indents - 1;
kono
parents:
diff changeset
593 end Output_ALI;
kono
parents:
diff changeset
594
kono
parents:
diff changeset
595 -------------------
kono
parents:
diff changeset
596 -- Output_No_ALI --
kono
parents:
diff changeset
597 -------------------
kono
parents:
diff changeset
598
kono
parents:
diff changeset
599 procedure Output_No_ALI (Afile : File_Name_Type) is
kono
parents:
diff changeset
600 begin
kono
parents:
diff changeset
601 Output_Token (T_No_ALI);
kono
parents:
diff changeset
602 N_Indents := N_Indents + 1;
kono
parents:
diff changeset
603 Output_Afile (Afile);
kono
parents:
diff changeset
604 N_Indents := N_Indents - 1;
kono
parents:
diff changeset
605 end Output_No_ALI;
kono
parents:
diff changeset
606
kono
parents:
diff changeset
607 -----------------
kono
parents:
diff changeset
608 -- Output_Name --
kono
parents:
diff changeset
609 -----------------
kono
parents:
diff changeset
610
kono
parents:
diff changeset
611 procedure Output_Name (N : Name_Id) is
kono
parents:
diff changeset
612 begin
kono
parents:
diff changeset
613 -- Remove any encoding info (%s or %b)
kono
parents:
diff changeset
614
kono
parents:
diff changeset
615 Get_Name_String (N);
kono
parents:
diff changeset
616
kono
parents:
diff changeset
617 if Name_Len > 2
kono
parents:
diff changeset
618 and then Name_Buffer (Name_Len - 1) = '%'
kono
parents:
diff changeset
619 then
kono
parents:
diff changeset
620 Name_Len := Name_Len - 2;
kono
parents:
diff changeset
621 end if;
kono
parents:
diff changeset
622
kono
parents:
diff changeset
623 Output_Token (T_Name);
kono
parents:
diff changeset
624 Write_Str (Name_Buffer (1 .. Name_Len));
kono
parents:
diff changeset
625 Write_Eol;
kono
parents:
diff changeset
626 end Output_Name;
kono
parents:
diff changeset
627
kono
parents:
diff changeset
628 ------------------
kono
parents:
diff changeset
629 -- Output_Ofile --
kono
parents:
diff changeset
630 ------------------
kono
parents:
diff changeset
631
kono
parents:
diff changeset
632 procedure Output_Ofile (O : File_Name_Type) is
kono
parents:
diff changeset
633 begin
kono
parents:
diff changeset
634 if O /= No_File then
kono
parents:
diff changeset
635 Output_Token (T_Ofile);
kono
parents:
diff changeset
636 Write_Name (O);
kono
parents:
diff changeset
637 Write_Eol;
kono
parents:
diff changeset
638 end if;
kono
parents:
diff changeset
639 end Output_Ofile;
kono
parents:
diff changeset
640
kono
parents:
diff changeset
641 -----------------
kono
parents:
diff changeset
642 -- Output_Sdep --
kono
parents:
diff changeset
643 -----------------
kono
parents:
diff changeset
644
kono
parents:
diff changeset
645 procedure Output_Sdep (S : Sdep_Id) is
kono
parents:
diff changeset
646 begin
kono
parents:
diff changeset
647 Output_Token (T_Source);
kono
parents:
diff changeset
648 Write_Name (Sdep.Table (S).Sfile);
kono
parents:
diff changeset
649 Write_Eol;
kono
parents:
diff changeset
650 end Output_Sdep;
kono
parents:
diff changeset
651
kono
parents:
diff changeset
652 ------------------
kono
parents:
diff changeset
653 -- Output_Sfile --
kono
parents:
diff changeset
654 ------------------
kono
parents:
diff changeset
655
kono
parents:
diff changeset
656 procedure Output_Sfile (S : File_Name_Type) is
kono
parents:
diff changeset
657 FS : File_Name_Type := S;
kono
parents:
diff changeset
658
kono
parents:
diff changeset
659 begin
kono
parents:
diff changeset
660 if FS /= No_File then
kono
parents:
diff changeset
661
kono
parents:
diff changeset
662 -- We want to output the full source name
kono
parents:
diff changeset
663
kono
parents:
diff changeset
664 FS := Full_Source_Name (FS);
kono
parents:
diff changeset
665
kono
parents:
diff changeset
666 -- There is no full source name. This occurs for instance when a
kono
parents:
diff changeset
667 -- withed unit has a spec file but no body file. This situation is
kono
parents:
diff changeset
668 -- not a problem for GNATDIST since the unit may be located on a
kono
parents:
diff changeset
669 -- partition we do not want to build. However, we need to locate
kono
parents:
diff changeset
670 -- the spec file and to find its full source name. Replace the
kono
parents:
diff changeset
671 -- body file name with the spec file name used to compile the
kono
parents:
diff changeset
672 -- current unit when possible.
kono
parents:
diff changeset
673
kono
parents:
diff changeset
674 if FS = No_File then
kono
parents:
diff changeset
675 Get_Name_String (S);
kono
parents:
diff changeset
676
kono
parents:
diff changeset
677 if Name_Len > 4
kono
parents:
diff changeset
678 and then Name_Buffer (Name_Len - 3 .. Name_Len) = ".adb"
kono
parents:
diff changeset
679 then
kono
parents:
diff changeset
680 Name_Buffer (Name_Len) := 's';
kono
parents:
diff changeset
681 FS := Full_Source_Name (Name_Find);
kono
parents:
diff changeset
682 end if;
kono
parents:
diff changeset
683 end if;
kono
parents:
diff changeset
684 end if;
kono
parents:
diff changeset
685
kono
parents:
diff changeset
686 if FS /= No_File then
kono
parents:
diff changeset
687 Output_Token (T_Sfile);
kono
parents:
diff changeset
688 Write_Name (FS);
kono
parents:
diff changeset
689 Write_Eol;
kono
parents:
diff changeset
690 end if;
kono
parents:
diff changeset
691 end Output_Sfile;
kono
parents:
diff changeset
692
kono
parents:
diff changeset
693 ------------------
kono
parents:
diff changeset
694 -- Output_Token --
kono
parents:
diff changeset
695 ------------------
kono
parents:
diff changeset
696
kono
parents:
diff changeset
697 procedure Output_Token (T : Token_Type) is
kono
parents:
diff changeset
698 begin
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
699 case T is
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
700 when T_No_ALI .. T_Flags =>
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
701 for J in 1 .. N_Indents loop
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
702 Write_Str (" ");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
703 end loop;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
704
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
705 Write_Str (Image (T).all);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
706
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
707 for J in Image (T)'Length .. 12 loop
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
708 Write_Char (' ');
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
709 end loop;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
710
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
711 Write_Str ("=>");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
712
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
713 if T in T_No_ALI .. T_With then
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
714 Write_Eol;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
715 elsif T in T_Source .. T_Name then
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
716 Write_Char (' ');
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
717 end if;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
718
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
719 when T_Preelaborated .. T_Body =>
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
720 if T in T_Preelaborated .. T_Is_Generic then
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
721 if N_Flags = 0 then
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
722 Output_Token (T_Flags);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
723 end if;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
724
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
725 N_Flags := N_Flags + 1;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
726 end if;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
727
111
kono
parents:
diff changeset
728 Write_Char (' ');
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
729 Write_Str (Image (T).all);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
730 end case;
111
kono
parents:
diff changeset
731 end Output_Token;
kono
parents:
diff changeset
732
kono
parents:
diff changeset
733 -----------------
kono
parents:
diff changeset
734 -- Output_Unit --
kono
parents:
diff changeset
735 -----------------
kono
parents:
diff changeset
736
kono
parents:
diff changeset
737 procedure Output_Unit (U : Unit_Id) is
kono
parents:
diff changeset
738 begin
kono
parents:
diff changeset
739 Output_Token (T_Unit);
kono
parents:
diff changeset
740 N_Indents := N_Indents + 1;
kono
parents:
diff changeset
741
kono
parents:
diff changeset
742 -- Output Name
kono
parents:
diff changeset
743
kono
parents:
diff changeset
744 Output_Name (Name_Id (Units.Table (U).Uname));
kono
parents:
diff changeset
745
kono
parents:
diff changeset
746 -- Output Kind
kono
parents:
diff changeset
747
kono
parents:
diff changeset
748 Output_Token (T_Kind);
kono
parents:
diff changeset
749
kono
parents:
diff changeset
750 if Units.Table (U).Unit_Kind = 'p' then
kono
parents:
diff changeset
751 Output_Token (T_Package);
kono
parents:
diff changeset
752 else
kono
parents:
diff changeset
753 Output_Token (T_Subprogram);
kono
parents:
diff changeset
754 end if;
kono
parents:
diff changeset
755
kono
parents:
diff changeset
756 if Name_Buffer (Name_Len) = 's' then
kono
parents:
diff changeset
757 Output_Token (T_Spec);
kono
parents:
diff changeset
758 else
kono
parents:
diff changeset
759 Output_Token (T_Body);
kono
parents:
diff changeset
760 end if;
kono
parents:
diff changeset
761
kono
parents:
diff changeset
762 Write_Eol;
kono
parents:
diff changeset
763
kono
parents:
diff changeset
764 -- Output source file name
kono
parents:
diff changeset
765
kono
parents:
diff changeset
766 Output_Sfile (Units.Table (U).Sfile);
kono
parents:
diff changeset
767
kono
parents:
diff changeset
768 -- Output Flags
kono
parents:
diff changeset
769
kono
parents:
diff changeset
770 N_Flags := 0;
kono
parents:
diff changeset
771
kono
parents:
diff changeset
772 if Units.Table (U).Preelab then
kono
parents:
diff changeset
773 Output_Token (T_Preelaborated);
kono
parents:
diff changeset
774 end if;
kono
parents:
diff changeset
775
kono
parents:
diff changeset
776 if Units.Table (U).Pure then
kono
parents:
diff changeset
777 Output_Token (T_Pure);
kono
parents:
diff changeset
778 end if;
kono
parents:
diff changeset
779
kono
parents:
diff changeset
780 if Units.Table (U).Has_RACW then
kono
parents:
diff changeset
781 Output_Token (T_Has_RACW);
kono
parents:
diff changeset
782 end if;
kono
parents:
diff changeset
783
kono
parents:
diff changeset
784 if Units.Table (U).Remote_Types then
kono
parents:
diff changeset
785 Output_Token (T_Remote_Types);
kono
parents:
diff changeset
786 end if;
kono
parents:
diff changeset
787
kono
parents:
diff changeset
788 if Units.Table (U).Shared_Passive then
kono
parents:
diff changeset
789 Output_Token (T_Shared_Passive);
kono
parents:
diff changeset
790 end if;
kono
parents:
diff changeset
791
kono
parents:
diff changeset
792 if Units.Table (U).RCI then
kono
parents:
diff changeset
793 Output_Token (T_RCI);
kono
parents:
diff changeset
794 end if;
kono
parents:
diff changeset
795
kono
parents:
diff changeset
796 if Units.Table (U).Predefined then
kono
parents:
diff changeset
797 Output_Token (T_Predefined);
kono
parents:
diff changeset
798 end if;
kono
parents:
diff changeset
799
kono
parents:
diff changeset
800 if Units.Table (U).Internal then
kono
parents:
diff changeset
801 Output_Token (T_Internal);
kono
parents:
diff changeset
802 end if;
kono
parents:
diff changeset
803
kono
parents:
diff changeset
804 if Units.Table (U).Is_Generic then
kono
parents:
diff changeset
805 Output_Token (T_Is_Generic);
kono
parents:
diff changeset
806 end if;
kono
parents:
diff changeset
807
kono
parents:
diff changeset
808 if N_Flags > 0 then
kono
parents:
diff changeset
809 Write_Eol;
kono
parents:
diff changeset
810 end if;
kono
parents:
diff changeset
811
kono
parents:
diff changeset
812 -- Output Withs
kono
parents:
diff changeset
813
kono
parents:
diff changeset
814 for W in Units.Table (U).First_With .. Units.Table (U).Last_With loop
kono
parents:
diff changeset
815 Output_With (W);
kono
parents:
diff changeset
816 end loop;
kono
parents:
diff changeset
817
kono
parents:
diff changeset
818 N_Indents := N_Indents - 1;
kono
parents:
diff changeset
819 end Output_Unit;
kono
parents:
diff changeset
820
kono
parents:
diff changeset
821 -----------------
kono
parents:
diff changeset
822 -- Output_With --
kono
parents:
diff changeset
823 -----------------
kono
parents:
diff changeset
824
kono
parents:
diff changeset
825 procedure Output_With (W : With_Id) is
kono
parents:
diff changeset
826 begin
kono
parents:
diff changeset
827 Output_Token (T_With);
kono
parents:
diff changeset
828 N_Indents := N_Indents + 1;
kono
parents:
diff changeset
829
kono
parents:
diff changeset
830 Output_Name (Name_Id (Withs.Table (W).Uname));
kono
parents:
diff changeset
831
kono
parents:
diff changeset
832 -- Output Kind
kono
parents:
diff changeset
833
kono
parents:
diff changeset
834 Output_Token (T_Kind);
kono
parents:
diff changeset
835
kono
parents:
diff changeset
836 if Name_Buffer (Name_Len) = 's' then
kono
parents:
diff changeset
837 Output_Token (T_Spec);
kono
parents:
diff changeset
838 else
kono
parents:
diff changeset
839 Output_Token (T_Body);
kono
parents:
diff changeset
840 end if;
kono
parents:
diff changeset
841
kono
parents:
diff changeset
842 Write_Eol;
kono
parents:
diff changeset
843
kono
parents:
diff changeset
844 Output_Afile (Withs.Table (W).Afile);
kono
parents:
diff changeset
845 Output_Sfile (Withs.Table (W).Sfile);
kono
parents:
diff changeset
846
kono
parents:
diff changeset
847 N_Indents := N_Indents - 1;
kono
parents:
diff changeset
848 end Output_With;
kono
parents:
diff changeset
849
kono
parents:
diff changeset
850 end GNATDIST;
kono
parents:
diff changeset
851
kono
parents:
diff changeset
852 -----------
kono
parents:
diff changeset
853 -- Image --
kono
parents:
diff changeset
854 -----------
kono
parents:
diff changeset
855
kono
parents:
diff changeset
856 function Image (Restriction : Restriction_Id) return String is
kono
parents:
diff changeset
857 Result : String := Restriction'Img;
kono
parents:
diff changeset
858 Skip : Boolean := True;
kono
parents:
diff changeset
859
kono
parents:
diff changeset
860 begin
kono
parents:
diff changeset
861 for J in Result'Range loop
kono
parents:
diff changeset
862 if Skip then
kono
parents:
diff changeset
863 Skip := False;
kono
parents:
diff changeset
864 Result (J) := To_Upper (Result (J));
kono
parents:
diff changeset
865
kono
parents:
diff changeset
866 elsif Result (J) = '_' then
kono
parents:
diff changeset
867 Skip := True;
kono
parents:
diff changeset
868
kono
parents:
diff changeset
869 else
kono
parents:
diff changeset
870 Result (J) := To_Lower (Result (J));
kono
parents:
diff changeset
871 end if;
kono
parents:
diff changeset
872 end loop;
kono
parents:
diff changeset
873
kono
parents:
diff changeset
874 return Result;
kono
parents:
diff changeset
875 end Image;
kono
parents:
diff changeset
876
kono
parents:
diff changeset
877 ---------------
kono
parents:
diff changeset
878 -- Normalize --
kono
parents:
diff changeset
879 ---------------
kono
parents:
diff changeset
880
kono
parents:
diff changeset
881 function Normalize (Path : String) return String is
kono
parents:
diff changeset
882 begin
kono
parents:
diff changeset
883 return Normalize_Pathname (Path);
kono
parents:
diff changeset
884 end Normalize;
kono
parents:
diff changeset
885
kono
parents:
diff changeset
886 --------------------------------
kono
parents:
diff changeset
887 -- Output_License_Information --
kono
parents:
diff changeset
888 --------------------------------
kono
parents:
diff changeset
889
kono
parents:
diff changeset
890 procedure Output_License_Information is
kono
parents:
diff changeset
891 begin
kono
parents:
diff changeset
892 case Build_Type is
kono
parents:
diff changeset
893 when others =>
kono
parents:
diff changeset
894 Write_Str ("Please refer to file COPYING in your distribution"
kono
parents:
diff changeset
895 & " for license terms.");
kono
parents:
diff changeset
896 Write_Eol;
kono
parents:
diff changeset
897 end case;
kono
parents:
diff changeset
898
kono
parents:
diff changeset
899 Exit_Program (E_Success);
kono
parents:
diff changeset
900 end Output_License_Information;
kono
parents:
diff changeset
901
kono
parents:
diff changeset
902 -------------------
kono
parents:
diff changeset
903 -- Output_Object --
kono
parents:
diff changeset
904 -------------------
kono
parents:
diff changeset
905
kono
parents:
diff changeset
906 procedure Output_Object (O : File_Name_Type) is
kono
parents:
diff changeset
907 Object_Name : String_Access;
kono
parents:
diff changeset
908
kono
parents:
diff changeset
909 begin
kono
parents:
diff changeset
910 if Print_Object then
kono
parents:
diff changeset
911 if O /= No_File then
kono
parents:
diff changeset
912 Get_Name_String (O);
kono
parents:
diff changeset
913 Object_Name := To_Host_File_Spec (Name_Buffer (1 .. Name_Len));
kono
parents:
diff changeset
914 else
kono
parents:
diff changeset
915 Object_Name := No_Obj'Unchecked_Access;
kono
parents:
diff changeset
916 end if;
kono
parents:
diff changeset
917
kono
parents:
diff changeset
918 Write_Str (Object_Name.all);
kono
parents:
diff changeset
919
kono
parents:
diff changeset
920 if Print_Source or else Print_Unit then
kono
parents:
diff changeset
921 if Too_Long then
kono
parents:
diff changeset
922 Write_Eol;
kono
parents:
diff changeset
923 Write_Str (" ");
kono
parents:
diff changeset
924 else
kono
parents:
diff changeset
925 Write_Str (Spaces
kono
parents:
diff changeset
926 (Object_Start + Object_Name'Length .. Object_End));
kono
parents:
diff changeset
927 end if;
kono
parents:
diff changeset
928 end if;
kono
parents:
diff changeset
929 end if;
kono
parents:
diff changeset
930 end Output_Object;
kono
parents:
diff changeset
931
kono
parents:
diff changeset
932 -------------------
kono
parents:
diff changeset
933 -- Output_Source --
kono
parents:
diff changeset
934 -------------------
kono
parents:
diff changeset
935
kono
parents:
diff changeset
936 procedure Output_Source (Sdep_I : Sdep_Id) is
kono
parents:
diff changeset
937 Stamp : Time_Stamp_Type;
kono
parents:
diff changeset
938 Checksum : Word;
kono
parents:
diff changeset
939 FS : File_Name_Type;
kono
parents:
diff changeset
940 Status : File_Status;
kono
parents:
diff changeset
941 Object_Name : String_Access;
kono
parents:
diff changeset
942
kono
parents:
diff changeset
943 begin
kono
parents:
diff changeset
944 if Sdep_I = No_Sdep_Id then
kono
parents:
diff changeset
945 return;
kono
parents:
diff changeset
946 end if;
kono
parents:
diff changeset
947
kono
parents:
diff changeset
948 Stamp := Sdep.Table (Sdep_I).Stamp;
kono
parents:
diff changeset
949 Checksum := Sdep.Table (Sdep_I).Checksum;
kono
parents:
diff changeset
950 FS := Sdep.Table (Sdep_I).Sfile;
kono
parents:
diff changeset
951
kono
parents:
diff changeset
952 if Print_Source then
kono
parents:
diff changeset
953 Find_Status (FS, Stamp, Checksum, Status);
kono
parents:
diff changeset
954 Get_Name_String (FS);
kono
parents:
diff changeset
955
kono
parents:
diff changeset
956 Object_Name := To_Host_File_Spec (Name_Buffer (1 .. Name_Len));
kono
parents:
diff changeset
957
kono
parents:
diff changeset
958 if Verbose_Mode then
kono
parents:
diff changeset
959 Write_Str (" Source => ");
kono
parents:
diff changeset
960 Write_Str (Object_Name.all);
kono
parents:
diff changeset
961
kono
parents:
diff changeset
962 if not Too_Long then
kono
parents:
diff changeset
963 Write_Str
kono
parents:
diff changeset
964 (Spaces (Source_Start + Object_Name'Length .. Source_End));
kono
parents:
diff changeset
965 end if;
kono
parents:
diff changeset
966
kono
parents:
diff changeset
967 Output_Status (Status, Verbose => True);
kono
parents:
diff changeset
968 Write_Eol;
kono
parents:
diff changeset
969 Write_Str (" ");
kono
parents:
diff changeset
970
kono
parents:
diff changeset
971 else
kono
parents:
diff changeset
972 if not Selective_Output then
kono
parents:
diff changeset
973 Output_Status (Status, Verbose => False);
kono
parents:
diff changeset
974 end if;
kono
parents:
diff changeset
975
kono
parents:
diff changeset
976 Write_Str (Object_Name.all);
kono
parents:
diff changeset
977 end if;
kono
parents:
diff changeset
978 end if;
kono
parents:
diff changeset
979 end Output_Source;
kono
parents:
diff changeset
980
kono
parents:
diff changeset
981 -------------------
kono
parents:
diff changeset
982 -- Output_Status --
kono
parents:
diff changeset
983 -------------------
kono
parents:
diff changeset
984
kono
parents:
diff changeset
985 procedure Output_Status (FS : File_Status; Verbose : Boolean) is
kono
parents:
diff changeset
986 begin
kono
parents:
diff changeset
987 if Verbose then
kono
parents:
diff changeset
988 case FS is
kono
parents:
diff changeset
989 when OK =>
kono
parents:
diff changeset
990 Write_Str (" unchanged");
kono
parents:
diff changeset
991
kono
parents:
diff changeset
992 when Checksum_OK =>
kono
parents:
diff changeset
993 Write_Str (" slightly modified");
kono
parents:
diff changeset
994
kono
parents:
diff changeset
995 when Not_Found =>
kono
parents:
diff changeset
996 Write_Str (" file not found");
kono
parents:
diff changeset
997
kono
parents:
diff changeset
998 when Not_Same =>
kono
parents:
diff changeset
999 Write_Str (" modified");
kono
parents:
diff changeset
1000
kono
parents:
diff changeset
1001 when Not_First_On_PATH =>
kono
parents:
diff changeset
1002 Write_Str (" unchanged version not first on PATH");
kono
parents:
diff changeset
1003 end case;
kono
parents:
diff changeset
1004
kono
parents:
diff changeset
1005 else
kono
parents:
diff changeset
1006 case FS is
kono
parents:
diff changeset
1007 when OK =>
kono
parents:
diff changeset
1008 Write_Str (" OK ");
kono
parents:
diff changeset
1009
kono
parents:
diff changeset
1010 when Checksum_OK =>
kono
parents:
diff changeset
1011 Write_Str (" MOK ");
kono
parents:
diff changeset
1012
kono
parents:
diff changeset
1013 when Not_Found =>
kono
parents:
diff changeset
1014 Write_Str (" ??? ");
kono
parents:
diff changeset
1015
kono
parents:
diff changeset
1016 when Not_Same =>
kono
parents:
diff changeset
1017 Write_Str (" DIF ");
kono
parents:
diff changeset
1018
kono
parents:
diff changeset
1019 when Not_First_On_PATH =>
kono
parents:
diff changeset
1020 Write_Str (" HID ");
kono
parents:
diff changeset
1021 end case;
kono
parents:
diff changeset
1022 end if;
kono
parents:
diff changeset
1023 end Output_Status;
kono
parents:
diff changeset
1024
kono
parents:
diff changeset
1025 -----------------
kono
parents:
diff changeset
1026 -- Output_Unit --
kono
parents:
diff changeset
1027 -----------------
kono
parents:
diff changeset
1028
kono
parents:
diff changeset
1029 procedure Output_Unit (ALI : ALI_Id; U_Id : Unit_Id) is
kono
parents:
diff changeset
1030 Kind : Character;
kono
parents:
diff changeset
1031 U : Unit_Record renames Units.Table (U_Id);
kono
parents:
diff changeset
1032
kono
parents:
diff changeset
1033 begin
kono
parents:
diff changeset
1034 if Print_Unit then
kono
parents:
diff changeset
1035 Get_Name_String (U.Uname);
kono
parents:
diff changeset
1036 Kind := Name_Buffer (Name_Len);
kono
parents:
diff changeset
1037 Name_Len := Name_Len - 2;
kono
parents:
diff changeset
1038
kono
parents:
diff changeset
1039 if not Verbose_Mode then
kono
parents:
diff changeset
1040 Write_Str (Name_Buffer (1 .. Name_Len));
kono
parents:
diff changeset
1041
kono
parents:
diff changeset
1042 else
kono
parents:
diff changeset
1043 Write_Str ("Unit => ");
kono
parents:
diff changeset
1044 Write_Eol;
kono
parents:
diff changeset
1045 Write_Str (" Name => ");
kono
parents:
diff changeset
1046 Write_Str (Name_Buffer (1 .. Name_Len));
kono
parents:
diff changeset
1047 Write_Eol;
kono
parents:
diff changeset
1048 Write_Str (" Kind => ");
kono
parents:
diff changeset
1049
kono
parents:
diff changeset
1050 if Units.Table (U_Id).Unit_Kind = 'p' then
kono
parents:
diff changeset
1051 Write_Str ("package ");
kono
parents:
diff changeset
1052 else
kono
parents:
diff changeset
1053 Write_Str ("subprogram ");
kono
parents:
diff changeset
1054 end if;
kono
parents:
diff changeset
1055
kono
parents:
diff changeset
1056 if Kind = 's' then
kono
parents:
diff changeset
1057 Write_Str ("spec");
kono
parents:
diff changeset
1058 else
kono
parents:
diff changeset
1059 Write_Str ("body");
kono
parents:
diff changeset
1060 end if;
kono
parents:
diff changeset
1061 end if;
kono
parents:
diff changeset
1062
kono
parents:
diff changeset
1063 if Verbose_Mode then
kono
parents:
diff changeset
1064 if U.Preelab or else
kono
parents:
diff changeset
1065 U.No_Elab or else
kono
parents:
diff changeset
1066 U.Pure or else
kono
parents:
diff changeset
1067 U.Dynamic_Elab or else
kono
parents:
diff changeset
1068 U.Has_RACW or else
kono
parents:
diff changeset
1069 U.Remote_Types or else
kono
parents:
diff changeset
1070 U.Shared_Passive or else
kono
parents:
diff changeset
1071 U.RCI or else
kono
parents:
diff changeset
1072 U.Predefined or else
kono
parents:
diff changeset
1073 U.Internal or else
kono
parents:
diff changeset
1074 U.Is_Generic or else
kono
parents:
diff changeset
1075 U.Init_Scalars or else
kono
parents:
diff changeset
1076 U.SAL_Interface or else
kono
parents:
diff changeset
1077 U.Body_Needed_For_SAL or else
kono
parents:
diff changeset
1078 U.Elaborate_Body
kono
parents:
diff changeset
1079 then
kono
parents:
diff changeset
1080 Write_Eol;
kono
parents:
diff changeset
1081 Write_Str (" Flags =>");
kono
parents:
diff changeset
1082
kono
parents:
diff changeset
1083 if U.Preelab then
kono
parents:
diff changeset
1084 Write_Str (" Preelaborable");
kono
parents:
diff changeset
1085 end if;
kono
parents:
diff changeset
1086
kono
parents:
diff changeset
1087 if U.No_Elab then
kono
parents:
diff changeset
1088 Write_Str (" No_Elab_Code");
kono
parents:
diff changeset
1089 end if;
kono
parents:
diff changeset
1090
kono
parents:
diff changeset
1091 if U.Pure then
kono
parents:
diff changeset
1092 Write_Str (" Pure");
kono
parents:
diff changeset
1093 end if;
kono
parents:
diff changeset
1094
kono
parents:
diff changeset
1095 if U.Dynamic_Elab then
kono
parents:
diff changeset
1096 Write_Str (" Dynamic_Elab");
kono
parents:
diff changeset
1097 end if;
kono
parents:
diff changeset
1098
kono
parents:
diff changeset
1099 if U.Has_RACW then
kono
parents:
diff changeset
1100 Write_Str (" Has_RACW");
kono
parents:
diff changeset
1101 end if;
kono
parents:
diff changeset
1102
kono
parents:
diff changeset
1103 if U.Remote_Types then
kono
parents:
diff changeset
1104 Write_Str (" Remote_Types");
kono
parents:
diff changeset
1105 end if;
kono
parents:
diff changeset
1106
kono
parents:
diff changeset
1107 if U.Shared_Passive then
kono
parents:
diff changeset
1108 Write_Str (" Shared_Passive");
kono
parents:
diff changeset
1109 end if;
kono
parents:
diff changeset
1110
kono
parents:
diff changeset
1111 if U.RCI then
kono
parents:
diff changeset
1112 Write_Str (" RCI");
kono
parents:
diff changeset
1113 end if;
kono
parents:
diff changeset
1114
kono
parents:
diff changeset
1115 if U.Predefined then
kono
parents:
diff changeset
1116 Write_Str (" Predefined");
kono
parents:
diff changeset
1117 end if;
kono
parents:
diff changeset
1118
kono
parents:
diff changeset
1119 if U.Internal then
kono
parents:
diff changeset
1120 Write_Str (" Internal");
kono
parents:
diff changeset
1121 end if;
kono
parents:
diff changeset
1122
kono
parents:
diff changeset
1123 if U.Is_Generic then
kono
parents:
diff changeset
1124 Write_Str (" Is_Generic");
kono
parents:
diff changeset
1125 end if;
kono
parents:
diff changeset
1126
kono
parents:
diff changeset
1127 if U.Init_Scalars then
kono
parents:
diff changeset
1128 Write_Str (" Init_Scalars");
kono
parents:
diff changeset
1129 end if;
kono
parents:
diff changeset
1130
kono
parents:
diff changeset
1131 if U.SAL_Interface then
kono
parents:
diff changeset
1132 Write_Str (" SAL_Interface");
kono
parents:
diff changeset
1133 end if;
kono
parents:
diff changeset
1134
kono
parents:
diff changeset
1135 if U.Body_Needed_For_SAL then
kono
parents:
diff changeset
1136 Write_Str (" Body_Needed_For_SAL");
kono
parents:
diff changeset
1137 end if;
kono
parents:
diff changeset
1138
kono
parents:
diff changeset
1139 if U.Elaborate_Body then
kono
parents:
diff changeset
1140 Write_Str (" Elaborate Body");
kono
parents:
diff changeset
1141 end if;
kono
parents:
diff changeset
1142
kono
parents:
diff changeset
1143 if U.Remote_Types then
kono
parents:
diff changeset
1144 Write_Str (" Remote_Types");
kono
parents:
diff changeset
1145 end if;
kono
parents:
diff changeset
1146
kono
parents:
diff changeset
1147 if U.Shared_Passive then
kono
parents:
diff changeset
1148 Write_Str (" Shared_Passive");
kono
parents:
diff changeset
1149 end if;
kono
parents:
diff changeset
1150
kono
parents:
diff changeset
1151 if U.Predefined then
kono
parents:
diff changeset
1152 Write_Str (" Predefined");
kono
parents:
diff changeset
1153 end if;
kono
parents:
diff changeset
1154 end if;
kono
parents:
diff changeset
1155
kono
parents:
diff changeset
1156 declare
kono
parents:
diff changeset
1157 Restrictions : constant Restrictions_Info :=
kono
parents:
diff changeset
1158 ALIs.Table (ALI).Restrictions;
kono
parents:
diff changeset
1159
kono
parents:
diff changeset
1160 begin
kono
parents:
diff changeset
1161 -- If the source was compiled with pragmas Restrictions,
kono
parents:
diff changeset
1162 -- Display these restrictions.
kono
parents:
diff changeset
1163
kono
parents:
diff changeset
1164 if Restrictions.Set /= (All_Restrictions => False) then
kono
parents:
diff changeset
1165 Write_Eol;
kono
parents:
diff changeset
1166 Write_Str (" pragma Restrictions =>");
kono
parents:
diff changeset
1167
kono
parents:
diff changeset
1168 -- For boolean restrictions, just display the name of the
kono
parents:
diff changeset
1169 -- restriction; for valued restrictions, also display the
kono
parents:
diff changeset
1170 -- restriction value.
kono
parents:
diff changeset
1171
kono
parents:
diff changeset
1172 for Restriction in All_Restrictions loop
kono
parents:
diff changeset
1173 if Restrictions.Set (Restriction) then
kono
parents:
diff changeset
1174 Write_Eol;
kono
parents:
diff changeset
1175 Write_Str (" ");
kono
parents:
diff changeset
1176 Write_Str (Image (Restriction));
kono
parents:
diff changeset
1177
kono
parents:
diff changeset
1178 if Restriction in All_Parameter_Restrictions then
kono
parents:
diff changeset
1179 Write_Str (" =>");
kono
parents:
diff changeset
1180 Write_Str (Restrictions.Value (Restriction)'Img);
kono
parents:
diff changeset
1181 end if;
kono
parents:
diff changeset
1182 end if;
kono
parents:
diff changeset
1183 end loop;
kono
parents:
diff changeset
1184 end if;
kono
parents:
diff changeset
1185
kono
parents:
diff changeset
1186 -- If the unit violates some Restrictions, display the list of
kono
parents:
diff changeset
1187 -- these restrictions.
kono
parents:
diff changeset
1188
kono
parents:
diff changeset
1189 if Restrictions.Violated /= (All_Restrictions => False) then
kono
parents:
diff changeset
1190 Write_Eol;
kono
parents:
diff changeset
1191 Write_Str (" Restrictions violated =>");
kono
parents:
diff changeset
1192
kono
parents:
diff changeset
1193 -- For boolean restrictions, just display the name of the
kono
parents:
diff changeset
1194 -- restriction. For valued restrictions, also display the
kono
parents:
diff changeset
1195 -- restriction value.
kono
parents:
diff changeset
1196
kono
parents:
diff changeset
1197 for Restriction in All_Restrictions loop
kono
parents:
diff changeset
1198 if Restrictions.Violated (Restriction) then
kono
parents:
diff changeset
1199 Write_Eol;
kono
parents:
diff changeset
1200 Write_Str (" ");
kono
parents:
diff changeset
1201 Write_Str (Image (Restriction));
kono
parents:
diff changeset
1202
kono
parents:
diff changeset
1203 if Restriction in All_Parameter_Restrictions then
kono
parents:
diff changeset
1204 if Restrictions.Count (Restriction) > 0 then
kono
parents:
diff changeset
1205 Write_Str (" =>");
kono
parents:
diff changeset
1206
kono
parents:
diff changeset
1207 if Restrictions.Unknown (Restriction) then
kono
parents:
diff changeset
1208 Write_Str (" at least");
kono
parents:
diff changeset
1209 end if;
kono
parents:
diff changeset
1210
kono
parents:
diff changeset
1211 Write_Str (Restrictions.Count (Restriction)'Img);
kono
parents:
diff changeset
1212 end if;
kono
parents:
diff changeset
1213 end if;
kono
parents:
diff changeset
1214 end if;
kono
parents:
diff changeset
1215 end loop;
kono
parents:
diff changeset
1216 end if;
kono
parents:
diff changeset
1217 end;
kono
parents:
diff changeset
1218 end if;
kono
parents:
diff changeset
1219
kono
parents:
diff changeset
1220 if Print_Source then
kono
parents:
diff changeset
1221 if Too_Long then
kono
parents:
diff changeset
1222 Write_Eol;
kono
parents:
diff changeset
1223 Write_Str (" ");
kono
parents:
diff changeset
1224 else
kono
parents:
diff changeset
1225 Write_Str (Spaces (Unit_Start + Name_Len + 1 .. Unit_End));
kono
parents:
diff changeset
1226 end if;
kono
parents:
diff changeset
1227 end if;
kono
parents:
diff changeset
1228 end if;
kono
parents:
diff changeset
1229 end Output_Unit;
kono
parents:
diff changeset
1230
kono
parents:
diff changeset
1231 package body Prj_Env is
kono
parents:
diff changeset
1232
kono
parents:
diff changeset
1233 Uninitialized_Prefix : constant String := '#' & Path_Separator;
kono
parents:
diff changeset
1234 -- Prefix to indicate that the project path has not been initialized
kono
parents:
diff changeset
1235 -- yet. Must be two characters long.
kono
parents:
diff changeset
1236
kono
parents:
diff changeset
1237 ---------------------
kono
parents:
diff changeset
1238 -- Add_Directories --
kono
parents:
diff changeset
1239 ---------------------
kono
parents:
diff changeset
1240
kono
parents:
diff changeset
1241 procedure Add_Directories
kono
parents:
diff changeset
1242 (Self : in out String_Access;
kono
parents:
diff changeset
1243 Path : String;
kono
parents:
diff changeset
1244 Prepend : Boolean := False)
kono
parents:
diff changeset
1245 is
kono
parents:
diff changeset
1246 Tmp : String_Access;
kono
parents:
diff changeset
1247
kono
parents:
diff changeset
1248 begin
kono
parents:
diff changeset
1249 if Self = null then
kono
parents:
diff changeset
1250 Self := new String'(Uninitialized_Prefix & Path);
kono
parents:
diff changeset
1251 else
kono
parents:
diff changeset
1252 Tmp := Self;
kono
parents:
diff changeset
1253 if Prepend then
kono
parents:
diff changeset
1254 Self := new String'(Path & Path_Separator & Tmp.all);
kono
parents:
diff changeset
1255 else
kono
parents:
diff changeset
1256 Self := new String'(Tmp.all & Path_Separator & Path);
kono
parents:
diff changeset
1257 end if;
kono
parents:
diff changeset
1258 Free (Tmp);
kono
parents:
diff changeset
1259 end if;
kono
parents:
diff changeset
1260 end Add_Directories;
kono
parents:
diff changeset
1261
kono
parents:
diff changeset
1262 -------------------------------------
kono
parents:
diff changeset
1263 -- Initialize_Default_Project_Path --
kono
parents:
diff changeset
1264 -------------------------------------
kono
parents:
diff changeset
1265
kono
parents:
diff changeset
1266 procedure Initialize_Default_Project_Path
kono
parents:
diff changeset
1267 (Self : in out String_Access;
kono
parents:
diff changeset
1268 Target_Name : String;
kono
parents:
diff changeset
1269 Runtime_Name : String := "")
kono
parents:
diff changeset
1270 is
kono
parents:
diff changeset
1271 Add_Default_Dir : Boolean := Target_Name /= "-";
kono
parents:
diff changeset
1272 First : Positive;
kono
parents:
diff changeset
1273 Last : Positive;
kono
parents:
diff changeset
1274
kono
parents:
diff changeset
1275 Ada_Project_Path : constant String := "ADA_PROJECT_PATH";
kono
parents:
diff changeset
1276 Gpr_Project_Path : constant String := "GPR_PROJECT_PATH";
kono
parents:
diff changeset
1277 Gpr_Project_Path_File : constant String := "GPR_PROJECT_PATH_FILE";
kono
parents:
diff changeset
1278 -- Names of alternate env. variables that contain path name(s) of
kono
parents:
diff changeset
1279 -- directories where project files may reside. They are taken into
kono
parents:
diff changeset
1280 -- account in this order: GPR_PROJECT_PATH_FILE, GPR_PROJECT_PATH,
kono
parents:
diff changeset
1281 -- ADA_PROJECT_PATH.
kono
parents:
diff changeset
1282
kono
parents:
diff changeset
1283 Gpr_Prj_Path_File : String_Access;
kono
parents:
diff changeset
1284 Gpr_Prj_Path : String_Access;
kono
parents:
diff changeset
1285 Ada_Prj_Path : String_Access;
kono
parents:
diff changeset
1286 -- The path name(s) of directories where project files may reside.
kono
parents:
diff changeset
1287 -- May be empty.
kono
parents:
diff changeset
1288
kono
parents:
diff changeset
1289 Prefix : String_Ptr;
kono
parents:
diff changeset
1290 Runtime : String_Ptr;
kono
parents:
diff changeset
1291
kono
parents:
diff changeset
1292 procedure Add_Target (Suffix : String);
kono
parents:
diff changeset
1293 -- Add :<prefix>/<target>/Suffix to the project path
kono
parents:
diff changeset
1294
kono
parents:
diff changeset
1295 FD : File_Descriptor;
kono
parents:
diff changeset
1296 Len : Integer;
kono
parents:
diff changeset
1297
kono
parents:
diff changeset
1298 ----------------
kono
parents:
diff changeset
1299 -- Add_Target --
kono
parents:
diff changeset
1300 ----------------
kono
parents:
diff changeset
1301
kono
parents:
diff changeset
1302 procedure Add_Target (Suffix : String) is
kono
parents:
diff changeset
1303 Extra_Sep : constant String :=
kono
parents:
diff changeset
1304 (if Target_Name (Target_Name'Last) = '/' then
kono
parents:
diff changeset
1305 ""
kono
parents:
diff changeset
1306 else
kono
parents:
diff changeset
1307 (1 => Directory_Separator));
kono
parents:
diff changeset
1308 -- Note: Target_Name has a trailing / when it comes from Sdefault
kono
parents:
diff changeset
1309
kono
parents:
diff changeset
1310 begin
kono
parents:
diff changeset
1311 Add_Str_To_Name_Buffer
kono
parents:
diff changeset
1312 (Path_Separator & Prefix.all & Target_Name & Extra_Sep & Suffix);
kono
parents:
diff changeset
1313 end Add_Target;
kono
parents:
diff changeset
1314
kono
parents:
diff changeset
1315 -- Start of processing for Initialize_Default_Project_Path
kono
parents:
diff changeset
1316
kono
parents:
diff changeset
1317 begin
kono
parents:
diff changeset
1318 if Self /= null
kono
parents:
diff changeset
1319 and then (Self'Length = 0
kono
parents:
diff changeset
1320 or else Self (Self'First) /= '#')
kono
parents:
diff changeset
1321 then
kono
parents:
diff changeset
1322 return;
kono
parents:
diff changeset
1323 end if;
kono
parents:
diff changeset
1324
kono
parents:
diff changeset
1325 -- The current directory is always first in the search path. Since
kono
parents:
diff changeset
1326 -- the Project_Path currently starts with '#:' as a sign that it is
kono
parents:
diff changeset
1327 -- not initialized, we simply replace '#' with '.'
kono
parents:
diff changeset
1328
kono
parents:
diff changeset
1329 if Self = null then
kono
parents:
diff changeset
1330 Self := new String'('.' & Path_Separator);
kono
parents:
diff changeset
1331 else
kono
parents:
diff changeset
1332 Self (Self'First) := '.';
kono
parents:
diff changeset
1333 end if;
kono
parents:
diff changeset
1334
kono
parents:
diff changeset
1335 -- Then the reset of the project path (if any) currently contains the
kono
parents:
diff changeset
1336 -- directories added through Add_Search_Project_Directory
kono
parents:
diff changeset
1337
kono
parents:
diff changeset
1338 -- If environment variables are defined and not empty, add their
kono
parents:
diff changeset
1339 -- content
kono
parents:
diff changeset
1340
kono
parents:
diff changeset
1341 Gpr_Prj_Path_File := Getenv (Gpr_Project_Path_File);
kono
parents:
diff changeset
1342 Gpr_Prj_Path := Getenv (Gpr_Project_Path);
kono
parents:
diff changeset
1343 Ada_Prj_Path := Getenv (Ada_Project_Path);
kono
parents:
diff changeset
1344
kono
parents:
diff changeset
1345 if Gpr_Prj_Path_File.all /= "" then
kono
parents:
diff changeset
1346 FD := Open_Read (Gpr_Prj_Path_File.all, GNAT.OS_Lib.Text);
kono
parents:
diff changeset
1347
kono
parents:
diff changeset
1348 if FD = Invalid_FD then
kono
parents:
diff changeset
1349 Osint.Fail
kono
parents:
diff changeset
1350 ("warning: could not read project path file """
kono
parents:
diff changeset
1351 & Gpr_Prj_Path_File.all & """");
kono
parents:
diff changeset
1352 end if;
kono
parents:
diff changeset
1353
kono
parents:
diff changeset
1354 Len := Integer (File_Length (FD));
kono
parents:
diff changeset
1355
kono
parents:
diff changeset
1356 declare
kono
parents:
diff changeset
1357 Buffer : String (1 .. Len);
kono
parents:
diff changeset
1358 Index : Positive := 1;
kono
parents:
diff changeset
1359 Last : Positive;
kono
parents:
diff changeset
1360 Tmp : String_Access;
kono
parents:
diff changeset
1361
kono
parents:
diff changeset
1362 begin
kono
parents:
diff changeset
1363 -- Read the file
kono
parents:
diff changeset
1364
kono
parents:
diff changeset
1365 Len := Read (FD, Buffer (1)'Address, Len);
kono
parents:
diff changeset
1366 Close (FD);
kono
parents:
diff changeset
1367
kono
parents:
diff changeset
1368 -- Scan the file line by line
kono
parents:
diff changeset
1369
kono
parents:
diff changeset
1370 while Index < Buffer'Last loop
kono
parents:
diff changeset
1371
kono
parents:
diff changeset
1372 -- Find the end of line
kono
parents:
diff changeset
1373
kono
parents:
diff changeset
1374 Last := Index;
kono
parents:
diff changeset
1375 while Last <= Buffer'Last
kono
parents:
diff changeset
1376 and then Buffer (Last) /= ASCII.LF
kono
parents:
diff changeset
1377 and then Buffer (Last) /= ASCII.CR
kono
parents:
diff changeset
1378 loop
kono
parents:
diff changeset
1379 Last := Last + 1;
kono
parents:
diff changeset
1380 end loop;
kono
parents:
diff changeset
1381
kono
parents:
diff changeset
1382 -- Ignore empty lines
kono
parents:
diff changeset
1383
kono
parents:
diff changeset
1384 if Last > Index then
kono
parents:
diff changeset
1385 Tmp := Self;
kono
parents:
diff changeset
1386 Self :=
kono
parents:
diff changeset
1387 new String'
kono
parents:
diff changeset
1388 (Tmp.all & Path_Separator &
kono
parents:
diff changeset
1389 Buffer (Index .. Last - 1));
kono
parents:
diff changeset
1390 Free (Tmp);
kono
parents:
diff changeset
1391 end if;
kono
parents:
diff changeset
1392
kono
parents:
diff changeset
1393 -- Find the beginning of the next line
kono
parents:
diff changeset
1394
kono
parents:
diff changeset
1395 Index := Last;
kono
parents:
diff changeset
1396 while Buffer (Index) = ASCII.CR or else
kono
parents:
diff changeset
1397 Buffer (Index) = ASCII.LF
kono
parents:
diff changeset
1398 loop
kono
parents:
diff changeset
1399 Index := Index + 1;
kono
parents:
diff changeset
1400 end loop;
kono
parents:
diff changeset
1401 end loop;
kono
parents:
diff changeset
1402 end;
kono
parents:
diff changeset
1403
kono
parents:
diff changeset
1404 end if;
kono
parents:
diff changeset
1405
kono
parents:
diff changeset
1406 if Gpr_Prj_Path.all /= "" then
kono
parents:
diff changeset
1407 Add_Directories (Self, Gpr_Prj_Path.all);
kono
parents:
diff changeset
1408 end if;
kono
parents:
diff changeset
1409
kono
parents:
diff changeset
1410 Free (Gpr_Prj_Path);
kono
parents:
diff changeset
1411
kono
parents:
diff changeset
1412 if Ada_Prj_Path.all /= "" then
kono
parents:
diff changeset
1413 Add_Directories (Self, Ada_Prj_Path.all);
kono
parents:
diff changeset
1414 end if;
kono
parents:
diff changeset
1415
kono
parents:
diff changeset
1416 Free (Ada_Prj_Path);
kono
parents:
diff changeset
1417
kono
parents:
diff changeset
1418 -- Copy to Name_Buffer, since we will need to manipulate the path
kono
parents:
diff changeset
1419
kono
parents:
diff changeset
1420 Name_Len := Self'Length;
kono
parents:
diff changeset
1421 Name_Buffer (1 .. Name_Len) := Self.all;
kono
parents:
diff changeset
1422
kono
parents:
diff changeset
1423 -- Scan the directory path to see if "-" is one of the directories.
kono
parents:
diff changeset
1424 -- Remove each occurrence of "-" and set Add_Default_Dir to False.
kono
parents:
diff changeset
1425 -- Also resolve relative paths and symbolic links.
kono
parents:
diff changeset
1426
kono
parents:
diff changeset
1427 First := 3;
kono
parents:
diff changeset
1428 loop
kono
parents:
diff changeset
1429 while First <= Name_Len
kono
parents:
diff changeset
1430 and then (Name_Buffer (First) = Path_Separator)
kono
parents:
diff changeset
1431 loop
kono
parents:
diff changeset
1432 First := First + 1;
kono
parents:
diff changeset
1433 end loop;
kono
parents:
diff changeset
1434
kono
parents:
diff changeset
1435 exit when First > Name_Len;
kono
parents:
diff changeset
1436
kono
parents:
diff changeset
1437 Last := First;
kono
parents:
diff changeset
1438
kono
parents:
diff changeset
1439 while Last < Name_Len
kono
parents:
diff changeset
1440 and then Name_Buffer (Last + 1) /= Path_Separator
kono
parents:
diff changeset
1441 loop
kono
parents:
diff changeset
1442 Last := Last + 1;
kono
parents:
diff changeset
1443 end loop;
kono
parents:
diff changeset
1444
kono
parents:
diff changeset
1445 -- If the directory is "-", set Add_Default_Dir to False and
kono
parents:
diff changeset
1446 -- remove from path.
kono
parents:
diff changeset
1447
kono
parents:
diff changeset
1448 if Name_Buffer (First .. Last) = "-" then
kono
parents:
diff changeset
1449 Add_Default_Dir := False;
kono
parents:
diff changeset
1450
kono
parents:
diff changeset
1451 for J in Last + 1 .. Name_Len loop
kono
parents:
diff changeset
1452 Name_Buffer (J - 2) := Name_Buffer (J);
kono
parents:
diff changeset
1453 end loop;
kono
parents:
diff changeset
1454
kono
parents:
diff changeset
1455 Name_Len := Name_Len - 2;
kono
parents:
diff changeset
1456
kono
parents:
diff changeset
1457 -- After removing the '-', go back one character to get the
kono
parents:
diff changeset
1458 -- next directory correctly.
kono
parents:
diff changeset
1459
kono
parents:
diff changeset
1460 Last := Last - 1;
kono
parents:
diff changeset
1461
kono
parents:
diff changeset
1462 else
kono
parents:
diff changeset
1463 declare
kono
parents:
diff changeset
1464 New_Dir : constant String :=
kono
parents:
diff changeset
1465 Normalize_Pathname
kono
parents:
diff changeset
1466 (Name_Buffer (First .. Last),
kono
parents:
diff changeset
1467 Resolve_Links => Opt.Follow_Links_For_Dirs);
kono
parents:
diff changeset
1468 New_Len : Positive;
kono
parents:
diff changeset
1469 New_Last : Positive;
kono
parents:
diff changeset
1470
kono
parents:
diff changeset
1471 begin
kono
parents:
diff changeset
1472 -- If the absolute path was resolved and is different from
kono
parents:
diff changeset
1473 -- the original, replace original with the resolved path.
kono
parents:
diff changeset
1474
kono
parents:
diff changeset
1475 if New_Dir /= Name_Buffer (First .. Last)
kono
parents:
diff changeset
1476 and then New_Dir'Length /= 0
kono
parents:
diff changeset
1477 then
kono
parents:
diff changeset
1478 New_Len := Name_Len + New_Dir'Length - (Last - First + 1);
kono
parents:
diff changeset
1479 New_Last := First + New_Dir'Length - 1;
kono
parents:
diff changeset
1480 Name_Buffer (New_Last + 1 .. New_Len) :=
kono
parents:
diff changeset
1481 Name_Buffer (Last + 1 .. Name_Len);
kono
parents:
diff changeset
1482 Name_Buffer (First .. New_Last) := New_Dir;
kono
parents:
diff changeset
1483 Name_Len := New_Len;
kono
parents:
diff changeset
1484 Last := New_Last;
kono
parents:
diff changeset
1485 end if;
kono
parents:
diff changeset
1486 end;
kono
parents:
diff changeset
1487 end if;
kono
parents:
diff changeset
1488
kono
parents:
diff changeset
1489 First := Last + 1;
kono
parents:
diff changeset
1490 end loop;
kono
parents:
diff changeset
1491
kono
parents:
diff changeset
1492 Free (Self);
kono
parents:
diff changeset
1493
kono
parents:
diff changeset
1494 -- Set the initial value of Current_Project_Path
kono
parents:
diff changeset
1495
kono
parents:
diff changeset
1496 if Add_Default_Dir then
kono
parents:
diff changeset
1497 if Sdefault.Search_Dir_Prefix = null then
kono
parents:
diff changeset
1498
kono
parents:
diff changeset
1499 -- gprbuild case
kono
parents:
diff changeset
1500
kono
parents:
diff changeset
1501 Prefix := new String'(Executable_Prefix_Path);
kono
parents:
diff changeset
1502
kono
parents:
diff changeset
1503 else
kono
parents:
diff changeset
1504 Prefix := new String'(Sdefault.Search_Dir_Prefix.all
kono
parents:
diff changeset
1505 & ".." & Dir_Separator
kono
parents:
diff changeset
1506 & ".." & Dir_Separator
kono
parents:
diff changeset
1507 & ".." & Dir_Separator
kono
parents:
diff changeset
1508 & ".." & Dir_Separator);
kono
parents:
diff changeset
1509 end if;
kono
parents:
diff changeset
1510
kono
parents:
diff changeset
1511 if Prefix.all /= "" then
kono
parents:
diff changeset
1512 if Target_Name /= "" then
kono
parents:
diff changeset
1513
kono
parents:
diff changeset
1514 if Runtime_Name /= "" then
kono
parents:
diff changeset
1515 if Base_Name (Runtime_Name) = Runtime_Name then
kono
parents:
diff changeset
1516
kono
parents:
diff changeset
1517 -- $prefix/$target/$runtime/lib/gnat
kono
parents:
diff changeset
1518
kono
parents:
diff changeset
1519 Add_Target
kono
parents:
diff changeset
1520 (Runtime_Name & Directory_Separator &
kono
parents:
diff changeset
1521 "lib" & Directory_Separator & "gnat");
kono
parents:
diff changeset
1522
kono
parents:
diff changeset
1523 -- $prefix/$target/$runtime/share/gpr
kono
parents:
diff changeset
1524
kono
parents:
diff changeset
1525 Add_Target
kono
parents:
diff changeset
1526 (Runtime_Name & Directory_Separator &
kono
parents:
diff changeset
1527 "share" & Directory_Separator & "gpr");
kono
parents:
diff changeset
1528
kono
parents:
diff changeset
1529 else
kono
parents:
diff changeset
1530 Runtime :=
kono
parents:
diff changeset
1531 new String'(Normalize_Pathname (Runtime_Name));
kono
parents:
diff changeset
1532
kono
parents:
diff changeset
1533 -- $runtime_dir/lib/gnat
kono
parents:
diff changeset
1534
kono
parents:
diff changeset
1535 Add_Str_To_Name_Buffer
kono
parents:
diff changeset
1536 (Path_Separator & Runtime.all & Directory_Separator &
kono
parents:
diff changeset
1537 "lib" & Directory_Separator & "gnat");
kono
parents:
diff changeset
1538
kono
parents:
diff changeset
1539 -- $runtime_dir/share/gpr
kono
parents:
diff changeset
1540
kono
parents:
diff changeset
1541 Add_Str_To_Name_Buffer
kono
parents:
diff changeset
1542 (Path_Separator & Runtime.all & Directory_Separator &
kono
parents:
diff changeset
1543 "share" & Directory_Separator & "gpr");
kono
parents:
diff changeset
1544 end if;
kono
parents:
diff changeset
1545 end if;
kono
parents:
diff changeset
1546
kono
parents:
diff changeset
1547 -- $prefix/$target/lib/gnat
kono
parents:
diff changeset
1548
kono
parents:
diff changeset
1549 Add_Target
kono
parents:
diff changeset
1550 ("lib" & Directory_Separator & "gnat");
kono
parents:
diff changeset
1551
kono
parents:
diff changeset
1552 -- $prefix/$target/share/gpr
kono
parents:
diff changeset
1553
kono
parents:
diff changeset
1554 Add_Target
kono
parents:
diff changeset
1555 ("share" & Directory_Separator & "gpr");
kono
parents:
diff changeset
1556 end if;
kono
parents:
diff changeset
1557
kono
parents:
diff changeset
1558 -- $prefix/share/gpr
kono
parents:
diff changeset
1559
kono
parents:
diff changeset
1560 Add_Str_To_Name_Buffer
kono
parents:
diff changeset
1561 (Path_Separator & Prefix.all & "share"
kono
parents:
diff changeset
1562 & Directory_Separator & "gpr");
kono
parents:
diff changeset
1563
kono
parents:
diff changeset
1564 -- $prefix/lib/gnat
kono
parents:
diff changeset
1565
kono
parents:
diff changeset
1566 Add_Str_To_Name_Buffer
kono
parents:
diff changeset
1567 (Path_Separator & Prefix.all & "lib"
kono
parents:
diff changeset
1568 & Directory_Separator & "gnat");
kono
parents:
diff changeset
1569 end if;
kono
parents:
diff changeset
1570
kono
parents:
diff changeset
1571 Free (Prefix);
kono
parents:
diff changeset
1572 end if;
kono
parents:
diff changeset
1573
kono
parents:
diff changeset
1574 Self := new String'(Name_Buffer (1 .. Name_Len));
kono
parents:
diff changeset
1575 end Initialize_Default_Project_Path;
kono
parents:
diff changeset
1576
kono
parents:
diff changeset
1577 -----------------------
kono
parents:
diff changeset
1578 -- Get_Runtime_Path --
kono
parents:
diff changeset
1579 -----------------------
kono
parents:
diff changeset
1580
kono
parents:
diff changeset
1581 function Get_Runtime_Path
kono
parents:
diff changeset
1582 (Self : String_Access;
kono
parents:
diff changeset
1583 Path : String) return String_Access
kono
parents:
diff changeset
1584 is
kono
parents:
diff changeset
1585 First : Natural;
kono
parents:
diff changeset
1586 Last : Natural;
kono
parents:
diff changeset
1587
kono
parents:
diff changeset
1588 begin
kono
parents:
diff changeset
1589
kono
parents:
diff changeset
1590 if Is_Absolute_Path (Path) then
kono
parents:
diff changeset
1591 if Is_Directory (Path) then
kono
parents:
diff changeset
1592 return new String'(Path);
kono
parents:
diff changeset
1593 else
kono
parents:
diff changeset
1594 return null;
kono
parents:
diff changeset
1595 end if;
kono
parents:
diff changeset
1596
kono
parents:
diff changeset
1597 else
kono
parents:
diff changeset
1598 -- Because we do not want to resolve symbolic links, we cannot
kono
parents:
diff changeset
1599 -- use Locate_Regular_File. Instead we try each possible path
kono
parents:
diff changeset
1600 -- successively.
kono
parents:
diff changeset
1601
kono
parents:
diff changeset
1602 First := Self'First;
kono
parents:
diff changeset
1603 while First <= Self'Last loop
kono
parents:
diff changeset
1604 while First <= Self'Last
kono
parents:
diff changeset
1605 and then Self (First) = Path_Separator
kono
parents:
diff changeset
1606 loop
kono
parents:
diff changeset
1607 First := First + 1;
kono
parents:
diff changeset
1608 end loop;
kono
parents:
diff changeset
1609
kono
parents:
diff changeset
1610 exit when First > Self'Last;
kono
parents:
diff changeset
1611
kono
parents:
diff changeset
1612 Last := First;
kono
parents:
diff changeset
1613 while Last < Self'Last
kono
parents:
diff changeset
1614 and then Self (Last + 1) /= Path_Separator
kono
parents:
diff changeset
1615 loop
kono
parents:
diff changeset
1616 Last := Last + 1;
kono
parents:
diff changeset
1617 end loop;
kono
parents:
diff changeset
1618
kono
parents:
diff changeset
1619 Name_Len := 0;
kono
parents:
diff changeset
1620
kono
parents:
diff changeset
1621 if not Is_Absolute_Path (Self (First .. Last)) then
kono
parents:
diff changeset
1622 Add_Str_To_Name_Buffer (Get_Current_Dir); -- ??? System call
kono
parents:
diff changeset
1623 Add_Char_To_Name_Buffer (Directory_Separator);
kono
parents:
diff changeset
1624 end if;
kono
parents:
diff changeset
1625
kono
parents:
diff changeset
1626 Add_Str_To_Name_Buffer (Self (First .. Last));
kono
parents:
diff changeset
1627 Add_Char_To_Name_Buffer (Directory_Separator);
kono
parents:
diff changeset
1628 Add_Str_To_Name_Buffer (Path);
kono
parents:
diff changeset
1629
kono
parents:
diff changeset
1630 if Is_Directory (Name_Buffer (1 .. Name_Len)) then
kono
parents:
diff changeset
1631 return new String'(Name_Buffer (1 .. Name_Len));
kono
parents:
diff changeset
1632 end if;
kono
parents:
diff changeset
1633
kono
parents:
diff changeset
1634 First := Last + 1;
kono
parents:
diff changeset
1635 end loop;
kono
parents:
diff changeset
1636 end if;
kono
parents:
diff changeset
1637
kono
parents:
diff changeset
1638 return null;
kono
parents:
diff changeset
1639 end Get_Runtime_Path;
kono
parents:
diff changeset
1640
kono
parents:
diff changeset
1641 end Prj_Env;
kono
parents:
diff changeset
1642
kono
parents:
diff changeset
1643 -----------------
kono
parents:
diff changeset
1644 -- Reset_Print --
kono
parents:
diff changeset
1645 -----------------
kono
parents:
diff changeset
1646
kono
parents:
diff changeset
1647 procedure Reset_Print is
kono
parents:
diff changeset
1648 begin
kono
parents:
diff changeset
1649 if not Selective_Output then
kono
parents:
diff changeset
1650 Selective_Output := True;
kono
parents:
diff changeset
1651 Print_Source := False;
kono
parents:
diff changeset
1652 Print_Object := False;
kono
parents:
diff changeset
1653 Print_Unit := False;
kono
parents:
diff changeset
1654 end if;
kono
parents:
diff changeset
1655 end Reset_Print;
kono
parents:
diff changeset
1656
kono
parents:
diff changeset
1657 ----------------
kono
parents:
diff changeset
1658 -- Search_RTS --
kono
parents:
diff changeset
1659 ----------------
kono
parents:
diff changeset
1660
kono
parents:
diff changeset
1661 procedure Search_RTS (Name : String) is
kono
parents:
diff changeset
1662 Src_Path : String_Ptr;
kono
parents:
diff changeset
1663 Lib_Path : String_Ptr;
kono
parents:
diff changeset
1664 -- Paths for source and include subdirs
kono
parents:
diff changeset
1665
kono
parents:
diff changeset
1666 Rts_Full_Path : String_Access;
kono
parents:
diff changeset
1667 -- Full path for RTS project
kono
parents:
diff changeset
1668
kono
parents:
diff changeset
1669 begin
kono
parents:
diff changeset
1670 -- Try to find the RTS
kono
parents:
diff changeset
1671
kono
parents:
diff changeset
1672 Src_Path := Get_RTS_Search_Dir (Name, Include);
kono
parents:
diff changeset
1673 Lib_Path := Get_RTS_Search_Dir (Name, Objects);
kono
parents:
diff changeset
1674
kono
parents:
diff changeset
1675 -- For non-project RTS, both the include and the objects directories
kono
parents:
diff changeset
1676 -- must be present.
kono
parents:
diff changeset
1677
kono
parents:
diff changeset
1678 if Src_Path /= null and then Lib_Path /= null then
kono
parents:
diff changeset
1679 Add_Search_Dirs (Src_Path, Include);
kono
parents:
diff changeset
1680 Add_Search_Dirs (Lib_Path, Objects);
kono
parents:
diff changeset
1681 Prj_Env.Initialize_Default_Project_Path
kono
parents:
diff changeset
1682 (Prj_Path,
kono
parents:
diff changeset
1683 Target_Name => Sdefault.Target_Name.all,
kono
parents:
diff changeset
1684 Runtime_Name => Name);
kono
parents:
diff changeset
1685 return;
kono
parents:
diff changeset
1686 end if;
kono
parents:
diff changeset
1687
kono
parents:
diff changeset
1688 if Lib_Path /= null then
kono
parents:
diff changeset
1689 Osint.Fail ("RTS path not valid: missing adainclude directory");
kono
parents:
diff changeset
1690 elsif Src_Path /= null then
kono
parents:
diff changeset
1691 Osint.Fail ("RTS path not valid: missing adalib directory");
kono
parents:
diff changeset
1692 end if;
kono
parents:
diff changeset
1693
kono
parents:
diff changeset
1694 -- Try to find the RTS on the project path. First setup the project path
kono
parents:
diff changeset
1695
kono
parents:
diff changeset
1696 Prj_Env.Initialize_Default_Project_Path
kono
parents:
diff changeset
1697 (Prj_Path,
kono
parents:
diff changeset
1698 Target_Name => Sdefault.Target_Name.all,
kono
parents:
diff changeset
1699 Runtime_Name => Name);
kono
parents:
diff changeset
1700
kono
parents:
diff changeset
1701 Rts_Full_Path := Prj_Env.Get_Runtime_Path (Prj_Path, Name);
kono
parents:
diff changeset
1702
kono
parents:
diff changeset
1703 if Rts_Full_Path /= null then
kono
parents:
diff changeset
1704
kono
parents:
diff changeset
1705 -- Directory name was found on the project path. Look for the
kono
parents:
diff changeset
1706 -- include subdirectory(s).
kono
parents:
diff changeset
1707
kono
parents:
diff changeset
1708 Src_Path := Get_RTS_Search_Dir (Rts_Full_Path.all, Include);
kono
parents:
diff changeset
1709
kono
parents:
diff changeset
1710 if Src_Path /= null then
kono
parents:
diff changeset
1711 Add_Search_Dirs (Src_Path, Include);
kono
parents:
diff changeset
1712
kono
parents:
diff changeset
1713 -- Add the lib subdirectory if it exists
kono
parents:
diff changeset
1714
kono
parents:
diff changeset
1715 Lib_Path := Get_RTS_Search_Dir (Rts_Full_Path.all, Objects);
kono
parents:
diff changeset
1716
kono
parents:
diff changeset
1717 if Lib_Path /= null then
kono
parents:
diff changeset
1718 Add_Search_Dirs (Lib_Path, Objects);
kono
parents:
diff changeset
1719 end if;
kono
parents:
diff changeset
1720
kono
parents:
diff changeset
1721 return;
kono
parents:
diff changeset
1722 end if;
kono
parents:
diff changeset
1723 end if;
kono
parents:
diff changeset
1724
kono
parents:
diff changeset
1725 Osint.Fail
kono
parents:
diff changeset
1726 ("RTS path not valid: missing adainclude and adalib directories");
kono
parents:
diff changeset
1727 end Search_RTS;
kono
parents:
diff changeset
1728
kono
parents:
diff changeset
1729 -------------------
kono
parents:
diff changeset
1730 -- Scan_Ls_Arg --
kono
parents:
diff changeset
1731 -------------------
kono
parents:
diff changeset
1732
kono
parents:
diff changeset
1733 procedure Scan_Ls_Arg (Argv : String) is
kono
parents:
diff changeset
1734 FD : File_Descriptor;
kono
parents:
diff changeset
1735 Len : Integer;
kono
parents:
diff changeset
1736 OK : Boolean;
kono
parents:
diff changeset
1737
kono
parents:
diff changeset
1738 begin
kono
parents:
diff changeset
1739 pragma Assert (Argv'First = 1);
kono
parents:
diff changeset
1740
kono
parents:
diff changeset
1741 if Argv'Length = 0 then
kono
parents:
diff changeset
1742 return;
kono
parents:
diff changeset
1743 end if;
kono
parents:
diff changeset
1744
kono
parents:
diff changeset
1745 OK := True;
kono
parents:
diff changeset
1746 if Argv (1) = '-' then
kono
parents:
diff changeset
1747 if Argv'Length = 1 then
kono
parents:
diff changeset
1748 Fail ("switch character cannot be followed by a blank");
kono
parents:
diff changeset
1749
kono
parents:
diff changeset
1750 -- Processing for -I-
kono
parents:
diff changeset
1751
kono
parents:
diff changeset
1752 elsif Argv (2 .. Argv'Last) = "I-" then
kono
parents:
diff changeset
1753 Opt.Look_In_Primary_Dir := False;
kono
parents:
diff changeset
1754
kono
parents:
diff changeset
1755 -- Forbid -?- or -??- where ? is any character
kono
parents:
diff changeset
1756
kono
parents:
diff changeset
1757 elsif (Argv'Length = 3 and then Argv (3) = '-')
kono
parents:
diff changeset
1758 or else (Argv'Length = 4 and then Argv (4) = '-')
kono
parents:
diff changeset
1759 then
kono
parents:
diff changeset
1760 Fail ("Trailing ""-"" at the end of " & Argv & " forbidden.");
kono
parents:
diff changeset
1761
kono
parents:
diff changeset
1762 -- Processing for -Idir
kono
parents:
diff changeset
1763
kono
parents:
diff changeset
1764 elsif Argv (2) = 'I' then
kono
parents:
diff changeset
1765 Add_Source_Dir (Argv (3 .. Argv'Last));
kono
parents:
diff changeset
1766 Add_Lib_Dir (Argv (3 .. Argv'Last));
kono
parents:
diff changeset
1767
kono
parents:
diff changeset
1768 -- Processing for -aIdir (to gcc this is like a -I switch)
kono
parents:
diff changeset
1769
kono
parents:
diff changeset
1770 elsif Argv'Length >= 3 and then Argv (2 .. 3) = "aI" then
kono
parents:
diff changeset
1771 Add_Source_Dir (Argv (4 .. Argv'Last));
kono
parents:
diff changeset
1772
kono
parents:
diff changeset
1773 -- Processing for -aOdir
kono
parents:
diff changeset
1774
kono
parents:
diff changeset
1775 elsif Argv'Length >= 3 and then Argv (2 .. 3) = "aO" then
kono
parents:
diff changeset
1776 Add_Lib_Dir (Argv (4 .. Argv'Last));
kono
parents:
diff changeset
1777
kono
parents:
diff changeset
1778 -- Processing for -aLdir (to gnatbind this is like a -aO switch)
kono
parents:
diff changeset
1779
kono
parents:
diff changeset
1780 elsif Argv'Length >= 3 and then Argv (2 .. 3) = "aL" then
kono
parents:
diff changeset
1781 Add_Lib_Dir (Argv (4 .. Argv'Last));
kono
parents:
diff changeset
1782
kono
parents:
diff changeset
1783 -- Processing for -aP<dir>
kono
parents:
diff changeset
1784
kono
parents:
diff changeset
1785 elsif Argv'Length > 3 and then Argv (1 .. 3) = "-aP" then
kono
parents:
diff changeset
1786 Prj_Env.Add_Directories (Prj_Path, Argv (4 .. Argv'Last));
kono
parents:
diff changeset
1787
kono
parents:
diff changeset
1788 -- Processing for -nostdinc
kono
parents:
diff changeset
1789
kono
parents:
diff changeset
1790 elsif Argv (2 .. Argv'Last) = "nostdinc" then
kono
parents:
diff changeset
1791 Opt.No_Stdinc := True;
kono
parents:
diff changeset
1792
kono
parents:
diff changeset
1793 -- Processing for one character switches
kono
parents:
diff changeset
1794
kono
parents:
diff changeset
1795 elsif Argv'Length = 2 then
kono
parents:
diff changeset
1796 case Argv (2) is
kono
parents:
diff changeset
1797 when 'a' => Also_Predef := True;
kono
parents:
diff changeset
1798 when 'h' => Print_Usage := True;
kono
parents:
diff changeset
1799 when 'u' => Reset_Print; Print_Unit := True;
kono
parents:
diff changeset
1800 when 's' => Reset_Print; Print_Source := True;
kono
parents:
diff changeset
1801 when 'o' => Reset_Print; Print_Object := True;
kono
parents:
diff changeset
1802 when 'v' => Verbose_Mode := True;
kono
parents:
diff changeset
1803 when 'd' => Dependable := True;
kono
parents:
diff changeset
1804 when 'l' => License := True;
kono
parents:
diff changeset
1805 when 'V' => Very_Verbose_Mode := True;
kono
parents:
diff changeset
1806
kono
parents:
diff changeset
1807 when others => OK := False;
kono
parents:
diff changeset
1808 end case;
kono
parents:
diff changeset
1809
kono
parents:
diff changeset
1810 -- Processing for -files=file
kono
parents:
diff changeset
1811
kono
parents:
diff changeset
1812 elsif Argv'Length > 7 and then Argv (1 .. 7) = "-files=" then
kono
parents:
diff changeset
1813 FD := Open_Read (Argv (8 .. Argv'Last), GNAT.OS_Lib.Text);
kono
parents:
diff changeset
1814
kono
parents:
diff changeset
1815 if FD = Invalid_FD then
kono
parents:
diff changeset
1816 Osint.Fail ("could not find text file """ &
kono
parents:
diff changeset
1817 Argv (8 .. Argv'Last) & '"');
kono
parents:
diff changeset
1818 end if;
kono
parents:
diff changeset
1819
kono
parents:
diff changeset
1820 Len := Integer (File_Length (FD));
kono
parents:
diff changeset
1821
kono
parents:
diff changeset
1822 declare
kono
parents:
diff changeset
1823 Buffer : String (1 .. Len + 1);
kono
parents:
diff changeset
1824 Index : Positive := 1;
kono
parents:
diff changeset
1825 Last : Positive;
kono
parents:
diff changeset
1826
kono
parents:
diff changeset
1827 begin
kono
parents:
diff changeset
1828 -- Read the file
kono
parents:
diff changeset
1829
kono
parents:
diff changeset
1830 Len := Read (FD, Buffer (1)'Address, Len);
kono
parents:
diff changeset
1831 Buffer (Buffer'Last) := ASCII.NUL;
kono
parents:
diff changeset
1832 Close (FD);
kono
parents:
diff changeset
1833
kono
parents:
diff changeset
1834 -- Scan the file line by line
kono
parents:
diff changeset
1835
kono
parents:
diff changeset
1836 while Index < Buffer'Last loop
kono
parents:
diff changeset
1837
kono
parents:
diff changeset
1838 -- Find the end of line
kono
parents:
diff changeset
1839
kono
parents:
diff changeset
1840 Last := Index;
kono
parents:
diff changeset
1841 while Last <= Buffer'Last
kono
parents:
diff changeset
1842 and then Buffer (Last) /= ASCII.LF
kono
parents:
diff changeset
1843 and then Buffer (Last) /= ASCII.CR
kono
parents:
diff changeset
1844 loop
kono
parents:
diff changeset
1845 Last := Last + 1;
kono
parents:
diff changeset
1846 end loop;
kono
parents:
diff changeset
1847
kono
parents:
diff changeset
1848 -- Ignore empty lines
kono
parents:
diff changeset
1849
kono
parents:
diff changeset
1850 if Last > Index then
kono
parents:
diff changeset
1851 Add_File (Buffer (Index .. Last - 1));
kono
parents:
diff changeset
1852 end if;
kono
parents:
diff changeset
1853
kono
parents:
diff changeset
1854 -- Find the beginning of the next line
kono
parents:
diff changeset
1855
kono
parents:
diff changeset
1856 Index := Last;
kono
parents:
diff changeset
1857 while Buffer (Index) = ASCII.CR or else
kono
parents:
diff changeset
1858 Buffer (Index) = ASCII.LF
kono
parents:
diff changeset
1859 loop
kono
parents:
diff changeset
1860 Index := Index + 1;
kono
parents:
diff changeset
1861 end loop;
kono
parents:
diff changeset
1862 end loop;
kono
parents:
diff changeset
1863 end;
kono
parents:
diff changeset
1864
kono
parents:
diff changeset
1865 -- Processing for --RTS=path
kono
parents:
diff changeset
1866
kono
parents:
diff changeset
1867 elsif Argv'Length >= 5 and then Argv (1 .. 5) = "--RTS" then
kono
parents:
diff changeset
1868 if Argv'Length <= 6 or else Argv (6) /= '='then
kono
parents:
diff changeset
1869 Osint.Fail ("missing path for --RTS");
kono
parents:
diff changeset
1870
kono
parents:
diff changeset
1871 else
kono
parents:
diff changeset
1872 -- Check that it is the first time we see this switch or, if
kono
parents:
diff changeset
1873 -- it is not the first time, the same path is specified.
kono
parents:
diff changeset
1874
kono
parents:
diff changeset
1875 if RTS_Specified = null then
kono
parents:
diff changeset
1876 RTS_Specified := new String'(Argv (7 .. Argv'Last));
kono
parents:
diff changeset
1877
kono
parents:
diff changeset
1878 elsif RTS_Specified.all /= Argv (7 .. Argv'Last) then
kono
parents:
diff changeset
1879 Osint.Fail ("--RTS cannot be specified multiple times");
kono
parents:
diff changeset
1880 end if;
kono
parents:
diff changeset
1881
kono
parents:
diff changeset
1882 -- Valid --RTS switch
kono
parents:
diff changeset
1883
kono
parents:
diff changeset
1884 Opt.No_Stdinc := True;
kono
parents:
diff changeset
1885 Opt.RTS_Switch := True;
kono
parents:
diff changeset
1886 end if;
kono
parents:
diff changeset
1887
kono
parents:
diff changeset
1888 else
kono
parents:
diff changeset
1889 OK := False;
kono
parents:
diff changeset
1890 end if;
kono
parents:
diff changeset
1891
kono
parents:
diff changeset
1892 -- If not a switch, it must be a file name
kono
parents:
diff changeset
1893
kono
parents:
diff changeset
1894 else
kono
parents:
diff changeset
1895 Add_File (Argv);
kono
parents:
diff changeset
1896 end if;
kono
parents:
diff changeset
1897
kono
parents:
diff changeset
1898 if not OK then
kono
parents:
diff changeset
1899 Write_Str ("warning: unknown switch """);
kono
parents:
diff changeset
1900 Write_Str (Argv);
kono
parents:
diff changeset
1901 Write_Line ("""");
kono
parents:
diff changeset
1902 end if;
kono
parents:
diff changeset
1903
kono
parents:
diff changeset
1904 end Scan_Ls_Arg;
kono
parents:
diff changeset
1905
kono
parents:
diff changeset
1906 -----------
kono
parents:
diff changeset
1907 -- Usage --
kono
parents:
diff changeset
1908 -----------
kono
parents:
diff changeset
1909
kono
parents:
diff changeset
1910 procedure Usage is
kono
parents:
diff changeset
1911 begin
kono
parents:
diff changeset
1912 -- Usage line
kono
parents:
diff changeset
1913
kono
parents:
diff changeset
1914 Write_Str ("Usage: ");
kono
parents:
diff changeset
1915 Osint.Write_Program_Name;
kono
parents:
diff changeset
1916 Write_Str (" switches [list of object files]");
kono
parents:
diff changeset
1917 Write_Eol;
kono
parents:
diff changeset
1918 Write_Eol;
kono
parents:
diff changeset
1919
kono
parents:
diff changeset
1920 -- GNATLS switches
kono
parents:
diff changeset
1921
kono
parents:
diff changeset
1922 Write_Str ("switches:");
kono
parents:
diff changeset
1923 Write_Eol;
kono
parents:
diff changeset
1924
kono
parents:
diff changeset
1925 Display_Usage_Version_And_Help;
kono
parents:
diff changeset
1926
kono
parents:
diff changeset
1927 -- Line for -a
kono
parents:
diff changeset
1928
kono
parents:
diff changeset
1929 Write_Str (" -a also output relevant predefined units");
kono
parents:
diff changeset
1930 Write_Eol;
kono
parents:
diff changeset
1931
kono
parents:
diff changeset
1932 -- Line for -u
kono
parents:
diff changeset
1933
kono
parents:
diff changeset
1934 Write_Str (" -u output only relevant unit names");
kono
parents:
diff changeset
1935 Write_Eol;
kono
parents:
diff changeset
1936
kono
parents:
diff changeset
1937 -- Line for -h
kono
parents:
diff changeset
1938
kono
parents:
diff changeset
1939 Write_Str (" -h output this help message");
kono
parents:
diff changeset
1940 Write_Eol;
kono
parents:
diff changeset
1941
kono
parents:
diff changeset
1942 -- Line for -s
kono
parents:
diff changeset
1943
kono
parents:
diff changeset
1944 Write_Str (" -s output only relevant source names");
kono
parents:
diff changeset
1945 Write_Eol;
kono
parents:
diff changeset
1946
kono
parents:
diff changeset
1947 -- Line for -o
kono
parents:
diff changeset
1948
kono
parents:
diff changeset
1949 Write_Str (" -o output only relevant object names");
kono
parents:
diff changeset
1950 Write_Eol;
kono
parents:
diff changeset
1951
kono
parents:
diff changeset
1952 -- Line for -d
kono
parents:
diff changeset
1953
kono
parents:
diff changeset
1954 Write_Str (" -d output sources on which specified units " &
kono
parents:
diff changeset
1955 "depend");
kono
parents:
diff changeset
1956 Write_Eol;
kono
parents:
diff changeset
1957
kono
parents:
diff changeset
1958 -- Line for -l
kono
parents:
diff changeset
1959
kono
parents:
diff changeset
1960 Write_Str (" -l output license information");
kono
parents:
diff changeset
1961 Write_Eol;
kono
parents:
diff changeset
1962
kono
parents:
diff changeset
1963 -- Line for -v
kono
parents:
diff changeset
1964
kono
parents:
diff changeset
1965 Write_Str (" -v verbose output, full path and unit " &
kono
parents:
diff changeset
1966 "information");
kono
parents:
diff changeset
1967 Write_Eol;
kono
parents:
diff changeset
1968 Write_Eol;
kono
parents:
diff changeset
1969
kono
parents:
diff changeset
1970 -- Line for -files=
kono
parents:
diff changeset
1971
kono
parents:
diff changeset
1972 Write_Str (" -files=fil files are listed in text file 'fil'");
kono
parents:
diff changeset
1973 Write_Eol;
kono
parents:
diff changeset
1974
kono
parents:
diff changeset
1975 -- Line for -aI switch
kono
parents:
diff changeset
1976
kono
parents:
diff changeset
1977 Write_Str (" -aIdir specify source files search path");
kono
parents:
diff changeset
1978 Write_Eol;
kono
parents:
diff changeset
1979
kono
parents:
diff changeset
1980 -- Line for -aO switch
kono
parents:
diff changeset
1981
kono
parents:
diff changeset
1982 Write_Str (" -aOdir specify object files search path");
kono
parents:
diff changeset
1983 Write_Eol;
kono
parents:
diff changeset
1984
kono
parents:
diff changeset
1985 -- Line for -aP switch
kono
parents:
diff changeset
1986
kono
parents:
diff changeset
1987 Write_Str (" -aPdir specify project search path");
kono
parents:
diff changeset
1988 Write_Eol;
kono
parents:
diff changeset
1989
kono
parents:
diff changeset
1990 -- Line for -I switch
kono
parents:
diff changeset
1991
kono
parents:
diff changeset
1992 Write_Str (" -Idir like -aIdir -aOdir");
kono
parents:
diff changeset
1993 Write_Eol;
kono
parents:
diff changeset
1994
kono
parents:
diff changeset
1995 -- Line for -I- switch
kono
parents:
diff changeset
1996
kono
parents:
diff changeset
1997 Write_Str (" -I- do not look for sources & object files");
kono
parents:
diff changeset
1998 Write_Str (" in the default directory");
kono
parents:
diff changeset
1999 Write_Eol;
kono
parents:
diff changeset
2000
kono
parents:
diff changeset
2001 -- Line for -nostdinc
kono
parents:
diff changeset
2002
kono
parents:
diff changeset
2003 Write_Str (" -nostdinc do not look for source files");
kono
parents:
diff changeset
2004 Write_Str (" in the system default directory");
kono
parents:
diff changeset
2005 Write_Eol;
kono
parents:
diff changeset
2006
kono
parents:
diff changeset
2007 -- Line for --RTS
kono
parents:
diff changeset
2008
kono
parents:
diff changeset
2009 Write_Str (" --RTS=dir specify the default source and object search"
kono
parents:
diff changeset
2010 & " path");
kono
parents:
diff changeset
2011 Write_Eol;
kono
parents:
diff changeset
2012
kono
parents:
diff changeset
2013 -- File Status explanation
kono
parents:
diff changeset
2014
kono
parents:
diff changeset
2015 Write_Eol;
kono
parents:
diff changeset
2016 Write_Str (" file status can be:");
kono
parents:
diff changeset
2017 Write_Eol;
kono
parents:
diff changeset
2018
kono
parents:
diff changeset
2019 for ST in File_Status loop
kono
parents:
diff changeset
2020 Write_Str (" ");
kono
parents:
diff changeset
2021 Output_Status (ST, Verbose => False);
kono
parents:
diff changeset
2022 Write_Str (" ==> ");
kono
parents:
diff changeset
2023 Output_Status (ST, Verbose => True);
kono
parents:
diff changeset
2024 Write_Eol;
kono
parents:
diff changeset
2025 end loop;
kono
parents:
diff changeset
2026 end Usage;
kono
parents:
diff changeset
2027
kono
parents:
diff changeset
2028 procedure Check_Version_And_Help is new Check_Version_And_Help_G (Usage);
kono
parents:
diff changeset
2029
kono
parents:
diff changeset
2030 -- Start of processing for Gnatls
kono
parents:
diff changeset
2031
kono
parents:
diff changeset
2032 begin
kono
parents:
diff changeset
2033 -- Initialize standard packages
kono
parents:
diff changeset
2034
kono
parents:
diff changeset
2035 Csets.Initialize;
kono
parents:
diff changeset
2036 Snames.Initialize;
kono
parents:
diff changeset
2037 Stringt.Initialize;
kono
parents:
diff changeset
2038
kono
parents:
diff changeset
2039 -- First check for --version or --help
kono
parents:
diff changeset
2040
kono
parents:
diff changeset
2041 Check_Version_And_Help ("GNATLS", "1992");
kono
parents:
diff changeset
2042
kono
parents:
diff changeset
2043 -- Loop to scan out arguments
kono
parents:
diff changeset
2044
kono
parents:
diff changeset
2045 Next_Arg := 1;
kono
parents:
diff changeset
2046 Scan_Args : while Next_Arg < Arg_Count loop
kono
parents:
diff changeset
2047 declare
kono
parents:
diff changeset
2048 Next_Argv : String (1 .. Len_Arg (Next_Arg));
kono
parents:
diff changeset
2049 begin
kono
parents:
diff changeset
2050 Fill_Arg (Next_Argv'Address, Next_Arg);
kono
parents:
diff changeset
2051 Scan_Ls_Arg (Next_Argv);
kono
parents:
diff changeset
2052 end;
kono
parents:
diff changeset
2053
kono
parents:
diff changeset
2054 Next_Arg := Next_Arg + 1;
kono
parents:
diff changeset
2055 end loop Scan_Args;
kono
parents:
diff changeset
2056
kono
parents:
diff changeset
2057 -- If -l (output license information) is given, it must be the only switch
kono
parents:
diff changeset
2058
kono
parents:
diff changeset
2059 if License then
kono
parents:
diff changeset
2060 if Arg_Count = 2 then
kono
parents:
diff changeset
2061 Output_License_Information;
kono
parents:
diff changeset
2062 Exit_Program (E_Success);
kono
parents:
diff changeset
2063
kono
parents:
diff changeset
2064 else
kono
parents:
diff changeset
2065 Set_Standard_Error;
kono
parents:
diff changeset
2066 Write_Str ("Can't use -l with another switch");
kono
parents:
diff changeset
2067 Write_Eol;
kono
parents:
diff changeset
2068 Try_Help;
kono
parents:
diff changeset
2069 Exit_Program (E_Fatal);
kono
parents:
diff changeset
2070 end if;
kono
parents:
diff changeset
2071 end if;
kono
parents:
diff changeset
2072
kono
parents:
diff changeset
2073 -- Handle --RTS switch
kono
parents:
diff changeset
2074
kono
parents:
diff changeset
2075 if RTS_Specified /= null then
kono
parents:
diff changeset
2076 Search_RTS (RTS_Specified.all);
kono
parents:
diff changeset
2077 end if;
kono
parents:
diff changeset
2078
kono
parents:
diff changeset
2079 -- Add the source and object directories specified on the command line, if
kono
parents:
diff changeset
2080 -- any, to the searched directories.
kono
parents:
diff changeset
2081
kono
parents:
diff changeset
2082 while First_Source_Dir /= null loop
kono
parents:
diff changeset
2083 Add_Src_Search_Dir (First_Source_Dir.Value.all);
kono
parents:
diff changeset
2084 First_Source_Dir := First_Source_Dir.Next;
kono
parents:
diff changeset
2085 end loop;
kono
parents:
diff changeset
2086
kono
parents:
diff changeset
2087 while First_Lib_Dir /= null loop
kono
parents:
diff changeset
2088 Add_Lib_Search_Dir (First_Lib_Dir.Value.all);
kono
parents:
diff changeset
2089 First_Lib_Dir := First_Lib_Dir.Next;
kono
parents:
diff changeset
2090 end loop;
kono
parents:
diff changeset
2091
kono
parents:
diff changeset
2092 -- Finally, add the default directories
kono
parents:
diff changeset
2093
kono
parents:
diff changeset
2094 Osint.Add_Default_Search_Dirs;
kono
parents:
diff changeset
2095
kono
parents:
diff changeset
2096 -- If --RTS= is not specified, check if there is a default runtime
kono
parents:
diff changeset
2097
kono
parents:
diff changeset
2098 if RTS_Specified = null then
kono
parents:
diff changeset
2099 declare
kono
parents:
diff changeset
2100 FD : File_Descriptor;
kono
parents:
diff changeset
2101 Text : Source_Buffer_Ptr;
kono
parents:
diff changeset
2102 Hi : Source_Ptr;
kono
parents:
diff changeset
2103
kono
parents:
diff changeset
2104 begin
kono
parents:
diff changeset
2105 Name_Buffer (1 .. 10) := "system.ads";
kono
parents:
diff changeset
2106 Name_Len := 10;
kono
parents:
diff changeset
2107
kono
parents:
diff changeset
2108 Read_Source_File (Name_Find, 0, Hi, Text, FD);
kono
parents:
diff changeset
2109
kono
parents:
diff changeset
2110 if Null_Source_Buffer_Ptr (Text) then
kono
parents:
diff changeset
2111 No_Runtime := True;
kono
parents:
diff changeset
2112 end if;
kono
parents:
diff changeset
2113 end;
kono
parents:
diff changeset
2114 end if;
kono
parents:
diff changeset
2115
kono
parents:
diff changeset
2116 if Verbose_Mode then
kono
parents:
diff changeset
2117 Write_Eol;
kono
parents:
diff changeset
2118 Display_Version ("GNATLS", "1997");
kono
parents:
diff changeset
2119 Write_Eol;
kono
parents:
diff changeset
2120
kono
parents:
diff changeset
2121 if No_Runtime then
kono
parents:
diff changeset
2122 Write_Str
kono
parents:
diff changeset
2123 ("Default runtime not available. Use --RTS= with a valid runtime");
kono
parents:
diff changeset
2124 Write_Eol;
kono
parents:
diff changeset
2125 Write_Eol;
kono
parents:
diff changeset
2126 Exit_Status := E_Warnings;
kono
parents:
diff changeset
2127 end if;
kono
parents:
diff changeset
2128
kono
parents:
diff changeset
2129 Write_Str ("Source Search Path:");
kono
parents:
diff changeset
2130 Write_Eol;
kono
parents:
diff changeset
2131
kono
parents:
diff changeset
2132 for J in 1 .. Nb_Dir_In_Src_Search_Path loop
kono
parents:
diff changeset
2133 Write_Str (" ");
kono
parents:
diff changeset
2134
kono
parents:
diff changeset
2135 if Dir_In_Src_Search_Path (J)'Length = 0 then
kono
parents:
diff changeset
2136 Write_Str ("<Current_Directory>");
kono
parents:
diff changeset
2137 Write_Eol;
kono
parents:
diff changeset
2138
kono
parents:
diff changeset
2139 elsif not No_Runtime then
kono
parents:
diff changeset
2140 Write_Str
kono
parents:
diff changeset
2141 (Normalize
kono
parents:
diff changeset
2142 (To_Host_Dir_Spec
kono
parents:
diff changeset
2143 (Dir_In_Src_Search_Path (J).all, True).all));
kono
parents:
diff changeset
2144 Write_Eol;
kono
parents:
diff changeset
2145 end if;
kono
parents:
diff changeset
2146 end loop;
kono
parents:
diff changeset
2147
kono
parents:
diff changeset
2148 Write_Eol;
kono
parents:
diff changeset
2149 Write_Eol;
kono
parents:
diff changeset
2150 Write_Str ("Object Search Path:");
kono
parents:
diff changeset
2151 Write_Eol;
kono
parents:
diff changeset
2152
kono
parents:
diff changeset
2153 for J in 1 .. Nb_Dir_In_Obj_Search_Path loop
kono
parents:
diff changeset
2154 Write_Str (" ");
kono
parents:
diff changeset
2155
kono
parents:
diff changeset
2156 if Dir_In_Obj_Search_Path (J)'Length = 0 then
kono
parents:
diff changeset
2157 Write_Str ("<Current_Directory>");
kono
parents:
diff changeset
2158 Write_Eol;
kono
parents:
diff changeset
2159
kono
parents:
diff changeset
2160 elsif not No_Runtime then
kono
parents:
diff changeset
2161 Write_Str
kono
parents:
diff changeset
2162 (Normalize
kono
parents:
diff changeset
2163 (To_Host_Dir_Spec
kono
parents:
diff changeset
2164 (Dir_In_Obj_Search_Path (J).all, True).all));
kono
parents:
diff changeset
2165 Write_Eol;
kono
parents:
diff changeset
2166 end if;
kono
parents:
diff changeset
2167 end loop;
kono
parents:
diff changeset
2168
kono
parents:
diff changeset
2169 Write_Eol;
kono
parents:
diff changeset
2170 Write_Eol;
kono
parents:
diff changeset
2171 Write_Str (Project_Search_Path);
kono
parents:
diff changeset
2172 Write_Eol;
kono
parents:
diff changeset
2173 Write_Str (" <Current_Directory>");
kono
parents:
diff changeset
2174 Write_Eol;
kono
parents:
diff changeset
2175
kono
parents:
diff changeset
2176 Prj_Env.Initialize_Default_Project_Path
kono
parents:
diff changeset
2177 (Prj_Path, Target_Name => Sdefault.Target_Name.all);
kono
parents:
diff changeset
2178
kono
parents:
diff changeset
2179 declare
kono
parents:
diff changeset
2180 First : Natural;
kono
parents:
diff changeset
2181 Last : Natural;
kono
parents:
diff changeset
2182
kono
parents:
diff changeset
2183 begin
kono
parents:
diff changeset
2184
kono
parents:
diff changeset
2185 if Prj_Path.all /= "" then
kono
parents:
diff changeset
2186 First := Prj_Path'First;
kono
parents:
diff changeset
2187 loop
kono
parents:
diff changeset
2188 while First <= Prj_Path'Last
kono
parents:
diff changeset
2189 and then (Prj_Path (First) = Path_Separator)
kono
parents:
diff changeset
2190 loop
kono
parents:
diff changeset
2191 First := First + 1;
kono
parents:
diff changeset
2192 end loop;
kono
parents:
diff changeset
2193
kono
parents:
diff changeset
2194 exit when First > Prj_Path'Last;
kono
parents:
diff changeset
2195
kono
parents:
diff changeset
2196 Last := First;
kono
parents:
diff changeset
2197 while Last < Prj_Path'Last
kono
parents:
diff changeset
2198 and then Prj_Path (Last + 1) /= Path_Separator
kono
parents:
diff changeset
2199 loop
kono
parents:
diff changeset
2200 Last := Last + 1;
kono
parents:
diff changeset
2201 end loop;
kono
parents:
diff changeset
2202
kono
parents:
diff changeset
2203 if First /= Last or else Prj_Path (First) /= '.' then
kono
parents:
diff changeset
2204
kono
parents:
diff changeset
2205 -- If the directory is ".", skip it as it is the current
kono
parents:
diff changeset
2206 -- directory and it is already the first directory in the
kono
parents:
diff changeset
2207 -- project path.
kono
parents:
diff changeset
2208
kono
parents:
diff changeset
2209 Write_Str (" ");
kono
parents:
diff changeset
2210 Write_Str
kono
parents:
diff changeset
2211 (Normalize
kono
parents:
diff changeset
2212 (To_Host_Dir_Spec
kono
parents:
diff changeset
2213 (Prj_Path (First .. Last), True).all));
kono
parents:
diff changeset
2214 Write_Eol;
kono
parents:
diff changeset
2215 end if;
kono
parents:
diff changeset
2216
kono
parents:
diff changeset
2217 First := Last + 1;
kono
parents:
diff changeset
2218 end loop;
kono
parents:
diff changeset
2219 end if;
kono
parents:
diff changeset
2220 end;
kono
parents:
diff changeset
2221
kono
parents:
diff changeset
2222 Write_Eol;
kono
parents:
diff changeset
2223 end if;
kono
parents:
diff changeset
2224
kono
parents:
diff changeset
2225 -- Output usage information when requested
kono
parents:
diff changeset
2226
kono
parents:
diff changeset
2227 if Print_Usage then
kono
parents:
diff changeset
2228 Usage;
kono
parents:
diff changeset
2229 end if;
kono
parents:
diff changeset
2230
kono
parents:
diff changeset
2231 if not More_Lib_Files then
kono
parents:
diff changeset
2232 if not Print_Usage and then not Verbose_Mode then
kono
parents:
diff changeset
2233 if Arg_Count = 1 then
kono
parents:
diff changeset
2234 Usage;
kono
parents:
diff changeset
2235 else
kono
parents:
diff changeset
2236 Try_Help;
kono
parents:
diff changeset
2237 Exit_Status := E_Fatal;
kono
parents:
diff changeset
2238 end if;
kono
parents:
diff changeset
2239 end if;
kono
parents:
diff changeset
2240
kono
parents:
diff changeset
2241 Exit_Program (Exit_Status);
kono
parents:
diff changeset
2242 end if;
kono
parents:
diff changeset
2243
kono
parents:
diff changeset
2244 Initialize_ALI;
kono
parents:
diff changeset
2245 Initialize_ALI_Source;
kono
parents:
diff changeset
2246
kono
parents:
diff changeset
2247 -- Print out all libraries for which no ALI files can be located
kono
parents:
diff changeset
2248
kono
parents:
diff changeset
2249 while More_Lib_Files loop
kono
parents:
diff changeset
2250 Main_File := Next_Main_Lib_File;
kono
parents:
diff changeset
2251 Ali_File := Full_Lib_File_Name (Lib_File_Name (Main_File));
kono
parents:
diff changeset
2252
kono
parents:
diff changeset
2253 if Ali_File = No_File then
kono
parents:
diff changeset
2254 if Very_Verbose_Mode then
kono
parents:
diff changeset
2255 GNATDIST.Output_No_ALI (Lib_File_Name (Main_File));
kono
parents:
diff changeset
2256
kono
parents:
diff changeset
2257 else
kono
parents:
diff changeset
2258 Set_Standard_Error;
kono
parents:
diff changeset
2259 Write_Str ("Can't find library info for ");
kono
parents:
diff changeset
2260 Get_Name_String (Main_File);
kono
parents:
diff changeset
2261 Write_Char ('"'); -- "
kono
parents:
diff changeset
2262 Write_Str (Name_Buffer (1 .. Name_Len));
kono
parents:
diff changeset
2263 Write_Char ('"'); -- "
kono
parents:
diff changeset
2264 Write_Eol;
kono
parents:
diff changeset
2265 Exit_Status := E_Fatal;
kono
parents:
diff changeset
2266 end if;
kono
parents:
diff changeset
2267
kono
parents:
diff changeset
2268 else
kono
parents:
diff changeset
2269 Ali_File := Strip_Directory (Ali_File);
kono
parents:
diff changeset
2270
kono
parents:
diff changeset
2271 if Get_Name_Table_Int (Ali_File) = 0 then
kono
parents:
diff changeset
2272 Text := Read_Library_Info (Ali_File, True);
kono
parents:
diff changeset
2273
kono
parents:
diff changeset
2274 declare
kono
parents:
diff changeset
2275 Discard : ALI_Id;
kono
parents:
diff changeset
2276 begin
kono
parents:
diff changeset
2277 Discard :=
kono
parents:
diff changeset
2278 Scan_ALI
kono
parents:
diff changeset
2279 (Ali_File,
kono
parents:
diff changeset
2280 Text,
kono
parents:
diff changeset
2281 Ignore_ED => False,
kono
parents:
diff changeset
2282 Err => False,
kono
parents:
diff changeset
2283 Ignore_Errors => True);
kono
parents:
diff changeset
2284 end;
kono
parents:
diff changeset
2285
kono
parents:
diff changeset
2286 Free (Text);
kono
parents:
diff changeset
2287 end if;
kono
parents:
diff changeset
2288 end if;
kono
parents:
diff changeset
2289 end loop;
kono
parents:
diff changeset
2290
kono
parents:
diff changeset
2291 -- Reset default output file descriptor, if needed
kono
parents:
diff changeset
2292
kono
parents:
diff changeset
2293 Set_Standard_Output;
kono
parents:
diff changeset
2294
kono
parents:
diff changeset
2295 if Very_Verbose_Mode then
kono
parents:
diff changeset
2296 for A in ALIs.First .. ALIs.Last loop
kono
parents:
diff changeset
2297 GNATDIST.Output_ALI (A);
kono
parents:
diff changeset
2298 end loop;
kono
parents:
diff changeset
2299
kono
parents:
diff changeset
2300 return;
kono
parents:
diff changeset
2301 end if;
kono
parents:
diff changeset
2302
kono
parents:
diff changeset
2303 Find_General_Layout;
kono
parents:
diff changeset
2304
kono
parents:
diff changeset
2305 for Id in ALIs.First .. ALIs.Last loop
kono
parents:
diff changeset
2306 declare
kono
parents:
diff changeset
2307 Last_U : Unit_Id;
kono
parents:
diff changeset
2308
kono
parents:
diff changeset
2309 begin
kono
parents:
diff changeset
2310 Get_Name_String (Units.Table (ALIs.Table (Id).First_Unit).Uname);
kono
parents:
diff changeset
2311
kono
parents:
diff changeset
2312 if Also_Predef or else not Is_Internal_Unit then
kono
parents:
diff changeset
2313 if ALIs.Table (Id).No_Object then
kono
parents:
diff changeset
2314 Output_Object (No_File);
kono
parents:
diff changeset
2315 else
kono
parents:
diff changeset
2316 Output_Object (ALIs.Table (Id).Ofile_Full_Name);
kono
parents:
diff changeset
2317 end if;
kono
parents:
diff changeset
2318
kono
parents:
diff changeset
2319 -- In verbose mode print all main units in the ALI file, otherwise
kono
parents:
diff changeset
2320 -- just print the first one to ease columnwise printout
kono
parents:
diff changeset
2321
kono
parents:
diff changeset
2322 if Verbose_Mode then
kono
parents:
diff changeset
2323 Last_U := ALIs.Table (Id).Last_Unit;
kono
parents:
diff changeset
2324 else
kono
parents:
diff changeset
2325 Last_U := ALIs.Table (Id).First_Unit;
kono
parents:
diff changeset
2326 end if;
kono
parents:
diff changeset
2327
kono
parents:
diff changeset
2328 for U in ALIs.Table (Id).First_Unit .. Last_U loop
kono
parents:
diff changeset
2329 if U /= ALIs.Table (Id).First_Unit
kono
parents:
diff changeset
2330 and then Selective_Output
kono
parents:
diff changeset
2331 and then Print_Unit
kono
parents:
diff changeset
2332 then
kono
parents:
diff changeset
2333 Write_Eol;
kono
parents:
diff changeset
2334 end if;
kono
parents:
diff changeset
2335
kono
parents:
diff changeset
2336 Output_Unit (Id, U);
kono
parents:
diff changeset
2337
kono
parents:
diff changeset
2338 -- Output source now, unless if it will be done as part of
kono
parents:
diff changeset
2339 -- outputing dependencies.
kono
parents:
diff changeset
2340
kono
parents:
diff changeset
2341 if not (Dependable and then Print_Source) then
kono
parents:
diff changeset
2342 Output_Source (Corresponding_Sdep_Entry (Id, U));
kono
parents:
diff changeset
2343 end if;
kono
parents:
diff changeset
2344 end loop;
kono
parents:
diff changeset
2345
kono
parents:
diff changeset
2346 -- Print out list of units on which this unit depends (D lines)
kono
parents:
diff changeset
2347
kono
parents:
diff changeset
2348 if Dependable and then Print_Source then
kono
parents:
diff changeset
2349 if Verbose_Mode then
kono
parents:
diff changeset
2350 Write_Str ("depends upon");
kono
parents:
diff changeset
2351 Write_Eol;
kono
parents:
diff changeset
2352 Write_Str (" ");
kono
parents:
diff changeset
2353 else
kono
parents:
diff changeset
2354 Write_Eol;
kono
parents:
diff changeset
2355 end if;
kono
parents:
diff changeset
2356
kono
parents:
diff changeset
2357 for D in
kono
parents:
diff changeset
2358 ALIs.Table (Id).First_Sdep .. ALIs.Table (Id).Last_Sdep
kono
parents:
diff changeset
2359 loop
kono
parents:
diff changeset
2360 if Also_Predef
kono
parents:
diff changeset
2361 or else not Is_Internal_File_Name (Sdep.Table (D).Sfile)
kono
parents:
diff changeset
2362 then
kono
parents:
diff changeset
2363 if Verbose_Mode then
kono
parents:
diff changeset
2364 Write_Str (" ");
kono
parents:
diff changeset
2365 Output_Source (D);
kono
parents:
diff changeset
2366
kono
parents:
diff changeset
2367 elsif Too_Long then
kono
parents:
diff changeset
2368 Write_Str (" ");
kono
parents:
diff changeset
2369 Output_Source (D);
kono
parents:
diff changeset
2370 Write_Eol;
kono
parents:
diff changeset
2371
kono
parents:
diff changeset
2372 else
kono
parents:
diff changeset
2373 Write_Str (Spaces (1 .. Source_Start - 2));
kono
parents:
diff changeset
2374 Output_Source (D);
kono
parents:
diff changeset
2375 Write_Eol;
kono
parents:
diff changeset
2376 end if;
kono
parents:
diff changeset
2377 end if;
kono
parents:
diff changeset
2378 end loop;
kono
parents:
diff changeset
2379 end if;
kono
parents:
diff changeset
2380
kono
parents:
diff changeset
2381 Write_Eol;
kono
parents:
diff changeset
2382 end if;
kono
parents:
diff changeset
2383 end;
kono
parents:
diff changeset
2384 end loop;
kono
parents:
diff changeset
2385
kono
parents:
diff changeset
2386 -- All done. Set proper exit status
kono
parents:
diff changeset
2387
kono
parents:
diff changeset
2388 Namet.Finalize;
kono
parents:
diff changeset
2389 Exit_Program (Exit_Status);
kono
parents:
diff changeset
2390 end Gnatls;