xref: /third_party/curl/packages/vms/config_h.com (revision 13498266)
1$! File: config_h.com
2$!
3$! This procedure attempts to figure out how to build a config.h file
4$! for the current project.
5$!
6$! P1 specifies the config.h.in file or equivalent.  If it is not specified
7$! then this procedure will search for several common names of the file.
8$!
9$! The CONFIGURE shell script will be examined for hints and a few symbols
10$! but most of the tests will not produce valid results on OpenVMS.  Some
11$! will produce false positives and some will produce false negatives.
12$!
13$! It is easier to just read the config.h_in file and make up tests based
14$! on what is in it!
15$!
16$! This file will create an empty config_vms.h file if one does not exist.
17$! The config_vms.h is intended for manual edits to handle things that
18$! this procedure can not.
19$!
20$! The config_vms.h will be invoked by the resulting config.h file.
21$!
22$! This procedure knows about the DEC C RTL on the system it is on.
23$! Future versions may be handle the GNV, the OpenVMS porting library,
24$! and others.
25$!
26$! This procedure may not guess the options correctly for all architectures,
27$! and is a work in progress.
28$!
29$! Copyright (C) John Malmberg
30$!
31$! Permission to use, copy, modify, and/or distribute this software for any
32$! purpose with or without fee is hereby granted, provided that the above
33$! copyright notice and this permission notice appear in all copies.
34$!
35$! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
36$! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
37$! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
38$! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
39$! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
40$! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
41$! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
42$!
43$! SPDX-License-Identifier: ISC
44$!
45$!============================================================================
46$!
47$ss_normal = 1
48$ss_abort = 44
49$ss_control_y = 1556
50$status = ss_normal
51$on control_y then goto control_y
52$on warning then goto general_error
53$!on warning then set ver
54$!
55$! Some information for writing timestamps to created files
56$!----------------------------------------------------------
57$my_proc = f$environment("PROCEDURE")
58$my_proc_file = f$parse(my_proc,,,"NAME") + f$parse(my_proc,,,"TYPE")
59$tab[0,8] = 9
60$datetime = f$element(0,".",f$cvtime(,"ABSOLUTE","DATETIME"))
61$username = f$edit(f$getjpi("","USERNAME"),"TRIM")
62$!
63$pid = f$getjpi("","PID")
64$tfile1 = "SYS$SCRATCH:config_h_temp1_''pid'.TEMP"
65$dchfile = "SYS$SCRATCH:config_h_decc_''pid'.TEMP"
66$starhfile = "SYS$SCRATCH:config_h_starlet_''pid'.TEMP"
67$configure_script = "SYS$SCRATCH:configure_script_''pid'.TEMP"
68$!
69$!  Get the system type
70$!----------------------
71$arch_type = f$getsyi("arch_type")
72$!
73$! Does config_vms.h exist?
74$!-------------------------
75$update_config_vms = 0
76$file = f$search("sys$disk:[]config_vms.h")
77$if file .nes. ""
78$then
79$   write sys$output "Found existing custom file ''file'."
80$else
81$   update_config_vms = 1
82$   write sys$output "Creating new sys$disk:[]config_vms.h for you."
83$   gosub write_config_vms
84$endif
85$!
86$!
87$! On some platforms, DCL search has problems with searching a file
88$! on a NFS mounted volume.  So copy it to sys$scratch:
89$!
90$if f$search(configure_script) .nes. "" then delete 'configure_script';*
91$copy sys$disk:[]configure 'configure_script'
92$!
93$ssl_header_dir = "OPENSSL:"
94$if f$trnlnm("OPENSSL") .eqs. ""
95$then
96$    ssl_header_dir = "SSL$INCLUDE:"
97$endif
98$!
99$!
100$! Write out the header
101$!----------------------
102$gosub write_config_h_header
103$!
104$!
105$!
106$! config.h.in could have at least five different names depending
107$! on how it was transferred to OpenVMS
108$!------------------------------------------------------------------
109$if p1 .nes. ""
110$then
111$   cfile = p1
112$else
113$   cfile = f$search("sys$disk:[]config.h.in")
114$   if cfile .eqs. ""
115$   then
116$	cfile = f$search("sys$disk:[]config.h_in")
117$	if cfile .eqs. ""
118$	then
119$	    cfile = f$search("sys$disk:[]configh.in")
120$	    if cfile .eqs. ""
121$	    then
122$		cfile = f$search("sys$disk:[]config__2eh.in")
123$		if cfile .eqs. ""
124$		then
125$		    cfile = f$search("sys$disk:[]config.h__2ein")
126$		endif
127$	    endif
128$	endif
129$   endif
130$endif
131$if f$trnlnm("PRJ_INCLUDE") .nes. ""
132$then
133$   cfile = f$search("PRJ_INCLUDE:config.h.in")
134$   if cfile .eqs. ""
135$   then
136$	cfile = f$search("PRJ_INCLUDE:config.h_in")
137$	if cfile .eqs. ""
138$	then
139$	    cfile = f$search("PRJ_INCLUDE:config__2eh.in")
140$	    if cfile .eqs. ""
141$	    then
142$		cfile = f$search("PRJ_INCLUDE:config__2eh.in")
143$		if cfile .eqs. ""
144$		then
145$		    cfile = f$search("PRJ_INCLUDE:config.h__2ein")
146$		endif
147$	    endif
148$	endif
149$    endif
150$endif
151$if cfile .eqs. ""
152$then
153$   write sys$output "Can not find sys$disk:config.h.in"
154$   line_out = "Looked for config.h.in, config.h_in, configh.in, "
155$   line_out = line_out + "config__2eh.in, config.h__2ein"
156$   write/symbol sys$output line_out
157$   if f$trnlnm("PRJ_INCLUDE") .nes. ""
158$   then
159$	write sys$output "Also looked in PRJ_INCLUDE: for these files."
160$   endif
161$!
162$   write tf ""
163$   write tf -
164	"   /* Could not find sys$disk:config.h.in                           */"
165$   write tf -
166	"  /*  Looked also for config.h_in, configh.in, config__2eh.in,     */"
167$   write tf -
168	" /*   config.h__2ein						   */"
169$   if f$trnlnm("PRJ_INCLUDE") .nes. ""
170$   then
171$	write tf -
172	" /* Also looked in PRJ_INCLUDE: for these files.		  */"
173$   endif
174$   write tf -
175	"/*--------------------------------------------------------------*/
176$   write tf ""
177$   goto write_tail
178$endif
179$!
180$!
181$! Locate the DECC libraries in use
182$!-----------------------------------
183$decc_rtldef = f$parse("decc$rtldef","sys$library:.tlb;0")
184$decc_starletdef = f$parse("sys$starlet_c","sys$library:.tlb;0")
185$decc_shr = f$parse("decc$shr","sys$share:.exe;0")
186$!
187$! Dump the DECC header names into a file
188$!----------------------------------------
189$if f$search(dchfile) .nes. "" then delete 'dchfile';*
190$if f$search(tfile1) .nes. "" then delete 'tfile1';*
191$define/user sys$output 'tfile1'
192$library/list 'decc_rtldef'
193$open/read/error=rtldef_loop1_end tf1 'tfile1'
194$open/write/error=rtldef_loop1_end tf2 'dchfile'
195$rtldef_loop1:
196$   read/end=rtldef_loop1_end tf1 line_in
197$   line_in = f$edit(line_in,"TRIM,COMPRESS")
198$   key1 = f$element(0," ",line_in)
199$   key2 = f$element(1," ",line_in)
200$   if key1 .eqs. " " .or. key1 .eqs. "" then goto rtldef_loop1
201$   if key2 .nes. " " .and. key2 .nes. "" then goto rtldef_loop1
202$   write tf2 "|",key1,"|"
203$   goto rtldef_loop1
204$rtldef_loop1_end:
205$if f$trnlnm("tf1","lnm$process",,"SUPERVISOR") .nes. "" then close tf1
206$if f$trnlnm("tf2","lnm$process",,"SUPERVISOR") .nes. "" then close tf2
207$if f$search(tfile1) .nes. "" then delete 'tfile1';*
208$!
209$! Dump the STARLET header names into a file
210$!----------------------------------------
211$if f$search(starhfile) .nes. "" then delete 'starhfile';*
212$if f$search(tfile1) .nes. "" then delete 'tfile1';*
213$define/user sys$output 'tfile1'
214$library/list 'decc_starletdef'
215$open/read/error=stardef_loop1_end tf1 'tfile1'
216$open/write/error=stardef_loop1_end tf2 'starhfile'
217$stardef_loop1:
218$   read/end=stardef_loop1_end tf1 line_in
219$   line_in = f$edit(line_in,"TRIM,COMPRESS")
220$   key1 = f$element(0," ",line_in)
221$   key2 = f$element(1," ",line_in)
222$   if key1 .eqs. " " .or. key1 .eqs. "" then goto stardef_loop1
223$   if key2 .nes. " " .and. key2 .nes. "" then goto stardef_loop1
224$   write tf2 "|",key1,"|"
225$   goto stardef_loop1
226$stardef_loop1_end:
227$if f$trnlnm("tf1","lnm$process",,"SUPERVISOR") .nes. "" then close tf1
228$if f$trnlnm("tf2","lnm$process",,"SUPERVISOR") .nes. "" then close tf2
229$if f$search(tfile1) .nes. "" then delete 'tfile1';*
230$!
231$!
232$! Now calculate what should be in the file from reading
233$! config.h.in and CONFIGURE.
234$!---------------------------------------------------------------
235$open/read inf 'cfile'
236$do_comment = 0
237$if_block = 0
238$cfgh_in_loop1:
239$!set nover
240$   read/end=cfgh_in_loop1_end inf line_in
241$   xline = f$edit(line_in,"TRIM,COMPRESS")
242$!
243$!  Blank line handling
244$!---------------------
245$   if xline .eqs. ""
246$   then
247$	write tf ""
248$	goto cfgh_in_loop1
249$   endif
250$   xlen = f$length(xline)
251$   key = f$extract(0,2,xline)
252$!
253$!  deal with comments by copying exactly
254$!-----------------------------------------
255$   if (do_comment .eq. 1) .or. (key .eqs. "/*")
256$   then
257$	do_comment = 1
258$	write tf line_in
259$	key = f$extract(xlen - 2, 2, xline)
260$	if key .eqs. "*/" then do_comment = 0
261$	goto cfgh_in_loop1
262$   endif
263$!
264$!  Some quick parsing
265$!----------------------
266$   keyif = f$extract(0,3,xline)
267$   key1 = f$element(0," ",xline)
268$   key2 = f$element(1," ",xline)
269$   key2a = f$element(0,"_",key2)
270$   key2b = f$element(1,"_",key2)
271$   key2_len = f$length(key2)
272$   key2_h = f$extract(key2_len - 2, 2, key2)
273$   key2_t = f$extract(key2_len - 5, 5, key2)
274$   if key2_t .eqs. "_TYPE" then key2_h = "_T"
275$   key64 = 0
276$   if f$locate("64", xline) .lt. xlen then key64 = 1
277$!
278$!write sys$output "xline = ''xline'"
279$!
280$!  Comment out this section of the ifblock
281$!-----------------------------------------
282$   if if_block .ge. 3
283$   then
284$	write tf "/* ", xline, " */"
285$	if keyif .eqs. "#en" then if_block = 0
286$	goto cfgh_in_loop1
287$   endif
288$!
289$!  Handle the end of an ifblock
290$!-------------------------------
291$   if keyif .eqs. "#en"
292$   then
293$	write tf xline
294$	if_block = 0
295$	goto cfgh_in_loop1
296$   endif
297$!
298$   if key1 .eqs. "#ifndef"
299$   then
300$!	Manual check for _ALL_SOURCE on AIX error
301$!-----------------------------------------------
302$	if key2 .eqs. "_ALL_SOURCE"
303$	then
304$	   write tf "/* ", xline, " */"
305$!
306$!	   Ignore the rest of the block
307$!--------------------------------------
308$	   if_block = 3
309$	   goto cfgh_in_loop1
310$	endif
311$   endif
312$!
313$!
314$!  Default action for an #if/#else/#endif
315$!------------------------------------------
316$   if keyif .eqs. "#if" .or. keyif .eqs. "#el"
317$   then
318$	if_block = 1
319$	write tf xline
320$	goto cfgh_in_loop1
321$   endif
322$!
323$!
324$!  Process "normal?" stuff
325$!---------------------------
326$   if key1 .eqs. "#undef"
327$   then
328$	key2c = f$element(2, "_", key2)
329$	if (key2c .eqs. "_") .or. (key2c .eqs. "H") then key2c = ""
330$	key2d = f$element(3, "_", key2)
331$	if (key2d .eqs. "_") .or. (key2d .eqs. "H") then key2d = ""
332$	key2e = f$element(4, "_", key2)
333$	if (key2e .eqs. "_") .or. (key2e .eqs. "H") then key2e = ""
334$	if key2d .eqs. "T"
335$	then
336$	    if key2e .eqs. "TYPE"
337$	    then
338$		key2_h = "_T"
339$		key2d = ""
340$	    endif
341$	endif
342$!
343$	double_under = 0
344$!
345$!	Process FCNTL directives
346$!-------------------------------------
347$	if (key2b .eqs. "FCNTL") .and. (key2c .eqs. "O") .and. -
348	   (key2d .eqs. "NONBLOCK")
349$	then
350$	    write tf "#ifndef ''key2'"
351$	    write tf "#define ''key2' 1"
352$	    write tf "#endif"
353$	    goto cfgh_in_loop1
354$	endif
355$!
356$!	Process GETADDRINFO directives
357$!-------------------------------------
358$	if key2 .eqs. "GETADDRINFO_THREADSAFE"
359$	then
360$	    write tf "#ifndef ''key2'"
361$	    write tf "#define ''key2' 1"
362$	    write tf "#endif"
363$	    goto cfgh_in_loop1
364$	endif
365$!
366$!	Process IOCTL directives
367$!-------------------------------------
368$	if (key2b .eqs. "IOCTL") .and. (key2c .nes. "")
369$	then
370$	    if (key2c .eqs. "FIONBIO") .or. (key2c .eqs. "SIOCGIFADDR")
371$	    then
372$		write tf "#ifndef ''key2'"
373$		write tf "#define ''key2' 1"
374$		write tf "#endif"
375$		goto cfgh_in_loop1
376$	    endif
377$	endif
378$!
379$!
380$!	Manual check for LL on
381$!-----------------------------------------------
382$	if key2 .eqs. "LL"
383$	then
384$	   write tf "#ifndef __VAX
385$	   write tf "#define HAVE_''key2' 1"
386$	   write tf "#endif"
387$	   goto cfgh_in_loop1
388$	endif
389$!
390$	if key2 .eqs. "bool_t"
391$	then
392$	    write tf "#ifndef ''key2'"
393$	    write tf "#define ''key2' short"
394$	    write tf "#endif"
395$	    goto cfgh_in_loop1
396$	endif
397$!
398$	if key2 .eqs. "bits16_t"
399$	then
400$	    write tf "#ifndef ''key2'"
401$	    write tf "#define ''key2' short"
402$	    write tf "#endif"
403$	    goto cfgh_in_loop1
404$	endif
405$!
406$	if key2 .eqs. "u_bits16_t"
407$	then
408$	    write tf "#ifndef ''key2'"
409$	    write tf "#define ''key2' unsigned short"
410$	    write tf "#endif"
411$	    goto cfgh_in_loop1
412$	endif
413$!
414$	if key2 .eqs. "bits32_t"
415$	then
416$	    write tf "#ifndef ''key2'"
417$	    write tf "#define ''key2' int"
418$	    write tf "#endif"
419$	    goto cfgh_in_loop1
420$	endif
421$!
422$	if key2 .eqs. "u_bits32_t"
423$	then
424$	    write tf "#ifndef ''key2'"
425$	    write tf "#define ''key2' unsigned int"
426$	    write tf "#endif"
427$	    goto cfgh_in_loop1
428$	endif
429$!
430$	if key2 .eqs. "intmax_t"
431$	then
432$	    write tf "#ifndef ''key2'"
433$	    write tf "#ifdef __VAX"
434$	    write tf "#define ''key2' long"
435$	    write tf "#else"
436$	    write tf "#define ''key2' long long"
437$	    write tf "#endif"
438$	    write tf "#endif"
439$	    goto cfgh_in_loop1
440$	endif
441$!
442$	if key2 .eqs. "uintmax_t"
443$	then
444$	    write tf "#ifndef ''key2'"
445$	    write tf "#ifdef __VAX"
446$	    write tf "#define ''key2' unsigned long"
447$	    write tf "#else"
448$	    write tf "#define ''key2' unsigned long long"
449$	    write tf "#endif"
450$	    write tf "#endif"
451$	    goto cfgh_in_loop1
452$	endif
453$!
454$	if key2 .eqs. "socklen_t"
455$	then
456$	    write tf "#ifndef ''key2'"
457$	    write tf "#define ''key2' int"
458$	    write tf "#endif"
459$	    goto cfgh_in_loop1
460$	endif
461$!
462$	if key2 .eqs. "GETGROUPS_T"
463$	then
464$	    write tf "#ifndef ''key2'"
465$	    write tf "#define ''key2' gid_t"
466$	    write tf "#endif"
467$	    goto cfgh_in_loop1
468$	endif
469$!
470$	if key2 .eqs. "HAVE_DECL_SYS_SIGLIST"
471$	then
472$	    write tf "#ifndef ''key2'"
473$	    write tf "#define ''key2' 0"
474$	    write tf "#endif"
475$	    goto cfgh_in_loop1
476$	endif
477$!
478$	if key2 .eqs. "HAVE_SYS_ERRLIST"
479$	then
480$	    write tf "#ifndef ''key2'"
481$	    write tf "#define ''key2' 1"
482$	    write tf "#endif"
483$	    goto cfgh_in_loop1
484$	endif
485$!
486$	if key2 .eqs. "HAVE_STRUCT_DIRENT_D_INO"
487$	then
488$	    write tf "#ifndef ''key2'"
489$	    write tf "#define ''key2' 1"
490$	    write tf "#endif"
491$	    goto cfgh_in_loop1
492$	endif
493$!
494$	if key2 .eqs. "HAVE_STRUCT_TIMEVAL"
495$	then
496$	    write tf "#ifndef ''key2'"
497$	    write tf "#define ''key2' 1"
498$	    write tf "#endif"
499$	    goto cfgh_in_loop1
500$	endif
501$!
502$!	! The header files have this information, however
503$!      ! The ioctl() call only works on sockets.
504$!	if key2 .eqs. "FIONREAD_IN_SYS_IOCTL"
505$!	then
506$!	    write tf "#ifndef ''key2'"
507$!	    write tf "#define ''key2' 1"
508$!	    write tf "#endif"
509$!	    goto cfgh_in_loop1
510$!	endif
511$!
512$!	! The header files have this information, however
513$!      ! The ioctl() call only works on sockets.
514$!	if key2 .eqs. "GWINSZ_IN_SYS_IOCTL"
515$!	then
516$!	    write tf "#ifndef ''key2'"
517$!	    write tf "#define ''key2' 1"
518$!	    write tf "#endif"
519$!	    goto cfgh_in_loop1
520$!	endif
521$!
522$!	! The header files have this information, however
523$!      ! The ioctl() call only works on sockets.
524$!	if key2 .eqs. "STRUCT_WINSIZE_IN_SYS_IOCTL"
525$!	then
526$!	    write tf "#ifndef ''key2'"
527$!	    write tf "#define ''key2' 0"
528$!	    write tf "#endif"
529$!	    goto cfgh_in_loop1
530$!	endif
531$!
532$	if key2 .eqs. "HAVE_STRUCT_TM_TM_ZONE"
533$	then
534$	    write tf "#ifndef ''key2'"
535$	    write tf "#define ''key2' 1"
536$	    write tf "#endif"
537$	    goto cfgh_in_loop1
538$	endif
539$!
540$	if key2 .eqs. "HAVE_TM_ZONE"
541$	then
542$	    write tf "#ifndef ''key2'"
543$	    write tf "#define ''key2' 1"
544$	    write tf "#endif"
545$	    goto cfgh_in_loop1
546$	endif
547$!
548$	if key2 .eqs. "HAVE_TIMEVAL"
549$	then
550$	    write tf "#ifndef ''key2'"
551$	    write tf "#define ''key2' 1"
552$	    write tf "#endif"
553$	    goto cfgh_in_loop1
554$	endif
555$!
556$	if key2 .eqs. "WEXITSTATUS_OFFSET"
557$	then
558$	    write tf "#ifndef ''key2'"
559$	    write tf "#define ''key2' 2"
560$	    write tf "#endif"
561$	    goto cfgh_in_loop1
562$	endif
563$!
564$	if key2 .eqs. "HAVE_GETPW_DECLS"
565$	then
566$	    write tf "#ifndef ''key2'"
567$	    write tf "#define ''key2' 1"
568$	    write tf "#endif"
569$	    goto cfgh_in_loop1
570$	endif
571$!
572$	if key2 .eqs. "HAVE_DECL_CONFSTR"
573$	then
574$	    write tf "#ifndef ''key2'"
575$	    write tf "#define ''key2' 1"
576$	    write tf "#endif"
577$	    goto cfgh_in_loop1
578$	endif
579$!
580$	if key2 .eqs. "HAVE_DECL_PRINTF"
581$	then
582$	    write tf "#ifndef ''key2'"
583$	    write tf "#define ''key2' 1"
584$	    write tf "#endif"
585$	    goto cfgh_in_loop1
586$	endif
587$!
588$	if key2 .eqs. "HAVE_DECL_SBRK"
589$	then
590$	    write tf "#ifndef ''key2'"
591$	    write tf "#define ''key2' 1"
592$	    write tf "#endif"
593$	    goto cfgh_in_loop1
594$	endif
595$!
596$	if key2 .eqs. "HAVE_DECL_STRSIGNAL"
597$	then
598$	    write tf "#ifndef ''key2'"
599$	    write tf "#define ''key2' 0"
600$	    write tf "#endif"
601$	    goto cfgh_in_loop1
602$	endif
603$!
604$	if key2a .eqs. "HAVE_DECL_STRTOLD"
605$	then
606$	    write tf "#ifndef ''key2'"
607$	    write tf "#define ''key2' 0"
608$	    write tf "#endif"
609$	    goto cfgh_in_loop1
610$	endif
611$!
612$	if key2 .eqs. "HAVE_DECL_STRTOIMAX"
613$	then
614$	    write tf "#ifndef ''key2'"
615$	    write tf "#define ''key2' 0"
616$	    write tf "#endif"
617$	    goto cfgh_in_loop1
618$	endif
619$!
620$	if key2 .eqs. "HAVE_DECL_STRTOL"
621$	then
622$	    write tf "#ifndef ''key2'"
623$	    write tf "#define ''key2' 1"
624$	    write tf "#endif"
625$	    goto cfgh_in_loop1
626$	endif
627$!
628$	if key2 .eqs. "HAVE_DECL_STRTOLL"
629$	then
630$	    write tf "#ifndef ''key2'"
631$	    write tf "#define ''key2' 1"
632$	    write tf "#endif"
633$	    goto cfgh_in_loop1
634$	endif
635$!
636$	if key2 .eqs. "HAVE_DECL_STRTOUL"
637$	then
638$	    write tf "#ifndef ''key2'"
639$	    write tf "#define ''key2' 1"
640$	    write tf "#endif"
641$	    goto cfgh_in_loop1
642$	endif
643$!
644$	if key2 .eqs. "HAVE_DECL_STRTOULL"
645$	then
646$	    write tf "#ifndef ''key2'"
647$	    write tf "#define ''key2' 1"
648$	    write tf "#endif"
649$	    goto cfgh_in_loop1
650$	endif
651$!
652$	if key2 .eqs. "HAVE_DECL_STRTOUMAX"
653$	then
654$	    write tf "#ifndef ''key2'"
655$	    write tf "#define ''key2' 0"
656$	    write tf "#endif"
657$	    goto cfgh_in_loop1
658$	endif
659$!
660$	if key2 .eqs. "GETPGRP_VOID"
661$	then
662$	    write tf "#ifndef ''key2'"
663$	    write tf "#define ''key2' 1"
664$	    write tf "#endif"
665$	    goto cfgh_in_loop1
666$	endif
667$!
668$	if key2 .eqs. "NAMED_PIPES_MISSING"
669$	then
670$	    write tf "#ifndef ''key2'"
671$	    write tf "#define ''key2' 1"
672$	    write tf "#endif"
673$	    goto cfgh_in_loop1
674$	endif
675$!
676$	if key2 .eqs. "OPENDIR_NOT_ROBUST"
677$	then
678$	    write tf "#ifndef ''key2'"
679$	    write tf "#define ''key2' 1"
680$	    write tf "#endif"
681$	    goto cfgh_in_loop1
682$	endif
683$!
684$	if key2 .eqs. "PGRP_PIPE"
685$	then
686$	    write tf "#ifndef ''key2'"
687$	    write tf "#define ''key2' 1"
688$	    write tf "#endif"
689$	    goto cfgh_in_loop1
690$	endif
691$!
692$	if key2 .eqs. "CAN_REDEFINE_GETENV"
693$	then
694$	    write tf "#ifndef ''key2'"
695$	    write tf "#define ''key2' 1"
696$	    write tf "#endif"
697$	    goto cfgh_in_loop1
698$	endif
699$!
700$	if key2 .eqs. "HAVE_PRINTF_A_FORMAT"
701$	then
702$	    write tf "#ifndef ''key2'"
703$	    write tf "#define ''key2' 1"
704$	    write tf "#endif"
705$	    goto cfgh_in_loop1
706$	endif
707$!
708$	if key2 .eqs. "CTYPE_NON_ASCII"
709$	then
710$	    write tf "#ifndef ''key2'"
711$	    write tf "#define ''key2' 1"
712$	    write tf "#endif"
713$	    goto cfgh_in_loop1
714$	endif
715$!
716$	if key2 .eqs. "HAVE_LANGINFO_CODESET"
717$	then
718$	    write tf "#ifndef ''key2'"
719$	    write tf "#define ''key2' 0"
720$	    write tf "#endif"
721$	    goto cfgh_in_loop1
722$	endif
723$!
724$!      This wants execve() to do this automagically to pass.
725$!	if key2 .eqs. "HAVE_HASH_BANG_EXEC"
726$!	then
727$!	    write tf "#ifndef ''key2'"
728$!	    write tf "#define ''key2' 1"
729$!	    write tf "#endif"
730$!	    goto cfgh_in_loop1
731$!	endif
732$!
733$	if key2 .eqs. "ICONV_CONST"
734$	then
735$	    write tf "#ifndef ''key2'"
736$	    write tf "#define ''key2'"
737$	    write tf "#endif"
738$	    goto cfgh_in_loop1
739$	endif
740$!
741$	if key2 .eqs. "VOID_SIGHANDLER"
742$	then
743$	    write tf "#ifndef ''key2'"
744$	    write tf "#define ''key2' 1"
745$	    write tf "#endif"
746$	    goto cfgh_in_loop1
747$	endif
748$!
749$	if key2 .eqs. "HAVE_POSIX_SIGNALS"
750$	then
751$	    write tf "#ifndef ''key2'"
752$	    write tf "#define ''key2' 1"
753$	    write tf "#endif"
754$	    goto cfgh_in_loop1
755$	endif
756$!
757$	if key2 .eqs. "UNUSABLE_RT_SIGNALS"
758$	then
759$	    write tf "#ifndef ''key2'"
760$	    write tf "#define ''key2' 1"
761$	    write tf "#endif"
762$	    goto cfgh_in_loop1
763$	endif
764$!
765$	if key2a .eqs. "HAVE_DECL_FPURGE"
766$	then
767$	    write tf "#ifndef ''key2a'"
768$	    write tf "#define ''key2a' 1"
769$	    write tf "#endif"
770$	    goto cfgh_in_loop1
771$	endif
772$!
773$	if key2 .eqs. "HAVE_DECL_SETREGID"
774$	then
775$	    write tf "#ifndef ''key2'"
776$	    write tf "#define ''key2' 1"
777$	    write tf "#endif"
778$	    goto cfgh_in_loop1
779$	endif
780$!
781$	if key2 .eqs. "HAVE_POSIX_SIGSETJMP"
782$	then
783$	    write tf "#ifndef ''key2'"
784$	    write tf "#define ''key2' 1"
785$	    write tf "#endif"
786$	    goto cfgh_in_loop1
787$	endif
788$!
789$	if key2b .eqs. "RAND" .and. key2c .nes. "" .and. key2d .eqs. ""
790$	then
791$	    if (key2c .eqs. "EGD") .or. -
792	       (key2c .eqs. "STATUS") .or. -
793	       (key2c .eqs. "SCREEN")
794$	    then
795$		if f$search("''ssl_header_dir'rand.h") .nes. ""
796$		then
797$		    write tf "#ifndef ''key2'"
798$		    write tf "#define ''key2' 1"
799$		    write tf "#endif"
800$		else
801$		    write tf "/* #undef ''key2' */"
802$		endif
803$	    endif
804$	endif
805$!
806$	if key2 .eqs. "STRCOLL_BROKEN"
807$	then
808$	    write tf "#ifndef ''key2'"
809$	    write tf "#define ''key2' 1"
810$	    write tf "#endif"
811$	    goto cfgh_in_loop1
812$	endif
813$!
814$	if key2 .eqs. "DUP_BROKEN"
815$	then
816$	    write tf "#ifndef ''key2'"
817$	    write tf "#define ''key2' 1"
818$	    write tf "#endif"
819$	    goto cfgh_in_loop1
820$	endif
821$!
822$!	This is for a test that getcwd(0,0) works.
823$!	It does not on VMS.
824$!--------------------------
825$	if key2 .eqs. "GETCWD_BROKEN"
826$	then
827$	    write sys$output ""
828$	    write sys$output -
829  "%CONFIG_H-I-NONPORT, ''key2' being tested for!"
830$		   write sys$output -
831 "-CONFIG_H-I-GETCWD, GETCWD(0,0) does not work on VMS."
832$		   write sys$output -
833 "-CONFIG_H-I-GETCWD2, Work around hack probably required."
834$		   write sys$output -
835 "-CONFIG_H-I-REVIEW, Manual Code review required!"
836$		    if update_config_vms
837$		    then
838$			open/append tfcv sys$disk:[]config_vms.h
839$			write tfcv ""
840$			write tfcv -
841		"/* Check config.h for use of ''key2' settings */"
842$			write tfcv ""
843$			close tfcv
844$		    endif
845$
846$	    goto cfgh_in_loop1
847$	endif
848$!
849$	if (key2a .eqs. "HAVE") .or. (key2a .eqs. "STAT") .or. -
850	   (key2 .eqs. "ENABLE_IPV6") .or. (key2b .eqs. "LDAP")
851$	then
852$!
853$!	    Process extra underscores
854$!------------------------------------
855$	    if f$locate("HAVE___", key2) .lt. key2_len
856$	    then
857$		key2b = "__" + key2d
858$		key2d = ""
859$		double_under = 1
860$	    else
861$		if f$locate("HAVE__", key2) .lt. key2_len
862$		then
863$		    key2b = "_" + key2c
864$		    key2c = ""
865$		    double_under = 1
866$		endif
867$	    endif
868$!
869$	    if (key2_h .eqs. "_H") .or. (key2 .eqs. "ENABLE_IPV6") .or. -
870	       (key2b .eqs. "LDAP")
871$	    then
872$!
873$!		Looking for a header file
874$!---------------------------------------
875$		headf = key2b
876$		if key2c .nes. "" then headf = headf + "_" + key2c
877$		if key2d .nes. "" then headf = headf + "_" + key2d
878$!
879$!		   (key2b .eqs. "READLINE")
880$!
881$!		Some special parsing
882$!------------------------------------------
883$		if (key2b .eqs. "SYS") .or. (key2b .eqs. "ARPA") .or. -
884		   (key2b .eqs. "NET") .or. (key2b .eqs. "NETINET")
885$		then
886$		    if key2c .nes. ""
887$		    then
888$			headf = key2c
889$			if key2d .nes. "" then headf = key2c + "_" + key2d
890$		    endif
891$		endif
892$!
893$!		And of course what's life with out some special cases
894$!--------------------------------------------------------------------
895$		if key2 .eqs. "ENABLE_IPV6"
896$		then
897$		    headf = "in6"
898$		endif
899$!
900$		if key2b .eqs. "LDAP"
901$		then
902$		    if (key2 .eqs. "HAVE_LDAP_SSL") .or. -
903		       (key2 .eqs. "HAVE_LDAP_URL_PARSE")
904$		    then
905$			headf = "ldap"
906$		    endif
907$		endif
908$!
909$!
910$		if key2b .eqs. "FILE"
911$		then
912$		   write sys$output ""
913$		   write sys$output -
914  "%CONFIG_H-I-NONPORT, ''key2' being asked for!"
915$		   write sys$output -
916 "-CONFIG_H-I-FILE_OLD, file.h will not be configured as is obsolete!"
917$		   write sys$output -
918 "-CONFIG_H_I-FCNTL_NEW, "Expecting fcntl.h to be configured instead!"
919$		   write sys$output -
920 "-CONFIG_H_I-FCNTL_CHK, "Unable to verify at this time!"
921$		   write sys$output -
922 "-CONFIG_H-I-REVIEW, Manual Code review required!"
923$!
924$		    if update_config_vms
925$		    then
926$			open/append tfcv sys$disk:[]config_vms.h
927$			write tfcv ""
928$			write tfcv -
929		"/* Check config.h for use of fcntl.h instead of file.h */"
930$			write tfcv ""
931$			close tfcv
932$		    endif
933$		endif
934$!
935$!		Now look it up in the DEC C RTL
936$!---------------------------------------------
937$		define/user sys$output nl:
938$		define/user sys$error nl:
939$		search/output=nl: 'dchfile' |'headf'|/exact
940$		if '$severity' .eq. 1
941$		then
942$		    if key64 then write tf "#ifndef __VAX"
943$		    write tf "#ifndef ''key2'"
944$		    write tf "#define ''key2' 1"
945$if p2 .nes. "" then write sys$output "''dchfile' - #define ''key2' 1"
946$		    write tf "#endif"
947$		    if key64 then write tf "#endif"
948$set nover
949$		    goto cfgh_in_loop1
950$		endif
951$!
952$!
953$!		Now look it up in the DEC C STARLET_C
954$!---------------------------------------------
955$		define/user sys$output nl:
956$		define/user sys$error nl:
957$		search/output=nl: 'starhfile' |'headf'|/exact
958$		if '$severity' .eq. 1
959$		then
960$		    if key64 then write tf "#ifndef __VAX"
961$		    write tf "#ifndef ''key2'"
962$		    write tf "#define ''key2' 1"
963$if p2 .nes. "" then write sys$output "''starfile' - #define ''key2' 1"
964$		    write tf "#endif"
965$		    if key64 then write tf "#endif"
966$set nover
967$		    goto cfgh_in_loop1
968$		endif
969$!
970$!		Now look for OPENSSL headers
971$!---------------------------------------------------------
972$		if key2b .eqs. "OPENSSL"
973$		then
974$		    headf = headf - "OPENSSL_"
975$		    header = f$search("''ssl_header_dir'''headf'.h")
976$		    if header .nes. ""
977$		    then
978$			write tf "#ifndef ''key2'"
979$			write tf "#define ''key2' 1"
980$			write tf "#endif"
981$set nover
982$			goto cfgh_in_loop1
983$		    endif
984$		endif
985$!
986$!		Now look for Kerberos
987$!------------------------------------------------------------
988$		if key2b .eqs. "GSSAPI"
989$		then
990$		    header_dir = "sys$sysroot:[kerberos.include]"
991$		    headf = headf - "GSSAPI_"
992$		    header = f$search("''header_dir'''headf'.h")
993$		    if header .nes. ""
994$		    then
995$			write tf "#ifndef ''key2'"
996$			write tf "#define ''key2' 1"
997$			write tf "#endif"
998$set nover
999$			goto cfgh_in_loop1
1000$		    endif
1001$		endif
1002$!
1003$set nover
1004$	    else
1005$!
1006$!		Looking for a routine or a symbol
1007$!------------------------------------------------
1008$		if key2c .eqs. "MACRO"
1009$		then
1010$		    if (key2b .eqs. "FILE") .or. (key2b .eqs. "DATE") -
1011			.or. (key2b .eqs. "LINE") .or. (key2b .eqs. "TIME")
1012$		    then
1013$			write tf "#ifndef HAVE_''key2b'"
1014$			write tf "#define HAVE_''key2b' 1"
1015$			write tf "#endif"
1016$		    endif
1017$		    goto cfgh_in_loop1
1018$		endif
1019$!
1020$!		Special false tests
1021$!-------------------------------------
1022$		if double_under
1023$		then
1024$		    if key2b .eqs. "_FCNTL" .or. key2b .eqs. "__FCNTL"
1025$		    then
1026$			write tf "/* #undef HAVE_''key2b' */"
1027$			goto cfgh_in_loop1
1028$		    endif
1029$!
1030$		    if key2b .eqs. "_STAT" .or. key2b .eqs. "__STAT"
1031$		    then
1032$			write tf "/* #undef HAVE_''key2b' */"
1033$			goto cfgh_in_loop1
1034$		    endif
1035$!
1036$		    if key2b .eqs. "_READ" .or. key2b .eqs. "__READ"
1037$		    then
1038$			write tf "/* #undef HAVE_''key2b' */"
1039$			goto cfgh_in_loop1
1040$		    endif
1041$		endif
1042$!
1043$		keysym = key2b
1044$		if key2c .nes. "" then keysym = keysym + "_" + key2c
1045$		if key2d .nes. "" then keysym = keysym + "_" + key2d
1046$		if key2e .nes. "" then keysym = keysym + "_" + key2e
1047$!
1048$!
1049$!		Stat structure members
1050$!-------------------------------------
1051$		if key2b .eqs. "STRUCT"
1052$		then
1053$		    if key2c .eqs. "STAT" .and (key2d .nes. "")
1054$		    then
1055$			key2b = key2b + "_" + key2c + "_" + key2d
1056$			key2c = key2e
1057$			key2d = ""
1058$			key2e = ""
1059$		    endif
1060$		endif
1061$		if (key2b .eqs. "ST") .or. (key2b .eqs. "STRUCT_STAT_ST")
1062$		then
1063$		    keysym = "ST" + "_" + key2c
1064$		    keysym = f$edit(keysym,"LOWERCASE")
1065$		endif
1066$		if key2a .eqs. "STAT"
1067$		then
1068$		    if (f$locate("STATVFS", key2b) .eq. 0) .and. key2c .eqs. ""
1069$		    then
1070$			keysym = f$edit(key2b, "LOWERCASE")
1071$		    endif
1072$!$		    if (key2b .eqs. "STATVFS" .or. key2b .eqs. "STATFS2" -
1073$!			.or. key2b .eqs. "STATFS3") .and. key2c .nes. ""
1074$!
1075$		    if (key2b .eqs. "STATVFS") .and. key2c .nes. ""
1076$		    then
1077$!			Should really verify that the structure
1078$!			named by key2b actually exists first.
1079$!------------------------------------------------------------
1080$!
1081$!			Statvfs structure members
1082$!-------------------------------------------------
1083$			keysym = "f_" + f$edit(key2c,"LOWERCASE")
1084$		    endif
1085$		endif
1086$!
1087$!		UTMPX structure members
1088$!--------------------------------------
1089$		if key2b .eqs. "UT" .and. key2c .eqs. "UT"
1090$		then
1091$		    keysym = "ut_" + f$edit(key2d,"LOWERCASE")
1092$		endif
1093$!
1094$		if f$locate("MMAP",key2) .lt. key2_len
1095$		then
1096$		   write sys$output ""
1097$		   write sys$output -
1098  "%CONFIG_H-I-NONPORT, ''key2' being asked for!"
1099$		   write sys$output -
1100 "-CONFIG_H-I-MMAP, MMAP operations only work on STREAM and BINARY files!"
1101$		   write sys$output -
1102 "-CONFIG_H-I-REVIEW, Manual Code review required!"
1103$		    if update_config_vms
1104$		    then
1105$			open/append tfcv sys$disk:[]config_vms.h
1106$			write tfcv ""
1107$			write tfcv -
1108		"/* Check config.h for use of ''key2' settings */"
1109$			write tfcv ""
1110$			close tfcv
1111$		    endif
1112$		endif
1113$!
1114$!
1115$		if keysym .eqs. "CRYPT"
1116$		then
1117$		   write sys$output ""
1118$		   write sys$output -
1119  "%CONFIG_H-I-NONPORT, ''key2' being asked for!"
1120$		   write sys$output -
1121 "-CONFIG_H-I-CRYPT, CRYPT operations on the VMS SYSUAF may not work!"
1122$		   write sys$output -
1123 "-CONFIG_H-I-REVIEW, Manual Code review required!"
1124$		    if update_config_vms
1125$		    then
1126$			open/append tfcv sys$disk:[]config_vms.h
1127$			write tfcv ""
1128$			write tfcv -
1129		"/* Check config.h for use of ''keysym' */"
1130$			write tfcv ""
1131$			close tfcv
1132$		    endif
1133$		endif
1134$!
1135$!
1136$		if keysym .eqs. "EXECL"
1137$		then
1138$		   write sys$output ""
1139$		   write sys$output -
1140  "%CONFIG_H-I-NONPORT, ''key2' being asked for!"
1141$		   write sys$output -
1142 "-CONFIG_H-I-EXCEL, EXECL configured, Will probably not work."
1143$		   write sys$output -
1144 "-CONFIG_H-I-REVIEW, Manual Code review required!"
1145$		    if update_config_vms
1146$		    then
1147$			open/append tfcv sys$disk:[]config_vms.h
1148$			write tfcv ""
1149$			write tfcv -
1150		"/* Check config.h for use of ''keysym' */"
1151$			write tfcv ""
1152$			close tfcv
1153$		    endif
1154$		endif
1155$!
1156$!
1157$!		Process if cpp supports ANSI-C stringizing '#' operator
1158$!-----------------------------------------------------------------------
1159$		if keysym .eqs. "STRINGIZE"
1160$		then
1161$		    write tf "#ifndef HAVE_STRINGIZE"
1162$		    write tf "#define HAVE_STRINGSIZE 1"
1163$		    write tf "#endif"
1164$		    goto cfgh_in_loop1
1165$		endif
1166$!
1167$		if keysym .eqs. "VOLATILE"
1168$		then
1169$		    write tf "#ifndef HAVE_VOLATILE"
1170$		    write tf "#define HAVE_VOLATILE 1"
1171$		    write tf "#endif"
1172$		    goto cfgh_in_loop1
1173$		endif
1174$!
1175$		if keysym .eqs. "ALLOCA"
1176$		then
1177$		    write tf "#ifndef HAVE_ALLOCA"
1178$		    write tf "#define HAVE_ALLOCA 1"
1179$		    write tf "#endif"
1180$		    goto cfgh_in_loop1
1181$		endif
1182$!
1183$		if keysym .eqs. "ERRNO_DECL"
1184$		then
1185$		    write tf "#ifndef HAVE_ERRNO_DECL"
1186$		    write tf "#define HAVE_ERRNO_DECL 1"
1187$		    write tf "#endif"
1188$		    goto cfgh_in_loop1
1189$		endif
1190$!
1191$		if keysym .eqs. "LONGLONG"
1192$		then
1193$		    write tf "#ifndef __VAX"
1194$		    write tf "#pragma message disable longlongtype"
1195$		    write tf "#ifndef HAVE_LONGLONG"
1196$		    write tf "#define HAVE_LONGLONG 1"
1197$		    write tf "#endif"
1198$		    write tf "#endif"
1199$		    goto cfgh_in_loop1
1200$		endif
1201$!
1202$!		May need to test compiler version
1203$!-----------------------------------------------
1204$		if keysym .eqs. "LONG_LONG"
1205$		then
1206$		    write tf "#ifndef __VAX"
1207$		    write tf "#pragma message disable longlongtype"
1208$		    write tf "#ifndef HAVE_LONG_LONG"
1209$		    write tf "#define HAVE_LONG_LONG 1"
1210$		    write tf "#endif"
1211$		    write tf "#endif"
1212$		    goto cfgh_in_loop1
1213$		endif
1214$!
1215$!		May need to test compiler version
1216$!-----------------------------------------------
1217$		if keysym .eqs. "UNSIGNED_LONG_LONG"
1218$		then
1219$		    write tf "#ifndef __VAX"
1220$		    write tf "#pragma message disable longlongtype"
1221$		    write tf "#ifndef HAVE_UNSIGNED_LONG_LONG"
1222$		    write tf "#define HAVE_UNSIGNED_LONG_LONG 1"
1223$		    write tf "#endif"
1224$		    write tf "#endif"
1225$		    goto cfgh_in_loop1
1226$		endif
1227$!
1228$!		May need to test compiler version
1229$!-----------------------------------------------
1230$		if keysym .eqs. "UNSIGNED_LONG_LONG_INT"
1231$		then
1232$		    write tf "#ifndef __VAX"
1233$		    write tf "#pragma message disable longlongtype"
1234$		    write tf "#ifndef HAVE_UNSIGNED_LONG_LONG_INT"
1235$		    write tf "#define HAVE_UNSIGNED_LONG_LONG_INT 1"
1236$		    write tf "#endif"
1237$		    write tf "#endif"
1238$		    goto cfgh_in_loop1
1239$		endif
1240$!
1241$!		May need to test compiler version
1242$!-----------------------------------------------
1243$		if keysym .eqs. "LONG_DOUBLE"
1244$		then
1245$		    write tf "#ifndef __VAX"
1246$		    write tf "#pragma message disable longlongtype"
1247$		    write tf "#ifndef HAVE_LONG_DOUBLE"
1248$		    write tf "#define HAVE_LONG_DOUBLE 1"
1249$		    write tf "#endif"
1250$		    write tf "#endif"
1251$		    goto cfgh_in_loop1
1252$		endif
1253$!
1254$		if keysym .eqs. "FCNTL_LOCK"
1255$		then
1256$		    write sys$output -
1257  "%CONFIG_H-I-NONPORT, ''key2' being asked for!
1258$		   write sys$output -
1259 "-CONFIG_H-I-REVIEW, Manual Code review required!"
1260$		    goto cfgh_in_loop1
1261$		endif
1262$!
1263$!
1264$!		These libraries are provided by the DEC C RTL
1265$!-------------------------------------------------------------
1266$		if keysym .eqs. "LIBINET" .or. keysym .eqs. "LIBSOCKET"
1267$		then
1268$		    write tf "#ifndef HAVE_''keysym'"
1269$		    write tf "#define HAVE_''keysym' 1"
1270$if p2 .nes. "" then write sys$output "''decc_shr' #define ''keysym' 1"
1271$		    write tf "#endif
1272$		    goto cfgh_in_loop1
1273$		endif
1274$!
1275$		if keysym .eqs. "HERRNO" then keysym = "h_errno"
1276$		if keysym .eqs. "UTIMBUF" then keysym = "utimbuf"
1277$		if key2c .eqs. "STRUCT"
1278$		then
1279$		    keysym = f$edit(key2d,"LOWERCASE")
1280$		else
1281$		    if key2_h .eqs. "_T"
1282$		    then
1283$			if key2_t .eqs. "_TYPE"
1284$			then
1285$			    keysym = f$extract(0, key2_len - 5, key2) - "HAVE_"
1286$			endif
1287$			keysym = f$edit(keysym,"LOWERCASE")
1288$		    endif
1289$		endif
1290$!
1291$!		Check the DEC C RTL shared image first
1292$!------------------------------------------------------
1293$		if f$search(tfile1) .nes. "" then delete 'tfile1';*
1294$		define/user sys$output nl:
1295$		define/user sys$error nl:
1296$		search/format=nonull/out='tfile1' 'decc_shr' 'keysym'
1297$		if '$severity' .eq. 1
1298$		then
1299$!
1300$!		    Not documented, but from observation
1301$!------------------------------------------------------
1302$		    define/user sys$output nl:
1303$		    define/user sys$error nl:
1304$		    if arch_type .eq. 3
1305$		    then
1306$			keyterm = "''keysym'<SOH>"
1307$		    else
1308$			if arch_type .eq. 2
1309$			then
1310$			    keyterm = "''keysym'<BS>"
1311$			else
1312$			    keyterm = "''keysym'<STX>"
1313$			endif
1314$		    endif
1315$		    search/out=nl: 'tfile1' -
1316   "$''keyterm'","$g''keyterm'","$__utc_''keyterm'",-
1317   "$__utctz_''keyterm'","$__bsd44_''keyterm'","$bsd_''keyterm'",-
1318   "$''keysym'decc$","$G''keysym'decc$","$GX''keyterm'"
1319$		    severity = '$severity'
1320$!
1321$!
1322$!		    Of course the 64 bit stuff is different
1323$!---------------------------------------------------------
1324$		    if severity .ne. 1 .and. key64
1325$		    then
1326$			define/user sys$output nl:
1327$		        define/user sys$error nl:
1328$			search/out=nl: 'tfile1' "$_''keyterm'"
1329$!			search/out 'tfile1' "$_''keyterm'"
1330$			severity = '$severity'
1331$		    endif
1332$!
1333$!		    Unix compatibility routines
1334$!---------------------------------------------
1335$		    if severity .ne. 1
1336$		    then
1337$			define/user sys$output nl:
1338$			define/user sys$error nl:
1339$			search/out=nl: 'tfile1' -
1340    "$__unix_''keyterm'","$__vms_''keyterm'","$_posix_''keyterm'"
1341$			severity = '$severity'
1342$		    endif
1343$!
1344$!		    Show the result of the search
1345$!------------------------------------------------
1346$		    if 'severity' .eq. 1
1347$		    then
1348$			if key64 then write tf "#ifndef __VAX"
1349$			write tf "#ifndef ''key2'"
1350$			write tf "#define ''key2' 1"
1351$if p2 .nes. "" then write sys$output "''decc_shr' #define ''key2' 1"
1352$			write tf "#endif"
1353$			if key64 then write tf "#endif"
1354$			goto cfgh_in_loop1
1355$		    endif
1356$		endif
1357$		if f$search(tfile1) .nes. "" then delete 'tfile1';*
1358$!
1359$!		Check the DECC Header files next
1360$!----------------------------------------------
1361$		define/user sys$output nl:
1362$		define/user sys$error nl:
1363$		search/out=nl: 'decc_rtldef' -
1364		    "''keysym';", "''keysym'[", "struct ''keysym'"/exact
1365$		severity = '$severity'
1366$		if severity .eq. 1
1367$		then
1368$		    if key64 then write tf "#ifndef __VAX"
1369$		    write tf "#ifndef ''key2'"
1370$		    write tf "#define ''key2' 1"
1371$if p2 .nes. "" then write sys$output "''decc_rtldef' #define ''key2' 1"
1372$		    write tf "#endif"
1373$		    if key64 then write tf "#endif"
1374$		    goto cfgh_in_loop1
1375$		endif
1376$!
1377$!		Check kerberos
1378$!--------------------------------------------
1379$		if f$search("SYS$SYSROOT:[kerberos]include.dir") .nes. ""
1380$		then
1381$		    test_mit = "SYS$SYSROOT:[kerberos.include]gssapi_krb5.h"
1382$		    if (key2 .eqs. "HAVE_GSSAPI")
1383$		    then
1384$			write tf "#ifndef ''key2'"
1385$			write tf "#define ''key2' 1"
1386$			write tf "#endif"
1387$			goto cfgh_in_loop1
1388$		    endif
1389$		endif
1390$!
1391$	    endif
1392$	    write tf "/* ", xline, " */"
1393$	    goto cfgh_in_loop1
1394$	endif
1395$!
1396$!
1397$!	Process SIZEOF directives found in SAMBA and others
1398$!----------------------------------------------------------
1399$	if key2a .eqs. "SIZEOF"
1400$	then
1401$	    if key2b .eqs. "INO" .and. key2_h .eqs. "_T"
1402$	    then
1403$		write tf "#ifndef SIZEOF_INO_T"
1404$		write tf "#if !__USING_STD_STAT
1405$		write tf "#define SIZEOF_INO_T 6"
1406$		write tf "#else
1407$		write tf "#define SIZEOF_INO_T 8"
1408$		write tf "#endif
1409$		write tf "#endif"
1410$		goto cfgh_in_loop1
1411$	    endif
1412$	    if key2b .eqs. "INTMAX" .and. key2_h .eqs. "_T"
1413$	    then
1414$		write tf "#ifndef SIZEOF_INTMAX_T"
1415$		write tf "#ifdef __VAX"
1416$		write tf "#define SIZEOF_INTMAX_T 4"
1417$		write tf "#else"
1418$		write tf "#define SIZEOF_INTMAX_T 8"
1419$		write tf "#endif"
1420$		write tf "#endif"
1421$		goto cfgh_in_loop1
1422$	    endif
1423$	    if key2b .eqs. "OFF" .and. key2_h .eqs. "_T"
1424$	    then
1425$		write tf "#ifndef SIZEOF_OFF_T"
1426$		write tf "#if __USE_OFF64_T"
1427$		write tf "#define SIZEOF_OFF_T 8"
1428$		write tf "#else"
1429$		write tf "#define SIZEOF_OFF_T 4"
1430$		write tf "#endif"
1431$		write tf "#endif"
1432$		goto cfgh_in_loop1
1433$	    endif
1434$	    if key2b .eqs. "CHAR" .and. key2_h .eqs. "_P"
1435$	    then
1436$		write tf "#ifndef SIZEOF_CHAR_P"
1437$		write tf "#if __INITIAL_POINTER_SIZE == 64"
1438$		write tf "#define SIZEOF_CHAR_P 8"
1439$		write tf "#else"
1440$		write tf "#define SIZEOF_CHAR_P 4"
1441$		write tf "#endif"
1442$		goto cfgh_in_loop1
1443$	    endif
1444$	    if key2b .eqs. "VOIDP"
1445$	    then
1446$		write tf "#ifndef SIZEOF_VOIDP"
1447$		write tf "#if __INITIAL_POINTER_SIZE == 64"
1448$		write tf "#define SIZEOF_VOIDP 8"
1449$		write tf "#else"
1450$		write tf "#define SIZEOF_VOIDP 4"
1451$		write tf "#endif"
1452$		write tf "#endif"
1453$		goto cfgh_in_loop1
1454$	    endif
1455$	    if key2b .eqs. "INT"
1456$	    then
1457$		write tf "#ifndef SIZEOF_INT"
1458$		write tf "#define SIZEOF_INT 4"
1459$		write tf "#endif"
1460$		goto cfgh_in_loop1
1461$	    endif
1462$	    if key2b .eqs. "SIZE" .and. key2_h .eqs. "_T"
1463$	    then
1464$		write tf "#ifndef SIZEOF_SIZE_T"
1465$		write tf "#define SIZEOF_SIZE_T 4"
1466$		write tf "#endif"
1467$		goto cfgh_in_loop1
1468$	    endif
1469$	    if key2b .eqs. "TIME" .and. key2_h .eqs. "_T"
1470$	    then
1471$		write tf "#ifndef SIZEOF_TIME_T"
1472$		write tf "#define SIZEOF_TIME_T 4"
1473$		write tf "#endif"
1474$		goto cfgh_in_loop1
1475$	    endif
1476$	    if key2b .eqs. "DOUBLE"
1477$	    then
1478$		write tf "#ifndef SIZEOF_DOUBLE"
1479$		write tf "#define SIZEOF_DOUBLE 8"
1480$		write tf "#endif"
1481$		goto cfgh_in_loop1
1482$	    endif
1483$	    if key2b .eqs. "LONG"
1484$	    then
1485$		if key2c .eqs. ""
1486$		then
1487$		    write tf "#ifndef SIZEOF_LONG"
1488$		    write tf "#define SIZEOF_LONG 4"
1489$		    write tf "#endif"
1490$		else
1491$		    write tf "#ifndef SIZEOF_LONG_LONG"
1492$		    write tf "#ifndef __VAX"
1493$		    write tf "#define SIZEOF_LONG_LONG 8"
1494$		    write tf "#endif"
1495$		    write tf "#endif"
1496$		endif
1497$		goto cfgh_in_loop1
1498$	    endif
1499$	    write tf "/* ", xline, " */"
1500$	    goto cfgh_in_loop1
1501$	endif
1502$!
1503$!	Process NEED directives
1504$!-------------------------------
1505$	if key2a .eqs. "NEED"
1506$	then
1507$	    if key2b .eqs. "STRINGS" .and. key2_h .eqs. "_H"
1508$	    then
1509$		write tf "#ifndef NEED_STRINGS_H"
1510$		write tf "#define NEED_STRINGS_H 1"
1511$		write tf "#endif"
1512$		goto cfgh_in_loop1
1513$	    endif
1514$	    write tf "/* ", xline, " */"
1515$	    goto cfgh_in_loop1
1516$	endif
1517$!
1518$!	Process GETHOSTNAME directives
1519$!-------------------------------------
1520$	if key2 .eqs. "GETHOSTNAME_TYPE_ARG2"
1521$	then
1522$	    write tf "#ifndef ''key2'"
1523$	    write tf "#ifdef _DECC_V4_SOURCE"
1524$	    write tf "#define ''key2' int"
1525$	    write tf "#else"
1526$	    write tf "#define ''key2' size_t"
1527$	    write tf "#endif"
1528$	    write tf "#endif"
1529$	    goto cfgh_in_loop1
1530$	endif
1531$!
1532$!	Process GETNAMEINFO directives
1533$!-------------------------------------
1534$	if key2a .eqs. "GETNAMEINFO"
1535$	then
1536$	    if key2 .eqs. "GETNAMEINFO_QUAL_ARG1"
1537$	    then
1538$		write tf "#ifndef ''key2'"
1539$		write tf "#define ''key2' const"
1540$		write tf "#endif"
1541$		goto cfgh_in_loop1
1542$	    endif
1543$	    if key2 .eqs. "GETNAMEINFO_TYPE_ARG1"
1544$	    then
1545$		write tf "#ifndef ''key2'"
1546$		write tf "#define ''key2' struct sockaddr *"
1547$		write tf "#endif"
1548$		goto cfgh_in_loop1
1549$	    endif
1550$	    if key2 .eqs. "GETNAMEINFO_TYPE_ARG2"
1551$	    then
1552$		write tf "#ifndef ''key2'"
1553$		write tf "#define ''key2' size_t"
1554$		write tf "#endif"
1555$		goto cfgh_in_loop1
1556$	    endif
1557$	    if key2 .eqs. "GETNAMEINFO_TYPE_ARG46"
1558$	    then
1559$		write tf "#ifndef ''key2'"
1560$		write tf "#define ''key2' size_t"
1561$		write tf "#endif"
1562$		goto cfgh_in_loop1
1563$	    endif
1564$	    if key2 .eqs. "GETNAMEINFO_TYPE_ARG7"
1565$	    then
1566$		write tf "#ifndef ''key2'"
1567$		write tf "#define ''key2' int"
1568$		write tf "#endif"
1569$		goto cfgh_in_loop1
1570$	    endif
1571$	endif
1572$!
1573$!	Process RECV directives
1574$!-------------------------------------
1575$	if key2a .eqs. "RECV"
1576$	then
1577$	    if key2 .eqs. "RECV_TYPE_ARG1"
1578$	    then
1579$		write tf "#ifndef ''key2'"
1580$		write tf "#define ''key2' int"
1581$		write tf "#endif"
1582$		goto cfgh_in_loop1
1583$	    endif
1584$	    if key2 .eqs. "RECV_TYPE_ARG2"
1585$	    then
1586$		write tf "#ifndef ''key2'"
1587$		write tf "#define ''key2' void *"
1588$		write tf "#endif"
1589$		goto cfgh_in_loop1
1590$	    endif
1591$	    if key2 .eqs. "RECV_TYPE_ARG3"
1592$	    then
1593$		write tf "#ifndef ''key2'"
1594$		write tf "#define ''key2' size_t"
1595$		write tf "#endif"
1596$		goto cfgh_in_loop1
1597$	    endif
1598$	    if key2 .eqs. "RECV_TYPE_ARG4"
1599$	    then
1600$		write tf "#ifndef ''key2'"
1601$		write tf "#define ''key2' int"
1602$		write tf "#endif"
1603$		goto cfgh_in_loop1
1604$	    endif
1605$	    if key2 .eqs. "RECV_TYPE_RETV"
1606$	    then
1607$		write tf "#ifndef ''key2'"
1608$		write tf "#define ''key2' int"
1609$		write tf "#endif"
1610$		goto cfgh_in_loop1
1611$	    endif
1612$	endif
1613$!
1614$!	Process SEND directives
1615$!-------------------------------------
1616$	if key2a .eqs. "SEND"
1617$	then
1618$	    if key2 .eqs. "SEND_QUAL_ARG2"
1619$	    then
1620$		write tf "#ifndef ''key2'"
1621$		write tf "#define ''key2' const"
1622$		write tf "#endif"
1623$		goto cfgh_in_loop1
1624$	    endif
1625$	    if key2 .eqs. "SEND_TYPE_ARG1"
1626$	    then
1627$		write tf "#ifndef ''key2'"
1628$		write tf "#define ''key2' int"
1629$		write tf "#endif"
1630$		goto cfgh_in_loop1
1631$	    endif
1632$	    if key2 .eqs. "SEND_TYPE_ARG2"
1633$	    then
1634$		write tf "#ifndef ''key2'"
1635$		write tf "#define ''key2' void *"
1636$		write tf "#endif"
1637$		goto cfgh_in_loop1
1638$	    endif
1639$	    if key2 .eqs. "SEND_TYPE_ARG3"
1640$	    then
1641$		write tf "#ifndef ''key2'"
1642$		write tf "#define ''key2' size_t"
1643$		write tf "#endif"
1644$		goto cfgh_in_loop1
1645$	    endif
1646$	    if key2 .eqs. "SEND_TYPE_ARG4"
1647$	    then
1648$		write tf "#ifndef ''key2'"
1649$		write tf "#define ''key2' int"
1650$		write tf "#endif"
1651$		goto cfgh_in_loop1
1652$	    endif
1653$	    if key2 .eqs. "SEND_TYPE_RETV"
1654$	    then
1655$		write tf "#ifndef ''key2'"
1656$		write tf "#define ''key2' int"
1657$		write tf "#endif"
1658$		goto cfgh_in_loop1
1659$	    endif
1660$	endif
1661$!
1662$!
1663$!	Process STATFS directives
1664$!-------------------------------
1665$!	if key2a .eqs. "STATFS"
1666$!	then
1667$!	    write tf "/* ", xline, " */"
1668$!	    goto cfgh_in_loop1
1669$!	endif
1670$!
1671$!	Process inline directive
1672$!------------------------------
1673$	if key2 .eqs. "inline"
1674$	then
1675$	    write tf "#ifndef inline"
1676$	    write tf "#define inline __inline"
1677$	    write tf "#endif"
1678$	    goto cfgh_in_loop1
1679$	endif
1680$!
1681$!	Process restrict directive
1682$!--------------------------------
1683$	if key2 .eqs. "restrict"
1684$	then
1685$	    write tf "#ifndef restrict"
1686$	    write tf "#define restrict __restrict"
1687$	    write tf "#endif"
1688$	    goto cfgh_in_loop1
1689$	endif
1690$!
1691$!	Process STDC_HEADERS (SAMBA!)
1692$!---------------------------
1693$	if key2 .eqs. "STDC_HEADERS"
1694$	then
1695$	    write tf "#ifndef STDC_HEADERS"
1696$	    write tf "#define STDC_HEADERS 1"
1697$	    write tf "#endif"
1698$	    goto cfgh_in_loop1
1699$	endif
1700$!
1701$!	Process PROTOTYPES directive
1702$!-------------------------------------
1703$	if key2 .eqs. "PROTOTYPES"
1704$	then
1705$	    write tf "#ifndef PROTOTYPES"
1706$	    write tf "#define PROTOTYPES 1"
1707$	    write tf "#endif"
1708$	    goto cfgh_in_loop1
1709$	endif
1710$!
1711$!	Special for SEEKDIR_RETURNS_VOID
1712$!---------------------------------------
1713$	if key2 .eqs. "SEEKDIR_RETURNS_VOID"
1714$	then
1715$	    write tf "#ifndef SEEKDIR_RETURNS_VOID"
1716$	    write tf "#define SEEKDIR_RETURNS_VOID 1"
1717$	    write tf "#endif"
1718$	endif
1719$!
1720$!	Unknown - See if CONFIGURE can give a clue for this
1721$!----------------------------------------------------------
1722$	pflag = 0
1723$	set_flag = 0
1724$!	gproj_name = proj_name - "_VMS" - "-VMS"
1725$	if f$search(tfile1) .nes. "" then delete 'tfile1';*
1726$	define/user sys$output nl:
1727$	define/user sys$error nl:
1728$!	if f$locate("FILE", key2) .lt. key2_len then pflag = 1
1729$!	if f$locate("DIR", key2) .eq. key2_len - 3 then pflag = 1
1730$!	if f$locate("PATH", key2) .eq. key2_len - 4 then pflag = 1
1731$!
1732$	search/out='tfile1' 'configure_script' "''key2'="/exact
1733$	search_sev = '$severity'
1734$	if 'search_sev' .eq. 1
1735$	then
1736$	    open/read/err=unknown_cf_rd_error sf 'tfile1'
1737$search_file_rd_loop:
1738$	    read/end=unknown_cf_rd_err sf line_in
1739$	    line_in = f$edit(line_in, "TRIM")
1740$	    skey1 = f$element(0,"=",line_in)
1741$	    if skey1 .eqs. key2
1742$	    then
1743$		skey2 = f$element(1,"=",line_in)
1744$		skey2a = f$extract(0,2,skey2)
1745$!
1746$!
1747$!		We can not handle assignment to shell symbols.
1748$!		For now skip them.
1749$!------------------------------------------------------------
1750$		if f$locate("$", skey2) .lt. f$length(skey2)
1751$		then
1752$		    write tf "/* ", xline, " */"
1753$		    set_flag = 1
1754$		    goto found_in_configure
1755$		endif
1756$!
1757$!		Keep these two cases separate to make it easier to add
1758$!		more future intelligence to this routine
1759$!----------------------------------------------------------------------
1760$		if skey2a .eqs. """`"
1761$		then
1762$!		    if pflag .eq. 1
1763$!		    then
1764$!			write tf "#ifndef ''key2'"
1765$!			write tf "#define ",key2," """,gproj_name,"_",key2,""""
1766$!			write tf "#endif"
1767$!		    else
1768$!			Ignore this for now
1769$!------------------------------------------
1770$			write tf "/* ", xline, " */"
1771$!		    endif
1772$		    set_flag = 1
1773$		    goto found_in_configure
1774$		endif
1775$		if skey2a .eqs. """$"
1776$		then
1777$!		    if pflag .eq. 1
1778$!		    then
1779$!			write tf "#ifndef ''key2'"
1780$!			write tf "#define ",key2," """,gproj_name,"_",key2,""""
1781$!			write tf "#endif"
1782$!		    else
1783$!			Ignore this for now
1784$!-------------------------------------------
1785$			write tf "/* ", xline, " */"
1786$!		    endif
1787$		    set_flag = 1
1788$		    goto found_in_configure
1789$		endif
1790$!
1791$!		Remove multiple layers of quotes if present
1792$!----------------------------------------------------------
1793$		if f$extract(0, 1, skey2) .eqs. "'"
1794$		then
1795$		    skey2 = skey2 - "'" - "'" - "'" - "'"
1796$		endif
1797$		if f$extract(0, 1, skey2) .eqs. """"
1798$		then
1799$		    skey2 = skey2 - """" - """" - """" - """"
1800$		endif
1801$		write tf "#ifndef ''key2'"
1802$		if skey2 .eqs. ""
1803$		then
1804$		    write tf "#define ",key2
1805$		else
1806$!		    Only quote non-numbers
1807$!----------------------------------------
1808$		    if f$string(skey2+0) .eqs. skey2
1809$		    then
1810$			write tf "#define ",key2," ",skey2
1811$		    else
1812$			write tf "#define ",key2," """,skey2,""""
1813$		    endif
1814$		endif
1815$		write tf "#endif"
1816$		set_flag = 1
1817$	    else
1818$		goto search_file_rd_loop
1819$!		if pflag .eq. 1
1820$!		then
1821$!		    write tf "#ifndef ''key2'"
1822$!		    write tf "#define ",key2," """,gproj_name,"_",key2,""""
1823$!		    write tf "#endif"
1824$!		    set_flag = 1
1825$!		endif
1826$	    endif
1827$found_in_configure:
1828$unknown_cf_rd_err:
1829$	    if f$trnlnm("sf","lnm$process",,"SUPERVISOR") .nes. ""
1830$	    then
1831$		close sf
1832$	    endif
1833$	    if f$search(tfile1) .nes. "" then delete 'tfile1';*
1834$	    if set_flag .eq. 1 then goto cfgh_in_loop1
1835$	endif
1836$   endif
1837$!
1838$!
1839$!
1840$!  If it falls through everything else, comment it out
1841$!-----------------------------------------------------
1842$   write tf "/* ", xline, " */"
1843$   goto cfgh_in_loop1
1844$cfgh_in_loop1_end:
1845$close inf
1846$!
1847$!
1848$! Write out the tail
1849$!--------------------
1850$write_tail:
1851$gosub write_config_h_tail
1852$!
1853$! Exit and clean up
1854$!--------------------
1855$general_error:
1856$status = '$status'
1857$all_exit:
1858$set noon
1859$if f$trnlnm("sf","lnm$process",,"SUPERVISOR") .nes. "" then close sf
1860$if f$trnlnm("tf","lnm$process",,"SUPERVISOR") .nes. "" then close tf
1861$if f$trnlnm("inf","lnm$process",,"SUPERVISOR") .nes. "" then close inf
1862$if f$trnlnm("tf1","lnm$process",,"SUPERVISOR") .nes. "" then close tf1
1863$if f$trnlnm("tf2","lnm$process",,"SUPERVISOR") .nes. "" then close tf2
1864$if f$trnlnm("tfcv","lnm$process",,"SUPERVISOR") .nes. "" then close tfcv
1865$if f$type(tfile1) .eqs. "STRING"
1866$then
1867$   if f$search(tfile1) .nes. "" then delete 'tfile1';*
1868$endif
1869$if f$type(dchfile) .eqs. "STRING"
1870$then
1871$   if f$search(dchfile) .nes. "" then delete 'dchfile';*
1872$endif
1873$if f$type(starhfile) .eqs. "STRING"
1874$then
1875$   if f$search(starhfile) .nes. "" then delete 'starhfile';*
1876$endif
1877$if f$type(configure_script) .eqs. "STRING"
1878$then
1879$   if f$search(configure_script) .nes. "" then delete 'configure_script';*
1880$endif
1881$exit 'status'
1882$!
1883$!
1884$control_y:
1885$   status = ss_control_y
1886$   goto all_exit
1887$!
1888$!
1889$!
1890$! Gosub to write a new config_vms.h
1891$!-----------------------------------
1892$write_config_vms:
1893$outfile = "sys$disk:[]config_vms.h"
1894$create 'outfile'
1895$open/append tf 'outfile'
1896$write tf "/* File: config_vms.h"
1897$write tf "**"
1898$write tf "** This file contains the manual edits needed for porting"
1899$!write tf "** the ''proj_name' package to OpenVMS.
1900$write tf "**"
1901$write tf "** Edit this file as needed.  The procedure that automatically"
1902$write tf "** generated this header stub will not overwrite or make any"
1903$write tf "** changes to this file."
1904$write tf "**"
1905$write tf -
1906 "** ", datetime, tab, username, tab, "Generated by ''my_proc_file'"
1907$write tf "**"
1908$write tf -
1909 "**========================================================================*/"
1910$write tf ""
1911$close tf
1912$return
1913$!
1914$! gosub to write out a documentation header for config.h
1915$!----------------------------------------------------------------
1916$write_config_h_header:
1917$outfile = "sys$disk:[]config.h"
1918$create 'outfile'
1919$open/append tf 'outfile'
1920$write tf "#ifndef CONFIG_H"
1921$write tf "#define CONFIG_H"
1922$write tf "/* File: config.h"
1923$write tf "**"
1924$write tf -
1925  "** This file contains the options needed for porting "
1926$write tf "** the project on a VMS system."
1927$write tf "**"
1928$write tf "** Try not to make any edits to this file, as it is"
1929$write tf "** automagically generated."
1930$write tf "**"
1931$write tf "** Manual edits should be made to the config_vms.h file."
1932$write tf "**"
1933$write tf -
1934 "** ", datetime, tab, username, tab, "Generated by ''my_proc_file'"
1935$write tf "**"
1936$write tf -
1937 "**========================================================================*/"
1938$write tf ""
1939$write tf "#if (__CRTL_VER >= 70200000) && !defined (__VAX)"
1940$write tf "#define _LARGEFILE 1"
1941$write tf "#endif"
1942$write tf ""
1943$write tf "#ifndef __VAX"
1944$write tf "#ifdef __CRTL_VER"
1945$write tf "#if __CRTL_VER >= 80200000"
1946$write tf "#define _USE_STD_STAT 1"
1947$write tf "#endif"
1948$write tf "#endif"
1949$write tf "#endif"
1950$write tf ""
1951$!
1952$write tf " /* Allow compiler builtins */"
1953$write tf "/*-------------------------*/"
1954$write tf "#ifdef __DECC_VER"
1955$write tf "#include <non_existent_dir:builtins.h>"
1956$write tf "#endif"
1957$!
1958$write tf ""
1959$return
1960$!
1961$! gosub to write out the tail for config.h and close it
1962$!---------------------------------------------------------
1963$write_config_h_tail:
1964$write tf ""
1965$write tf " /* Include the hand customized settings */"
1966$write tf "/*--------------------------------------*/"
1967$write tf "#include ""config_vms.h"""
1968$write tf ""
1969$write tf "#endif /* CONFIG_H */"
1970$close tf
1971$return
1972$!
1973