]> gcc.gnu.org Git - gcc.git/blame - gcc/vmsconfig.com
(make_var_volatile): Return type is void.
[gcc.git] / gcc / vmsconfig.com
CommitLineData
01fa70ee 1$ !
4491de59 2$ ! Set up to compile GCC on VAX/VMS
01fa70ee 3$ !
7f211789
RS
4$! Set the def dir to proper place for use in batch. Works for interactive too.
5$flnm = f$enviroment("PROCEDURE") ! get current procedure name
6$set default 'f$parse(flnm,,,"DEVICE")''f$parse(flnm,,,"DIRECTORY")'
7$ !
8$set symbol/scope=(nolocal,noglobal)
9$ !
01fa70ee
MT
10$ echo = "write sys$output"
11$ !
12$ if f$search("config.h") .nes. "" then delete config.h.*
bcc81b85
RK
13$ copy [.config.vax]xm-vms.h []config.h
14$ echo "Linked `config.h' to `[.config.vax]xm-vms.h'.
4491de59
RS
15$ !
16$ if f$search("tconfig.h") .nes. "" then delete tconfig.h.*
17$ create []tconfig.h
18$DECK
19/* tconfig.h == config.h :: target and host configurations are the same */
20#include "config.h"
21$EOD
22$ echo "Created `tconfig.h'.
01fa70ee 23$ !
ae54cf6d
RS
24$ if f$search("hconfig.h") .nes. "" then delete hconfig.h.*
25$ create []hconfig.h
26$DECK
bcc81b85 27/* hconfig.h == config.h :: host and target configurations are the same */
ae54cf6d
RS
28#include "config.h"
29$EOD
30$ echo "Created `hconfig.h'.
31$ !
01fa70ee 32$ if f$search("tm.h") .nes. "" then delete tm.h.*
5cb10f0e
RS
33$!! copy [.config.vax]vms.h []tm.h
34$ edit/tpu/nojournal/nosection/nodisplay/command=sys$input -
35 [.config.vax]vms.h /output=[]tm.h
36$DECK
37!
38! Copy file, changing lines of the form
39! #include "vax/*"
40! into
41! #include "[.config.vax]*"
42!
43 file := CREATE_BUFFER("file", GET_INFO(COMMAND_LINE, "file_name"));
44 targ := LINE_BEGIN & '#include' & SPAN(ASCII(32)+ASCII(9)) & '"vax/';
45 rang := CREATE_RANGE(BEGINNING_OF(file), END_OF(file));
46 LOOP
47 incl := SEARCH_QUIETLY(targ, FORWARD, EXACT, rang);
48 EXITIF incl = 0;
49 POSITION(BEGINNING_OF(incl));
50 ERASE(incl);
51 COPY_TEXT('#include "[.config.vax]');
52 rang := CREATE_RANGE(END_OF(incl), END_OF(file));
53 ENDLOOP;
54 WRITE_FILE(file, GET_INFO(COMMAND_LINE, "output_file"));
55 QUIT
56$EOD
57$ echo "Generated `tm.h' from `[.config.vax]vms.h'.
01fa70ee
MT
58$ !
59$ if f$search("md.") .nes. "" then delete md..*
bcc81b85
RK
60$ copy [.config.vax]vax.md []md.
61$ echo "Linked `md' to `[.config.vax]vax.md'.
01fa70ee
MT
62$ !
63$ if f$search("aux-output.c") .nes. "" then delete aux-output.c.*
bcc81b85
RK
64$ copy [.config.vax]vax.c []aux-output.c
65$ echo "Linked `aux-output.c' to `[.config.vax]vax.c'.
01fa70ee
MT
66$ !
67$!
68$!
69$! Create the file version.opt, which helps identify the executable.
70$!
71$search version.c version_string,"="/match=and/output=t.tmp
72$open ifile$ t.tmp
73$read ifile$ line
74$close ifile$
4491de59 75$delete t.tmp;
01fa70ee
MT
76$ijk=f$locate("""",line)+1
77$line=f$extract(ijk,f$length(line)-ijk,line)
78$ijk=f$locate("""",line)
79$line=f$extract(0,ijk,line)
80$ijk=f$locate("\n",line)
81$line=f$extract(0,ijk,line)
82$!
83$i=0
84$loop:
85$elm=f$element(i," ",line)
86$if elm.eqs."" then goto no_ident
87$if (elm.les."9").and.(elm.ges."0") then goto write_ident
88$i=i+1
89$goto loop
90$!
91$no_ident:
92$elm="?.??"
93$!
94$!
95$write_ident:
96$open ifile$ version.opt/write
97$write ifile$ "ident="+""""+elm+""""
98$close ifile$
4491de59 99$purge version.opt
01fa70ee
MT
100$!
101$!
7f211789
RS
102$! create linker options files that lists all of the components for all
103$! possible compilers. We do this by editing the file Makefile.in, and
104$! generating the relevant files from it.
105$!
106$!
2f77c933
CH
107$! Make a copy of the makefile if the sources are on a disk that is NFS
108$! mounted on a unix machine.
109$if f$search("Makefile.in").eqs."" .and. f$search("$M$akefile.in").nes."" -
110 then copy $M$akefile.in Makefile.in
111$!
112$!
7f211789
RS
113$echo "Now processing Makefile.in to generate linker option files."
114$edit/tpu/nojournal/nosection/nodisplay/command=sys$input
115 PROCEDURE generate_option_file (TAG_NAME, outfile)
116 position (beginning_of (newbuffer));
117 recursive_fetch_tag (TAG_NAME);
118!
119! Now fix up a few things in the output buffer
120!
121 pat_replace (".o ",",");
122 pat_replace (".o",""); !appear at end of lines.
123!
124! Remove trailing commas, if present.
125!
126 position (beginning_of (newbuffer));
127 LOOP
4491de59
RS
128 range1 := search_quietly("," & ((SPAN(" ") & LINE_END) | LINE_END),
129 FORWARD, EXACT);
7f211789
RS
130 exitif range1 = 0;
131 position (beginning_of (range1));
132 erase(range1);
133 split_line;
134 ENDLOOP;
135! get rid of leading spaces on lines.
136 position (beginning_of (current_buffer)) ;
137 LOOP
138 range1 := search_quietly ( LINE_BEGIN & " ", FORWARD, EXACT) ;
139 EXITIF range1 = 0;
140 position (end_of (range1));
141 erase_character(1);
142 ENDLOOP;
143!
144! Now write the output file.
145!
146 SET(OUTPUT_FILE, newbuffer, outfile);
147 write_file (newbuffer);
148 erase (newbuffer);
149 ENDPROCEDURE;
150
151!
152! Looks up a tag, copies it to newbuffer, and then translates any $(...)
153! definitions that appear. The translation is put at the current point.
154!
155 PROCEDURE recursive_fetch_tag (TAG_N);
156 fetch_tag (TAG_N);
157!
158! substitute any makefile symbols $(...)
159!
160 position (beginning_of (current_buffer)) ;
161 LOOP
4491de59
RS
162 range1 := search_quietly ("$(" &
163 SPAN("abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ#~0123456789")
164 & ")", FORWARD, EXACT) ;
7f211789
RS
165 EXITIF range1 = 0;
166 position (beginning_of (range1));
167 move_horizontal(2);
168 mark_1 := MARK (NONE);
169 position (end_of (range1));
170 move_horizontal(-1);
171 mark_2 := MARK (NONE);
172 tag_range := CREATE_RANGE(MARK_1, MARK_2, NONE);
173 position (end_of (range1));
174 tag_string := STR (tag_range);
175 erase (range1);
176 fetch_tag (LINE_BEGIN & tag_string & ((SPAN(" ") & "=") | "="));
177 position (beginning_of (current_buffer)) ;
178 ENDLOOP;
179 ENDPROCEDURE;
180
181!
182! Looks up the translation of a tag, and inserts it at the current location
183! in the buffer
184!
185 PROCEDURE fetch_tag (TAG_N);
186 LOCAL mark1, mark2, mark3, range2;
187 mark3 := MARK(NONE) ;
188 position (beginning_of (mainbuffer)) ;
189 range2 := search_quietly (TAG_N, FORWARD, EXACT) ;
190 IF (range2 = 0) then
191 position (mark3);
192 return;
193 endif;
194 position (end_of (range2)) ;
195 MOVE_HORIZONTAL(1);
196 mark1 := MARK(NONE) ;
197 position (beginning_of (range2)) ;
198 MOVE_VERTICAL(1);
199 MOVE_HORIZONTAL(-2);
200 LOOP
201 EXITIF CURRENT_CHARACTER <> "\" ;
202 ERASE_CHARACTER(1);
203 MOVE_HORIZONTAL(1);
204 MOVE_VERTICAL(1);
205 MOVE_HORIZONTAL(-2);
206 ENDLOOP;
207 MOVE_HORIZONTAL(1);
208 mark2 := MARK(NONE) ;
209 range2 := CREATE_RANGE(mark1, mark2, NONE) ;
210 position (mark3);
211 if (length(range2) = 0) then return; endif;
212 copy_text(range2);
213 ENDPROCEDURE;
214
215 PROCEDURE pat_replace (
216 oldstring, !
217 newstring) !
218 LOCAL range2;
219 position (beginning_of (current_buffer)) ;
220 LOOP
221 range2 := search_quietly (oldstring, FORWARD, EXACT) ;
222 EXITIF range2 = 0 ;
223 position (beginning_of (range2)) ;
224 erase (range2) ;
225 copy_text (newstring) ;
226 ENDLOOP ;
227 ENDPROCEDURE ;
228
229! this is the start of the main procedure
230 filename := GET_INFO (COMMAND_LINE, 'file_name') ;
231 mainbuffer := CREATE_BUFFER ("Makefile.in", "Makefile.in") ;
232 newbuffer := CREATE_BUFFER("outfile");
233 compiler_list := CREATE_BUFFER("compilers");
234!
235! Add to this list, as required. The file "Makefile.in" is searched for a
236! tag that looks like "LINE_BEGIN + 'tag + (optional space) + "="". The
237! contents are assumed to be a list of object files, and from this list a
238! VMS linker options file is generated.
239!
240 position (beginning_of (compiler_list));
241 recursive_fetch_tag(LINE_BEGIN & "COMPILERS" & ((SPAN(" ") & "=") | "="));
242 position (beginning_of (compiler_list));
243 LOOP ! kill leading spaces.
244 exitif current_character <> " ";
245 erase_character(1);
246 ENDLOOP;
247 position (beginning_of (compiler_list));
248 LOOP ! remove any double spaces.
249 range1 := search_quietly (" ", FORWARD, EXACT) ; EXITIF range1 = 0 ;
250 position (beginning_of (range1)) ;
251 erase_character(1);
252 ENDLOOP ;
253 position (end_of (compiler_list));
254 move_horizontal(-1);
255 LOOP ! kill trailing spaces.
256 exitif current_character <> " ";
257 erase_character(1);
258 move_horizontal(-1);
259 ENDLOOP;
260 position (beginning_of (compiler_list));
261 LOOP
262 range1 := search_quietly (" ", FORWARD, EXACT) ;
263 EXITIF range1 = 0 ;
264 position (beginning_of (range1)) ;
265 erase (range1) ;
266 split_line;
267 ENDLOOP ;
268!
269! We now have a list of supported compilers. Now write it, and use it.
270!
271 SET(OUTPUT_FILE, compiler_list, "compilers.list");
272 write_file (compiler_list);
4491de59
RS
273 generate_option_file(LINE_BEGIN & "OBJS" & ((SPAN(" ") & "=") | "="),
274 "independent.opt");
275 generate_option_file(LINE_BEGIN & "LIB2FUNCS" & ((SPAN(" ") & "=") | "="),
276 "libgcc2.list");
7f211789
RS
277!
278! Now change OBJS in the Makefile, so each language specific options file
279! does not pick up all of the language independent files.
280!
281 position (beginning_of (mainbuffer));
4491de59
RS
282 range1 := search_quietly (LINE_BEGIN & "OBJS" & ((SPAN(" ") & "=") | "="),
283 FORWARD, EXACT) ;
7f211789
RS
284 position (end_of (range1));
285 split_line;
286 position (beginning_of (compiler_list));
287 LOOP
288 cmark := mark(NONE);
289 exitif cmark = end_of(compiler_list);
290 message(current_line);
291 generate_option_file(LINE_BEGIN & Current_line & ((SPAN(" ") & ":") | ":"),
4491de59 292 current_line+"-objs.opt");
7f211789
RS
293 position (cmark);
294 move_vertical(1);
295 ENDLOOP ;
296 quit ;
297$ echo ""
298$!
4491de59 299$! Remove excessive versions of the option files...
7f211789 300$!
4491de59
RS
301$ purge *.opt
302$ purge compilers.list,libgcc2.list
7f211789
RS
303$!
304$!
305$!
01fa70ee
MT
306$ if f$search("config.status") .nes. "" then delete config.status.*
307$ open/write file config.status
308$ write file "Links are now set up for use with a vax running VMS."
309$ close file
310$ type config.status
7f211789 311$ echo ""
This page took 0.173568 seconds and 5 git commands to generate.