This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[patch: perl@7045] vms updates
[perl5.git] / configure.com
1 $ sav_ver = 'F$VERIFY(0)
2 $! SET VERIFY
3 $!
4 $! For example, if you unpacked perl into: [USER.PERL-5n...] then you will 
5 $! want to cd into the tree and execute Configure:
6 $!
7 $! $ SET DEFAULT [USER.PERL5_xxx]
8 $! $ @Configure 
9 $!
10 $! or
11 $!
12 $! $ SET DEFAULT [USER.PERL5_xxx]
13 $! $ @Configure "-des"
14 $!
15 $! That's it. If you get into a bind trying to build perl on VMS then 
16 $! definitely read through the README.VMS file.
17 $! Beyond that send email to vmsperl@perl.org
18 $!
19 $! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20 $!
21 $! send suggestions to: 
22 $!  Dan Sugalski <dan@sidhe.org>
23 $! Thank you!!!!
24 $!
25 $! Adapted and converted from Larry Wall & Andy Dougherty's
26 $! "Configure generated by metaconfig 3.0 PL60." by Peter Prymmer
27 $! (a Bourne sh[ell] script for configuring the installation of perl 
28 $! on non-VMS systems) in the perl5.002|3 epoch (spring/summer 1996)
29 $! with much valuable help from Charles Bailey & 
30 $! the whole VMSPerl crew.
31 $! Extended and messed about with by Dan Sugalski
32 $!
33 $ sav_ver = F$VERIFY(0)
34 $!
35 $! VMS-isms we will need:
36 $ echo = "write sys$output "
37 $ cat  = "type"
38 $ delete := delete ! local symbol overrides globals with qualifiers
39 $ gcc_symbol = "gcc"
40 $ ld = "Link"
41 $ ans = ""
42 $ macros = ""
43 $ extra_flags = ""
44 $ user_c_flags = ""
45 $ use_ieee_math = "n"
46 $ be_case_sensitive = "n"
47 $ use_vmsdebug_perl = "n"
48 $ use64bitall = "n"
49 $ use64bitint = "n"
50 $ C_Compiler_Replace = "CC="
51 $ Thread_Live_Dangerously = "MT="
52 $ use_two_pot_malloc = "N"
53 $ use_pack_malloc = "N"
54 $ use_debugmalloc = "N"
55 $ ccflags = ""
56 $ vms_default_directory_name = F$ENVIRONMENT("DEFAULT")
57 $ max_allowed_dir_depth = 3  ! e.g. [A.B.PERLxxx] not [A.B.C.PERLxxx]
58 $! max_allowed_dir_depth = 2 ! e.g. [A.PERLxxx] not [A.B.PERLxxx]
59 $!
60 $ vms_filcnt = F$GETJPI ("","FILCNT")
61 $!
62 $!: compute my invocation name
63 $ me = F$ENVIRONMENT("PROCEDURE")
64 $!
65 $! Many null statements (begin with colon ':') in the Bourne shell version of
66 $! this script serve as comments/placeholders. I have retained some of the ones
67 $! that will help you compare this .COM file to the sh version - as well as
68 $! leave placeholders for future improvements to this .COM file.
69 $! sfn = VMS "skipped for now"
70 $!
71 $!: Proper PATH separator                              !sfn
72 $!: Proper PATH setting                                !sfn
73 $!: Sanity checks                                      !sfn "Say '@''$me''"
74 $!: On HP-UX, large Configure scripts may exercise a bug in /bin/sh !sfn
75 $!: Configure runs within the UU subdirectory          !->after find MANIFEST
76 $!   <big long list of default values (mostly null)>
77 $!: We must find out about Eunice early                !(?)
78 $!: list of known cpp symbols, sorted alphabetically   !sfn
79 $!   al = al + "..."
80 $!: default library list                               !sfn
81 $!   <no hints files in use (yet?)>
82 $!: Extra object files, if any, needed on this platform. !sfn
83 $!: Possible local include directories to search.      !sfn
84 $!: Set locincpth to "" in a hint file to defeat local include searches. !sfn
85 $!locincpth="/usr/local/include /opt/local/include /usr/gnu/include" !sfn
86 $!locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
87 $!: no include file wanted by default                  !sfn
88 $!inclwanted=''                                        !sfn
89 $!: Possible local library directories to search.      !sfn
90 $!loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib" !sfn
91 $!loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib" !sfn
92 $!: general looking path for locating libraries        !sfn
93 $!glibpth="/lib/pa1.1 /usr/shlib /usr/lib/large /lib /usr/lib" !sfn
94 $!glibpth="$glibpth $xlibpth /lib/large /usr/lib/small /lib/small" !sfn
95 $!glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/shlib" !sfn
96 $!: Private path used by Configure to find libraries.  Its value !sfn
97 $!: is prepended to libpth. This variable takes care of special !sfn
98 $!: machines, like the mips.  Usually, it should be empty. !sfn
99 $!plibpth=''                                           !sfn
100 $!: full support for void wanted by default            !sfn
101 $!defvoidused=15                                       !sfn
102 $!: List of libraries we want.                         !sfn
103 $!libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl' !sfn
104 $!libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt" !sfn
105 $!libswanted="$libswanted ucb bsd BSD PW x"            !sfn
106 $!: We probably want to search /usr/shlib before most other libraries. !sfn
107 $!: This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist. !sfn
108 $!glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'` !sfn
109 $!glibpth="/usr/shlib $glibpth"                        !sfn
110 $!: Do not use vfork unless overridden by a hint file. !sfn
111 $!usevfork=false                                       !sfn
112 $!: script used to extract .SH files with variable substitutions !sfn
113 $!: produce awk script to parse command line options   !sfn
114 $!sfn (assume no sed awk) see below
115 $!: process the command line options         
116 $!
117 $!: set up default values
118 $ fastread=""
119 $ reuseval="false"
120 $ maniskip = "false"
121 $ IF F$TYPE(config_sh) .EQS. "" THEN config_sh=""
122 $ alldone=""
123 $ error=""
124 $ silent=""
125 $ extractsh=""
126 $ override=""
127 $ knowitall=""
128 $ Using_Dec_C = "n"
129 $ Using_Gnu_C = "n"
130 $ using_cxx = "n"
131 $ Dec_C_Version = ""
132 $ cxxversion = ""
133 $ use_threads = "F"
134 $ use_5005_threads = "N"
135 $ use_ithreads = "N"
136 $!
137 $!: option parsing
138 $ config_args = ""
139 $ IF (P1 .NES. "")
140 $ THEN            !one or more switches was thrown
141 $   i = 1
142 $   bang = 0
143 $Param_loop:
144 $   IF (P'i'.NES."") 
145 $   THEN
146 $     bang = bang + 1
147 $     config_args = config_args + F$FAO(" !AS",P'i')
148 $   ENDIF
149 $   i = i + 1
150 $   IF (i.LT.9) THEN GOTO Param_loop !DCL allows P1..P8
151 $!
152 $   i = 1
153 $Opt_loop:
154 $   IF (F$EXTRACT(0,1,P'i') .EQS. "-") THEN P'i' = P'i' - "-"
155 $   IF (F$EXTRACT(0,1,P'i') .EQS. "/") THEN P'i' = P'i' - "/"
156 $Remove_quotation_mark:
157 $   P'i' = P'i' - """"
158 $   IF F$LOCATE("""",P'i') .LT. F$LENGTH(P'i') THEN GOTO Remove_quotation_mark
159 $   gotopt      = "f" !"alse"
160 $   gotshortopt = "f" !"alse"
161 $   IF (F$EXTRACT(0,1,P'i') .EQS. "d")
162 $   THEN
163 $     fastread    = "yes"
164 $     gotopt      = "t" !"rue"
165 $     P'i'        = P'i' - "d"
166 $     gotshortopt = "t" !"rue"
167 $   ENDIF
168 $   IF (F$EXTRACT(0,1,P'i') .EQS. "e")
169 $   THEN
170 $     alldone = "cont"
171 $     gotopt = "t"
172 $     P'i' = P'i' - "e"
173 $     gotshortopt = "t"
174 $   ENDIF
175 $   IF (F$EXTRACT(0,1,P'i') .EQS. "f") ! "-f"
176 $   THEN
177 $     P'i' = P'i' - "f"
178 $     config_sh = P'i'
179 $     IF (F$SEARCH(config_sh).NES."")
180 $     THEN
181 $       test_config_sh = F$FILE_ATTRIBUTES(config_sh,"PRO")
182 $       IF (F$LOCATE("R",test_config_sh).NE.F$LENGTH(test_config_sh)) 
183 $       THEN
184 $         config_dflt = "y"
185 $         CONTINUE !at this point check UIC && if test allows...
186 $                  !to be continued ?
187 $       ELSE
188 $         echo "''me': cannot read config file ''config_sh'."
189 $         error="true"
190 $       ENDIF
191 $     ELSE
192 $       echo "''me': cannot read config file ''config_sh'."
193 $       error="true"
194 $     ENDIF
195 $     gotopt = "t"
196 $   ENDIF
197 $   IF (F$EXTRACT(0,1,P'i') .EQS. "h") ! "-h"
198 $   THEN
199 $     error = "true"
200 $     gotopt = "t"
201 $     P'i' = P'i' - "h"
202 $     gotshortopt = "t"
203 $   ENDIF
204 $   IF (F$EXTRACT(0,1,P'i') .EQS. "m")  ! "-m"
205 $   THEN
206 $     maniskip = "true"
207 $     gotopt = "t"
208 $     P'i' = P'i' - "m"
209 $     gotshortopt = "t"
210 $   ENDIF
211 $   IF (F$EXTRACT(0,1,P'i') .EQS. "r")  ! "-r"
212 $   THEN
213 $     reuseval = "true"
214 $     gotopt = "t"
215 $     P'i' = P'i' - "r"
216 $     gotshortopt = "t"
217 $   ENDIF
218 $   IF (F$EXTRACT(0,1,P'i') .EQS. "s") ! "-s"
219 $   THEN
220 $     silent = "true"
221 $     gotopt = "t"
222 $     P'i' = P'i' - "s"
223 $     gotshortopt = "t"
224 $   ENDIF
225 $   IF (F$EXTRACT(0,1,P'i') .EQS. "E") ! "-E"
226 $   THEN
227 $     alldone = "exit"
228 $     gotopt = "t"
229 $   ENDIF
230 $   IF (F$EXTRACT(0,1,P'i') .EQS. "K") ! "-K"
231 $   THEN
232 $     knowitall = "true"
233 $     gotopt = "t"
234 $     P'i' = P'i' - "K"
235 $     gotshortopt = "t"
236 $   ENDIF
237 $   IF (F$EXTRACT(0,1,P'i') .EQS. "O") ! "-O"
238 $   THEN
239 $     override = "true"
240 $     gotopt = "t"
241 $     P'i' = P'i' - "O"
242 $     gotshortopt = "t"
243 $   ENDIF
244 $   IF (F$EXTRACT(0,1,P'i') .EQS. "S") ! "-S"
245 $   THEN
246 $     extractsh = "true"  !VMS?  Yes with munchconfig
247 $     gotopt = "t"
248 $     P'i' = P'i' - "S"
249 $     gotshortopt = "t"
250 $   ENDIF
251 $   IF (F$EXTRACT(0,1,P'i') .EQS. "D") ! "-D"
252 $   THEN
253 $     P'i' = P'i' - "D"
254 $     IF (F$LOCATE("=",P'i') .EQ. F$LENGTH(P'i'))
255 $     THEN
256 $       tmp = P'i' + "=""define"""
257 $       'tmp
258 $       DELETE/SYMBOL tmp
259 $     ELSE 
260 $       IF (F$LOCATE("=",P'i') .EQ. (F$LENGTH(P'i') - 1))
261 $       THEN
262 $         me = F$PARSE(me,,,"NAME") + F$PARSE(me,,,"TYPE")
263 $         echo "''me': use '-Usymbol=val' not '-Dsymbol='."
264 $         echo "''me': ignoring -D",P'i'
265 $       ELSE
266 $          tmp = F$EXTRACT(0,F$LOCATE("=",P'i'),P'i')
267 $          tmp = tmp + "=""" + F$EXTRACT(F$LOCATE("=",P'i')+1,F$LENGTH(P'i'),P'i') + """"
268 $         'tmp
269 $         DELETE/SYMBOL tmp
270 $       ENDIF
271 $     ENDIF
272 $     gotopt = "t"
273 $   ENDIF
274 $   IF (F$EXTRACT(0,1,P'i') .EQS. "U") ! "-U"
275 $   THEN
276 $     P'i' = P'i' - "U"
277 $     IF (F$LOCATE("=",P'i') .EQ. F$LENGTH(P'i'))
278 $     THEN
279 $       tmp = P'i' + "="""""
280 $       'tmp
281 $       DELETE/SYMBOL tmp
282 $     ELSE 
283 $       IF (F$LOCATE("=",P'i') .LT. (F$LENGTH(P'i') - 1))
284 $       THEN
285 $         me = F$PARSE(me,,,"NAME") + F$PARSE(me,,,"TYPE")
286 $         echo "''me': use '-Dsymbol=val' not '-Usymbol=val'."
287 $         echo "''me': ignoring -U",P'i'
288 $       ELSE
289 $         tmp = P'i' + "=""undef"""
290 $         'tmp
291 $         DELETE/SYMBOL tmp
292 $       ENDIF
293 $     ENDIF
294 $     gotopt = "t"
295 $   ENDIF
296 $   IF (F$EXTRACT(0,1,P'i') .EQS. "V")
297 $   THEN
298 $     me = F$PARSE(me,,,"NAME") + F$PARSE(me,,,"TYPE")
299 $     echo "''me' generated by an unknown version of EDT."
300 $     STOP
301 $     EXIT
302 $   ENDIF
303 $   IF .NOT.gotopt 
304 $   THEN
305 $     echo "''me': unknown option ",P'i'
306 $     error = "true"
307 $   ENDIF
308 $   IF (F$LENGTH(P'i').GT.0).AND.(gotshortopt) THEN i = i - 1 !clustered switch
309 $   i = i + 1 
310 $   IF (i .LT. (bang + 1)) THEN GOTO Opt_loop
311 $!
312 $ ENDIF  ! (P1 .NES. "")
313 $ config_args = F$EDIT(config_args,"TRIM")
314 $!
315 $ IF (error)
316 $ THEN
317 $   me = F$PARSE(me,,,"DIRECTORY")+ F$PARSE(me,,,"NAME")
318 $   echo "Usage: @''me' [-dehmrEKOSV] [-fconfig.sh] [-Dsymbol] [-Dsymbol=value]"
319 $   echo "                [-Usymbol]  [-Usymbol=]"
320 $   TYPE SYS$INPUT
321  "-d" : use defaults for all answers.
322  "-e" : go on without questioning past the production of config.sh.    *
323  "-f" : specify an alternate default configuration file.
324  "-h" : print this help message and exit (with an error status).
325  "-m" : skip the MANIFEST check to see that all files are present
326  "-r" : reuse C symbols value if possible (skips costly nm extraction).*
327  "-s" : silent mode, only echoes questions and essential information.
328  -"D" : define symbol to have some value:                              *
329          -"Dsymbol"         symbol gets the value 'define'
330          -"Dsymbol=value"   symbol gets the value 'value'
331   -E  : stop at the end of questions, after having produced config.sh. *
332   -K  : do not use unless you know what you are doing.
333   -O  : let -D and -U override definitions from loaded configuration file. *
334   -S  : perform variable substitutions on all .SH files (can mix with -f) *
335  -"U" : undefine symbol:                                               *
336          -"Usymbol"    symbol gets the value 'undef'
337          -"Usymbol="   symbol gets completely empty
338   -V  : print version number and exit (with a zero status).
339 $   echo "%Config-I-VMS, lower case switches must be enclosed"
340 $   echo "-Config-I-VMS, in double quotation marks, e.g.:"
341 $   echo "-Config-I-VMS,   @Configure ""-des"""
342 $   echo "-Config-I-VMS, * indicates switch may not be fully implemented for VMS."
343 $   SET DEFAULT 'vms_default_directory_name' !be kind rewind
344 $   STOP
345 $   EXIT 3 ! $STATUS = "%X00000003" (informational)
346 $ ENDIF
347 $!
348 $ GOTO Check_silence
349 $!
350 $Shut_up:
351 $ IF F$Mode() .eqs. "BATCH"
352 $ THEN
353 $   STDOUT = F$GetQuI("DISPLAY_JOB","LOG_SPECIFICATION",,"THIS_JOB")
354 $   WRITE SYS$OUTPUT "Warning: Executing in batch mode.  To avoid file locking conflicts,"
355 $   WRITE SYS$OUTPUT "output intended for SYS$OUTPUT will be sent to a new version"
356 $   WRITE SYS$OUTPUT STDOUT
357 $ ELSE
358 $   STDOUT = F$TRNLNM("SYS$OUTPUT")
359 $ ENDIF
360 $ DEFINE SYS$OUTPUT "_NLA0:"
361 $ echo4 = "write STDOUT "
362 $ cat4 = "TYPE/OUTPUT=''STDOUT'"
363 $ open/write/share=read STDOUT 'STDOUT'
364 $ RETURN
365 $!
366 $Check_silence:
367 $ IF (silent) 
368 $ THEN
369 $   GOSUB Shut_up
370 $ ELSE
371 $   echo4 = "write SYS$OUTPUT "
372 $   cat4 = "TYPE"
373 $ ENDIF
374 $!
375 $!: run the defines and the undefines, if any, but leave the file out there...
376 $! Unfortunately Configure.COM in DCL is not yet set up to do this - 
377 $! maybe someday
378 $!
379 $!: set package name
380 $ package = "perl5"
381 $ packageup = F$EDIT((package - "5"),"UPCASE")
382 $!
383 $!: Eunice requires " " instead of "", can you believe it
384 $ echo ""
385 $!: Here we go...
386 $ echo "Beginning of configuration questions for ''package'."
387 $ echo ""
388 $!
389 $!: Some greps do not return status, grrr.
390 $ contains = "SEARCH"
391 $!
392 $!: first determine how to suppress newline on echo command !cant DCL is record oriented
393 $! echo "Checking ''echo' to see how to suppress newlines..."
394 $! echo "giving up..."
395 $! echo "The star should be here-->*"
396 $!
397 $!: Now test for existence of everything in MANIFEST
398 $ echo ""
399 $ echo4 "First let's make sure your kit is complete.  Checking..."
400 $ manifestfound = "" 
401 $ miss_list = "" 
402 $! Here I assume we are in the [foo.PERLxxx...] tree
403 $! because the search routine simply does set def [-] if necessary.
404 $ file_2_find = "MANIFEST" !I hope this one is not in [foo.PERL5xxx.VMS...] 
405 $Research_manifest:
406 $ manifestfound = F$SEARCH(file_2_find)
407 $ IF (manifestfound .EQS. "")
408 $ THEN
409 $   IF F$PARSE(F$ENVIRONMENT("DEFAULT"),,,"DIRECTORY",).NES."[000000]"
410 $   THEN
411 $     SET DEFAULT [-]
412 $     GOTO Research_manifest
413 $   ELSE
414 $     echo ""
415 $     echo "There is no MANIFEST file.  I hope your kit is complete !"
416 $     miss_list = ""
417 $     GOTO Beyond_manifest
418 $   ENDIF
419 $ ELSE
420 $! MANIFEST. has been found and we have set def'ed there - 
421 $! time to bail out before it's too late.
422 $ tmp = f$extract(1,3,f$edit(f$getsyi("VERSION"),"TRIM,COLLAPSE"))
423 $ IF (tmp .GES. "7.2") .AND. (F$GETSYI("HW_MODEL") .GE. 1024) THEN GOTO Beyond_depth_check
424 $   IF (F$ELEMENT(max_allowed_dir_depth,".",F$ENVIRONMENT("Default")).nes.".")
425 $   THEN
426 $     TYPE SYS$INPUT:
427 %Config-E-VMS, ERROR:
428  Sorry! It apears as though your perl build sub-directory is already too
429  deep into the VMS file system. Please try moving stuff into a shallower 
430  directory (or altering the "max_allowed_dir_depth" parameter).
431 $     echo4 "ABORTING..."
432 $     SET DEFAULT 'vms_default_directory_name' !be kind rewind
433 $     STOP
434 $     EXIT !2 !$STATUS = "%X00000002" (error)
435 $   ENDIF
436 $Beyond_depth_check:
437 $!
438 $! after finding MANIFEST let's create (but not yet enter) the UU subdirectory
439 $!
440 $   IF (manifestfound .NES. "")
441 $   THEN
442 $     IF ( F$SEARCH("UU.DIR").EQS."" )
443 $     THEN
444 $       CREATE/DIRECTORY [.UU]
445 $     ELSE
446 $       IF ( F$SEARCH("[.UU]*.*").NES."" ) THEN DELETE/NOLOG [.UU]*.*;*
447 $     ENDIF
448 $!: Configure runs within the UU subdirectory
449 $     SET DEFAULT [.UU]
450 $!
451 $! a little redundancy never hurt anybody?
452 $     file_2_find = "[-]" + file_2_find
453 $     manifestfound = F$SEARCH(file_2_find)
454 $!
455 $     OPEN/WRITE MISSING MISSING.
456 $!change to "FALSE" if you wish to skip the manifest search 
457 $!(which after all is rather slow in DCL :-)
458 $     IF (maniskip)
459 $     THEN
460 $       echo "Skipping MANIFEST check as requested"
461 $     ELSE
462 $!
463 $       OPEN/READ CONFIG 'manifestfound'
464 $Read_loop_manifest:
465 $       READ/END_OF_FILE = Done_manifest CONFIG line
466 $! This algorithm turns "foo/bar/baz.c" into "[.foo.bar]baz.c"
467 $! pvhp@lns62.lns.cornell.edu 10-JUN-1996 20:31:46
468 $! 2-MAR-1998 15:46:11 Improved to turn "foo/bar/baz.c.buz"
469 $! into "[.foo.bar]baz.c_buz as happens with vmstar and unzip
470 $       line = F$EDIT(line,"TRIM, COMPRESS")
471 $       file_2_find = F$EXTRACT(0,F$LOCATE(" ",line),line) 
472 $       IF F$LOCATE("/",file_2_find) .NE. F$LENGTH(file_2_find) 
473 $       THEN 
474 $Re_strip_line_manifest:
475 $         loca = F$LOCATE("/",file_2_find)
476 $         ante = F$EXTRACT(0,loca,file_2_find)
477 $         post = F$EXTRACT(loca,F$LENGTH(file_2_find),file_2_find)
478 $         test_this = ante + "." + (post - "/")
479 $         IF F$LOCATE("/",test_this) .NE. F$LENGTH(test_this)
480 $         THEN 
481 $           file_2_find = ante + "." + (post - "/")
482 $           GOTO Re_strip_line_manifest
483 $         ELSE
484 $           file_2_find = ante + "]" + (post - "/")
485 $         ENDIF
486 $           file_2_find = "[-."+file_2_find
487 $       ELSE
488 $         file_2_find = "[-]" + file_2_find
489 $       ENDIF
490 $!
491 $       dirname = F$EXTRACT(0,F$LOCATE("]",file_2_find),file_2_find) + "]"
492 $       file_2_find = file_2_find - dirname
493 $       dots = 0
494 $Dot_loop:
495 $       dot_ele = F$ELEMENT(dots,".",file_2_find)
496 $       IF dot_ele .EQS. "." THEN GOTO Eo_dot_loop
497 $       IF dots .eq. 0
498 $       THEN basename = f$extract(0,f$locate(".",file_2_find),file_2_find) + "."
499 $       ELSE basename = basename + dot_ele + "_"
500 $       ENDIF
501 $       dots = dots + 1
502 $       GOTO dot_loop
503 $Eo_dot_loop:
504 $       IF (((f$length(file_2_find)+1) .eq. f$length(basename)) .and. -
505              (f$extract(f$length(basename)-1,1,basename) .eqs. "_")) THEN -
506           basename = f$extract(0,f$length(basename)-1,basename)
507 $       file_2_find = dirname + basename
508 $!
509 $       found = F$SEARCH(file_2_find)
510 $       IF (found .EQS. "" .AND. dots .GT. 2)
511 $       THEN
512 $! 17-DEC-1999 Improved to turn "[.foo.bar]baz.c_buz" into
513 $! "[.foo.bar]baz_c.buz" to cover unzipped archives and put
514 $! "[.foo.bar]baz.c_buz,baz_c.buz" into missing list if neither is found.
515 $         basename[f$locate(".",basename),1] := _
516 $         dot_ele = F$ELEMENT(dots - 1,"_",basename)
517 $         basename = -
518             f$extract(0,f$length(basename)-(f$length(dot_ele)+1),basename) -
519               + "." + dot_ele
520 $         found = F$SEARCH(dirname + basename)
521 $         file_2_find = file_2_find + "," + basename
522 $       ENDIF
523 $       IF (found .EQS. "")
524 $       THEN
525 $         WRITE MISSING file_2_find
526 $         IF ((F$LENGTH(miss_list)+F$LENGTH(file_2_find)).LT.250)
527 $         THEN
528 $           miss_list = miss_list + "," + file_2_find
529 $         ENDIF
530 $       ENDIF
531 $       GOTO Read_loop_manifest
532 $Done_manifest:
533 $       CLOSE CONFIG
534 $     ENDIF  !"TRUE"
535 $     CLOSE MISSING
536 $   ENDIF ! (manifestfound .NES. "")
537 $Beyond_manifest:
538 $   IF (miss_list .NES. "")
539 $   THEN
540 $     echo "Some of the files not found include:"
541 $     cat4 MISSING.
542 $   ENDIF
543 $   IF ((miss_list .NES. "").OR.(manifestfound .EQS. ""))
544 $   THEN
545 $     TYPE SYS$INPUT:
546
547 THIS PACKAGE SEEMS TO BE INCOMPLETE.
548
549 You have the option of continuing the configuration process, despite the
550 distinct possibility that your kit is damaged, by typing 'y'es.  If you
551 do, don't blame me if something goes wrong.  I advise you to type 'n'o
552 and contact the author (dan@sidhe.org)
553
554 $     READ SYS$COMMAND/PROMPT="Continue? [n] " ans
555 $     IF ans
556 $     THEN
557 $       echo4 "Continuing..."
558 $     ELSE
559 $       echo4 "ABORTING..."
560 $       GOTO Clean_up
561 $     ENDIF
562 $   ELSE
563 $     echo4 "Looks good..."
564 $     DELETE/NOLOG MISSING.;
565 $   ENDIF ! (miss_list .NES. "")
566 $ ENDIF   ! (manifestfound .EQS. "") ELSE 
567 $!
568 $! after finding MANIFEST (see above)
569 $!: Configure runs within the UU subdirectory 
570 $!
571 $!: compute the number of columns on the terminal for proper question formatting
572 $! (sfn, will assume 80-ish)
573 $!
574 $!: set up the echo used in my read              !sfn
575 $!: now set up to do reads with possible shell escape and default assignment !sfn
576 $ GOTO Beyond_myread
577 $!
578 $myread:
579 $ ans = ""
580 $ If (fastread)
581 $ Then
582 $   echo4 "''rp'"
583 $ Else
584 $   If (.NOT. silent) Then echo ""
585 $   READ SYS$COMMAND/PROMPT="''rp'" ans
586 $   IF (ans .EQS. "&-d")
587 $   THEN
588 $     echo4 "(OK, I will run with -d after this question.)"
589 $     IF (.NOT. silent) THEN echo ""
590 $     READ SYS$COMMAND/PROMPT="''rp'" ans
591 $     fastread := yes
592 $   ENDIF
593 $   IF (ans .EQS. "&-s")
594 $   THEN
595 $     echo4 "(OK, I will run with -s after this question.)"
596 $     echo ""
597 $     READ SYS$COMMAND/PROMPT="''rp'" ans
598 $     silent := true
599 $     GOSUB Shut_up
600 $   ENDIF
601 $ Endif
602 $ RETURN
603 $!
604 $Beyond_myread:
605 $!
606 $!: create .config dir to save info across Configure sessions
607 $ IF ( F$SEARCH("[-]CONFIG.DIR").EQS."" )
608 $ THEN
609 $   CREATE/DIRECTORY [-.CONFIG]
610 $   OPEN/WRITE CONFIG [-.CONFIG]README.
611 $   WRITE CONFIG -
612       "This directory created by Configure to save information that should"
613 $   WRITE CONFIG -
614       "persist across sessions."
615 $   WRITE CONFIG ""
616 $   WRITE CONFIG -
617       "You may safely delete it if you wish."
618 $   CLOSE CONFIG
619 $ ENDIF
620 $!
621 $ IF F$TYPE(usedevel) .EQS. "" THEN usedevel := n
622 $ patchlevel_h = F$SEARCH("[-]patchlevel.h")
623 $ IF (patchlevel_h.NES."")
624 $ THEN
625 $   SEARCH 'patchlevel_h "define","PERL_VERSION","epoch"/match=and/out=[]ver.out
626 $   IF .NOT. usedevel .AND. usedevel .NES. "define"
627 $   THEN
628 $     OPEN/READ CONFIG []ver.out
629 $     READ CONFIG line
630 $     CLOSE CONFIG
631 $     tmp = F$EDIT(line,"TRIM,COMPRESS")
632 $     xpatchlevel = F$INTEGER(F$ELEMENT(2," ",tmp))
633 $     line = xpatchlevel / 2
634 $     tmp = xpatchlevel - ( line * 2 )
635 $     IF tmp .NE. 0
636 $     THEN
637 $       echo4 "patchlevel is " + F$STRING(xpatchlevel)
638 $       cat4 SYS$INPUT:
639 *** WHOA THERE!!! ***
640
641     This is an UNSTABLE DEVELOPMENT release.
642     (The patchlevel, is odd--as opposed to even,
643      and that signifies a development release.  If you want a
644      maintenance release, you want an even-numbered release.)
645
646     Do ***NOT*** install this into production use.
647     Data corruption and crashes are possible.
648
649     It is most seriously suggested that you do not continue any further
650     unless you want to help in developing and debugging Perl.
651
652 $       dflt="n"
653 $       rp="Do you really want to continue? [''dflt'] "
654 $       IF (fastread) THEN fastread := FALSE
655 $       GOSUB myread
656 $       IF ans .EQS. "" THEN ans = dflt
657 $       IF ans
658 $       THEN
659 $         echo4 "Okay, continuing."
660 $       ELSE
661 $         echo4 "Okay, bye."
662 $         DELETE/NOLOG/NOCONFIRM []ver.out;
663 $         GOTO Clean_up
664 $         STOP
665 $         exit 0
666 $       ENDIF
667 $     ENDIF
668 $     DELETE/SYMBOL line
669 $     DELETE/SYMBOL tmp
670 $   ENDIF
671 $   DELETE/NOLOG/NOCONFIRM []ver.out;
672 $ ENDIF
673 $!: general instructions
674 $ needman = "true"
675 $ firsttime = "true"
676 $ user = F$EDIT(F$GETJPI("","USERNAME"),"TRIM,COLLAPSE")
677 $ IF .NOT.(F$SEARCH("[-.CONFIG]INSTRUCT.").EQS."")
678 $ THEN
679 $   messages = F$ENVIRONMENT("MESSAGE")
680 $   SET MESSAGE/NOFAC/NOSEV/NOIDENT/NOTEXT
681 $   contains /NOOUTPUT [-.CONFIG]INSTRUCT. 'user'
682 $   IF .NOT.($status.EQ.%X08D78053)
683 $   THEN
684 $     firsttime=""
685 $     dflt = "n"
686 $     rp = "Would you like to see the instructions? [''dflt'] "
687 $     GOSUB myread
688 $     if .NOT.ans THEN needman=""
689 $   ENDIF
690 $   SET MESSAGE 'messages'
691 $ ENDIF
692 $ if (fastread.AND.silent.AND.(alldone.eqs."cont")) THEN needman=""
693 $!
694 $ IF (needman)
695 $ THEN
696 $   TYPE SYS$INPUT:
697
698 This installation shell script will examine your system and ask you questions
699 to determine how the perl5 package should be installed. If you get
700 stuck on a question, you may use a ^C or ^Y shell escape to STOP this
701 process, edit something, then restart this process as you just did.
702 Many of the questions will have default answers in square
703 brackets; typing carriage return will give you the default.
704
705 $   READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
706 $   TYPE SYS$INPUT:
707
708 In a hurry? You may run '@Configure "-d"'.  This will bypass nearly all
709 the questions and use the computed defaults (or the previous answers provided 
710 there was already a config.sh file). Type '@Configure "-h"' for a list of 
711 options.
712
713 $   READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
714 $   TYPE SYS$INPUT:
715
716 Much effort has been expended to ensure that this shell script will
717 run on any VMS system.  If despite that it blows up on yours, your
718 best bet is to edit Configure.com and @ it again.  Whatever problems
719 you have with Configure.com, let me (dan@sidhe.org) know how I blew
720 it.
721
722 $!This installation script affects things in two ways:
723 $!
724 $!1) it may do direct variable substitutions on some of the files included
725 $!   in this kit.
726 $!2) it builds a config.h file for inclusion in C programs.  You may edit
727 $!   any of these files as the need arises after running this script.
728 $!
729 $!If you make a mistake on a question, there is no easy way to back up to it
730 $!currently.
731 $!
732 $   READ SYS$COMMAND/PROMPT="Type carriage return to continue " ans
733 $   IF (F$SEARCH("[-.CONFIG]INSTRUCT.").EQS."")
734 $   THEN
735 $     OPEN/WRITE CONFIG [-.CONFIG]INSTRUCT.
736 $     WRITE CONFIG user 
737 $     CLOSE CONFIG
738 $   ENDIF
739 $ ENDIF  !(needman .EQS. "true")
740 $!
741 $!: see if sh knows # comments             !sfn
742 $ sharpbang = "$ "
743 $!: figure out how to guarantee sh startup !sfn
744 $!: find out where common programs are     !sfn
745 $!loclist="awk/cat/comm/cp/echo/expr/find/grep/ln/ls/mkdir/rm/sed/sort/touch/tr/uniq"
746 $!trylist="byacc/cpp/csh/date/egrep/less/line/more/nroff/perl/pg/sendmail/test/uname"
747 $! echo "I don't know where '$file' is, and my life depends on it."
748 $! echo "Go find a public domain implementation or fix your PATH setting!"
749 $! echo ""
750 $! echo "Don't worry if any of the following aren't found..."
751 $!: determine whether symbolic links are supported !sfn
752 $!: see whether [:lower:] and [:upper:] are supported character classes !sfn
753 $!: set up the translation script tr, must be called with ./tr of course !sfn
754 $!
755 $!: Try to determine whether config.sh was made on this system
756 $!: Get old answers from old config file if Configure was run on the
757 $!: same system, otherwise use the hints.
758 $ config_sh_es = "''config_sh'/[-]config.sh/[-.vms]config.vms/"
759 $ i = 0
760 $ max = 3
761 $Config_sh_look:
762 $ config_sh = F$ELEMENT(i,"/",config_sh_es)
763 $ i = i + 1
764 $ IF (config_sh.NES."/").AND.(config_sh.NES."")
765 $ THEN
766 $   configshfound = F$SEARCH(config_sh)
767 $   IF (configshfound.NES."") THEN GOTO Config_sh_found
768 $ ENDIF
769 $ IF (i.LT.max) THEN GOTO Config_sh_look
770 $! genconfig.pl has "osname='VMS'"
771 $ osname = F$EDIT(F$GETSYI("NODE_SWTYPE"),"COLLAPSE")
772 $ IF (configshfound.EQS."")
773 $ THEN
774 $   config_sh = "[-]config.sh" ! the fallback default
775 $   GOTO Beyond_config_sh
776 $ ENDIF
777 $Config_sh_found:
778 $ IF F$TYPE(osname) .EQS. "" THEN osname = F$EDIT(F$GETSYI("NODE_SWTYPE"),"COLLAPSE")
779 $ IF F$TYPE(config_dflt) .EQS. "" THEN config_dflt = "n"
780 $ rp = "Shall I @ ''config_sh' for default answers? [''config_dflt'] "
781 $ GOSUB myread
782 $ IF ans .EQS. "" THEN ans = config_dflt
783 $ IF ans
784 $ THEN
785 $   echo ""
786 $   echo "Fetching default answers from ''config_sh'..."
787 $!
788 $! This @ is why config_sh must employ DCL syntax.  Note that for
789 $! symbols to be returned to this procedure they must be global.
790 $! Which implies that assignments must be of the :== or == variety.
791 $! Note further that the [-]config.sh file written by this procedure
792 $! employs shell syntax.  In order to convert shell syntax to DCL
793 $! you might try:
794 $!
795 $! perl -ni -e "s/^#/!#/;s/='/==""/;s/'$/""/;print ""\$ $_"";" config.sh
796 $!
797 $! However, watch out for sig_nam, sig_nam_init, sig_num, startperl 
798 $! and any of the lower case double quoted variables such as the *format
799 $! variables in such a config."sh".
800 $!
801 $   @'config_sh
802 $!
803 $ ENDIF
804 $ DELETE/SYMBOL config_dflt
805 $!
806 $!we actually do not have "hints/" for VMS
807 $!     TYPE SYS$INPUT:
808 $!
809 $!First time through, eh?  I have some defaults handy for the following systems:
810 $!
811 $!     echo "     ","VMS_VAX"
812 $!     echo "     ","VMS_AXP"
813 $!        : Now look for a hint file osname_osvers, unless one has been
814 $!        : specified already.
815 $!     TYPE SYS$INPUT:
816 $!
817 $!You may give one or more space-separated answers, or "none" if appropriate.
818 $!If your OS version has no hints, DO NOT give a wrong version -- say "none".
819 $!
820 $!     READ SYS$COMMAND/PROMPT="Which of these apply, if any? " ans
821 $!
822 $Beyond_config_sh:
823 $!
824 $!: Restore computed paths          !sfn
825 $!
826 $! %Config-I-VMS, a necessary error trap (could be PC running VCL)
827 $!
828 $ IF (osname .NES. "VMS")
829 $ THEN
830 $   echo4 "Hmm.. I wonder what ''osname' is (?)"
831 $   TYPE SYS$INPUT:
832
833 %Config-E-VMS, ERROR:
834
835            Err, you do not appear to be running VMS!
836  This procedure is intended to Configure the building of Perl for VMS.
837
838 $   READ SYS$COMMAND/PROMPT="Continue anyway? [n] " ans
839 $   IF ans
840 $   THEN
841 $     echo4 "Continuing..."
842 $   ELSE
843 $     echo4 "ABORTING..."
844 $     SET DEFAULT 'vms_default_directory_name' !be kind rewind
845 $     STOP
846 $     EXIT 2 !$STATUS = "%X00000002" (error)
847 $   ENDIF
848 $ ELSE           !we are on VMS huzzah!
849 $   IF .NOT.silent 
850 $   THEN TYPE SYS$INPUT:
851
852 Configure uses the operating system name and version to set some defaults.
853 The default value is probably right if the name rings a bell. Otherwise,
854 since spelling matters for me, either accept the default or answer "none"
855 to leave it blank.
856 $   ENDIF
857 $   rp = "Operating system name? [''osname'] "
858 $   GOSUB myread
859 $   IF ans.nes.""
860 $   THEN
861 $     IF (ans.NES.osname) !.AND.knowitall
862 $     THEN
863 $       echo4 "I'll go with ''osname' anyway..."
864 $     ENDIF
865 $   ENDIF
866 $ ENDIF !(osname .NES./.EQS. "VMS")
867 $!
868 $!: who configured the system
869 $ cf_by = F$EDIT(user,"LOWERCASE")
870 $ osvers = F$EDIT(F$GETSYI("VERSION"),"TRIM")
871 $!
872 $! Peter Prymmer has seen:
873 $!  "SYS$TIMEZONE_DIFFERENTIAL" = "-46800"  (sic)
874 $!  "SYS$TIME_ZONE" = "EDT"
875 $!
876 $! Charles Lane recommended:
877 $!  "SYS$TIMEZONE_DIFFERENTIAL" = "-14400"
878 $!  "NEWS_TIMEZONE" = "-0500"
879 $!  "ST_TIMEZONE" = "EDT"
880 $!  "JAN_TIME_ZONE" = "EST  "
881 $!  "MULTINET_TIMEZONE" = "EST"
882 $!  "DAYLIGHT_SAVINGS"  = "1"
883 $!
884 $! Charles Bailey recommends (in ANU NEWS Doc Jan 1995):
885 $!   "PMDF_Timezone"
886 $!   "Multinet_Timezone"
887 $!   "TCPware_Timezone"
888 $!   "WIN$Time_Zone"
889 $!
890 $! This snippet o' DCL returns a string in default Unix `date` format,
891 $! and it will prompt to set SYS$TIMEZONE_DIFFERENTIAL.
892 $!
893 $ MIN_TZO = -840  !units are minutes here
894 $ MAX_TZO =  840
895 $!
896 $ wkday  = F$EXTRACT(0,3,F$CVTIME(,,"WEEKDAY"))
897 $ monn   = F$CVTIME(,,"MONTH")
898 $ mday   = F$EXTRACT(8,2,F$CVTIME(,,"DATE"))
899 $ hour   = F$CVTIME(,,"HOUR")
900 $ min    = F$CVTIME(,,"MINUTE")
901 $ sec    = F$CVTIME(,,"SECOND")
902 $ year   = F$CVTIME(,,"YEAR")
903 $!
904 $ months = "/Jan/Feb/Mar/Apr/May/Jun/Jul/Aug/Sep/Oct/Nov/Dec/"
905 $ i = 0
906 $Mon_loop:
907 $ i = i + 1
908 $ mon = F$ELEMENT(i,"/",months)
909 $ IF i.LT.monn THEN GOTO Mon_loop
910 $!
911 $ tzneedset = "t"
912 $ systz = F$TRNLNM("SYS$TIMEZONE_DIFFERENTIAL")
913 $ IF systz.NES.""
914 $ THEN
915 $   tzhour = F$INTEGER(systz)/3600
916 $   tzmins = F$INTEGER(systz)/60
917 $   tzminrem = tzmins - tzhour*60
918 $   IF tzminrem.lt.0 THEN tzminrem = -1*tzminrem  !keeps !2ZL happy
919 $   IF tzhour.ge.0 
920 $   THEN signothetime = "+" 
921 $     IF tzhour.EQ.0.AND.tzminrem.EQ.0 
922 $     THEN direction = "on GMT/"
923 $     ELSE direction = "east of "
924 $     ENDIF
925 $   ELSE signothetime = "-"
926 $     tzhour = -1*tzhour                          !keeps !UL happy
927 $     direction = "west of "
928 $   ENDIF
929 $   echo ""
930 $   echo "According to the setting of your ""SYS$TIMEZONE_DIFFERENTIAL"" (= ''systz')"
931 $   IF tzminrem.ne.0
932 $   THEN
933 $     tzspan = "''tzhour' hours & ''tzminrem' minutes"
934 $   ELSE
935 $     tzspan = "''tzhour' hours"
936 $   ENDIF
937 $   dflt = "y"
938 $   echo "Your system is ''tzspan' ''direction'UTC in England."
939 $   rp = "(''systz') Is this UTC Time Zone Offset correct? [''dflt'] "
940 $   GOSUB myread
941 $   IF ans.OR.(ans.EQS."") 
942 $   THEN 
943 $     tzneedset = "f"
944 $     tzd = systz
945 $     GOTO Beyond_TimeZone
946 $   ENDIF
947 $ ELSE
948 $   echo ""
949 $   echo4 """SYS$TIMEZONE_DIFFERENTIAL"" does not appear to be DEFINEd on your system"
950 $ ENDIF
951 $!
952 $TZSet:
953 $ echo ""
954 $ echo "Please tell me in hh:mm form what time offset from GMT/UTC in England"
955 $ echo "you are.  As an example Eastern (US) Standard Time is -5:00 offset, but"
956 $ echo "Eastern Daylight Time (summer) is -4:00 offset."
957 $ dflt = "0:00"
958 $ rp = "Enter the Time Zone offset: [''dflt'] "
959 $ GOSUB myread
960 $ ans = F$Edit(ans,"collapse,trim,uncomment,upcase")
961 $ IF ans.EQS."" THEN ans = dflt
962 $ tzhour   = F$ELEMENT(0,":","''ans'") !first
963 $ IF tzhour.EQS."" THEN tzhour = 0
964 $ tzhour   = F$INTEGER(tzhour)
965 $ tzminrem = F$ELEMENT(1,":","''ans'") !second
966 $ IF tzminrem.NES."" 
967 $ THEN 
968 $   tzminrem = F$INTEGER(tzminrem)
969 $   IF F$EXTRACT(0,1,"''ans'") .EQS. "-" THEN tzminrem = tzminrem * -1
970 $ ELSE 
971 $   tzminrem = 0
972 $ ENDIF
973 $ tzmins = tzhour*60 + tzminrem
974 $ tzd = F$STRING(tzmins*60)
975 $ IF tzhour .GE. 0 
976 $ THEN
977 $   signothetime = "+" 
978 $ ELSE
979 $   tzhour = -1*tzhour       !keeps !UL happy
980 $   signothetime = "-"
981 $ ENDIF
982 $ IF (tzmins.GT.MAX_TZO).OR.(tzmins.LT.MIN_TZO)
983 $ THEN
984 $   echo ""
985 $   echo "%Config-W-VMS-TIMERANGE, Response must be in the range -14:00 to 14:00."
986 $   goto TZSet
987 $ ENDIF
988 $!
989 $Beyond_TimeZone:
990 $ tz = f$fao("UTC!AS!UL:!2ZL",signothetime,tzhour,tzminrem)
991 $ cf_time = "''wkday' ''mon' ''mday' ''hour':''min':''sec' ''tz' ''year'"
992 $!
993 $!: determine the architecture name  
994 $! genconfig.pl has either archname='VMS_AXP' or 'VMS_VAX'
995 $! Note that DCL in VMS V5.4 does not have F$GETSYI("ARCH_NAME")
996 $! but does have F$GETSYI("HW_MODEL").
997 $!
998 $ IF (F$GETSYI("HW_MODEL") .LT. 1024)
999 $ THEN 
1000 $   archname = "VMS_VAX"
1001 $   otherarch = "an Alpha"
1002 $   alignbytes="8"
1003 $   arch_type = "ARCH-TYPE=__VAX__"
1004 $ ELSE
1005 $   archname = "VMS_AXP"
1006 $   otherarch = "a VAX"
1007 $   alignbytes="8"
1008 $   arch_type = "ARCH-TYPE=__AXP__"
1009 $ ENDIF
1010 $ rp = "What is your architecture name? [''archname'] "
1011 $ GOSUB myread
1012 $ IF ans.NES.""
1013 $ THEN
1014 $   ans = F$EDIT(ans,"COLLAPSE, UPCASE")
1015 $   IF (ans.NES.archname) !.AND.knowitall
1016 $   THEN
1017 $     echo4 "I'll go with ''archname' anyway..."
1018 $   ENDIF
1019 $ ENDIF
1020 $ dflt = "n"
1021 $ vms_prefix = "perl_root"
1022 $ vms_prefixup = F$EDIT(vms_prefix,"UPCASE")
1023 $ rp = "Will you be sharing your ''vms_prefixup' with ''otherarch'? [''dflt'] "
1024 $ GOSUB myread
1025 $ if ans.NES.""
1026 $ THEN
1027 $   ans = F$EXTRACT(0,1,F$EDIT(ans,"COLLAPSE, UPCASE"))
1028 $ ENDIF
1029 $ IF (ans.NES."Y")
1030 $ THEN
1031 $   sharedperl = "N"
1032 $ ELSE
1033 $   sharedperl = "Y"
1034 $   IF (archname.EQS."VMS_AXP")
1035 $   THEN
1036 $     macros = macros + """AXE=1"","
1037 $   ENDIF
1038 $ ENDIF
1039 $!
1040 $!: is AFS running?                       !sfn
1041 $!: decide how portable to be.  Allow command line overrides. !sfn
1042 $!: set up shell script to do ~ expansion !sfn
1043 $!: expand filename                       !sfn
1044 $!: now set up to get a file name         !sfn
1045 $!
1046 $ IF F$TYPE(prefix) .EQS. ""
1047 $ THEN
1048 $   prefix = F$ENVIRONMENT("DEFAULT") - ".UU]" + "]"
1049 $   prefix = F$PARSE(prefix,,,,"NO_CONCEAL") - "][" - ".;"
1050 $   prefixbase = prefix - "]"
1051 $   prefix = prefixbase + ".]"
1052 $ ENDIF
1053 $ src = prefix
1054 $!: determine root of directory hierarchy where package will be installed.
1055 $ dflt = prefix
1056 $ IF .NOT.silent 
1057 $ THEN 
1058 $   echo ""
1059 $   echo "By default, ''package' will be installed in ''dflt', pod"
1060 $   echo "pages under ''prefixbase'.LIB.POD], etc..., i.e. with ''dflt' as prefix for"
1061 $   echo "all installation directories."
1062 $   echo "On ''osname' the prefix is used to DEFINE the ''vms_prefixup' prior to installation"
1063 $   echo "as well as during subsequent use of ''package' via ''packageup'_SETUP.COM."
1064 $ ENDIF
1065 $ rp = "Installation prefix to use (for ''vms_prefixup')? [ ''dflt' ] "
1066 $ GOSUB myread
1067 $ IF ans.NES.""
1068 $ THEN 
1069 $   prefix = ans
1070 $   IF F$LOCATE(".]",ans) .EQ. F$LENGTH(ans) THEN prefix = prefix - "]" + ".]"
1071 $ ELSE 
1072 $   prefix = dflt
1073 $ ENDIF
1074 $ perl_root = prefix
1075 $!
1076 $! Check here for pre-existing PERL_ROOT.
1077 $!  -> ask if removal desired.
1078 $! Check here for writability of requested PERL_ROOT if it is not the default (cwd).
1079 $!  -> recommend letting PERL_ROOT be PERL_SRC if requested PERL_ROOT is not writable.
1080 $!
1081 $ vms_skip_install = "true"
1082 $ dflt = "y"
1083 $! echo ""
1084 $ rp = "Skip the remaining """"where install"""" questions? [''dflt'] "
1085 $ GOSUB myread
1086 $ IF (.NOT.ans).AND.(ans.NES."") THEN vms_skip_install = "false"
1087 $ IF (.NOT.vms_skip_install)
1088 $ THEN
1089 $!
1090 $!: set the prefixit variable, to compute a suitable default value
1091 $!
1092 $!: determine where private library files go
1093 $!: Usual default is /usr/local/lib/perl5.  Also allow things like 
1094 $!: /opt/perl/lib, since /opt/perl/lib/perl5 would be redundant.
1095 $   IF .NOT.silent 
1096 $   THEN TYPE SYS$INPUT:
1097
1098 There are some auxiliary files for perl5 that need to be put into a
1099 private library directory that is accessible by everyone.
1100 $   ENDIF
1101 $   IF F$TYPE(privlib) .NES. ""
1102 $   THEN dflt = privlib
1103 $   ELSE dflt = "''vms_prefix':[lib]"
1104 $   ENDIF
1105 $   rp = "Pathname where the private library files will reside? " 
1106 $   rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
1107 $   GOSUB myread
1108 $   IF ans.NES.""
1109 $   THEN privlib = ans
1110 $   ELSE privlib = dflt
1111 $   ENDIF
1112 $!
1113 $ ENDIF !%Config-I-VMS, skip remaining "where install" questions
1114 $!
1115 $ perl_symbol = "true"
1116 $ perl_verb = ""
1117 $ dflt = "y"
1118 $ IF .NOT.silent 
1119 $ THEN 
1120 $   echo ""
1121 $   echo "You may choose to write ''packageup'_SETUP.COM to assign a foreign"
1122 $   echo "symbol to invoke ''package', which is the usual method."
1123 $   echO "If you do not do so then you would need a DCL command verb at the"
1124 $   echo "process or the system wide level."
1125 $ ENDIF
1126 $ rp = "Invoke perl as a global symbol foreign command? [''dflt'] "
1127 $ GOSUB myread
1128 $ IF (.NOT.ans).AND.(ans.NES."") THEN perl_symbol = "false"
1129 $!
1130 $ IF (.NOT.perl_symbol)
1131 $ THEN
1132 $   dflt = "y"
1133 $   IF .NOT.silent 
1134 $   THEN 
1135 $     echo ""
1136 $     echo "Since you won't be using a symbol you must choose to put the ''packageup'"
1137 $     echo "verb in a per-process table or in the system wide DCLTABLES (which"
1138 $     echo "would require write privilege)."
1139 $   ENDIF
1140 $   rp = "Invoke perl as a per process command verb? [ ''dflt' ] "
1141 $   GOSUB myread
1142 $   IF (.NOT.ans).AND.(ans.NES."")
1143 $   THEN perl_verb = "DCLTABLES"
1144 $   ELSE perl_verb = "PROCESS"
1145 $   ENDIF
1146 $ ENDIF ! (.NOT.perl_symbol)
1147 $!
1148 $!: set the base revision
1149 $ baserev="5.0"
1150 $ revision = baserev - ".0"
1151 $!: get the patchlevel
1152 $ echo ""
1153 $ echo4 "Getting the current patchlevel..."
1154 $ patchlevel_h = F$SEARCH("[-]patchlevel.h")
1155 $ IF (patchlevel_h.NES."")
1156 $ THEN
1157 $   got_patch = "false"
1158 $   got_sub   = "false"
1159 $   got_api_revision   = "false"
1160 $   got_api_version    = "false"
1161 $   got_api_subversion = "false"
1162 $   OPEN/READONLY CONFIG 'patchlevel_h' 
1163 $Patchlevel_h_loop:
1164 $   READ/END_Of_File=Close_patch/ERROR=Close_patch CONFIG line
1165 $   IF ((F$LOCATE("#define PERL_VERSION",line).NE.F$LENGTH(line)).AND.(.NOT.got_patch))
1166 $   THEN
1167 $     line = F$EDIT(line,"COMPRESS, TRIM")
1168 $     patchlevel = F$ELEMENT(2," ",line)
1169 $     got_patch = "true"
1170 $   ENDIF
1171 $   IF ((F$LOCATE("#define PERL_SUBVERSION",line).NE.F$LENGTH(line)).AND.(.NOT.got_sub))
1172 $   THEN
1173 $     line = F$EDIT(line,"COMPRESS, TRIM")
1174 $     subversion = F$ELEMENT(2," ",line)
1175 $     got_sub = "true"
1176 $   ENDIF
1177 $   IF ((F$LOCATE("#define PERL_API_REVISION",line).NE.F$LENGTH(line)).AND.(.NOT.got_api_revision))
1178 $   THEN
1179 $     line = F$EDIT(line,"COMPRESS, TRIM")
1180 $     api_revision = F$ELEMENT(2," ",line)
1181 $     got_api_revision = "true"
1182 $   ENDIF
1183 $   IF ((F$LOCATE("#define PERL_API_VERSION",line).NE.F$LENGTH(line)).AND.(.NOT.got_api_version))
1184 $   THEN
1185 $     line = F$EDIT(line,"COMPRESS, TRIM")
1186 $     api_version = F$ELEMENT(2," ",line)
1187 $     got_api_version = "true"
1188 $   ENDIF
1189 $   IF ((F$LOCATE("#define PERL_API_SUBVERSION",line).NE.F$LENGTH(line)).AND.(.NOT.got_api_subversion))
1190 $   THEN
1191 $     line = F$EDIT(line,"COMPRESS, TRIM")
1192 $     api_subversion = F$ELEMENT(2," ",line)
1193 $     got_api_subversion = "true"
1194 $   ENDIF
1195 $   IF (.NOT.got_patch).OR.(.NOT.got_sub) THEN GOTO Patchlevel_h_loop
1196 $Close_patch:
1197 $   CLOSE CONFIG
1198 $ ELSE
1199 $   patchlevel="0"
1200 $   subversion="0"
1201 $ ENDIF
1202 $ IF (F$STRING(subversion) .NES. "0")
1203 $ THEN
1204 $   echo "(You have ''package' revision ''revision' patchlevel ''patchlevel' subversion ''subversion'.)"
1205 $ ELSE
1206 $   echo "(You have ''package' revision ''revision' patchlevel ''patchlevel'.)"
1207 $ ENDIF
1208 $!
1209 $ version = revision + "_" + patchlevel + "_" + subversion
1210 $!
1211 $ IF (.NOT.vms_skip_install)
1212 $ THEN
1213 $!: set the prefixup variable, to restore leading tilde escape !sfn
1214 $!
1215 $!: determine where public architecture dependent libraries go
1216 $   IF (.NOT.silent) 
1217 $   THEN 
1218 $     echo ""
1219 $     echo "''package' contains architecture-dependent library files.  If you are"
1220 $   ENDIF
1221 $   IF (.NOT.silent) 
1222 $   THEN TYPE SYS$INPUT:
1223 sharing libraries in a heterogeneous environment, you might store
1224 these files in a separate location.  Otherwise, you can just include
1225 them with the rest of the public library files.
1226 $   ENDIF
1227 $   IF F$TYPE(archlib) .NES. ""
1228 $   THEN dflt = archlib
1229 $   ELSE dflt = privlib - "]" + "." + archname + "." + version + "]"
1230 $   ENDIF
1231 $   rp = "Where do you want to put the public architecture-dependent libraries? "
1232 $   rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
1233 $   GOSUB myread
1234 $   IF ans.NES.""
1235 $   THEN archlib = ans
1236 $   ELSE archlib = dflt
1237 $   ENDIF
1238 $!
1239 $ ENDIF !%Config-I-VMS, skip "where install" questions
1240 $!
1241 $! This quotation from Configure has to be included on VMS:
1242 $!
1243 $ TYPE SYS$INPUT:
1244
1245 There is, however, a strange, musty smell in the air that reminds me of
1246 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
1247 $ CONTINUE
1248 $ IF (.NOT.vms_skip_install)
1249 $ THEN
1250 $!: it so happens the Eunice I know will not run shell scripts in Unix format
1251 $!
1252 $!: see if setuid scripts can be secure           !sfn
1253 $!: now see if they want to do setuid emulation   !sfn
1254 $!
1255 $!: determine where site specific libraries go.
1256 $   IF .NOT.silent 
1257 $   THEN TYPE SYS$INPUT:
1258
1259 The installation process will also create a directory for
1260 site-specific extensions and modules.  Some users find it convenient
1261 to place all local files in this directory rather than in the main
1262 distribution directory.
1263 $   ENDIF
1264 $   IF F$TYPE(sitelib) .NES. ""
1265 $   THEN dflt = sitelib
1266 $   ELSE dflt = privlib - "]" + ".SITE_PERL]"
1267 $   ENDIF
1268 $   rp = "Pathname for the site-specific library files? "
1269 $   rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
1270 $   GOSUB myread
1271 $   IF ans.NES.""
1272 $   THEN sitelib = ans
1273 $   ELSE sitelib = dflt
1274 $   ENDIF
1275 $!
1276 $!: determine where site specific architecture-dependent libraries go.
1277 $   IF .NOT.silent 
1278 $   THEN TYPE SYS$INPUT:
1279
1280 The installation process will also create a directory for
1281 architecture-dependent site-specific extensions and modules.
1282 $   ENDIF
1283 $   IF F$TYPE(sitearch) .NES. ""
1284 $   THEN dflt = sitearch
1285 $   ELSE dflt = sitelib - "]" + "." + archname + "]"
1286 $   ENDIF
1287 $   rp = "Pathname for the site-specific architecture-dependent library files? "
1288 $   rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
1289 $   GOSUB myread
1290 $   IF ans.NES.""
1291 $   THEN sitearch = ans
1292 $   ELSE sitearch = dflt
1293 $   ENDIF
1294 $!
1295 $!: determine where old public architecture dependent libraries might be
1296 $!
1297 $!: determine where public executables go
1298 $   IF F$TYPE(bin) .NES. ""
1299 $   THEN dflt = bin
1300 $!   ELSE dflt = prefix - ".]" + ".BIN]"
1301 $   ELSE dflt = "/''vms_prefix'/000000"
1302 $   ENDIF
1303 $   rp = "Pathname where the public executables will reside? "
1304 $   rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
1305 $   GOSUB myread
1306 $   IF ans.NES.""
1307 $   THEN bin = ans
1308 $   ELSE bin = dflt
1309 $   ENDIF
1310 $!
1311 $!: determine where manual pages are on this system
1312 $!: What suffix to use on installed man pages
1313 $!: see if we can have long filenames
1314 $!: determine where library module manual pages go
1315 $!: What suffix to use on installed man pages
1316 $!: see what memory models we can support
1317 $!
1318 $ ELSE ! skipping "where install" questions, we must set some symbols
1319 $   IF F$TYPE(archlib).EQS."" THEN -
1320       archlib="''vms_prefix':[lib.''archname'.''version']"
1321 $   IF F$TYPE(bin) .EQS. "" THEN -
1322       bin="/''vms_prefix'/000000"
1323 $   IF F$TYPE(privlib) .EQS. "" THEN -
1324       privlib ="''vms_prefix':[lib]"
1325 $   IF F$TYPE(sitearch) .EQS. "" THEN -
1326       sitearch="''vms_prefix':[lib.site_perl.''archname']"
1327 $   IF F$TYPE(sitelib) .EQS. "" THEN -
1328       sitelib ="''vms_prefix':[lib.site_perl]"
1329 $ ENDIF !%Config-I-VMS, skip "where install" questions
1330 $!
1331 $! These derived locations can be set whether we've opted to
1332 $! skip the where install questions or not.
1333 $!
1334 $ IF F$TYPE(archlibexp) .EQS. "" THEN -
1335     archlibexp="''vms_prefix':[lib.''archname'.''version']"
1336 $ IF F$TYPE(binexp) .EQS. "" THEN -
1337     binexp ="''vms_prefix':[000000]"
1338 $ IF F$TYPE(builddir) .EQS. "" THEN -
1339     builddir ="''vms_prefix':[000000]"
1340 $ IF F$TYPE(installarchlib) .EQS. "" THEN -
1341     installarchlib="''vms_prefix':[lib.''archname'.''version']"
1342 $ IF F$TYPE(installbin) .EQS. "" THEN -
1343     installbin ="''vms_prefix':[000000]"
1344 $ IF F$TYPE(installscript) .EQS. "" THEN -
1345     installscript ="''vms_prefix':[utils]"
1346 $ IF F$TYPE(installman1dir) .EQS. "" THEN -
1347     installman1dir ="''vms_prefix':[man.man1]"
1348 $ IF F$TYPE(installman3dir) .EQS. "" THEN -
1349     installman3dir ="''vms_prefix':[man.man3]"
1350 $ IF F$TYPE(installprivlib) .EQS. "" THEN -
1351     installprivlib ="''vms_prefix':[lib]"
1352 $ IF F$TYPE(installsitearch) .EQS. "" THEN -
1353     installsitearch="''vms_prefix':[lib.site_perl.''archname']"
1354 $ IF F$TYPE(installsitelib) .EQS. "" THEN -
1355     installsitelib ="''vms_prefix':[lib.site_perl]"
1356 $ IF F$TYPE(oldarchlib) .EQS. "" THEN -
1357     oldarchlib="''vms_prefix':[lib.''archname']"
1358 $ IF F$TYPE(oldarchlibexp) .EQS. "" THEN -
1359     oldarchlibexp="''vms_prefix':[lib.''archname']"
1360 $ IF F$TYPE(privlibexp) .EQS. "" THEN -
1361     privlibexp ="''vms_prefix':[lib]"
1362 $ IF F$TYPE(sitearchexp) .EQS. "" THEN -
1363     sitearchexp ="''vms_prefix':[lib.site_perl.''archname']"
1364 $ IF F$TYPE(sitelib_stem) .EQS. "" THEN -
1365     sitelib_stem ="''vms_prefix':[lib.site_perl]"
1366 $ IF F$TYPE(sitelibexp) .EQS. "" THEN -
1367     sitelibexp ="''vms_prefix':[lib.site_perl]"
1368 $!
1369 $!: see if we need a special compiler
1370 $! cc_list = "cc/decc|gcc" !%Config-I-VMS, compiler symbols/commands
1371 $!
1372 $ nocc = "f"
1373 $ vms_cc_dflt = ""
1374 $ vms_cc_available = ""
1375 $!
1376 $ OPEN/WRITE CONFIG ccvms.c
1377 $ WRITE CONFIG "#ifdef __DECC"
1378 $ WRITE CONFIG "#include <stdlib.h>"  !DECC is sooo picky
1379 $ WRITE CONFIG "#endif"
1380 $ WRITE CONFIG "#include <stdio.h>"
1381 $ WRITE CONFIG "int main() {"
1382 $ WRITE CONFIG "#ifdef __DECC"
1383 $ WRITE CONFIG "        printf(""/DECC\n"");"
1384 $ WRITE CONFIG "#else"
1385 $ WRITE CONFIG "        printf(""/VAXC\n"");"
1386 $ WRITE CONFIG "#endif"
1387 $ WRITE CONFIG "        exit(0);"
1388 $ WRITE CONFIG "}"
1389 $ CLOSE CONFIG
1390 $!
1391 $! DEFINE SYS$ERROR _NLA0:
1392 $! DEFINE SYS$OUTPUT _NLA0:
1393 $ cc/NoObj/list=ccvms.lis ccvms.c
1394 $ tmp = $status
1395 $! DEASSIGN SYS$OUTPUT
1396 $! DEASSIGN SYS$ERROR
1397 $ IF (silent) THEN GOSUB Shut_up
1398 $ IF tmp.NE.%X10B90001
1399 $ THEN 
1400 $  IF tmp.NE.%X10000001
1401 $  THEN 
1402 $    nocc = "t"  !%X10000001 is return from gcc
1403 $    GOTO Gcc_initial_check
1404 $  ENDIF
1405 $ ENDIF
1406 $!
1407 $ GOSUB List_Parse
1408 $ IF .NOT.silent THEN echo ""
1409 $ echo "Default ""cc"" is ''line' ''archsufx' ''F$GETSYI("VERSION")'" 
1410 $ IF F$LOCATE("VAX",line).NE.F$LENGTH(line) 
1411 $ THEN 
1412 $   IF .NOT.silent
1413 $   THEN 
1414 $     echo "Will try cc/decc..."
1415 $   ENDIF
1416 $   DEFINE/USER_MODE SYS$ERROR NL:
1417 $   DEFINE/USER_MODE SYS$OUTPUT NL:
1418 $   SET NOON
1419 $   cc/decc/NoObj/list=ccvms.lis ccvms.c
1420 $   tmp = $status
1421 $   SET ON
1422 $   IF (silent) THEN GOSUB Shut_up
1423 $   IF tmp.NE.%X10B90001
1424 $   THEN
1425 $     echo "Apparently you don't have that one."
1426 $   ELSE
1427 $     GOSUB List_parse
1428 $     echo "You also have: ''line' ''archsufx' ''F$GETSYI("VERSION")'"
1429 $     vms_cc_available = vms_cc_available + "cc/decc "
1430 $   ENDIF
1431 $ ELSE
1432 $   IF (F$LOCATE("DEC",line).NE.F$LENGTH(line)).or.(F$LOCATE("Compaq",line).NE.F$LENGTH(line))
1433 $   THEN 
1434 $     vms_cc_dflt = "/decc"
1435 $     vms_cc_available = vms_cc_available + "cc/decc "
1436 $   ENDIF
1437 $ ENDIF
1438 $!
1439 $Gcc_initial_check:
1440 $ echo "Checking for gcc"
1441 $ OPEN/WRITE CONFIG gccvers.lis
1442 $ DEFINE/USER_MODE SYS$ERROR CONFIG
1443 $ DEFINE/USER_MODE SYS$OUTPUT CONFIG
1444 $ 'gcc_symbol'/noobj/version _nla0:
1445 $ tmp = $status
1446 $ IF (silent) THEN GOSUB Shut_up
1447 $ CLOSE CONFIG
1448 $ IF (tmp.NE.%X10000001).and.(tmp.ne.%X00030001)
1449 $ THEN
1450 $   echo "Symbol ""''gcc_symbol'"" is not defined. I guess you don't have it."
1451 $   DELETE/NOLOG/NOCONFIRM gccvers.lis;
1452 $   GOTO Cxx_initial_check
1453 $ ENDIF
1454 $ OPEN/READ CONFIG gccvers.lis
1455 $GCC_List_Read:
1456 $ READ/END_OF_FILE=GCC_List_End CONFIG line
1457 $ GOTO GCC_List_Read
1458 $GCC_List_End:
1459 $ CLOSE CONFIG
1460 $ echo line
1461 $ vms_cc_available = vms_cc_available + "''gcc_symbol' "
1462 $ DELETE/NOLOG/NOCONFIRM gccvers.lis;
1463 $!
1464 $Cxx_initial_check:
1465 $!
1466 $! Do note that [vms]perl source files have a ways to go before they will 
1467 $! compile under CXX.
1468 $! In order to test Configure.com with CXX swap the '!' comment character 
1469 $! between the following two lines.  
1470 $!
1471 $! IF 1 .eq. 1
1472 $ IF 1 .eq. 0
1473 $!
1474 $ THEN
1475 $!
1476 $ echo "Checking for CXX..."
1477 $ OPEN/WRITE CONFIG ccvms.c
1478 $ WRITE CONFIG "#include <iostream>"
1479 $ WRITE CONFIG "int main() {"
1480 $ WRITE CONFIG "#ifdef __DECCXX"
1481 $ WRITE CONFIG "        cout << __DECCXX, endl;"
1482 $ WRITE CONFIG "#else"
1483 $ WRITE CONFIG "        cout << 0,endl;"
1484 $ WRITE CONFIG "#endif"
1485 $! Todo: add G++ identifier check ??
1486 $ WRITE CONFIG "        return(0);"
1487 $ WRITE CONFIG "}"
1488 $ CLOSE CONFIG
1489 $ SET NOON
1490 $ DEFINE/USER_MODE SYS$OUTPUT NL:
1491 $ DEFINE/USER_MODE SYS$ERROR NL:
1492 $ cxx ccvms.c
1493 $ tmp = $status
1494 $ SET ON
1495 $! success $status with:
1496 $! DEC C++ V1.1-001 on VMS VAX V5.5-2
1497 $! DEC C++ V5.6-013 on OpenVMS VAX V7.1
1498 $! DEC C++ V6.1-003 on OpenVMS Alpha V7.1
1499 $! Compaq C++ V6.2-016 for OpenVMS Alpha V7.2-1
1500 $ IF tmp .eq. %X15F60001  
1501 $ THEN
1502 $! Which linker?
1503 $   SET NOON
1504 $   DEFINE/USER_MODE SYS$OUTPUT NL:
1505 $   DEFINE/USER_MODE SYS$ERROR NL:
1506 $   link ccvms.obj
1507 $   tmp = $status
1508 $   SET ON
1509 $   ! success $status with:
1510 $   ! link && DEC C++ V1.1-001 on VMS VAX V5.5-2
1511 $   ! link && DEC C++ V5.6-013 on OpenVMS VAX V7.1
1512 $   IF tmp .eq. %X10000001
1513 $   THEN
1514 $     ld_try = "Link"
1515 $     vms_cc_available = vms_cc_available + "cxx "
1516 $     echo "CXX and LINK are available."
1517 $   ELSE
1518 $     IF F$SEARCH("ccvms.exe") .NES. "" THEN DELETE/NOLOG/NOCONFIRM ccvms.exe;
1519 $     SET NOON
1520 $     DEFINE/USER_MODE SYS$OUTPUT NL:
1521 $     DEFINE/USER_MODE SYS$ERROR NL:
1522 $     cxxlink ccvms.obj
1523 $     tmp = $status
1524 $     SET ON
1525 $     ! success $status with:
1526 $     ! cxxlink && DEC C++ V6.1-003 on OpenVMS Alpha V7.1
1527 $     ! cxxlink && Compaq C++ V6.2-016 for OpenVMS Alpha V7.2-1
1528 $     IF tmp .eq. %X10000001 
1529 $     THEN 
1530 $       ld_try = "cxxlink"
1531 $       vms_cc_available = vms_cc_available + "cxx "
1532 $       echo "CXX and CXXLINK are available."
1533 $     ENDIF
1534 $   ENDIF
1535 $   IF F$SEARCH("ccvms.exe") .NES. "" THEN DELETE/NOLOG/NOCONFIRM ccvms.exe;
1536 $ ELSE
1537 $   echo "Nope."
1538 $ ENDIF
1539 $ DELETE/NOLOG/NOCONFIRM ccvms.c;
1540 $ IF F$SEARCH("ccvms.obj") .NES. "" THEN DELETE/NOLOG/NOCONFIRM ccvms.obj;
1541 $ CALL Cxx_demangler_cleanup
1542 $!
1543 $ ENDIF ! 1 .eq. 0 or 1 .eq. 1
1544 $!
1545 $CC_Cleanup:
1546 $ DELETE/NOLOG/NOCONFIRM ccvms.*;
1547 $CC_Desired:
1548 $!: see if we need a special compiler
1549 $! echo ""
1550 $ echo "Available compiler(s):"
1551 $ echo "( ''vms_cc_available')"
1552 $ IF .NOT.nocc 
1553 $ THEN
1554 $   dflt = "cc''vms_cc_dflt'"  !-> "cc" in case first compile went OK
1555 $ ELSE
1556 $   dflt = gcc_symbol
1557 $ ENDIF
1558 $ rp = "Use which C compiler? [''dflt'] "
1559 $ GOSUB myread
1560 $ IF ans.NES.""
1561 $ THEN
1562 $   ans = F$EDIT(ans,"TRIM, COMPRESS, LOWERCASE")
1563 $   Mcc = ans
1564 $   IF (F$LOCATE("dec",ans).NE.F$LENGTH(ans)).or.(F$LOCATE("compaq",ans).NE.F$LENGTH(ans))
1565 $   THEN
1566 $     Mcc = "cc/decc"
1567 $     Using_Dec_C := Y
1568 $     C_COMPILER_Replace = "CC=cc=''Mcc'"
1569 $   ENDIF
1570 $   IF F$LOCATE("cxx",F$EDIT(ans,"COLLAPSE,LOWERCASE")) .NE. F$LENGTH(ans)
1571 $   THEN
1572 $     Mcc = "cxx"
1573 $     using_cxx := Y
1574 $     ld = ld_try
1575 $!     C_COMPILER_Replace = "CC=cc=''Mcc'"
1576 $   ENDIF
1577 $   IF Mcc.NES.dflt
1578 $   THEN
1579 $     IF F$LOCATE("dec",dflt) .NE. F$LENGTH(dflt) .or. -
1580          F$LOCATE("compaq",dflt) .NE. F$LENGTH(dflt)
1581 $     THEN 
1582 $       C_COMPILER_Replace = "CC=cc=''Mcc'"
1583 $     ELSE
1584 $       Using_Dec_C := Y
1585 $     ENDIF
1586 $   ELSE
1587 $     IF Mcc .EQS. "cc/decc"
1588 $     THEN
1589 $       Using_Dec_C := Y
1590 $       C_COMPILER_Replace = "CC=cc=''Mcc'"
1591 $     ENDIF
1592 $   ENDIF
1593 $ ELSE 
1594 $   Mcc = dflt
1595 $   IF Mcc .EQS. "cc/decc"
1596 $   THEN
1597 $     Using_Dec_C := Y
1598 $     C_COMPILER_Replace = "CC=cc=''Mcc'"
1599 $   ENDIF
1600 $   IF Mcc .EQS. "gcc"
1601 $   THEN
1602 $     Using_Gnu_C := Y
1603 $     C_COMPILER_Replace = "CC=cc=''Mcc'"
1604 $   ENDIF
1605 $ ENDIF
1606 $Decc_Version_check:
1607 $ ccversion=""
1608 $ IF Using_Dec_C
1609 $ THEN
1610 $   echo ""
1611 $   echo4 "Checking for Dec C's version number..."
1612 $   OPEN/WRITE CONFIG deccvers.c
1613 $   WRITE CONFIG "#include <stdlib.h>"  !DECC is sooo picky
1614 $   WRITE CONFIG "#include <stdio.h>"
1615 $   WRITE CONFIG "int main() {"
1616 $   WRITE CONFIG "#ifdef __DECC"
1617 $   WRITE CONFIG "#ifdef __DECC_VER"
1618 $   WRITE CONFIG "        printf(""%i\n"", __DECC_VER);"
1619 $   WRITE CONFIG "#else"
1620 $   WRITE CONFIG "        printf(""%i\n"", ""1"");"
1621 $   WRITE CONFIG "#endif"
1622 $   WRITE CONFIG "#endif"
1623 $   WRITE CONFIG "        exit(0);"
1624 $   WRITE CONFIG "}"
1625 $   CLOSE CONFIG
1626 $   SET NOON
1627 $   DEFINE/USER_MODE SYS$ERROR NL:
1628 $   DEFINE/USER_MODE SYS$OUTPUT NL:
1629 $   'Mcc' deccvers.c
1630 $   tmp = $status
1631 $   IF (silent) THEN GOSUB Shut_up
1632 $   DEFINE/USER_MODE SYS$ERROR NL:
1633 $   DEFINE/USER_MODE SYS$OUTPUT NL:
1634 $   link deccvers.obj
1635 $   tmp = $status
1636 $   IF (silent) THEN GOSUB Shut_up
1637 $   OPEN/WRITE CONFIG deccvers.out
1638 $   DEFINE/USER_MODE SYS$ERROR CONFIG
1639 $   DEFINE/USER_MODE SYS$OUTPUT CONFIG
1640 $   mcr []deccvers.exe
1641 $   tmp = $status
1642 $   SET ON
1643 $   CLOSE CONFIG
1644 $   IF (silent) THEN GOSUB Shut_up
1645 $   OPEN/READ CONFIG deccvers.out
1646 $   READ/END_OF_FILE=Dec_c_cleanup CONFIG line
1647 $Dec_c_cleanup:
1648 $   CLOSE CONFIG
1649 $   echo "You are using Dec C ''line'"
1650 $   ccversion = line
1651 $   Dec_C_Version = F$INTEGER(line)
1652 $   IF Dec_C_Version .GE. 60200000
1653 $   THEN
1654 $     echo4 "adding /NOANSI_ALIAS qualifier to ccflags."
1655 $     ccflags = ccflags + "/NOANSI_ALIAS"
1656 $   ENDIF
1657 $   DELETE/NOLOG/NOCONFIRM deccvers.*;
1658 $ ENDIF
1659 $Gcc_check:
1660 $ gccversion = ""
1661 $ IF Using_Gnu_C
1662 $ THEN
1663 $   vaxcrtl_olb = F$SEARCH("SYS$LIBRARY:VAXCRTL.OLB")
1664 $   vaxcrtl_exe = F$SEARCH("SYS$SHARE:VAXCRTL.EXE")
1665 $   gcclib_olb  = F$SEARCH("GNU_CC:[000000]GCCLIB.OLB")
1666 $   IF gcclib_olb .EQS. "" 
1667 $   THEN 
1668 $!    These objects/libs come w/ gcc 2.7.2 for AXP:
1669 $     tmp = F$SEARCH("GNU_CC:[000000]libgcc2.olb")
1670 $     IF tmp .NES. "" then gcclib_olb = tmp
1671 $     tmp = F$SEARCH("GNU_CC:[000000]libgcclib.olb")
1672 $     IF tmp .NES. "" 
1673 $     THEN 
1674 $       IF gcclib_olb .EQS. "" 
1675 $       THEN gcclib_olb = tmp
1676 $       ELSE gcclib_olb = gcclib_olb + "/lib," + tmp
1677 $       ENDIF
1678 $     ENDIF
1679 $     tmp = F$SEARCH("SYS$LIBRARY:VAXCRTL.OLB")
1680 $     IF tmp .NES. "" 
1681 $     THEN 
1682 $       IF gcclib_olb .EQS. "" 
1683 $       THEN gcclib_olb = tmp
1684 $       ELSE gcclib_olb = gcclib_olb + "/lib," + tmp
1685 $       ENDIF
1686 $     ENDIF
1687 $     tmp = F$SEARCH("GNU_CC:[000000]crt0.obj")
1688 $     IF tmp .NES. "" 
1689 $     THEN 
1690 $       IF gcclib_olb .EQS. "" 
1691 $       THEN gcclib_olb = tmp
1692 $       ELSE gcclib_olb = gcclib_olb + "/lib," + tmp
1693 $       ENDIF
1694 $     ENDIF
1695 $     IF gcclib_olb .EQS. vaxcrtl_olb THEN gcclib_olb = "" !goofy order of axplibs
1696 $   ELSE
1697 $     gcclib_olb = gcclib_olb + "/lib"
1698 $   ENDIF
1699 $   IF   gcclib_olb .NES. "" .AND. -
1700      (vaxcrtl_olb .NES. "" .OR. -
1701       vaxcrtl_exe .NES. "" )
1702 $   THEN
1703 $     echo ""
1704 $     echo4 "Checking for GNU cc in disguise and/or its version number..." !>&4
1705 $     OPEN/WRITE CONFIG gccvers.c
1706 $!     WRITE CONFIG "#include <stdlib.h>"  !DECC is sooo picky
1707 $     WRITE CONFIG "#include <stdio.h>"
1708 $     WRITE CONFIG "int main() {"
1709 $     WRITE CONFIG "#ifdef __GNUC__"
1710 $     WRITE CONFIG "#ifdef __VERSION__"
1711 $     WRITE CONFIG "        printf(""%s\n"", __VERSION__);"
1712 $     WRITE CONFIG "#else"
1713 $     WRITE CONFIG "        printf(""%s\n"", ""1"");"
1714 $     WRITE CONFIG "#endif"
1715 $     WRITE CONFIG "#endif"
1716 $     WRITE CONFIG "        exit(0);"
1717 $     WRITE CONFIG "}"
1718 $     CLOSE CONFIG
1719 $     DEFINE SYS$ERROR _NLA0:
1720 $     DEFINE SYS$OUTPUT _NLA0:
1721 $     'Mcc' gccvers.c
1722 $     tmp = $status
1723 $     DEASSIGN SYS$ERROR _NLA0:
1724 $     DEASSIGN SYS$OUTPUT _NLA0:
1725 $     IF (silent) THEN GOSUB Shut_up
1726 $     DEFINE SYS$ERROR _NLA0:
1727 $     DEFINE SYS$OUTPUT _NLA0:
1728 $     IF vaxcrtl_exe .EQS. ""
1729 $     THEN 
1730 $       IF F$LOCATE("VAXCRTL",gcclib_olb).NE.F$LENGTH(gcclib_olb)
1731 $       THEN 
1732 $         link gccvers.obj,'gcclib_olb',SYS$LIBRARY:VAXCRTL/Library
1733 $         tmp = $status
1734 $       ELSE
1735 $         link gccvers.obj,'gcclib_olb'
1736 $         tmp = $status
1737 $       ENDIF
1738 $     ELSE
1739 $       OPEN/WRITE CONFIG GCCVERS.OPT
1740 $       WRITE CONFIG "SYS$SHARE:VAXCRTL/SHARE"
1741 $       CLOSE CONFIG
1742 $       link gccvers.obj,GCCVERS.OPT/OPT,'gcclib_olb'
1743 $       tmp = $status
1744 $     ENDIF
1745 $     DEASSIGN SYS$ERROR
1746 $     DEASSIGN SYS$OUTPUT
1747 $     IF (silent) THEN GOSUB Shut_up
1748 $     OPEN/WRITE CONFIG gccvers.out
1749 $     DEFINE SYS$ERROR CONFIG
1750 $     DEFINE SYS$OUTPUT CONFIG
1751 $     mcr []gccvers.exe
1752 $     tmp = $status
1753 $     CLOSE CONFIG
1754 $     DEASSIGN SYS$OUTPUT
1755 $     DEASSIGN SYS$ERROR
1756 $     IF (silent) THEN GOSUB Shut_up
1757 $     OPEN/READ CONFIG gccvers.out
1758 $     READ/END_OF_FILE=Gcc_cleanup CONFIG line
1759 $Gcc_cleanup:
1760 $     CLOSE CONFIG
1761 $     DELETE/NOLOG/NOCONFIRM gccvers.*;
1762 $     IF F$LOCATE("GNU C version ",line).NE.F$LENGTH(line)
1763 $     THEN 
1764 $       echo "You are not using GNU cc."
1765 $       GOTO Host_name
1766 $     ELSE 
1767 $       echo "You are using GNU cc ''line'"
1768 $       gccversion = line
1769 $       Using_Gnu_C := Y
1770 $       C_COMPILER_Replace = "CC=cc=''Mcc'"
1771 $       GOTO Include_dirs
1772 $     ENDIF
1773 $   ENDIF
1774 $ ENDIF
1775 $Cxx_Version_check:
1776 $ IF using_cxx
1777 $ THEN
1778 $   OPEN/WRITE CONFIG cxxvers.c
1779 $   WRITE CONFIG "#include <stdio.h>"
1780 $   WRITE CONFIG "int main() {"
1781 $   WRITE CONFIG "#ifdef __DECCXX_VER"
1782 $   WRITE CONFIG "        printf(""%i\n"", __DECCXX_VER);"
1783 $   WRITE CONFIG "#else"
1784 $   WRITE CONFIG "        printf(""%i\n"", ""0"");"
1785 $   WRITE CONFIG "#endif"
1786 $   WRITE CONFIG "        return(0);"
1787 $   WRITE CONFIG "}"
1788 $   CLOSE CONFIG
1789 $   SET NOON
1790 $   DEFINE/USER_MODE SYS$ERROR NL:
1791 $   DEFINE/USER_MODE SYS$OUTPUT NL:
1792 $   'Mcc' cxxvers.c
1793 $   tmp = $status
1794 $   SET ON
1795 $   IF (silent) THEN GOSUB Shut_up
1796 $   SET NOON
1797 $   DEFINE/USER_MODE SYS$ERROR NL:
1798 $   DEFINE/USER_MODE SYS$OUTPUT NL:
1799 $   'ld' cxxvers.obj
1800 $   tmp = $status
1801 $   SET ON
1802 $   IF (silent) THEN GOSUB Shut_up
1803 $   OPEN/WRITE CONFIG cxxvers.out
1804 $   SET NOON
1805 $   DEFINE/USER_MODE SYS$ERROR CONFIG
1806 $   DEFINE/USER_MODE SYS$OUTPUT CONFIG
1807 $   mcr []cxxvers.exe
1808 $   tmp = $status
1809 $   SET ON
1810 $   CLOSE CONFIG
1811 $   IF (silent) THEN GOSUB Shut_up
1812 $   OPEN/READ CONFIG cxxvers.out
1813 $   READ/END_OF_FILE=Cxx_cleanup CONFIG line
1814 $Cxx_cleanup:
1815 $   CLOSE CONFIG
1816 $   DELETE/NOLOG/NOCONFIRM cxxvers.*;
1817 $   echo "You are using CXX ''line'"
1818 $   cxxversion = line
1819 $   ccversion = line
1820 $   CALL Cxx_demangler_cleanup
1821 $ ENDIF
1822 $!
1823 $Cxx_demangler_cleanup: SUBROUTINE
1824 $!
1825 $!  If we do build with CXX these demangler Dbs will be left all over.
1826 $!  However, configure.com does try to remove the [.UU] sub directory.
1827 $!  Be sure to set default to the correct place before calling this sub.
1828 $!
1829 $ SET NOON
1830 $ IF F$SEARCH("[.CXX_REPOSITORY]*.*") .NES. "" THEN DELETE/NOLOG/NOCONFIRM [.CXX_REPOSITORY]*.*;*
1831 $ IF F$SEARCH("CXX_REPOSITORY.DIR") .NES. ""
1832 $ THEN
1833 $   SET PROTECTION=(SYSTEM:RWED,OWNER:RWED) CXX_REPOSITORY.DIR
1834 $   DELETE/NOLOG/NOCONFIRM CXX_REPOSITORY.DIR;
1835 $ ENDIF
1836 $ SET ON
1837 $ EXIT
1838 $ ENDSUBROUTINE ! Cxx_demangler_cleanup
1839 $!
1840 $ GOTO Host_name
1841 $!
1842 $List_Parse:
1843 $ OPEN/READ CONFIG ccvms.lis
1844 $ READ CONFIG line
1845 $ IF (F$GETSYI("HW_MODEL") .LT. 1024)
1846 $ THEN
1847 $   read CONFIG line
1848 $   archsufx = "VAX"
1849 $ ELSE
1850 $   archsufx = "AXP"
1851 $ ENDIF
1852 $ CLOSE CONFIG
1853 $ line = F$EDIT(line,"TRIM,COMPRESS")
1854 $ line = line - "Page 1"           ! occurs at end all compilers
1855 $ line = line - "CCVMS "           ! filename appears w/ VAXC
1856 $ line = line - "Source Listing "  ! Seen w/ AXP DECC
1857 $ tmp = F$EXTRACT(0,20,line)       !timestamp, e.g. "30-JUL-1996 21:12:54 "
1858 $ line = line - tmp
1859 $ line = F$EDIT(line,"TRIM")       !bit redundant but we're in no big hurry
1860 $ DELETE/NOLOG/NOCONFIRM ccvms.lis;
1861 $ RETURN
1862 $!
1863 $Include_dirs:
1864 $!: What should the include directory be ? (.TLB text libraries)
1865 $ dflt = gcclib_olb 
1866 $ rp = "Where are the include files you want to use? "
1867 $ IF f$length( rp + "[''dflt'] " ).gt.76
1868 $ THEN rp = F$FAO("!AS!/!AS",rp,"[''dflt'] ")
1869 $ ELSE rp = rp + "[''dflt'] "
1870 $ ENDIF
1871 $ GOSUB myread
1872 $ usrinc = ans
1873 $!
1874 $!: see if we have to deal with yellow pages, now NIS.
1875 $!: now get the host name
1876 $Host_name:
1877 $ echo ""
1878 $ echo4 "Figuring out host name..." !>&4
1879 $ myhostname = ""
1880 $  IF myhostname.eqs."" THEN myhostname = F$TRNLNM("ARPANET_HOST_NAME")
1881 $  IF myhostname.eqs."" THEN myhostname = F$TRNLNM("INTERNET_HOST_NAME")
1882 $  IF myhostname.eqs."" THEN myhostname = F$TRNLNM("MULTINET_HOST_NAME")
1883 $  IF myhostname.eqs."" THEN myhostname = F$TRNLNM("UCX$INET_HOST_NAME")
1884 $  IF myhostname.eqs."".and. -
1885       F$TRNLNM("UCX$INET_HOST") .nes. "" .and. -
1886       F$TRNLNM("UCX$INET_DOMAIN") .nes. "" THEN - 
1887      myhostname = F$TRNLNM("UCX$INET_HOST") + "." + F$TRNLNM("UCX$INET_DOMAIN") 
1888 $  IF myhostname.eqs."" THEN myhostname = F$TRNLNM("TCPWARE_DOMAINNAME")
1889 $  IF myhostname.eqs."" THEN myhostname = F$TRNLNM("NEWS_ADDRESS")
1890 $  IF myhostname.eqs."" THEN myhostname = F$TRNLNM("SYS$NODE") - "::"
1891 $  IF myhostname.eqs."" THEN myhostname = F$EDIT(F$GETSYI("SCSNODE"),"TRIM")
1892 $!: you do not want to know about this
1893 $!: verify guess
1894 $ rp = "Your host name appears to be """"''myhostname'"""". Right? "
1895 $ GOSUB myread
1896 $ IF (.not.ans).and.(ans.NES."")
1897 $   THEN 
1898 $     READ SYS$COMMAND/PROMPT= - 
1899  "Please type the (one word) name of your host: " ans
1900 $     myhostname = ans
1901 $ ENDIF
1902 $!: translate upper to lower if necessary
1903 $ myhostname = F$EDIT(myhostname,"COLLAPSE")
1904 $ mylowhostname = F$EDIT(myhostname," LOWERCASE")
1905 $ IF mylowhostname.NES.myhostname
1906 $ THEN
1907 $   echo "(Normalizing case in your host name)"
1908 $   myhostname = mylowhostname
1909 $ ENDIF
1910 $!
1911 $ fp = F$LOCATE(".",myhostname)
1912 $ mydomain = F$EXTRACT(fp,(F$LENGTH(myhostname)-fp)+1,myhostname)
1913 $ IF mydomain.NES.""  !no periods in DECnet names like "MYDECNODE::"
1914 $ THEN
1915 $   rp = "What is your domain name? [''mydomain'] "
1916 $   GOSUB myread
1917 $   IF ans .nes. "" THEN mydomain = ans
1918 $!: translate upper to lower if necessary
1919 $   mydomain = F$EDIT(mydomain,"COLLAPSE")
1920 $   mylowdomain = F$EDIT(mydomain," LOWERCASE")
1921 $   IF mylowdomain.NES.mydomain
1922 $   THEN
1923 $     echo "(Normalizing case in your domain name)"
1924 $     mydomain = mylowdomain
1925 $   ENDIF
1926 $ ENDIF
1927 $ myhostname = myhostname - mydomain
1928 $ echo "(Trimming domain name from host name--host name is now ''myhostname')"
1929 $ IF .NOT.silent 
1930 $ THEN TYPE SYS$INPUT:
1931
1932 I need to get your e-mail address in Internet format if possible, i.e.
1933 something like user@host.domain. Please answer accurately since I have
1934 no easy means to double check it. The default value provided below
1935 is most probably close to the reality but may not be valid from outside
1936 your organization...
1937 $ ENDIF
1938 $ dflt = "''cf_by'@''myhostname'"+"''mydomain'"
1939 $ rp = "What is your e-mail address? [''dflt'] "
1940 $ GOSUB myread
1941 $ IF ans .nes. ""
1942 $ THEN cf_email = ans
1943 $ ELSE cf_email = dflt
1944 $ ENDIF
1945 $!
1946 $ IF .NOT.silent 
1947 $ THEN TYPE SYS$INPUT:
1948
1949 If you or somebody else will be maintaining perl at your site, please
1950 fill in the correct e-mail address here so that they may be contacted
1951 if necessary. Currently, the "perlbug" program included with perl
1952 will send mail to this address in addition to perlbug@perl.com. You may
1953 enter "none" for no administrator.
1954 $ ENDIF
1955 $ dflt = "''cf_email'"
1956 $ rp = "Perl administrator e-mail address [''dflt'] "
1957 $ GOSUB myread
1958 $ IF ans .nes. ""
1959 $ THEN perladmin = ans
1960 $ ELSE perladmin = dflt
1961 $ ENDIF
1962 $!
1963 $!: determine where public executable scripts go
1964 $!: determine perl absolute location
1965 $!: figure out how to guarantee perl startup
1966 $!
1967 $!: see how we invoke the C preprocessor
1968 $! echo ""
1969 $! echo4 "Now, how can we feed standard input to your C preprocessor..." !>&4
1970 $!: Set private lib path
1971 $!: Now check and see which directories actually exist, avoiding duplicates
1972 $!: determine optimize, if desired, or use for debug flag also
1973 $!: We will not override a previous value, but we might want to
1974 $!: augment a hint file
1975 $!: the following weeds options from ccflags that are of no interest to cpp
1976 $!: flags used in final linking phase
1977 $!: Try to guess additional flags to pick up local libraries.
1978 $!: coherency check
1979 $! echo ""
1980 $! echo4 "Checking your choice of C compiler and flags for coherency..." !>&4
1981 $!: compute shared library extension
1982 $!: Looking for optional libraries
1983 $!: see if nm is to be used to determine whether a symbol is defined or not
1984 $!: get list of predefined functions in a handy place
1985 $!: see if we have sigaction
1986 $!: see whether socketshr exists
1987 $ IF (F$SEARCH(F$PARSE("SocketShr","Sys$Share:.Exe")).NES."")
1988 $ THEN
1989 $   Has_socketshr     = "T"
1990 $   echo ""
1991 $   echo4 "Hmm... Looks like you have SOCKETSHR's Berkeley networking support."
1992 $ ELSE
1993 $   Has_socketshr     = "F"
1994 $ ENDIF
1995 $ IF (Dec_C_Version .GE. 50200000)
1996 $ THEN
1997 $   Has_Dec_C_Sockets = "T"
1998 $   echo ""
1999 $   echo4 "Hmm... Looks like you've got Dec C's Berkeley networking support."
2000 $ ELSE
2001 $   Has_Dec_C_Sockets = "F"
2002 $ ENDIF
2003 $ ! Hey, we've got both. Default to Dec C, then, since it's better
2004 $ IF Has_socketshr .OR. Has_Dec_C_Sockets
2005 $ THEN
2006 $   echo ""
2007 $   echo "You've got sockets available. Which socket stack do you want to"
2008 $   echo "build into perl?"
2009 $   IF Has_Dec_C_Sockets
2010 $   THEN
2011 $     dflt = "DECC"
2012 $   else
2013 $     dflt = "SOCKETSHR"
2014 $   endif
2015 $   rp = "Choose socket stack (NONE"
2016 $   IF Has_socketshr THEN rp = rp + ",SOCKETSHR"
2017 $   IF Has_Dec_C_Sockets THEN rp = rp + ",DECC"
2018 $   rp = rp + ") [''dflt'] "
2019 $   GOSUB myread
2020 $   IF ans .EQS. "" THEN ans = "''dflt'"
2021 $   Has_Dec_C_Sockets = "F"
2022 $   Has_socketshr = "F"
2023 $   ans = F$EDIT(ans,"TRIM,COMPRESS,LOWERCASE")
2024 $   IF ans.eqs."decc" then Has_Dec_C_Sockets = "T"
2025 $   IF ans.eqs."socketshr" then Has_socketshr = "T"
2026 $ ENDIF
2027 $!
2028 $!
2029 $! Ask if they want to build with VMS_DEBUG perl
2030 $ echo ""
2031 $ echo "Perl can be built to run under the VMS debugger."
2032 $ echo "You should only select this option if you are debugging"
2033 $ echo "perl itself.  This can be a useful feature if you are "
2034 $ echo "embedding perl in a program."
2035 $ dflt = "n"
2036 $ rp = "Build a VMS-DEBUG version of Perl? [''dflt'] "
2037 $ GOSUB myread
2038 $ IF ans.eqs."" then ans = dflt
2039 $ IF F$EXTRACT(0, 1, F$EDIT(ans,"COLLAPSE,UPCASE")) .eqs. "Y"
2040 $ THEN
2041 $   use_vmsdebug_perl = "Y"
2042 $   macros = macros + """__DEBUG__=1"","
2043 $ ELSE
2044 $   use_vmsdebug_perl = "N"
2045 $ ENDIF
2046 $!
2047 $! Ask if they want to build with DEBUGGING
2048 $ echo ""
2049 $ echo "Perl can be built with extra runtime debugging enabled. This
2050 $ echo "enables the -D switch, at the cost of some performance. It
2051 $ echo "was mandatory on perl 5.005 and before on VMS, but is now
2052 $ echo "optional. If you don't generally use it you should probably
2053 $ echo "leave this off and gain a bit of extra speed.
2054 $ dflt = "y"
2055 $ rp = "Build a DEBUGGING version of Perl? [''dflt'] "
2056 $ GOSUB myread
2057 $ IF ans.eqs."" then ans = dflt
2058 $ IF F$EXTRACT(0, 1, F$EDIT(ans,"COLLAPSE,UPCASE")) .eqs. "Y"
2059 $ THEN
2060 $   use_debugging_perl = "Y"
2061 $ ELSE
2062 $   use_debugging_perl = "N"
2063 $ ENDIF
2064 $!
2065 $! Ask if they want to build with MULTIPLICITY
2066 $ echo ""
2067 $ echo "Perl can be built so that multiple Perl interpreters can coexist"
2068 $ echo "within the same Perl executable."
2069 $ echo "There is some performance overhead, however, so you
2070 $ echo "probably don't want to choose this unless you're going to be doing
2071 $ echo "things with embedded perl."
2072 $ dflt = "n"
2073 $ rp = "Build Perl for multiplicity? [''dflt'] "
2074 $ GOSUB myread
2075 $ IF ans.eqs."" then ans = dflt
2076 $ IF ans
2077 $ THEN
2078 $   usemultiplicity="define"
2079 $ ELSE
2080 $   usemultiplicity="undef"
2081 $ ENDIF
2082 $!
2083 $! Ask if they want to build with 64-bit support
2084 $ IF (archname.eqs."VMS_AXP").and.("''f$extract(1,3, f$getsyi(""version""))'".ges."7.1")
2085 $ THEN
2086 $   dflt = use64bitint
2087 $   echo ""
2088 $   echo "You can have native 64-bit long integers.
2089 $   echo ""
2090 $   echo "Perl can be built to take advantage of 64-bit integer types
2091 $   echo "on some systems, which provide a much larger range for perl's 
2092 $   echo "mathematical operations.  (Note that does *not* enable 64-bit 
2093 $   echo "fileops at the moment, as Dec C doesn't do that yet)."
2094 $   echo "Choosing this option will most probably introduce binary incompatibilities.
2095 $   echo ""
2096 $   echo "If this doesn't make any sense to you, just accept the default ''dflt'.
2097 $   rp = "Try to use 64-bit integers, if available? [''dflt'] "
2098 $   GOSUB myread
2099 $   IF ans .EQS. "" THEN ans = dflt
2100 $   IF (f$extract(0, 1, f$edit(ans,"COLLAPSE,UPCASE")) .EQS. "Y")
2101 $   THEN
2102 $     use64bitint="Y"
2103 $   ELSE
2104 $     use64bitint="N"
2105 $   ENDIF
2106 $   IF (use64bitint)
2107 $   THEN
2108 $     dflt = use64bitall
2109 $     echo ""
2110 $     echo "Since you chose 64-bitness you may want to try maximal 64-bitness.
2111 $     echo "What you have chosen is minimal 64-bitness which means just enough
2112 $     echo "to get 64-bit integers.  The maximal means using as much 64-bitness
2113 $     echo "as is possible on the platform.  This in turn means even more binary
2114 $     echo "incompatibilities.  On the other hand, your platform may not have
2115 $     echo "any more maximal 64-bitness than what you already have chosen.
2116 $     echo ""
2117 $     echo "If this doesn't make any sense to you, just accept the default ''dflt'.
2118 $     rp = "Try to use full 64-bit support, if available? [''dflt'] "
2119 $     GOSUB myread
2120 $     IF ans .EQS. "" THEN ans = dflt
2121 $     IF (f$extract(0, 1, f$edit(ans,"COLLAPSE,UPCASE")) .EQS. "Y")
2122 $     THEN
2123 $       use64bitall="Y"
2124 $     ELSE
2125 $       use64bitall="N"
2126 $     ENDIF
2127 $   ENDIF
2128 $ ENDIF ! AXP && >= 7.1
2129 $!
2130 $! Ask about threads, if appropriate
2131 $ if Using_Dec_C
2132 $ THEN
2133 $   echo ""
2134 $   echo "This version of Perl can be built with threads. While really nifty,
2135 $   echo "they are a beta feature, and there is a speed penalty for perl
2136 $   echo "programs if you build with threads *even if you don't use them*
2137 $   dflt = "n"
2138 $   rp = "Build with threads? [''dflt'] "
2139 $   GOSUB myread
2140 $   if ans.eqs."" then ans = dflt
2141 $   if (f$extract(0, 1, "''ans'").eqs."Y").or.(f$extract(0, 1, "''ans'").eqs."y")
2142 $   THEN
2143 $     use_threads="T"
2144 $!
2145 $     ! Shall we do the 5.005-stype threads, or IThreads?
2146 $     echo "As of 5.5.640, Perl has two different internal threading
2147 $     echo "implementations, the 5.005 version (5005threads) and an
2148 $     echo "interpreter-based version (ithreads) that has one
2149 $     echo "interpreter per thread.  Both are very experimental.  This
2150 $     echo "arrangement exists to help developers work out which one
2151 $     echo "is better.
2152 $     echo "
2153 $     echo "If you're a casual user, you probably don't want
2154 $     echo "interpreter-threads at this time.  There doesn't yet exist
2155 $     echo "a way to create threads from within Perl in this model,
2156 $     echo "i.e., ""use Thread;"" will NOT work.
2157 $     echo "
2158 $     dflt = "n"
2159 $     rp = "Build with Interpreter threads? [''dflt']
2160 $     GOSUB myread
2161 $     if ans.eqs."" then ans = dflt
2162 $     if (f$extract(0, 1, "''ans'").eqs."Y").or.(f$extract(0, 1, "''ans'").eqs."y")
2163 $     THEN
2164 $       use_ithreads="Y"
2165 $       use_5005_threads="N"
2166 $     ELSE
2167 $       use_ithreads="N"
2168 $       use_5005_threads="Y"
2169 $     ENDIF
2170 $     ! Are they on VMS 7.1 on an alpha?
2171 $     if (archname.eqs."VMS_AXP").and.("''f$extract(1,3, f$getsyi(""version""))'".ges."7.1")
2172 $     THEN
2173 $       echo ""
2174 $       echo "Threaded perl can be linked to use multiple kernel threads
2175 $       echo "and system upcalls on VMS 7.1+ on Alpha systems. This feature
2176 $       echo "allows multiple threads to execute simultaneously on an SMP
2177 $       echo "system as well as preventing a single thread from blocking
2178 $       echo "all the threads in a program, even on a single-processor
2179 $       echo "machine. Unfortunately this feature isn't safe on an
2180 $       echo "unpatched 7.1 system. (Several OS patches were required when
2181 $       echo "this procedure was written)
2182 $       dflt = "n"
2183 $       rp = "Enable multiple kernel threads and upcalls? [''dflt'] "
2184 $       gosub myread
2185 $       if ans.eqs."" then ans="''dflt'"
2186 $       if f$extract(0, 1, f$edit(ans,"TRIM,COMPRESS,UPCASE")).eqs."Y"
2187 $       THEN
2188 $         Thread_Live_Dangerously = "MT=MT=1"
2189 $       ENDIF
2190 $     ENDIF
2191 $   ENDIF
2192 $ ENDIF
2193 $ if archname .eqs. "VMS_AXP"
2194 $ then
2195 $!
2196 $! Case sensitive?
2197 $ echo ""
2198 $ echo "By default, perl (and pretty much everything else on VMS) uses
2199 $ echo "case-insensitive linker symbols. Which is to say, when the
2200 $ echo "underlying C code makes a call to a routine called Perl_foo in
2201 $ echo "the source, the name in the object modules or shareable images
2202 $ echo "is really PERL_FOO. There are some packages that use an
2203 $ echo "embedded perl interpreter that instead require case-sensitive
2204 $ echo "linker symbols.
2205 $ echo ""
2206 $ echo "If you have no idea what this means, and don't have
2207 $ echo "any program requiring anything, choose the default.
2208 $ dflt = be_case_sensitive
2209 $ rp = "Build with case-sensitive symbols? [''dflt'] "
2210 $ gosub myread
2211 $ if ans.eqs."" then ans="''dflt'"
2212 $ be_case_sensitive = "''ans'"
2213 $!
2214 $! IEEE math?
2215 $ echo ""
2216 $ echo "Perl normally uses G_FLOAT format floating point numbers
2217 $ echo "internally, as do most things on VMS. You can, however, build
2218 $ echo "with IEEE floating point numbers instead if you need to.
2219 $ dflt = use_ieee_math
2220 $ rp = "Use IEEE math? [''dflt'] "
2221 $ gosub myread
2222 $ if ans.eqs."" then ans="''dflt'"
2223 $ use_ieee_math = "''ans'"
2224 $ endif
2225 $! CC Flags
2226 $ echo ""
2227 $ echo "You can, if you need to, pass extra flags on to the C
2228 $ echo "compiler.  In general you should only do this if you really,
2229 $ echo "really know what you're doing.
2230 $ dflt = user_c_flags
2231 $ rp = "Extra C flags [''dflt'] "
2232 $ gosub myread
2233 $ if ans.eqs."" then ans="''dflt'"
2234 $ user_c_flags = "''ans'"
2235 $!
2236 $! Ask whether they want to use secure logical translation when tainting
2237 $ echo ""
2238 $ echo "As Perl starts up, it checks several logical names, such as"
2239 $ echo "PERL5LIB and PERL_ENV_TABLES, which allow you to modify aspects"
2240 $ echo "of its behavior.  For additional security, you may limit this"
2241 $ echo "process to executive- and kernel-mode translation when tainting"
2242 $ echo "is enabled.  In this case, logical names normally skipped when"
2243 $ echo "tainting is enabled (e.g. PERL5OPTS) are translated as well."
2244 $ echo "If you do not choose to do this, the usual order of access modes"
2245 $ echo "is used for logical name translation."
2246 $ echo ""
2247 $ echo "This restriction does not apply to the %ENV hash or to implicit"
2248 $ echo "logical name translation during parsing of file specifications;"
2249 $ echo "these always use the normal sequence of access modes for logical"
2250 $ echo "name translation."
2251 $ dflt = "y"
2252 $ rp = "Use secure logical name translation? [''dflt'] "
2253 $ GOSUB myread
2254 $ IF ans .eqs. "" THEN ans = dflt
2255 $ IF ans
2256 $ THEN d_secintgenv := Y
2257 $ ELSE d_secintgenv := N
2258 $ ENDIF
2259 $!
2260 $! Ask whether they want to default filetypes
2261 $ echo ""
2262 $ echo "When you pass the name of a program to Perl on the command line,"
2263 $ echo "it generally doesn't supply any defaults unless the -S command"
2264 $ echo "line switch is specified.  In keeping with the VMS tradition of"
2265 $ echo "default file types, however, you can configure Perl to try default"
2266 $ echo "file types of nothing, .pl, and .com, in that order (e.g. typing"
2267 $ echo """$ perl foo"" would cause Perl to look for foo., then foo.pl, and"
2268 $ echo "finally foo.com)."
2269 $ echo ""
2270 $ echo "This is currently broken in some configurations. Only enable it if
2271 $ echo "you know what you're doing. "
2272 $ dflt = "n"
2273 $ rp = "Always use default file types? [''dflt'] "
2274 $ GOSUB myread
2275 $ IF ans .EQS. "" THEN ans = dflt
2276 $ IF ans
2277 $ THEN d_alwdeftype := Y
2278 $ ELSE d_alwdeftype := N
2279 $ ENDIF
2280 $!
2281 $! Ask if they want to use perl's memory allocator
2282 $ echo ""
2283 $ echo "Perl has a built-in memory allocator that's tuned for perl's
2284 $ echo "normal memory usage. It's oftentimes better than the standard
2285 $ echo "system memory allocator. It also has the advantage of providing
2286 $ echo "memory allocation statistics, if you choose to enable them.
2287 $ dflt = "n"
2288 $ rp = "Build with perl's memory allocator? [''dflt'] "
2289 $ GOSUB myread
2290 $ IF ans .eqs. "" THEN ans = dflt
2291 $ IF ans
2292 $ THEN mymalloc := Y
2293 $ ELSE mymalloc := N
2294 $ ENDIF
2295 $ IF mymalloc
2296 $ THEN
2297 $   IF use_debugging_perl
2298 $   THEN
2299 $     echo ""
2300 $     echo "Perl can keep statistics on memory usage if you choose to use
2301 $     echo "them. This is useful for debugging, but does have some
2302 $     echo "performance overhead.
2303 $     dflt = "n"
2304 $     rp = "Do you want the debugging memory allocator? [''dflt'] "
2305 $     gosub myread
2306 $     if ans.eqs."" then ans="''dflt'"
2307 $     use_debugmalloc = f$extract(0, 1, f$edit(ans, "COLLAPSE,UPCASE"))
2308 $   ENDIF
2309 $   ! Check which memory allocator we want
2310 $   echo ""
2311 $   echo "There are currently three different memory allocators: the
2312 $   echo "default (which is a pretty good general-purpose memory manager),
2313 $   echo "the TWO_POT allocator (which is optimized to save memory for
2314 $   echo "larger allocations), and PACK_MALLOC (which is optimized to save
2315 $   echo "memory for smaller allocations). They're all good, but if your
2316 $   echo "usage tends towards larger chunks use TWO_POT, otherwise use
2317 $   echo "PACK_MALLOC."
2318 $   dflt = "DEFAULT"
2319 $   rp = "Memory allocator (DEFAULT, TWO_POT, PACK_MALLOC) [''dflt'] "
2320 $   GOSUB myread
2321 $   if ans.eqs."" then ans = "''dflt'"
2322 $   if ans.eqs."TWO_POT" then use_two_pot_malloc = "Y"
2323 $   if ans.eqs."PACK_MALLOC" then use_pack_malloc = "Y"
2324 $ ENDIF
2325 $!
2326 $! Ask for their default list of extensions to build
2327 $ echo ""
2328 $ echo "It's time to specify which modules you want to build into
2329 $ echo "perl. Most of these are standard and should be chosen, though
2330 $ echo "you might, for example, want to build GDBM_File instead of
2331 $ echo "SDBM_File if you have the GDBM library built on your machine.
2332 $ echo "Whatever you do, make sure the re module is first or things will
2333 $ echo "break badly"
2334 $ echo "
2335 $ echo "Which modules do you want to build into perl?"
2336 $! dflt = "Fcntl Errno File::Glob IO Opcode Byteloader Devel::Peek Devel::DProf Data::Dumper attrs re VMS::Stdio VMS::DCLsym B SDBM_File"
2337 $ dflt = "re Fcntl Errno File::Glob IO Opcode Devel::Peek Devel::DProf Data::Dumper attrs VMS::Stdio VMS::DCLsym B SDBM_File Storable Thread Sys::Hostname"
2338 $ if Using_Dec_C
2339 $ THEN
2340 $   dflt = dflt + " POSIX"
2341 $ ENDIF
2342 $ rp = "[''dflt'] "
2343 $ GOSUB myread
2344 $ if ans.eqs."" then ans = "''dflt'"
2345 $ a = ""
2346 $ j = 0
2347 $ xloop1:
2348 $   x = f$elem(j," ",ans)
2349 $   j = j + 1
2350 $   if x .eqs. " " then goto exloop1
2351 $   xloop2:
2352 $       k = f$locate("::",x)
2353 $       if k .ge. f$len(x) then goto exloop2
2354 $       x = f$extract(0,k,x) + "/" + f$extract(k+2,f$len(x)-2,x)
2355 $   goto xloop2
2356 $   exloop2:
2357 $   a = a + " " + x
2358 $ goto xloop1
2359 $ exloop1:
2360 $ ans = f$edit(a,"trim")
2361 $!
2362 $ a = ""
2363 $ j = 0
2364 $ xloop3:
2365 $   x = f$elem(j," ",dflt)
2366 $   j = j + 1
2367 $   if x .eqs. " " then goto exloop3
2368 $   xloop4:
2369 $       k = f$locate("::",x)
2370 $       if k .ge. f$len(x) then goto exloop4
2371 $       x = f$extract(0,k,x) + "/" + f$extract(k+2,f$len(x)-2,x)
2372 $   goto xloop4
2373 $   exloop4:
2374 $   a = a + " " + x
2375 $ goto xloop3
2376 $ exloop3:
2377 $ dflt = f$edit(a,"trim")
2378 $!
2379 $ extensions = "''ans'"
2380 $ known_extensions = "''dflt'"
2381 $!
2382 $! %Config-I-VMS, determine build/make utility here (make gmake mmk mms)
2383 $ echo ""
2384 $ echo "Checking your ""make"" utilities..."
2385 $! If the 'build' that you use is not here add it and it's test
2386 $! switch to the _END_ of these strings (and increment max_build)
2387 $! (e.g. builders = builders + "/FOOMAKE" 
2388 $!       probers  = probers + " -fooVersionSwitch"
2389 $! ) & please let me know about it.
2390 $ builders = "IMAKE/GNUMAKE/MGMAKE/GMAKE/MAKE/MMS/MMK"
2391 $ probers  = "-f Makefile. -v!-f Makefile. -v!-f Makefile. -v!-f Makefile. -v!-f Makefile. -v!/IDENT!/IDENT"
2392 $ max_build = 7
2393 $!
2394 $ orig_dflt = "MMK"
2395 $ default_set = ""
2396 $ ok_builders = ""
2397 $ OPEN/WRITE/ERROR=Open_error CONFIG Makefile.
2398 $ WRITE CONFIG "dont_make_anything_yet:"
2399 $ WRITE CONFIG F$FAO("!_")
2400 $ CLOSE CONFIG
2401 $ n = 0
2402 $ messages = F$ENVIRONMENT("MESSAGE")
2403 $Build_probe:
2404 $ build = F$ELEMENT(n,"/",builders)
2405 $ probe  = F$ELEMENT(n,"!",probers)
2406 $ echo "Testing whether you have ''build' on your system..."
2407 $!
2408 $! Noted with GNU Make version 3.60  that the $status and $severity
2409 $! with the 'probe' Makefile appear to be: $STATUS == "%X1000000C"
2410 $! $SEVERITY == "4".
2411 $!
2412 $ SET NOON
2413 $ ON CONTROL_Y THEN GOTO Reenable_messages_build
2414 $ SET MESSAGE/NOFAC/NOSEV/NOIDENT/NOTEXT
2415 $ 'build' 'probe'
2416 $ IF ($SEVERITY .EQ. 1) ! not adequate?
2417 $ THEN 
2418 $   echo "OK."
2419 $   IF (build .EQS. orig_dflt) 
2420 $   THEN 
2421 $     default_set = "TRUE"
2422 $     dflt = build
2423 $   ENDIF
2424 $   ok_builders = ok_builders + " " + build
2425 $   IF (.NOT. default_set) THEN dflt = build
2426 $ ELSE 
2427 $   echo "Nope."
2428 $ ENDIF
2429 $Reenable_messages_build:
2430 $ SET MESSAGE 'messages'
2431 $ SET ON
2432 $ n = n + 1
2433 $ IF (n .LT. max_build) THEN GOTO Build_probe
2434 $!
2435 $ echo ""
2436 $ IF (ok_builders .NES. "") 
2437 $ THEN
2438 $   echo "Here is the list of builders you can apparently use:"
2439 $   echo "(",ok_builders," )"
2440 $   rp = "Which """"make"""" utility do you wish to use? [''dflt'] "
2441 $   GOSUB myread
2442 $   ans = F$EDIT(ans,"TRIM, COMPRESS")
2443 $   ans = F$EXTRACT(0,F$LOCATE(" ",ans),ans) !throw out "-f Makefile." here
2444 $   IF (ans .EQS. "") 
2445 $   THEN build = dflt
2446 $   ELSE build = ans
2447 $   ENDIF
2448 $ ELSE
2449 $   TYPE SYS$INPUT:
2450
2451 %Config-E-VMS, ERROR:
2452  Well this looks pretty serious. Perl5 cannot be compiled without a "make"
2453  utility of some sort and after checking my "builders" list I cannot find
2454  the symbol or command you use on your system to compile programs.
2455
2456 $   READ SYS$COMMAND/PROMPT="Which ""MMS"" do you use? " ans
2457 $   ans = F$EDIT(ans,"TRIM, COMPRESS")
2458 $   ans = F$EXTRACT(0,F$LOCATE(" ",ans),ans) !throw out "-f Makefile." here
2459 $   IF (ans .EQS. "") 
2460 $   THEN build = dflt
2461 $     echo "I don't know where 'make' is, and my life depends on it."
2462 $     echo "Go find a make program or fix your DCL$PATH setting!"
2463 $     echo "ABORTING..."
2464 $     SET DEFAULT 'vms_default_directory_name' !be kind rewind
2465 $     STOP
2466 $     EXIT 2 !$STATUS = "%X00000002" (error)
2467 $   ELSE 
2468 $     build = ans
2469 $   ENDIF
2470 $ ENDIF
2471 $!
2472 $ DELETE/NOLOG Makefile.;
2473 $ GOTO Beyond_open
2474 $Open_error:
2475 $ TYPE SYS$INPUT:
2476
2477  There seems to be trouble. I just tried to create a file in
2478 $ echo4 'F$ENVIRONMENT("DEFAULT")'
2479 $ TYPE SYS$INPUT:
2480  but was unsuccessful. I am stopping now. Please check that directories'
2481  PROTECTION bits. I will leave you in the directory where you started
2482  Configure.com
2483 $ echo4 "ABORTING..."
2484 $ GOTO Clean_up
2485 $ STOP
2486 $ EXIT
2487 $!
2488 $Beyond_open:
2489 $! echo " Very well I will proceed with ""''build'"""
2490 $ make = F$EDIT(build,"UPCASE")
2491 $!
2492 $!: locate the preferred pager for this system
2493 $!pagers = "most|more|less|type/page"
2494 $ dflt = "type/page"
2495 $! assume that the presence of a most symbol indicates the presence
2496 $! of the pager.
2497 $ IF F$TYPE(most) .EQS. "STRING" THEN dflt = "most"
2498 $ IF F$TYPE(pager) .EQS. "STRING" THEN dflt = pager
2499 $ rp="What pager is used on your system? [''dflt'] "
2500 $ GOSUB myread
2501 $ IF (ans .EQS. "") 
2502 $ THEN pager = dflt
2503 $ ELSE pager = ans
2504 $ ENDIF
2505 $!
2506 $! update [.vms]config.vms here
2507 $!
2508 $! update makefile here
2509 $! echo4 "Updating makefile..."
2510 $!
2511 $ IF (make .EQS. "MMS").OR.(make .EQS. "MMK")
2512 $ THEN 
2513 $   makefile    = ""               !wrt MANIFEST dir
2514 $   UUmakefile  = "[-]DESCRIP.MMS" !wrt CWD dir
2515 $   DEFmakefile = "DESCRIP.MMS"    !wrt DEF dir (?)
2516 $   Makefile_SH = "descrip_mms.template"
2517 $ ELSE
2518 $   makefile    = " -f Makefile."  !wrt MANIFEST dir
2519 $   UUmakefile  = "[-]Makefile."   !wrt CWD dir
2520 $   DEFmakefile = "Makefile."      !wrt DEF dir (?)
2521 $   Makefile_SH = "Makefile.in"
2522 $ ENDIF
2523 $!
2524 $ IF macros.NES."" 
2525 $ THEN 
2526 $   tmp = F$LENGTH(macros)
2527 $   macros = F$EXTRACT(0,(tmp-1),macros) !miss trailing comma
2528 $   macros = "/macro=(" + macros  + ")"
2529 $ ENDIF
2530 $! Build up the extra C flags
2531 $!
2532 $ if use_ieee_math
2533 $ then
2534 $   extra_flags = "''extra_flags'" + "/float=ieee/ieee=denorm_results"
2535 $ endif
2536 $ if be_case_sensitive
2537 $ then
2538 $   extra_flags = "''extra_flags'" + "/Names=As_Is"
2539 $ endif
2540 $ extra_flags = "''extra_flags'" + "''user_c_flags'"
2541 $!
2542 $ min_pgflquota = "100000"
2543 $ pgflquota = F$STRING(F$GETJPI("","PGFLQUOTA"))
2544 $ IF pgflquota .LES. min_pgflquota
2545 $ THEN
2546 $   echo4 "Your PGFLQUOTA of ''pgflquota' appears too small to build ''package'."
2547 $   READ SYS$COMMAND/PROMPT="Continue? [n] " ans
2548 $   IF ans
2549 $   THEN
2550 $     echo4 "Continuing..."
2551 $   ELSE
2552 $     echo4 "ABORTING..."
2553 $     GOTO Clean_up
2554 $   ENDIF
2555 $ ENDIF
2556 $!
2557 $ echo ""
2558 $ echo4 "Checking the C run-time library."
2559 $!
2560 $! Former SUBCONFIGURE.COM
2561 $!
2562 $!  - build a config.sh for VMS Perl.
2563 $!  - use built config.sh to take config_h.SH -> config.h
2564 $!  - also take vms/descrip_mms.template -> descrip.mms (VMS Makefile)
2565 $!              vms/Makefile.in -> Makefile. (VMS GNU Makefile?)
2566 $!              vms/Makefile.SH -> Makefile. (VMS GNU Makefile?)
2567 $!  - build Build_Ext.Com extension builder procedure.
2568 $!
2569 $! Note for folks from other platforms changing things in here:
2570 $!
2571 $!   Fancy changes (based on compiler capabilities or VMS version or
2572 $!   whatever) are tricky, so go ahead and punt on those.
2573 $!
2574 $!   Simple changes, though (say, always setting something to 1, or undef,
2575 $!   or something like that) are straightforward.  Adding a new constant 
2576 $!   item for the ultimately created config.sh requires at least one 
2577 $!   (possibly more) line(s) to this file.
2578 $!
2579 $!   Add a line in the format:
2580 $!
2581 $!     $ WC "foo='undef'"
2582 $!
2583 $!   somewhere between the line tagged '##BEGIN WRITE NEW CONSTANTS HERE##'
2584 $!   and the one tagged '##END WRITE NEW CONSTANTS HERE##' (note the order
2585 $!   is sorted ASCII and corresponds to the output of config.sh in the 
2586 $!   Bourne shell version of Configure).
2587 $!   Be very careful with quoting, as it can be tricky.
2588 $!   For example if instead of a constant string like 'undef' or 'define' 
2589 $!   you wanted to add something to VMS's config.sh that looks like:
2590 $!
2591 $!     blank_string=''
2592 $!
2593 $!   then add a line that looks like this before the 
2594 $!   '##END WRITE NEW CONSTANTS HERE##' tagged line:
2595 $!
2596 $!     $ WC "blank_string='" + "'"
2597 $!
2598 $!   (+ is the string concatenator and "''var'" has the effect 
2599 $!    of "${var}" in perl or sh, but "'const'" is not interpolated).
2600 $!
2601 $!   Note that unitialized variables, such as a line like:
2602 $!
2603 $!     $ WC "new_var='" + new_var + "'"
2604 $!
2605 $!   should be avoided unless new_var has a value assigned prior 
2606 $!   to that line (think of perl's -w warnings).
2607 $!
2608 $!     %DCL-W-UNDSYM, undefined symbol - check validity and spelling
2609 $!     \NEW_VAR\
2610 $!
2611 $!
2612 $ vms_ver = F$EXTRACT(1,3, osvers)
2613 $ IF F$LENGTH(Mcc) .EQ. 0 THEN Mcc := "cc"
2614 $ MCC = f$edit(mcc, "UPCASE")
2615 $ C_Compiler_Replace := "CC=CC=''Mcc'''ccflags'"
2616 $ IF Using_Dec_C
2617 $ THEN
2618 $   Checkcc := "''Mcc'/prefix=all"
2619 $ ELSE
2620 $   IF using_cxx
2621 $   THEN
2622 $     Checkcc := cxx
2623 $   ELSE
2624 $     Checkcc := "''Mcc'"
2625 $   ENDIF
2626 $ ENDIF
2627 $ ccflags = ccflags + extra_flags
2628 $ IF be_case_sensitive
2629 $ THEN
2630 $   d_vms_be_case_sensitive = "define"
2631 $ ELSE
2632 $   d_vms_be_case_sensitive = "undef"
2633 $ ENDIF
2634 $! Some constant defaults.
2635 $ hwname = f$getsyi("HW_NAME")
2636 $ myname = myhostname
2637 $ IF myname .EQS. "" THEN myname = F$TRNLNM("SYS$NODE")
2638 $!
2639 $ ccdlflags=""
2640 $ cccdlflags=""
2641 $!
2642 $ IF use64bitint .OR. use64bitint .EQS. "define"
2643 $ THEN
2644 $   use64bitint = "define"
2645 $   uselargefiles = "define"
2646 $   uselongdouble = "define"
2647 $   usemorebits = "define"
2648 $ ELSE
2649 $   use64bitint = "undef"
2650 $   uselargefiles = "undef"
2651 $   uselongdouble = "undef"
2652 $   usemorebits = "undef"
2653 $ ENDIF
2654 $ IF use64bitall .OR. use64bitall .EQS. "define"
2655 $ THEN
2656 $   use64bitall = "define"
2657 $ ELSE
2658 $   use64bitall = "undef"
2659 $ ENDIF
2660 $!
2661 $ usemymalloc=mymalloc
2662 $!
2663 $ perl_cc=Mcc
2664 $!
2665 $ IF (sharedperl .AND. F$GETSYI("HW_MODEL") .GE. 1024)
2666 $ THEN
2667 $   obj_ext=".abj"
2668 $   so="axe"
2669 $   dlext="axe"
2670 $   exe_ext=".axe"
2671 $   lib_ext=".alb"
2672 $ ELSE
2673 $   obj_ext=".obj"
2674 $   so="exe"
2675 $   dlext="exe"
2676 $   exe_ext=".exe"
2677 $   lib_ext=".olb"
2678 $ ENDIF
2679 $ dlobj="dl_vms''obj_ext'"
2680 $!
2681 $ cppstdin="''perl_cc'/noobj/preprocess=sys$output sys$input"
2682 $ cppminus=" "
2683 $ cpprun="''perl_cc'/noobj/preprocess=sys$output sys$input"
2684 $ cpplast=" "
2685 $!
2686 $ timetype="time_t"
2687 $ signal_t="void"
2688 $ stdchar="char"
2689 $!
2690 $ IF mymalloc
2691 $ THEN d_mymalloc="define"
2692 $ ELSE d_mymalloc="undef"
2693 $ ENDIF
2694 $!
2695 $ usedl="define"
2696 $ startperl="""$ perl 'f$env(\""procedure\"")' 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8'  !\n$ exit++ + ++$status != 0 and $exit = $status = undef;"""
2697 $!
2698 $ IF ((Use_Threads) .AND. (vms_ver .LES. "6.2"))
2699 $ THEN
2700 $   libs="SYS$SHARE:CMA$LIB_SHR.EXE/SHARE SYS$SHARE:CMA$RTL.EXE/SHARE SYS$SHARE:CMA$OPEN_LIB_SHR.exe/SHARE SYS$SHARE:CMA$OPEN_RTL.exe/SHARE"
2701 $ ELSE
2702 $   libs=" "
2703 $ ENDIF
2704 $ IF Using_Dec_C
2705 $ THEN
2706 $   libc="(DECCRTL)"
2707 $ ELSE
2708 $   libc=" "
2709 $ ENDIF
2710 $!
2711 $! perllibs should be libs with all non-core libs (such as gdbm) removed.
2712 $!
2713 $ perllibs=libs
2714 $!
2715 $! Are we 64 bit?
2716 $!
2717 $ IF use64bitint .OR. use64bitint .EQS. "define"
2718 $ THEN
2719 $   d_PRId64 = "define"
2720 $   d_PRIEUldbl = "define"
2721 $   d_PRIFUldbl = "define"
2722 $   d_PRIGUldbl = "define"
2723 $   d_PRIeldbl = "define"
2724 $   d_PRIfldbl = "define"
2725 $   d_PRIgldbl = "define"
2726 $   d_PRIu64 = "define"
2727 $   d_PRIo64 = "define"
2728 $   d_PRIx64 = "define"
2729 $   sPRId64 = """Ld"""
2730 $   sPRIEUldbl = """LE"""
2731 $   sPRIFUldbl = """LF"""
2732 $   sPRIGUldbl = """LG"""
2733 $   sPRIXU64 = """LX"""
2734 $   sPRIeldbl = """Le"""
2735 $   sPRIfldbl = """Lf"""
2736 $   sPRIgldbl = """Lg"""
2737 $   sPRIi64 = """Li"""
2738 $   sPRIo64 = """Lo"""
2739 $   sPRIu64 = """Lu"""
2740 $   sPRIx64 = """Lx"""
2741 $   d_quad = "define"
2742 $   quadtype = "long long"
2743 $   uquadtype = "unsigned long long"
2744 $   quadkind  = "QUAD_IS_LONG_LONG"
2745 $   d_frexpl = "define"
2746 $   d_isnan = "define"
2747 $   d_isnanl = "define"
2748 $   d_modfl = "define"
2749 $ ELSE
2750 $   d_PRId64 = "undef"
2751 $   d_PRIEUldbl = "define"
2752 $   d_PRIFUldbl = "define"
2753 $   d_PRIGUldbl = "define"
2754 $   d_PRIXU64 = "undef"
2755 $   d_PRIeldbl = "define"
2756 $   d_PRIfldbl = "undef"
2757 $   d_PRIgldbl = "undef"
2758 $   d_PRIu64 = "undef"
2759 $   d_PRIo64 = "undef"
2760 $   d_PRIx64 = "undef"
2761 $   sPRId64 = ""
2762 $   sPRIEUldbl = """E"""
2763 $   sPRIFUldbl = """F"""
2764 $   sPRIGUldbl = """G"""
2765 $   sPRIXU64 = """lX"""
2766 $   sPRIeldbl = """e"""
2767 $   sPRIfldbl = """f"""
2768 $   sPRIgldbl = """g"""
2769 $   sPRIi64 = ""
2770 $   sPRIo64 = ""
2771 $   sPRIu64 = ""
2772 $   sPRIx64 = ""
2773 $   d_quad = "undef"
2774 $   quadtype = "long"
2775 $   uquadtype = "unsigned long"
2776 $   quadkind  = "QUAD_IS_LONG"
2777 $   d_frexpl = "undef"
2778 $   d_isnan = "undef"
2779 $   d_isnanl = "undef"
2780 $   d_modfl = "undef"
2781 $ ENDIF
2782 $ d_SCNfldbl = d_PRIfldbl
2783 $ sSCNfldbl = sPRIfldbl ! expect consistency
2784 $!
2785 $! Now some that we build up
2786 $!
2787 $ IF Use_Threads
2788 $ THEN
2789 $   IF use_5005_threads
2790 $   THEN
2791 $     arch = "''arch'-thread"
2792 $     archname = "''archname'-thread"
2793 $     d_old_pthread_create_joinable = "undef"
2794 $     old_pthread_create_joinable = " "
2795 $     use5005threads = "define"
2796 $     useithreads = "undef"
2797 $   ELSE
2798 $     arch = "''arch'-ithread"
2799 $     archname = "''archname'-ithread"
2800 $     d_old_pthread_create_joinable = "undef"
2801 $     old_pthread_create_joinable = " "
2802 $     use5005threads = "undef"
2803 $     useithreads = "define"
2804 $   ENDIF
2805 $ ELSE
2806 $   d_old_pthread_create_joinable = "undef"
2807 $   old_pthread_create_joinable = " "
2808 $   use5005threads = "undef"
2809 $   useithreads = "undef"
2810 $ ENDIF
2811 $!
2812 $! Some that we need to invoke the compiler for
2813 $!
2814 $!
2815 $! handy construction aliases/symbols
2816 $!
2817 $ OS := "open/write CONFIG []try.c"
2818 $ WS := "write CONFIG"
2819 $ CS := "close CONFIG"
2820 $ DS := "delete/nolog/noconfirm []try.*;*"
2821 $ Needs_Opt := N
2822 $ good_compile = %X10B90001
2823 $ IF Using_Gnu_C
2824 $ THEN
2825 $   open/write OPTCHAN []try.opt
2826 $   write OPTCHAN "Gnu_CC:[000000]gcclib.olb/library"
2827 $   write OPTCHAN "Sys$Share:VAXCRTL/Share"
2828 $   Close OPTCHAN
2829 $   Needs_Opt := Y
2830 $   good_compile = %X10000001
2831 $ ENDIF
2832 $ IF using_cxx
2833 $ THEN
2834 $   good_compile = %X15F60001
2835 $ ENDIF
2836 $ good_link = %X10000001
2837 $ tmp = "" ! null string default
2838 $!
2839 $ GOTO beyond_compile_ok
2840 $!
2841 $! Check for type sizes 
2842 $!
2843 $type_size_check: 
2844 $!
2845 $ OS
2846 $ WS "#ifdef __DECC
2847 $ WS "#include <stdlib.h>
2848 $ WS "#endif
2849 $ WS "#include <stdio.h>
2850 $ WS "int main()
2851 $ WS "{"
2852 $ WS "printf(""%d\n"", sizeof(''tmp'));"
2853 $ WS "exit(0);
2854 $ WS "}"
2855 $ CS
2856 $ GOSUB compile
2857 $ RETURN
2858 $!
2859 $!: locate header file
2860 $findhdr:
2861 $!
2862 $ OS
2863 $ WS "#ifdef __DECC
2864 $ WS "#include <stdlib.h>
2865 $ WS "#endif
2866 $ WS "#include <stdio.h>
2867 $ WS "#include <''tmp'>"
2868 $ WS "int main()
2869 $ WS "{"
2870 $ WS "printf(""define\n"");"
2871 $ WS "exit(0);
2872 $ WS "}"
2873 $ CS
2874 $ GOSUB link_ok
2875 $ RETURN
2876 $!
2877 $!: define an alternate in-header-list? function
2878 $inhdr:
2879 $!
2880 $ GOSUB findhdr
2881 $ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
2882 $ THEN
2883 $   echo4 "<''tmp'> found."
2884 $   tmp = "define"
2885 $ ELSE
2886 $   echo4 "<''tmp'> NOT found."
2887 $   tmp = "undef"
2888 $ ENDIF
2889 $ RETURN
2890 $!
2891 $!: define an is-in-libc? function
2892 $inlibc: 
2893 $ GOSUB link_ok
2894 $ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
2895 $ THEN
2896 $   echo4 "''tmp'() found."
2897 $   tmp = "define"
2898 $ ELSE
2899 $   echo4 "''tmp'() NOT found."
2900 $   tmp = "undef"
2901 $ ENDIF
2902 $ RETURN
2903 $!
2904 $!: define a shorthand compile call
2905 $compile:
2906 $ GOSUB link_ok
2907 $just_mcr_it:
2908 $ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
2909 $ THEN
2910 $   OPEN/WRITE CONFIG []try.out
2911 $   DEFINE/USER_MODE SYS$ERROR CONFIG
2912 $   DEFINE/USER_MODE  SYS$OUTPUT CONFIG
2913 $   MCR []try.exe
2914 $   CLOSE CONFIG
2915 $   OPEN/READ CONFIG []try.out
2916 $   READ CONFIG tmp
2917 $   CLOSE CONFIG
2918 $   DELETE/NOLOG/NOCONFIRM []try.out;
2919 $   DELETE/NOLOG/NOCONFIRM []try.exe;
2920 $ ELSE
2921 $   tmp = "" ! null string default
2922 $ ENDIF
2923 $ RETURN
2924 $!
2925 $link_ok:
2926 $ GOSUB compile_ok
2927 $ DEFINE/USER_MODE SYS$ERROR _NLA0:
2928 $ DEFINE/USER_MODE SYS$OUTPUT _NLA0:
2929 $ SET NOON
2930 $ IF Needs_Opt
2931 $ THEN
2932 $   'ld' try.obj,try.opt/opt
2933 $   link_status = $status
2934 $ ELSE
2935 $   'ld' try.obj
2936 $   link_status = $status
2937 $ ENDIF
2938 $ SET ON
2939 $ IF F$SEARCH("try.obj") .NES. "" THEN DELETE/NOLOG/NOCONFIRM try.obj;
2940 $ RETURN
2941 $!
2942 $!: define a shorthand compile call for compilations that should be ok.
2943 $compile_ok:
2944 $ DEFINE/USER_MODE SYS$ERROR _NLA0:
2945 $ DEFINE/USER_MODE SYS$OUTPUT _NLA0:
2946 $ SET NOON
2947 $ 'Checkcc' try.c
2948 $ compile_status = $status
2949 $ SET ON
2950 $ DELETE/NOLOG/NOCONFIRM try.c;
2951 $ RETURN
2952 $!
2953 $beyond_compile_ok:
2954 $!
2955 $! Check for __STDC__
2956 $!
2957 $ OS
2958 $ WS "#ifdef __DECC
2959 $ WS "#include <stdlib.h>
2960 $ WS "#endif
2961 $ WS "#include <stdio.h>
2962 $ WS "int main()
2963 $ WS "{"
2964 $ WS "#ifdef __STDC__
2965 $ WS "printf(""42\n"");
2966 $ WS "#else
2967 $ WS "printf(""1\n"");
2968 $ WS "#endif
2969 $ WS "exit(0);
2970 $ WS "}"
2971 $ CS
2972 $ GOSUB compile
2973 $ cpp_stuff=tmp
2974 $ IF F$INTEGER(tmp) .eq. 42
2975 $ THEN
2976 $   echo4 "Your C compiler and pre-processor defines the symbol:"
2977 $   echo4 "__STDC__"
2978 $ ENDIF
2979 $!
2980 $! Check for double size
2981 $!
2982 $ echo4 "Checking to see how big your double precision numbers are..."
2983 $ tmp="double"
2984 $ GOSUB type_size_check
2985 $ doublesize = tmp
2986 $ echo "Your double is ''doublesize' bytes long."
2987 $!
2988 $! Check for long double size
2989 $!
2990 $ OS
2991 $ WS "#ifdef __DECC
2992 $ WS "#include <stdlib.h>
2993 $ WS "#endif
2994 $ WS "#include <stdio.h>
2995 $ WS "int main()
2996 $ WS "{"
2997 $ WS "printf(""%d\n"", sizeof(long double));
2998 $ WS "exit(0);
2999 $ WS "}"
3000 $ CS
3001 $ echo4 "Checking to see if you have long double..."
3002 $ GOSUB link_ok
3003 $ IF link_status .NE. good_link
3004 $ THEN
3005 $   longdblsize="0"
3006 $   d_longdbl="undef"
3007 $   echo "You do not have long double."
3008 $ ELSE
3009 $   echo "You have long double."
3010 $   echo4 "Checking to see how big your long doubles are..."
3011 $   GOSUB just_mcr_it
3012 $   longdblsize = tmp
3013 $   d_longdbl = "define"
3014 $   echo "Your long doubles are ''longdblsize' bytes long."
3015 $ ENDIF
3016 $!
3017 $!: check for long long
3018 $ OS
3019 $ WS "#ifdef __DECC
3020 $ WS "#include <stdlib.h>
3021 $ WS "#endif
3022 $ WS "#include <stdio.h>
3023 $ WS "int main()
3024 $ WS "{"
3025 $ WS "printf(""%d\n"", sizeof(long long));
3026 $ WS "exit(0);
3027 $ WS "}"
3028 $ CS
3029 $ echo4 "Checking to see if you have long long..."
3030 $ GOSUB link_ok
3031 $ IF link_status .NE. good_link
3032 $ THEN
3033 $   longlongsize="0"
3034 $   d_longlong="undef"
3035 $   echo "You do not have long long."
3036 $ ELSE
3037 $   echo "You have long long."
3038 $   echo4 "Checking to see how big your long longs are..."
3039 $   GOSUB just_mcr_it
3040 $   longlongsize = tmp
3041 $   d_longlong = "define"
3042 $   echo "Your long longs are ''longlongsize' bytes long."
3043 $ ENDIF
3044 $!
3045 $! Check the prototype for getgid
3046 $!
3047 $ echo "Looking for the type for group ids returned by getgid()."
3048 $ OS
3049 $ WS "#ifdef __DECC
3050 $ WS "#include <stdlib.h>
3051 $ WS "#endif
3052 $ WS "#include <stdio.h>
3053 $ WS "#include <types.h>
3054 $ WS "int main()
3055 $ WS "{"
3056 $ WS "gid_t foo;
3057 $ WS "exit(0);
3058 $ WS "}"
3059 $ CS
3060 $ GOSUB compile_ok
3061 $ IF compile_status .NE. good_compile
3062 $ THEN
3063 $!   Okay, gid_t failed. Must be unsigned int
3064 $   gidtype = "unsigned int"
3065 $   echo4 "assuming ""''gidtype'""."
3066 $ ELSE
3067 $   gidtype = "gid_t"
3068 $   echo4 "gid_t found."
3069 $ ENDIF
3070 $!
3071 $! Check to see if we've got dev_t
3072 $!
3073 $ echo "Looking for the type for dev."
3074 $ OS
3075 $ WS "#ifdef __DECC
3076 $ WS "#include <stdlib.h>
3077 $ WS "#endif
3078 $ WS "#include <stdio.h>
3079 $ WS "#include <types.h>
3080 $ WS "int main()
3081 $ WS "{"
3082 $ WS "dev_t foo;
3083 $ WS "exit(0);
3084 $ WS "}"
3085 $ CS
3086 $ GOSUB compile_ok
3087 $ IF compile_status .NE. good_compile
3088 $ THEN
3089 $!   Okay, dev_t failed. Must be unsigned int
3090 $   devtype = "unsigned int"
3091 $   echo4 "assuming ""''devtype'""."
3092 $ ELSE
3093 $   devtype = "dev_t"
3094 $   echo4 "dev_t found."
3095 $ ENDIF
3096 $!
3097 $! Check to see if we've got unistd.h (which we ought to, but you never know)
3098 $!
3099 $ i_netdb = "undef"
3100 $ tmp = "unistd.h"
3101 $ GOSUB inhdr
3102 $ i_unistd = tmp
3103 $!
3104 $!: see if this is a libutil.h system
3105 $!
3106 $ tmp = "libutil.h"
3107 $ GOSUB inhdr
3108 $ i_libutil = tmp
3109 $!
3110 $! Check to see if we've got shadow.h (probably not, but...)
3111 $!
3112 $ tmp = "shadow.h"
3113 $ GOSUB inhdr
3114 $ i_shadow = tmp
3115 $!
3116 $! Check to see if we've got socks.h (probably not, but...)
3117 $!
3118 $ tmp = "socks.h"
3119 $ GOSUB inhdr
3120 $ i_socks = tmp
3121 $!
3122 $! Check the prototype for select
3123 $!
3124 $ IF Has_Dec_C_Sockets .OR. Has_Socketshr
3125 $ THEN
3126 $   OS
3127 $   WS "#ifdef __DECC
3128 $   WS "#include <stdlib.h>
3129 $   WS "#endif
3130 $   WS "#include <stdio.h>
3131 $   WS "#include <types.h>
3132 $   IF i_unistd .EQS. "define" THEN WS "#include <unistd.h>
3133 $   IF Has_Socketshr
3134 $   THEN
3135 $     WS "#include <socketshr.h>"
3136 $   ELSE
3137 $     WS "#include <time.h>
3138 $     WS "#include <socket.h>
3139 $   ENDIF
3140 $   WS "int main()
3141 $   WS "{"
3142 $   WS "fd_set *foo;
3143 $   WS "int bar;
3144 $   WS "foo = NULL;
3145 $   WS "bar = select(2, foo, foo, foo, NULL);
3146 $   WS "exit(0);
3147 $   WS "}"
3148 $   CS
3149 $   GOSUB compile_ok
3150 $   IF compile_status .NE. good_compile
3151 $   THEN
3152 $!   Okay, select failed.  Must be an int *
3153 $     selecttype = "int *"
3154 $     echo4 "select() NOT found."
3155 $   ELSE
3156 $     selecttype="fd_set *"
3157 $     echo4 "select() found."
3158 $   ENDIF
3159 $ ELSE
3160 $   ! No sockets, so stick in an int * : no select, so pick a harmless default
3161 $   selecttype = "int *"
3162 $ ENDIF
3163 $!
3164 $! Check to see if fd_set exists
3165 $!
3166 $ echo "Checking to see how well your C compiler handles fd_set and friends ..."
3167 $ OS
3168 $ WS "#ifdef __DECC
3169 $ WS "#include <stdlib.h>
3170 $ WS "#endif
3171 $ WS "#include <stdio.h>
3172 $ WS "#include <types.h>
3173 $ IF Has_Socketshr
3174 $ THEN
3175 $   WS "#include <socketshr.h>"
3176 $ ENDIF
3177 $ IF Has_Dec_C_Sockets
3178 $ THEN
3179 $   WS "#include <time.h>
3180 $   WS "#include <socket.h>
3181 $ ENDIF
3182 $ WS "int main()
3183 $ WS "{"
3184 $ WS "fd_set *foo;
3185 $ WS "int bar;
3186 $ WS "exit(0);
3187 $ WS "}"
3188 $ CS
3189 $ GOSUB compile_ok
3190 $ IF compile_status .ne. good_compile
3191 $ THEN
3192 $!  Okay, fd_set failed. Must not exist
3193 $   d_fd_set = "undef"
3194 $   echo4 "Hmm, your compiler has some difficulty with fd_set."
3195 $ ELSE
3196 $   d_fd_set="define"
3197 $   echo4 "Well, your system knows about the normal fd_set typedef..."
3198 $ ENDIF
3199 $!
3200 $! Check for inttypes.h
3201 $!
3202 $ tmp = "inttypes.h"
3203 $ GOSUB inhdr
3204 $ i_inttypes = tmp
3205 $!
3206 $! Check to see if off64_t exists
3207 $!
3208 $ echo4 "Checking to see if you have off64_t..."
3209 $ OS
3210 $ WS "#ifdef __DECC
3211 $ WS "#include <stdlib.h>
3212 $ WS "#endif
3213 $ WS "#include <stdio.h>
3214 $ WS "#include <types.h>
3215 $ WS "#''i_inttypes IIH
3216 $ WS "#ifdef IIH
3217 $ WS "#include <inttypes.h>
3218 $ WS "#endif
3219 $ WS "int main()
3220 $ WS "{"
3221 $ WS "off64_t bar;
3222 $ WS "exit(0);
3223 $ WS "}"
3224 $ CS
3225 $ GOSUB compile_ok
3226 $ IF compile_status .EQ. good_compile
3227 $ THEN
3228 $   d_off64_t="define"
3229 $   echo "You have off64_t."
3230 $ ELSE
3231 $   d_off64_t = "undef"
3232 $   echo "You do not have off64_t."
3233 $ ENDIF
3234 $!
3235 $! Check to see if fpos64_t exists
3236 $!
3237 $ echo4 "Checking to see if you have fpos64_t..."
3238 $ OS
3239 $ WS "#ifdef __DECC
3240 $ WS "#include <stdlib.h>
3241 $ WS "#endif
3242 $ WS "#include <stdio.h>
3243 $ WS "#include <types.h>
3244 $ WS "#''i_inttypes IIH
3245 $ WS "#ifdef IIH
3246 $ WS "#include <inttypes.h>
3247 $ WS "#endif
3248 $ WS "int main()
3249 $ WS "{"
3250 $ WS "fpos64_t bar;
3251 $ WS "exit(0);
3252 $ WS "}"
3253 $ CS
3254 $ GOSUB compile_ok
3255 $ IF compile_status .EQ. good_compile
3256 $ THEN
3257 $   d_fpos64_t="define"
3258 $   echo "You have fpos64_t."
3259 $ ELSE
3260 $   d_fpos64_t = "undef"
3261 $   echo "You do not have fpos64_t."
3262 $ ENDIF
3263 $!
3264 $! Check to see if int64_t exists
3265 $!
3266 $ echo4 "Checking to see if you have int64_t..."
3267 $ OS
3268 $ WS "#ifdef __DECC
3269 $ WS "#include <stdlib.h>
3270 $ WS "#endif
3271 $ WS "#include <stdio.h>
3272 $ WS "#include <types.h>
3273 $ WS "#''i_inttypes IIH
3274 $ WS "#ifdef IIH
3275 $ WS "#include <inttypes.h>
3276 $ WS "#endif
3277 $ WS "int main()
3278 $ WS "{"
3279 $ WS "int64_t bar;
3280 $ WS "exit(0);
3281 $ WS "}"
3282 $ CS
3283 $ GOSUB compile_ok
3284 $ IF compile_status .EQ. good_compile
3285 $ THEN
3286 $   d_int64_t="define"
3287 $   echo "You have int64_t."
3288 $ ELSE
3289 $   d_int64_t = "undef"
3290 $   echo "You do not have int64_t."
3291 $ ENDIF
3292 $!
3293 $!: see if this is a netdb.h system
3294 $ IF Has_Dec_C_Sockets
3295 $ THEN 
3296 $   tmp = "netdb.h"
3297 $   GOSUB inhdr
3298 $   i_netdb = tmp
3299 $ ENDIF
3300 $!
3301 $! Check for h_errno
3302 $!
3303 $ echo4 "Checking to see if you have h_errno..."
3304 $ OS
3305 $ WS "#ifdef __DECC
3306 $ WS "#include <stdlib.h>
3307 $ WS "#endif
3308 $ WS "#include <stdio.h>
3309 $ IF i_unistd .EQS. "define" THEN WS "#include <unistd.h>
3310 $ IF i_netdb  .EQS. "define" THEN WS "#include <netdb.h>
3311 $ WS "int main()
3312 $ WS "{"
3313 $ WS "h_errno = 3;
3314 $ WS "exit(0);
3315 $ WS "}"
3316 $ CS
3317 $ GOSUB link_ok
3318 $ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
3319 $ THEN
3320 $   d_herrno="define"
3321 $   echo "You have h_errno."
3322 $ ELSE
3323 $   d_herrno="undef"
3324 $   echo "You do not have h_errno."
3325 $ ENDIF
3326 $!
3327 $! Check to see if gethostname exists
3328 $!
3329 $ IF Has_Dec_C_Sockets .OR. Has_Socketshr
3330 $ THEN
3331 $   OS
3332 $   WS "#ifdef __DECC
3333 $   WS "#include <stdlib.h>
3334 $   WS "#endif
3335 $   WS "#include <stdio.h>
3336 $   WS "#include <types.h>
3337 $   IF Has_Socketshr
3338 $   THEN
3339 $     WS "#include <socketshr.h>"
3340 $   ELSE
3341 $     WS "#include <time.h>
3342 $     WS "#include <socket.h>
3343 $   ENDIF
3344 $   WS "int main()
3345 $   WS "{"
3346 $   WS "char name[100];
3347 $   WS "int bar, baz;
3348 $   WS "bar = 100;
3349 $   WS "baz = gethostname(name, bar);
3350 $   WS "exit(0);
3351 $   WS "}"
3352 $   CS
3353 $   GOSUB link_ok
3354 $   IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
3355 $   THEN
3356 $     d_gethname="define"
3357 $     echo4 "gethostname() found."
3358 $   ELSE
3359 $     d_gethname="undef"
3360 $   ENDIF
3361 $ ELSE
3362 $   ! No sockets, so no gethname
3363 $   d_gethname = "undef"
3364 $ ENDIF
3365 $!
3366 $! Check for sys/file.h
3367 $!
3368 $ tmp = "sys/file.h"
3369 $ GOSUB inhdr
3370 $ i_sysfile = tmp
3371 $!
3372 $! Check for sys/utsname.h
3373 $!
3374 $ tmp = "sys/utsname.h"
3375 $ GOSUB inhdr
3376 $ i_sysutsname = tmp
3377 $!
3378 $! Check for syslog.h
3379 $!
3380 $ tmp = "syslog.h"
3381 $ GOSUB inhdr
3382 $ i_syslog = tmp
3383 $!
3384 $! Check for poll.h
3385 $!
3386 $ tmp = "poll.h"
3387 $ GOSUB inhdr
3388 $ i_poll = tmp
3389 $!
3390 $! Check for sys/uio.h
3391 $!
3392 $ tmp = "sys/uio.h"
3393 $ GOSUB inhdr
3394 $ i_sysuio = tmp
3395 $!
3396 $! Check for sys/mode.h
3397 $!
3398 $ tmp = "sys/mode.h"
3399 $ GOSUB inhdr
3400 $ i_sysmode = tmp
3401 $!
3402 $! Check for sys/access.h
3403 $!
3404 $ tmp = "sys/access.h"
3405 $ GOSUB inhdr
3406 $ i_sysaccess = tmp
3407 $!
3408 $! Check for sys/security.h
3409 $!
3410 $ tmp = "sys/security.h"
3411 $ GOSUB inhdr
3412 $ i_syssecrt = tmp
3413 $!
3414 $! Check for fcntl.h
3415 $!
3416 $ tmp = "fcntl.h"
3417 $ GOSUB inhdr
3418 $ i_fcntl = tmp
3419 $!
3420 $! Check for fcntl
3421 $!
3422 $ OS
3423 $ WS "#ifdef __DECC
3424 $ WS "#include <stdlib.h>
3425 $ WS "#endif
3426 $ WS "#include <stdio.h>
3427 $ WS "#include <fcntl.h>
3428 $ WS "int main()
3429 $ WS "{"
3430 $ WS "fcntl(1,2,3);
3431 $ WS "exit(0);
3432 $ WS "}"
3433 $ CS
3434 $ tmp = "fcntl"
3435 $ GOSUB inlibc
3436 $ d_fcntl = tmp
3437 $!
3438 $! Check for memchr
3439 $!
3440 $ OS
3441 $ WS "#ifdef __DECC
3442 $ WS "#include <stdlib.h>
3443 $ WS "#endif
3444 $ WS "#include <string.h>
3445 $ WS "int main()
3446 $ WS "{"
3447 $ WS "char * place;
3448 $ WS "place = memchr(""foo"", 47, 3)
3449 $ WS "exit(0);
3450 $ WS "}"
3451 $ CS
3452 $ tmp = "memchr"
3453 $ GOSUB inlibc
3454 $ d_memchr = tmp
3455 $!
3456 $! Check for strtoull
3457 $!
3458 $ OS
3459 $ WS "#ifdef __DECC
3460 $ WS "#include <stdlib.h>
3461 $ WS "#endif
3462 $ WS "#include <string.h>
3463 $ WS "int main()
3464 $ WS "{"
3465 $ WS "unsigned __int64 result;
3466 $ WS "result = strtoull(""123123"", NULL, 10);
3467 $ WS "exit(0);
3468 $ WS "}"
3469 $ CS
3470 $ tmp = "strtoull"
3471 $ GOSUB inlibc
3472 $ d_strtoull = tmp
3473 $!
3474 $! Check for strtouq
3475 $!
3476 $ OS
3477 $ WS "#ifdef __DECC
3478 $ WS "#include <stdlib.h>
3479 $ WS "#endif
3480 $ WS "#include <string.h>
3481 $ WS "int main()
3482 $ WS "{"
3483 $ WS "unsigned __int64 result;
3484 $ WS "result = strtouq(""123123"", NULL, 10);
3485 $ WS "exit(0);
3486 $ WS "}"
3487 $ CS
3488 $ tmp = "strtouq"
3489 $ GOSUB inlibc
3490 $ d_strtouq = tmp
3491 $!
3492 $! Check for strtoll
3493 $!
3494 $ OS
3495 $ WS "#ifdef __DECC
3496 $ WS "#include <stdlib.h>
3497 $ WS "#endif
3498 $ WS "#include <string.h>
3499 $ WS "int main()
3500 $ WS "{"
3501 $ WS "__int64 result;
3502 $ WS "result = strtoll(""123123"", NULL, 10);
3503 $ WS "exit(0);
3504 $ WS "}"
3505 $ CS
3506 $ tmp = "strtoll"
3507 $ GOSUB inlibc
3508 $ d_strtoll = tmp
3509 $!
3510 $! Check for strtold
3511 $!
3512 $ OS
3513 $ WS "#ifdef __DECC
3514 $ WS "#include <stdlib.h>
3515 $ WS "#endif
3516 $ WS "#include <string.h>
3517 $ WS "int main()
3518 $ WS "{"
3519 $ WS "long double result;
3520 $ WS "result = strtold(""123123"", NULL, 10);
3521 $ WS "exit(0);
3522 $ WS "}"
3523 $ CS
3524 $ tmp = "strtold"
3525 $ GOSUB inlibc
3526 $ d_strtold = tmp
3527 $!
3528 $! Check for atoll
3529 $!
3530 $ OS
3531 $ WS "#ifdef __DECC
3532 $ WS "#include <stdlib.h>
3533 $ WS "#endif
3534 $ WS "#include <string.h>
3535 $ WS "int main()
3536 $ WS "{"
3537 $ WS " __int64 result;
3538 $ WS "result = atoll(""123123"");
3539 $ WS "exit(0);
3540 $ WS "}"
3541 $ CS
3542 $ tmp = "atoll"
3543 $ GOSUB inlibc
3544 $ d_atoll = tmp
3545 $!
3546 $! Check for atolf
3547 $!
3548 $ OS
3549 $ WS "#ifdef __DECC
3550 $ WS "#include <stdlib.h>
3551 $ WS "#endif
3552 $ WS "#include <string.h>
3553 $ WS "int main()
3554 $ WS "{"
3555 $ WS "long double
3556 $ WS "result = atolf(""123123"");
3557 $ WS "exit(0);
3558 $ WS "}"
3559 $ CS
3560 $ tmp = "atolf"
3561 $ GOSUB inlibc
3562 $ d_atolf = tmp
3563 $!
3564 $! Check for access
3565 $!
3566 $ OS
3567 $ WS "#ifdef __DECC
3568 $ WS "#include <stdlib.h>
3569 $ WS "#endif
3570 $ WS "#include <stdio.h>
3571 $ WS "int main()
3572 $ WS "{"
3573 $ WS "access("foo", F_OK);
3574 $ WS "exit(0);
3575 $ WS "}"
3576 $ CS
3577 $ tmp = "acess"
3578 $ GOSUB inlibc
3579 $ d_access = tmp
3580 $!
3581 $! Check for bzero
3582 $!
3583 $ OS
3584 $ WS "#ifdef __DECC
3585 $ WS "#include <stdlib.h>
3586 $ WS "#endif
3587 $ WS "#include <stdio.h>
3588 $ WS "#include <strings.h>
3589 $ WS "int main()
3590 $ WS "{"
3591 $ WS "char foo[10];
3592 $ WS "bzero(foo, 10);
3593 $ WS "exit(0);
3594 $ WS "}"
3595 $ CS
3596 $ tmp = "bzero"
3597 $ GOSUB inlibc
3598 $ d_bzero = tmp
3599 $!
3600 $! Check for bcopy
3601 $!
3602 $ OS
3603 $ WS "#ifdef __DECC
3604 $ WS "#include <stdlib.h>
3605 $ WS "#endif
3606 $ WS "#include <stdio.h>
3607 $ WS "#include <strings.h>
3608 $ WS "int main()
3609 $ WS "{"
3610 $ WS "char foo[10], bar[10];
3611 $ WS "bcopy(""foo"", bar, 3);
3612 $ WS "exit(0);
3613 $ WS "}"
3614 $ CS
3615 $ tmp = "bcopy"
3616 $ GOSUB inlibc
3617 $ d_bcopy = tmp
3618 $!
3619 $! Check for mkstemp
3620 $!
3621 $ OS
3622 $ WS "#ifdef __DECC
3623 $ WS "#include <stdlib.h>
3624 $ WS "#endif
3625 $ WS "#include <stdio.h>
3626 $ WS "int main()
3627 $ WS "{"
3628 $ WS "mkstemp(""foo"");
3629 $ WS "exit(0);
3630 $ WS "}"
3631 $ CS
3632 $ tmp = "mkstemp"
3633 $ GOSUB inlibc
3634 $ d_mkstemp = tmp
3635 $!
3636 $! Check for mkstemps
3637 $!
3638 $ OS
3639 $ WS "#ifdef __DECC
3640 $ WS "#include <stdlib.h>
3641 $ WS "#endif
3642 $ WS "#include <stdio.h>
3643 $ WS "int main()
3644 $ WS "{"
3645 $ WS "mkstemps(""foo"", 1);
3646 $ WS "exit(0);
3647 $ WS "}"
3648 $ CS
3649 $ tmp = "mkstemps"
3650 $ GOSUB inlibc
3651 $ d_mkstemps = tmp
3652 $!
3653 $! Check for iconv
3654 $!
3655 $ OS
3656 $ WS "#ifdef __DECC
3657 $ WS "#include <stdlib.h>
3658 $ WS "#endif
3659 $ WS "#include <stdio.h>
3660 $ WS "#include <iconv.h>
3661 $ WS "int main()
3662 $ WS "{"
3663 $ WS "  iconv_t cd = (iconv_t)0;"
3664 $ WS "  char *inbuf, *outbuf;"
3665 $ WS "  size_t inleft, outleft;"
3666 $ WS "  iconv(cd, &inbuf, &inleft, &outbuf, &outleft);"
3667 $ WS "exit(0);
3668 $ WS "}"
3669 $ CS
3670 $ GOSUB link_ok
3671 $ IF compile_status .ne. good_compile
3672 $ THEN
3673 $   d_iconv="undef"
3674 $   i_iconv="undef"
3675 $ ELSE
3676 $   IF link_status .ne. good_link
3677 $   THEN
3678 $     d_iconv="undef"
3679 $     i_iconv="undef"
3680 $   ELSE
3681 $     d_iconv="define"
3682 $     i_iconv="define"
3683 $   ENDIF
3684 $ ENDIF
3685 $ IF i_iconv .eqs. "define" 
3686 $ THEN echo4 "<iconv.h> found."
3687 $ ELSE echo4 "<iconv.h> NOT found."
3688 $ ENDIF
3689 $!
3690 $! Check for mkdtemp
3691 $!
3692 $ OS
3693 $ WS "#ifdef __DECC
3694 $ WS "#include <stdlib.h>
3695 $ WS "#endif
3696 $ WS "#include <stdio.h>
3697 $ WS "int main()
3698 $ WS "{"
3699 $ WS "mkdtemp(""foo"");
3700 $ WS "exit(0);
3701 $ WS "}"
3702 $ CS
3703 $ tmp = "mkdtemp"
3704 $ GOSUB inlibc
3705 $ d_mkdtemp = tmp
3706 $!
3707 $! Check for setvbuf
3708 $!
3709 $ OS
3710 $ WS "#ifdef __DECC
3711 $ WS "#include <stdlib.h>
3712 $ WS "#endif
3713 $ WS "#include <stdio.h>
3714 $ WS "int main()
3715 $ WS "{"
3716 $ WS "FILE *foo;
3717 $ WS "char Buffer[99];
3718 $ WS "foo = fopen(""foo"", ""r"");
3719 $ WS "setvbuf(foo, Buffer, 0, 0);
3720 $ WS "exit(0);
3721 $ WS "}"
3722 $ CS
3723 $ tmp = "setvbuf"
3724 $ GOSUB inlibc
3725 $ d_setvbuf = tmp
3726 $!
3727 $! Check for setenv
3728 $!
3729 $ OS
3730 $ WS "#ifdef __DECC
3731 $ WS "#include <stdlib.h>
3732 $ WS "#endif
3733 $ WS "#include <stdio.h>
3734 $ WS "int main()
3735 $ WS "{"
3736 $ WS "setenv(""FOO"", ""BAR"", 0);
3737 $ WS "exit(0);
3738 $ WS "}"
3739 $ CS
3740 $ tmp = "setenv"
3741 $ GOSUB inlibc
3742 $ d_setenv = tmp
3743 $!
3744 $! Check for setproctitle
3745 $!
3746 $ OS
3747 $ WS "#ifdef __DECC
3748 $ WS "#include <stdlib.h>
3749 $ WS "#endif
3750 $ WS "#include <stdio.h>
3751 $ WS "int main()
3752 $ WS "{"
3753 $ WS "setproctitle(""%s"", ""FOO"");
3754 $ WS "exit(0);
3755 $ WS "}"
3756 $ CS
3757 $ tmp = "setproctitle"
3758 $ GOSUB inlibc
3759 $ d_setproctitle = tmp
3760 $!
3761 $! Check for <netinet/in.h>
3762 $!
3763 $ IF Has_Dec_C_Sockets .or. Has_Socketshr
3764 $ THEN
3765 $   tmp = "netinet/in.h"
3766 $   GOSUB inhdr
3767 $   i_niin = tmp
3768 $ ELSE
3769 $   i_niin="undef"
3770 $ ENDIF
3771 $!
3772 $! Check for <netinet/tcp.h>
3773 $!
3774 $ IF Has_Dec_C_Sockets .or. Has_Socketshr
3775 $ THEN
3776 $   tmp = "netinet/tcp.h"
3777 $   GOSUB inhdr
3778 $   i_netinettcp = tmp
3779 $ ELSE
3780 $   i_netinettcp="undef"
3781 $ ENDIF
3782 $!
3783 $! Check for endhostent
3784 $!
3785 $ IF Has_Dec_C_Sockets .or. Has_Socketshr
3786 $ THEN
3787 $   OS
3788 $   WS "#ifdef __DECC
3789 $   WS "#include <stdlib.h>
3790 $   WS "#endif
3791 $   WS "#include <stdio.h>
3792 $   IF Has_Socketshr
3793 $   THEN WS "#include <socketshr.h>"
3794 $   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
3795 $   ENDIF
3796 $   WS "int main()
3797 $   WS "{"
3798 $   WS "endhostent();
3799 $   WS "exit(0);
3800 $   WS "}"
3801 $   CS
3802 $   tmp = "endhostent"
3803 $   GOSUB inlibc
3804 $   d_endhent = tmp
3805 $ ELSE
3806 $   d_endhent="undef"
3807 $ ENDIF
3808 $!
3809 $! Check for endnetent
3810 $!
3811 $ IF Has_Dec_C_Sockets .or. Has_Socketshr
3812 $ THEN
3813 $   OS
3814 $   WS "#ifdef __DECC
3815 $   WS "#include <stdlib.h>
3816 $   WS "#endif
3817 $   WS "#include <stdio.h>
3818 $   IF Has_Socketshr
3819 $   THEN WS "#include <socketshr.h>"
3820 $   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
3821 $   ENDIF
3822 $   WS "int main()"
3823 $   WS "{"
3824 $   WS "endnetent();"
3825 $   WS "exit(0);"
3826 $   WS "}"
3827 $   CS
3828 $   tmp = "endnetent"
3829 $   GOSUB inlibc
3830 $   d_endnent = tmp
3831 $ ELSE
3832 $   d_endnent="undef"
3833 $ ENDIF
3834 $!
3835 $! Check for endprotoent
3836 $!
3837 $ IF Has_Dec_C_Sockets .OR. Has_Socketshr
3838 $ THEN
3839 $   OS
3840 $   WS "#ifdef __DECC
3841 $   WS "#include <stdlib.h>
3842 $   WS "#endif
3843 $   WS "#include <stdio.h>
3844 $   IF Has_Socketshr
3845 $   THEN WS "#include <socketshr.h>"
3846 $   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
3847 $   ENDIF
3848 $   WS "int main()
3849 $   WS "{"
3850 $   WS "endprotoent();
3851 $   WS "exit(0);
3852 $   WS "}"
3853 $   CS
3854 $   tmp = "endprotoent"
3855 $   GOSUB inlibc
3856 $   d_endpent = tmp
3857 $ ELSE
3858 $   d_endpent="undef"
3859 $ ENDIF
3860 $!
3861 $! Check for endservent
3862 $!
3863 $ IF Has_Dec_C_Sockets .OR. Has_Socketshr
3864 $ THEN
3865 $   OS
3866 $   WS "#ifdef __DECC
3867 $   WS "#include <stdlib.h>
3868 $   WS "#endif
3869 $   WS "#include <stdio.h>
3870 $   IF Has_Socketshr
3871 $   THEN WS "#include <socketshr.h>"
3872 $   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
3873 $   ENDIF
3874 $   WS "int main()
3875 $   WS "{"
3876 $   WS "endservent();
3877 $   WS "exit(0);
3878 $   WS "}"
3879 $   CS
3880 $   tmp = "endservent"
3881 $   GOSUB inlibc
3882 $   d_endsent = tmp
3883 $ ELSE
3884 $   d_endsent="undef"
3885 $ ENDIF
3886 $!
3887 $! Check for sethostent
3888 $!
3889 $ IF Has_Dec_C_Sockets .OR. Has_Socketshr
3890 $ THEN
3891 $   OS
3892 $   WS "#ifdef __DECC
3893 $   WS "#include <stdlib.h>
3894 $   WS "#endif
3895 $   WS "#include <stdio.h>
3896 $   IF Has_Socketshr
3897 $   THEN WS "#include <socketshr.h>"
3898 $   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
3899 $   ENDIF
3900 $   WS "int main()
3901 $   WS "{"
3902 $   WS "sethostent(1);
3903 $   WS "exit(0);
3904 $   WS "}"
3905 $   CS
3906 $   tmp = "sethostent"
3907 $   GOSUB inlibc
3908 $   d_sethent = tmp
3909 $ ELSE
3910 $   d_sethent="undef"
3911 $ ENDIF
3912 $!
3913 $! Check for setnetent
3914 $!
3915 $ IF Has_Dec_C_Sockets .OR. Has_Socketshr
3916 $ THEN
3917 $   OS
3918 $   WS "#ifdef __DECC
3919 $   WS "#include <stdlib.h>
3920 $   WS "#endif
3921 $   WS "#include <stdio.h>
3922 $   IF Has_Socketshr
3923 $   THEN WS "#include <socketshr.h>"
3924 $   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
3925 $   ENDIF
3926 $   WS "int main()
3927 $   WS "{"
3928 $   WS "setnetent(1);
3929 $   WS "exit(0);
3930 $   WS "}"
3931 $   CS
3932 $   tmp = "setnetent"
3933 $   GOSUB inlibc
3934 $   d_setnent = tmp
3935 $ ELSE
3936 $   d_setnent="undef"
3937 $ ENDIF
3938 $!
3939 $! Check for setprotoent
3940 $!
3941 $ IF Has_Dec_C_Sockets .OR. Has_Socketshr
3942 $ THEN
3943 $   OS
3944 $   WS "#ifdef __DECC
3945 $   WS "#include <stdlib.h>
3946 $   WS "#endif
3947 $   WS "#include <stdio.h>
3948 $   IF Has_Socketshr
3949 $   THEN WS "#include <socketshr.h>"
3950 $   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
3951 $   ENDIF
3952 $   WS "int main()
3953 $   WS "{"
3954 $   WS "setprotoent(1);
3955 $   WS "exit(0);
3956 $   WS "}"
3957 $   CS
3958 $   tmp = "setprotoent"
3959 $   GOSUB inlibc
3960 $   d_setpent = tmp
3961 $ ELSE
3962 $   d_setpent="undef"
3963 $ ENDIF
3964 $!
3965 $! Check for setservent
3966 $!
3967 $ IF Has_Dec_C_Sockets .OR. Has_Socketshr
3968 $ THEN
3969 $   OS
3970 $   WS "#ifdef __DECC
3971 $   WS "#include <stdlib.h>
3972 $   WS "#endif
3973 $   WS "#include <stdio.h>
3974 $   IF Has_Socketshr
3975 $   THEN WS "#include <socketshr.h>"
3976 $   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
3977 $   ENDIF
3978 $   WS "int main()
3979 $   WS "{"
3980 $   WS "setservent(1);
3981 $   WS "exit(0);
3982 $   WS "}"
3983 $   CS
3984 $   tmp = "setservent"
3985 $   GOSUB inlibc
3986 $   d_setsent = tmp
3987 $ ELSE
3988 $   d_setsent="undef"
3989 $ ENDIF
3990 $!
3991 $! Check for gethostent
3992 $!
3993 $ IF Has_Dec_C_Sockets .OR. Has_Socketshr
3994 $ THEN
3995 $   OS
3996 $   WS "#ifdef __DECC
3997 $   WS "#include <stdlib.h>
3998 $   WS "#endif
3999 $   WS "#include <stdio.h>
4000 $   IF Has_Socketshr
4001 $   THEN WS "#include <socketshr.h>"
4002 $   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
4003 $   ENDIF
4004 $   WS "int main()
4005 $   WS "{"
4006 $   WS "gethostent();
4007 $   WS "exit(0);
4008 $   WS "}"
4009 $   CS
4010 $   tmp = "gethostent"
4011 $   GOSUB inlibc
4012 $   d_gethent = tmp
4013 $ ELSE
4014 $   d_gethent="undef"
4015 $ ENDIF
4016 $!
4017 $! Check for getnetent
4018 $!
4019 $ IF Has_Dec_C_Sockets .OR. Has_Socketshr
4020 $ THEN
4021 $   OS
4022 $   WS "#ifdef __DECC
4023 $   WS "#include <stdlib.h>
4024 $   WS "#endif
4025 $   WS "#include <stdio.h>
4026 $   IF Has_Socketshr
4027 $   THEN WS "#include <socketshr.h>"
4028 $   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
4029 $   ENDIF
4030 $   WS "int main()
4031 $   WS "{"
4032 $   WS "getnetent();
4033 $   WS "exit(0);
4034 $   WS "}"
4035 $   CS
4036 $   tmp = "getnetent"
4037 $   GOSUB inlibc
4038 $   d_getnent = tmp
4039 $ ELSE
4040 $   d_getnent="undef"
4041 $ ENDIF
4042 $!
4043 $! Check for getprotoent
4044 $!
4045 $ IF Has_Dec_C_Sockets .OR. Has_Socketshr
4046 $ THEN
4047 $   OS
4048 $   WS "#ifdef __DECC
4049 $   WS "#include <stdlib.h>
4050 $   WS "#endif
4051 $   WS "#include <stdio.h>
4052 $   IF Has_Socketshr
4053 $   THEN WS "#include <socketshr.h>"
4054 $   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
4055 $   ENDIF
4056 $   WS "int main()
4057 $   WS "{"
4058 $   WS "getprotoent();
4059 $   WS "exit(0);
4060 $   WS "}"
4061 $   CS
4062 $   tmp = "getprotoent"
4063 $   GOSUB inlibc
4064 $   d_getpent = tmp
4065 $ ELSE
4066 $   d_getpent="undef"
4067 $ ENDIF
4068 $!
4069 $! Check for getservent
4070 $!
4071 $ IF Has_Dec_C_Sockets .OR. Has_Socketshr
4072 $ THEN
4073 $   OS
4074 $   WS "#ifdef __DECC
4075 $   WS "#include <stdlib.h>
4076 $   WS "#endif
4077 $   WS "#include <stdio.h>
4078 $   IF Has_Socketshr
4079 $   THEN WS "#include <socketshr.h>"
4080 $   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
4081 $   ENDIF
4082 $   WS "int main()
4083 $   WS "{"
4084 $   WS "getservent();
4085 $   WS "exit(0);
4086 $   WS "}"
4087 $   CS
4088 $   tmp = "getservent"
4089 $   GOSUB inlibc
4090 $   d_getsent = tmp
4091 $ ELSE
4092 $   d_getsent="undef"
4093 $ ENDIF
4094 $!
4095 $! Check for socklen_t
4096 $!
4097 $ IF Has_Dec_C_Sockets .OR. Has_Socketshr
4098 $ THEN
4099 $   echo4 "Checking to see if you have socklen_t..."
4100 $   OS
4101 $   WS "#ifdef __DECC
4102 $   WS "#include <stdlib.h>
4103 $   WS "#endif
4104 $   WS "#include <stdio.h>
4105 $   IF Has_Socketshr
4106 $   THEN WS "#include <socketshr.h>"
4107 $   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
4108 $   ENDIF
4109 $   WS "int main()
4110 $   WS "{"
4111 $   WS "socklen_t x = 16;
4112 $   WS "exit(0);
4113 $   WS "}"
4114 $   CS
4115 $   GOSUB link_ok
4116 $   IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
4117 $   THEN
4118 $     d_socklen_t="define"
4119 $     echo "You have socklen_t."
4120 $   ELSE
4121 $     d_socklen_t="undef"
4122 $     echo "You do not have socklen_t."
4123 $   ENDIF
4124 $ ELSE
4125 $   d_socklen_t="undef"
4126 $ ENDIF
4127 $!
4128 $! Check for pthread_yield
4129 $!
4130 $ IF use_threads
4131 $ THEN
4132 $   OS
4133 $   WS "#ifdef __DECC
4134 $   WS "#include <stdlib.h>
4135 $   WS "#endif
4136 $   WS "#include <pthread.h>
4137 $   WS "#include <stdio.h>
4138 $   WS "int main()
4139 $   WS "{"
4140 $   WS "pthread_yield();
4141 $   WS "exit(0);
4142 $   WS "}"
4143 $   CS
4144 $   tmp = "pthread_yield"
4145 $   GOSUB inlibc
4146 $   d_pthread_yield = tmp
4147 $ ELSE
4148 $   d_pthread_yield="undef"
4149 $ ENDIF
4150 $!
4151 $! Check for sched_yield
4152 $!
4153 $ IF use_threads
4154 $ THEN
4155 $   OS
4156 $   WS "#ifdef __DECC
4157 $   WS "#include <stdlib.h>
4158 $   WS "#endif
4159 $   WS "#include <pthread.h>
4160 $   WS "#include <stdio.h>
4161 $   WS "int main()
4162 $   WS "{"
4163 $   WS "sched_yield();
4164 $   WS "exit(0);
4165 $   WS "}"
4166 $   CS
4167 $   tmp = "sched_yield"
4168 $   GOSUB inlibc
4169 $   d_sched_yield = tmp
4170 $   IF d_sched_yield .EQS. "define"
4171 $   THEN sched_yield = "sched_yield"
4172 $   ELSE sched_yield = " "
4173 $   ENDIF
4174 $ ELSE
4175 $   d_sched_yield="undef"
4176 $   sched_yield = " "
4177 $ ENDIF
4178 $!
4179 $! Check for generic pointer size
4180 $!
4181 $ echo4 "Checking to see how big your pointers are..." 
4182 $ OS
4183 $ WS "#ifdef __DECC
4184 $ WS "#include <stdlib.h>
4185 $ WS "#endif
4186 $ WS "#include <stdio.h>
4187 $ WS "int main()
4188 $ WS "{"
4189 $ WS "int foo;
4190 $ WS "foo = sizeof(char *);
4191 $ WS "printf(""%d\n"", foo);
4192 $ WS "exit(0);
4193 $ WS "}"
4194 $ CS
4195 $ tmp = "char *"
4196 $ GOSUB type_size_check
4197 $ ptrsize = tmp
4198 $ echo "Your pointers are ''ptrsize' bytes long."
4199 $!
4200 $! Check for size_t size
4201 $!
4202 $ tmp = "size_t"
4203 $ zzz = tmp
4204 $ echo4 "Checking the size of ''zzz'..."
4205 $ GOSUB type_size_check
4206 $ sizesize = tmp
4207 $ echo "Your ''zzz' size is ''sizesize' bytes."
4208 $!
4209 $! Check rand48 and its ilk
4210 $!
4211 $ echo4 "Looking for a random number function..."
4212 $ OS
4213 $ WS "#ifdef __DECC
4214 $ WS "#include <stdlib.h>
4215 $ WS "#endif
4216 $ WS "#include <stdio.h>
4217 $ WS "int main()
4218 $ WS "{"
4219 $ WS "srand48(12L);"
4220 $ WS "exit(0);
4221 $ WS "}"
4222 $ CS
4223 $ GOSUB link_ok
4224 $ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
4225 $ THEN
4226 $   drand01 = "drand48()"
4227 $   randseedtype = "long int"
4228 $   seedfunc = "srand48"
4229 $   echo4 "Good, found drand48()."
4230 $   d_drand48proto = "define"
4231 $ ELSE
4232 $   d_drand48proto = "undef"
4233 $   drand01="random()"
4234 $   randseedtype = "unsigned"
4235 $   seedfunc = "srandom"
4236 $   OS
4237 $   WS "#ifdef __DECC
4238 $   WS "#include <stdlib.h>
4239 $   WS "#endif
4240 $   WS "#include <stdio.h>
4241 $   WS "int main()
4242 $   WS "{"
4243 $   WS "srandom(12);"
4244 $   WS "exit(0);
4245 $   WS "}"
4246 $   CS
4247 $   GOSUB link_ok
4248 $   IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
4249 $   THEN
4250 $     echo4 "OK, found random()."
4251 $   ELSE
4252 $     drand01="(((float)rand())/((float)RAND_MAX))"
4253 $     randseedtype = "unsigned"
4254 $     seedfunc = "srand"
4255 $     echo4 "Yick, looks like I have to use rand()."
4256 $   ENDIF
4257 $ ENDIF
4258 $!
4259 $! Done with compiler checks. Clean up.
4260 $ IF F$SEARCH("try.c")  .NES."" THEN DELETE/NOLOG/NOCONFIRM try.c;*
4261 $ IF F$SEARCH("try.obj").NES."" THEN DELETE/NOLOG/NOCONFIRM try.obj;*
4262 $ IF F$SEARCH("try.exe").NES."" THEN DELETE/NOLOG/NOCONFIRM try.exe;*
4263 $ IF F$SEARCH("try.opt").NES."" THEN DELETE/NOLOG/NOCONFIRM try.opt;*
4264 $ IF F$SEARCH("try.out").NES."" THEN DELETE/NOLOG/NOCONFIRM try.out;*
4265 $ IF using_cxx
4266 $ THEN
4267 $   CALL Cxx_demangler_cleanup
4268 $ ENDIF
4269 $!
4270 $! Some that are compiler or VMS version sensitive
4271 $!
4272 $! Gnu C stuff
4273 $ IF Using_Gnu_C
4274 $ THEN
4275 $   d_attribut="define"
4276 $   vms_cc_type="gcc"
4277 $ ELSE
4278 $   vms_cc_type="cc"
4279 $   d_attribut="undef"
4280 $ ENDIF
4281 $!
4282 $! Dec C >= 5.2 and VMS ver >= 7.0
4283 $ IF (Using_Dec_C).AND.(F$INTEGER(Dec_C_Version).GE.50200000).AND.(vms_ver .GES. "7.0")
4284 $ THEN
4285 $   d_bcmp="define"
4286 $   d_gettimeod="define"
4287 $   d_uname="define"
4288 $   d_sigaction="define"
4289 $   d_truncate="define"
4290 $   d_wait4="define"
4291 $   d_index="define"
4292 $   pidtype="pid_t"
4293 $   sig_name="ZERO HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM ABRT USR1 USR2 SPARE18 SPARE19 CHLD CONT STOP TSTP TTIN TTOU DEBUG SPARE27 SPARE28 SPARE29 SPARE30 SPARE31 SPARE32 RTMIN RTMAX"",0"
4294 $   psnwc1="""ZERO"",""HUP"",""INT"",""QUIT"",""ILL"",""TRAP"",""IOT"",""EMT"",""FPE"",""KILL"",""BUS"",""SEGV"",""SYS"","
4295 $   psnwc2="""PIPE"",""ALRM"",""TERM"",""ABRT"",""USR1"",""USR2"",""SPARE18"",""SPARE19"",""CHLD"",""CONT"",""STOP"",""TSTP"","
4296 $   psnwc3="""TTIN"",""TTOU"",""DEBUG"",""SPARE27"",""SPARE28"",""SPARE29"",""SPARE30"",""SPARE31"",""SPARE32"",""RTMIN"",""RTMAX"",0"
4297 $   sig_name_init = psnwc1 + psnwc2 + psnwc3
4298 $   sig_num="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 6 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 64"","0"
4299 $   sig_num_init="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,64,0"
4300 $!   perl_sig_num_with_commas=sig_num_init
4301 $   uidtype="uid_t"
4302 $   d_pathconf="define"
4303 $   d_fpathconf="define"
4304 $   d_sysconf="define"
4305 $   d_sigsetjmp="define"
4306 $ ELSE
4307 $   pidtype="unsigned int"
4308 $   d_gettimeod="undef"
4309 $   d_bcmp="undef"
4310 $   d_uname="undef"
4311 $   d_sigaction="undef"
4312 $   d_truncate="undef"
4313 $   d_wait4="undef"
4314 $   d_index="undef"
4315 $   sig_name="ZERO HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM ABRT USR1 USR2"",0"
4316 $   psnwc1="""ZERO"",""HUP"",""INT"",""QUIT"",""ILL"",""TRAP"",""IOT"",""EMT"",""FPE"",""KILL"",""BUS"",""SEGV"",""SYS"","
4317 $   psnwc2="""PIPE"",""ALRM"",""TERM"",""ABRT"",""USR1"",""USR2"",0"
4318 $   sig_name_init = psnwc1 + psnwc2
4319 $   sig_num="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 6 16 17"",0"
4320 $   sig_num_init="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,0"
4321 $!   perl_sig_num_with_commas=sig_num_init
4322 $   uidtype="unsigned int"
4323 $   d_pathconf="undef"
4324 $   d_fpathconf="undef"
4325 $   d_sysconf="undef"
4326 $   d_sigsetjmp="undef"
4327 $ ENDIF
4328 $!
4329 $! Dec C alone
4330 $ IF Using_Dec_C
4331 $ THEN
4332 $   d_mbstowcs="define"
4333 $   d_mbtowc="define"
4334 $   d_stdiobase="define"
4335 $   d_stdio_cnt_lval="define"
4336 $   d_stdio_ptr_lval="define"
4337 $   d_stdstdio="define"
4338 $   d_wcstombs="define"
4339 $   d_mblen="define"
4340 $   d_mktime="define"
4341 $   d_strcoll="define"
4342 $   d_strxfrm="define"
4343 $   d_wctomb="define"
4344 $   i_locale="define"
4345 $   d_locconv="define"
4346 $   d_setlocale="define"
4347 $   vms_cc_type="decc"
4348 $ ELSE
4349 $   d_mbstowcs="undef"
4350 $   d_mbtowc="undef"
4351 $   d_stdiobase="undef"
4352 $   d_stdio_cnt_lval="undef"
4353 $   d_stdio_ptr_lval="undef"
4354 $   d_stdstdio="undef"
4355 $   d_wcstombs="undef"
4356 $   d_mblen="undef"
4357 $   d_mktime="undef"
4358 $   d_strcoll="undef"
4359 $   d_strxfrm="undef"
4360 $   d_wctomb="undef"
4361 $   i_locale="undef"
4362 $   d_locconv="undef"
4363 $   d_setlocale="undef"
4364 $ ENDIF
4365 $!
4366 $! Sockets?
4367 $ if Has_Socketshr .OR. Has_Dec_C_Sockets
4368 $ THEN
4369 $   d_vms_do_sockets="define"
4370 $   d_htonl="define"
4371 $   d_socket="define"
4372 $   d_select="define"
4373 $   netdb_hlen_type="int"
4374 $   netdb_host_type="char *"
4375 $   netdb_name_type="char *"
4376 $   netdb_net_type="long"
4377 $   d_gethbyaddr="define"
4378 $   d_gethbyname="define"
4379 $   d_getnbyaddr="define"
4380 $   d_getnbyname="define"
4381 $   d_getpbynumber="define"
4382 $   d_getpbyname="define"
4383 $   d_getsbyport="define"
4384 $   d_getsbyname="define"
4385 $   d_gethostprotos="define"
4386 $   d_getnetprotos="define"
4387 $   d_getprotoprotos="define"
4388 $   d_getservprotos="define"
4389 $   IF Using_Dec_C
4390 $   THEN
4391 $     socksizetype="unsigned int"
4392 $   ELSE
4393 $     socksizetype="int *"
4394 $   ENDIF
4395 $ ELSE
4396 $   d_vms_do_sockets="undef"
4397 $   d_htonl="undef"
4398 $   d_socket="undef"
4399 $   d_select="undef"
4400 $   netdb_hlen_type="int"
4401 $   netdb_host_type="char *"
4402 $   netdb_name_type="char *"
4403 $   netdb_net_type="long"
4404 $   d_gethbyaddr="undef"
4405 $   d_gethbyname="undef"
4406 $   d_getnbyaddr="undef"
4407 $   d_getnbyname="undef"
4408 $   d_getpbynumber="undef"
4409 $   d_getpbyname="undef"
4410 $   d_getsbyport="undef"
4411 $   d_getsbyname="undef"
4412 $   d_gethostprotos="undef"
4413 $   d_getnetprotos="undef"
4414 $   d_getprotoprotos="undef"
4415 $   d_getservprotos="undef"
4416 $   socksizetype="undef"
4417 $ ENDIF
4418 $! Threads
4419 $ IF use_threads
4420 $ THEN
4421 $   usethreads="define"
4422 $   d_pthreads_created_joinable="define"
4423 $   if (vms_ver .GES. "7.0")
4424 $   THEN
4425 $     d_oldpthreads="undef"
4426 $   ELSE
4427 $     d_oldpthreads="define"
4428 $   ENDIF
4429 $ ELSE
4430 $   d_oldpthreads="undef"
4431 $   usethreads="undef"
4432 $   d_pthreads_created_joinable="undef"
4433 $ ENDIF
4434 $! 
4435 $! new (5.005_62++) typedefs for primitives
4436 $!
4437 $ echo "Choosing the C types to be used for Perl's internal types..."
4438 $ ivtype="long"
4439 $ uvtype="unsigned long"
4440 $ i8type="char"
4441 $ u8type="unsigned char"
4442 $ i16type="short"
4443 $ u16type="unsigned short"
4444 $ i32type="int"
4445 $ u32type="unsigned int"
4446 $ i64type="long long"
4447 $ u64type="unsigned long long"
4448 $ nvtype="double"
4449 $!
4450 $ IF use64bitint .OR. use64bitint .EQS. "define"
4451 $ THEN
4452 $   ivtype = "''i64type'"
4453 $   uvtype = "''u64type'"
4454 $   nvtype="long double"
4455 $ ELSE
4456 $   i64size="undef"
4457 $   u64size="undef"
4458 $ ENDIF
4459 $!
4460 $ tmp = "''ivtype'"
4461 $ GOSUB type_size_check
4462 $ ivsize = tmp
4463 $ IF use64bitint .OR. use64bitint .EQS. "define" THEN i64size = tmp
4464 $ IF ivtype .eqs. "long"
4465 $ THEN longsize = tmp
4466 $ ELSE
4467 $   tmp = "long"
4468 $   GOSUB type_size_check
4469 $   longsize = tmp
4470 $ ENDIF
4471 $
4472 $ tmp = "''uvtype'"
4473 $ GOSUB type_size_check
4474 $ uvsize = tmp
4475 $ IF use64bitint .OR. use64bitint .EQS. "define" THEN u64size = tmp
4476 $
4477 $ tmp = "''i8type'"
4478 $ GOSUB type_size_check
4479 $ i8size = tmp
4480 $
4481 $ tmp = "''u8type'"
4482 $ GOSUB type_size_check
4483 $ u8size = tmp
4484 $
4485 $ tmp = "''i16type'"
4486 $ GOSUB type_size_check
4487 $ i16size = tmp
4488 $ IF i16type .eqs. "short"
4489 $ THEN shortsize = tmp
4490 $ ELSE
4491 $   tmp = "short"
4492 $   gosub type_size_check
4493 $   shortsize = tmp
4494 $ ENDIF
4495 $
4496 $ tmp = "''u16type'"
4497 $ GOSUB type_size_check
4498 $ u16size = tmp
4499 $
4500 $ tmp = "''i32type'"
4501 $ GOSUB type_size_check
4502 $ i32size = tmp
4503 $ IF i32type .eqs. "int"
4504 $ THEN intsize = tmp
4505 $ ELSE
4506 $   tmp = "int"
4507 $   gosub type_size_check
4508 $   intsize = tmp
4509 $ ENDIF
4510 $
4511 $ tmp = "''u32type'"
4512 $ gosub type_size_check
4513 $ u32size = tmp
4514 $
4515 $ tmp = "''nvtype'"
4516 $ GOSUB type_size_check
4517 $ nvsize = tmp
4518 $!
4519 $ echo "(IV will be ""''ivtype'"", ''ivsize' bytes)"
4520 $ echo "(UV will be ""''uvtype'"", ''uvsize' bytes)"
4521 $ echo "(NV will be ""''nvtype'"", ''nvsize' bytes)"
4522 $!
4523 $ echo4 "Checking whether your NVs can preserve your UVs..."
4524 $ OS
4525 $ WS "#ifdef __DECC
4526 $ WS "#include <stdlib.h>
4527 $ WS "#endif
4528 $ WS "#include <stdio.h>
4529 $ WS "int main() {
4530 $ WS "    ''uvtype' k = (''uvtype')~0, l;
4531 $ WS "    ''nvtype' d;
4532 $ WS "    l = k;
4533 $ WS "    d = (''nvtype')l;
4534 $ WS "    l = (''uvtype')d;
4535 $ WS "    if (l == k)
4536 $ WS "       printf(""preserve\n"");
4537 $ WS "    exit(0);
4538 $ WS "}
4539 $ CS
4540 $ GOSUB compile
4541 $ IF tmp .EQS. "preserve"
4542 $ THEN 
4543 $   d_nv_preserves_uv = "define"
4544 $   echo "Yes, they can." 
4545 $   d_nv_preserves_uv_bits = F$STRING(F$INTEGER(uvsize) * 8)
4546 $ ELSE
4547 $   d_nv_preserves_uv = "undef"
4548 $   echo "No, they can't."
4549 $   echo4 "Checking how many bits of your UVs your NVs can preserve..."
4550 $   OS
4551 $   WS "#ifdef __DECC
4552 $   WS "#include <stdlib.h>
4553 $   WS "#endif
4554 $   WS "#include <stdio.h>
4555 $   WS "int main() {
4556 $   WS "    ''uvtype' u = 0;
4557 $   WS "    int     n = 8 * ''uvsize';
4558 $   WS "    int     i;
4559 $   WS "    for (i = 0; i < n; i++) {
4560 $   WS "      u = u << 1 | (''uvtype')1;
4561 $   WS "      if ((''uvtype')(''nvtype')u != u)
4562 $   WS "        break;
4563 $   WS "    }
4564 $   WS "    printf(""%d\n"", i);
4565 $   WS "    exit(0);
4566 $   WS "}
4567 $   GOSUB compile
4568 $   d_nv_preserves_uv_bits = tmp
4569 $ ENDIF
4570 $ DELETE/SYMBOL tmp
4571 $!
4572 $ ivdformat="""ld"""
4573 $ uvuformat="""lu"""
4574 $ uvoformat="""lo"""
4575 $ uvxformat="""lx"""
4576 $! uselongdouble?
4577 $ nveformat="""e"""
4578 $ nvfformat="""f"""
4579 $ nvgformat="""g"""
4580 $! 
4581 $! Finally the composite ones. All config
4582 $!
4583 $ myuname="''osname' ''myname' ''osvers' ''F$EDIT(hwname, "TRIM")'"
4584 $!
4585 $ IF Using_Dec_C
4586 $ THEN
4587 $   ccflags="/Include=[]/Standard=Relaxed_ANSI/Prefix=All/Obj=''obj_ext'/NoList''ccflags'"
4588 $ ENDIF
4589 $ IF use_vmsdebug_perl
4590 $ THEN
4591 $   optimize="/Debug/NoOpt"
4592 $   dbgprefix = "DBG"
4593 $ ELSE
4594 $   optimize= ""
4595 $   dbgprefix = ""
4596 $ ENDIF
4597 $!
4598 $! Okay, we've got everything configured. Now go write out a config.sh.
4599 $ basename_config_sh = F$PARSE(config_sh,,,"NAME",)+F$PARSE(config_sh,,,"TYPE",)
4600 $ echo4 "Creating ''basename_config_sh'..."
4601 $ open/write CONFIG 'config_sh
4602 $ WC := write CONFIG
4603 $!
4604 $! ##BEGIN WRITE NEW CONSTANTS HERE##
4605 $!
4606 $ WC "#!/bin/sh"
4607 $ WC "#"
4608 $ WC "# This file was produced by Configure.COM on a ''osname' system."
4609 $ WC "#"
4610 $ WC "# Package name      : ''package'"
4611 $ WC "# Source directory  : ''src'"
4612 $ WC "# Configuration time: " + cf_time
4613 $ WC "# Configuration by  : " + cf_by
4614 $ WC "# Target system     : " + myuname
4615 $ WC ""
4616 $ WC "CONFIG='true'"
4617 $ WC "Makefile_SH='" + Makefile_SH + "'"
4618 $ WC "Mcc='" + Mcc + "'"
4619 $! WC "PERL_SUBVERSION='" + subversion + "'" ! VMS specific to descrip_mms.template
4620 $ WC "PERL_VERSION='" + patchlevel + "'" ! VMS specific to descrip_mms.template
4621 $ WC "alignbytes='" + alignbytes + "'"
4622 $ WC "aphostname='" + "'"
4623 $ WC "ar='" + "'"
4624 $ WC "archlib='" + archlib + "'"
4625 $ WC "archlibexp='" + archlibexp + "'"
4626 $ WC "archname='" + archname + "'"
4627 $ WC "baserev='" + baserev + "'"
4628 $ WC "bin='" + bin + "'"
4629 $ WC "binexp='" + binexp + "'"
4630 $ WC "builddir='" + builddir + "'"
4631 $ WC "byteorder='1234'"
4632 $ WC "castflags='0'"
4633 $ WC "cc='" + perl_cc + "'"
4634 $ WC "cccdlflags='" + cccdlflags + "'"
4635 $ WC "ccdlflags='" + ccdlflags + "'"
4636 $ WC "ccflags='" + ccflags + "'"
4637 $ WC "ccversion='" + ccversion + "'" ! VMS specific, oddly enough
4638 $ WC "cf_by='" + cf_by + "'"
4639 $ WC "cf_email='" + cf_email + "'"
4640 $ WC "cf_time='" + cf_time + "'"
4641 $ WC "config_args='" + config_args + "'"
4642 $ WC "config_sh='" + config_sh + "'"
4643 $ WC "cpp_stuff='" + cpp_stuff + "'"
4644 $ WC "cpplast='" + cpplast + "'"
4645 $ WC "cppminus='" + cppminus + "'"
4646 $ WC "cpprun='" + cpprun + "'"
4647 $ WC "cppstdin='" + cppstdin + "'"
4648 $ WC "crosscompile='undef'"
4649 $ WC "d_Gconvert='my_gconvert(x,n,t,b)'"
4650 $ WC "d_PRId64='" + d_PRId64 + "'"
4651 $ WC "d_PRIEldbl='" + d_PRIEUldbl + "'"
4652 $ WC "d_PRIFldbl='" + d_PRIFUldbl + "'"
4653 $ WC "d_PRIGldbl='" + d_PRIGUldbl + "'"
4654 $ WC "d_PRIX64='" + d_PRIXU64 + "'"
4655 $ WC "d_PRIeldbl='" + d_PRIeldbl + "'"
4656 $ WC "d_PRIfldbl='" + d_PRIfldbl + "'"
4657 $ WC "d_PRIgldbl='" + d_PRIgldbl + "'"
4658 $ WC "d_PRIo64='" + d_PRIo64 + "'"
4659 $ WC "d_PRIu64='" + d_PRIu64 + "'"
4660 $ WC "d_PRIx64='" + d_PRIx64 + "'"
4661 $ WC "d_SCNfldbl='" + d_SCNfldbl + "'"
4662 $ WC "d_access='" + d_access + "'"
4663 $ WC "d_accessx='undef'"
4664 $ WC "d_alarm='define'"
4665 $ WC "d_archlib='define'"
4666 $ WC "d_atolf='" + d_atolf + "'"
4667 $ WC "d_atoll='" + d_atoll + "'"
4668 $ WC "d_attribut='" + d_attribut + "'"
4669 $ WC "d_bcmp='" + d_bcmp + "'"
4670 $ WC "d_bcopy='" + d_bcopy + "'"
4671 $ WC "d_bincompat3='undef'"
4672 $ WC "d_bincompat5005='undef'"
4673 $ WC "d_bsdgetpgrp='undef'"
4674 $! WC "d_bsdpgrp='undef'"
4675 $ WC "d_bsdsetpgrp='undef'"
4676 $ WC "d_bzero='" + d_bzero + "'"
4677 $ WC "d_casti32='define'"
4678 $ WC "d_castneg='define'"
4679 $ WC "d_charvspr='undef'"
4680 $ WC "d_chown='define'"
4681 $ WC "d_chroot='undef'"
4682 $ WC "d_chsize='undef'"
4683 $ WC "d_cmsghdr_s='undef'"
4684 $ WC "d_const='define'"
4685 $ WC "d_crypt='define'"
4686 $ WC "d_csh='undef'"
4687 $ WC "d_cuserid='define'"
4688 $ WC "d_dbl_dig='define'"
4689 $ WC "d_difftime='define'"
4690 $ WC "d_dirnamlen='define'"
4691 $ WC "d_dlerror='undef'"
4692 $ WC "d_dlsymun='undef'"
4693 $ WC "d_dosuid='undef'"
4694 $ WC "d_drand48proto='" + d_drand48proto + "'"
4695 $ WC "d_dup2='define'"
4696 $ WC "d_eaccess='undef'"
4697 $ WC "d_endgrent='define'"
4698 $ WC "d_endhent='" + d_endhent + "'"
4699 $ WC "d_endnent='" + d_endnent + "'"
4700 $ WC "d_endpent='" + d_endpent + "'"
4701 $ WC "d_endpwent='define'"
4702 $ WC "d_endsent='" + d_endsent + "'"
4703 $ WC "d_eofnblk='undef'"
4704 $ WC "d_eunice='undef'"
4705 $ WC "d_fchmod='undef'"
4706 $ WC "d_fchown='undef'"
4707 $ WC "d_fcntl='" + d_fcntl + "'"
4708 $ WC "d_fd_set='" + d_fd_set + "'"
4709 $ WC "d_fgetpos='define'"
4710 $ WC "d_flexfnam='define'"
4711 $ WC "d_flock='undef'"
4712 $ WC "d_fork='undef'"
4713 $ WC "d_fpathconf='" + d_fpathconf + "'"
4714 $ WC "d_fpos64_t='" + d_fpos64_t + "'"
4715 $ WC "d_frexpl='" + d_frexpl + "'"
4716 $ WC "d_fs_data_s='undef'"
4717 $ WC "d_fseeko='undef'"
4718 $ WC "d_fsetpos='define'"
4719 $ WC "d_fstatfs='undef'"
4720 $ WC "d_fstatvfs='undef'"
4721 $ WC "d_ftello='undef'"
4722 $ WC "d_getcwd='undef'"
4723 $ WC "d_getespwnam='undef'"
4724 $ WC "d_getfsstat='undef'"
4725 $ WC "d_getgrent='define'"
4726 $ WC "d_getgrps='undef'"
4727 $ WC "d_gethbyaddr='" + d_gethbyaddr + "'"
4728 $ WC "d_gethbyname='" + d_gethbyname + "'"
4729 $ WC "d_gethent='" + d_gethent + "'"
4730 $ WC "d_gethname='" + d_gethname + "'"
4731 $ WC "d_gethostprotos='" + d_gethostprotos + "'"
4732 $ WC "d_getlogin='define'"
4733 $ WC "d_getmnt='undef'"
4734 $ WC "d_getmntent='undef'"
4735 $ WC "d_getnbyaddr='" + d_getnbyaddr + "'"
4736 $ WC "d_getnbyname='" + d_getnbyname + "'"
4737 $ WC "d_getnent='" + d_getnent + "'"
4738 $ WC "d_getnetprotos='" + d_getnetprotos + "'"
4739 $ WC "d_getpbyname='" + d_getpbyname + "'"
4740 $ WC "d_getpbynumber='" + d_getpbynumber + "'"
4741 $ WC "d_getpent='" + d_getpent + "'"
4742 $ WC "d_getpgid='undef'"
4743 $ WC "d_getpgrp2='undef'"
4744 $ WC "d_getpgrp='undef'"
4745 $ WC "d_getppid='undef'"
4746 $ WC "d_getprior='undef'"
4747 $ WC "d_getprotoprotos='" + d_getprotoprotos + "'"
4748 $ WC "d_getprpwnam='undef'"
4749 $ WC "d_getpwent='define'"
4750 $ WC "d_getsbyname='" + d_getsbyname + "'"
4751 $ WC "d_getsbyport='" + d_getsbyport + "'"
4752 $ WC "d_getsent='" + d_getsent + "'"
4753 $ WC "d_getservprotos='" + d_getservprotos + "'"
4754 $ WC "d_getspnam='undef'"
4755 $ WC "d_gettimeod='" + d_gettimeod + "'"
4756 $ WC "d_gnulibc='undef'"
4757 $ WC "d_grpasswd='undef'"
4758 $ WC "d_hasmntopt='undef'"
4759 $ WC "d_htonl='" + d_htonl + "'"
4760 $ WC "d_iconv='" + d_iconv +"'"
4761 $ WC "d_index='" + d_index + "'"
4762 $ WC "d_inetaton='undef'"
4763 $ WC "d_int64_t='" + d_int64_t + "'"
4764 $ WC "d_isascii='define'"
4765 $ WC "d_isnan='" + d_isnan + "'"
4766 $ WC "d_isnanl='" + d_isnanl + "'"
4767 $ WC "d_killpg='undef'"
4768 $ WC "d_lchown='undef'"
4769 $ WC "d_ldbl_dig='define'"
4770 $ WC "d_link='undef'"
4771 $ WC "d_llseek='undef'"
4772 $ WC "d_locconv='" + d_locconv + "'"
4773 $ WC "d_lockf='undef'"
4774 $ WC "d_longdbl='" + d_longdbl + "'"
4775 $ WC "d_longlong='" + d_longlong + "'"
4776 $ WC "d_lseekproto='define'"
4777 $ WC "d_lstat='undef'"
4778 $ WC "d_madvise='undef'"
4779 $ WC "d_mblen='" + d_mblen + "'"
4780 $ WC "d_mbstowcs='" + d_mbstowcs + "'"
4781 $ WC "d_mbtowc='" + d_mbtowc + "'"
4782 $ WC "d_memchr='" + d_memchr + "'"
4783 $ WC "d_memcmp='define'"
4784 $ WC "d_memcpy='define'"
4785 $ WC "d_memmove='define'"
4786 $ WC "d_memset='define'"
4787 $ WC "d_mkdir='define'"
4788 $ WC "d_mkdtemp='" + d_mkdtemp + "'"
4789 $ WC "d_mkfifo='undef'"
4790 $ WC "d_mknod='undef'"
4791 $ WC "d_mkstemp='" + d_mkstemp + "'"
4792 $ WC "d_mkstemps='" + d_mkstemps + "'"
4793 $ WC "d_mktime='" + d_mktime + "'"
4794 $ WC "d_mmap='undef'"
4795 $ WC "d_modfl='" + d_modfl + "'"
4796 $ WC "d_mprotect='undef'"
4797 $ WC "d_msg='undef'"
4798 $ WC "d_msg_ctrunc='undef'"
4799 $ WC "d_msg_dontroute='undef'"
4800 $ WC "d_msg_oob='undef'"
4801 $ WC "d_msg_peek='undef'"
4802 $ WC "d_msg_proxy='undef'"
4803 $ WC "d_msghdr_s='undef'"
4804 $ WC "d_msync='undef'"
4805 $ WC "d_munmap='undef'"
4806 $ WC "d_mymalloc='" + d_mymalloc + "'"
4807 $ WC "d_nice='define'"
4808 $ WC "d_nv_preserves_uv='" + d_nv_preserves_uv + "'"
4809 $ WC "d_nv_preserves_uv_bits='" + d_nv_preserves_uv_bits + "'"
4810 $ WC "d_off64_t='" + d_off64_t + "'"
4811 $ WC "d_old_pthread_create_joinable='" + d_old_pthread_create_joinable + "'"
4812 $ WC "d_oldarchlib='define'"
4813 $ WC "d_oldpthreads='" + d_oldpthreads + "'"
4814 $ WC "d_open3='define'"
4815 $ WC "d_pathconf='" + d_pathconf + "'"
4816 $ WC "d_pause='define'"
4817 $ WC "d_perl_otherlibdirs='undef'"
4818 $ WC "d_phostname='undef'"
4819 $ WC "d_pipe='define'"
4820 $ WC "d_poll='undef'"
4821 $ WC "d_pthread_yield='" + d_pthread_yield + "'"
4822 $ WC "d_pthreads_created_joinable='" + d_pthreads_created_joinable + "'"
4823 $ WC "d_pwage='undef'"
4824 $ WC "d_pwchange='undef'"
4825 $ WC "d_pwclass='undef'"
4826 $ WC "d_pwcomment='define'"
4827 $ WC "d_pwexpire='undef'"
4828 $ WC "d_pwgecos='define'"
4829 $ WC "d_pwpasswd='define'"
4830 $ WC "d_pwquota='undef'"
4831 $ WC "d_qgcvt='undef'"
4832 $ WC "d_quad='" + d_quad + "'"
4833 $ WC "d_readdir='define'"
4834 $ WC "d_readlink='undef'"
4835 $ WC "d_readv='undef'"
4836 $ WC "d_recvmsg='undef'"
4837 $ WC "d_rename='define'"
4838 $ WC "d_rewinddir='define'"
4839 $ WC "d_rmdir='define'"
4840 $ WC "d_safebcpy='undef'"
4841 $ WC "d_safemcpy='define'"
4842 $ WC "d_sanemcmp='define'"
4843 $ WC "d_sched_yield='" + d_sched_yield + "'"
4844 $ WC "d_scm_rights='undef'"
4845 $ WC "d_seekdir='define'"
4846 $ WC "d_select='" + d_select + "'"
4847 $ WC "d_sem='undef'"
4848 $ WC "d_semctl_semid_ds='undef'"
4849 $ WC "d_semctl_semun='undef'"
4850 $ WC "d_sendmsg='undef'"
4851 $ WC "d_setegid='undef'"
4852 $ WC "d_setenv='" + d_setenv + "'"
4853 $ WC "d_seteuid='undef'"
4854 $ WC "d_setgrent='undef'"
4855 $ WC "d_setgrps='undef'"
4856 $ WC "d_sethent='" + d_sethent + "'"
4857 $ WC "d_setlinebuf='undef'"
4858 $ WC "d_setlocale='" + d_setlocale + "'"
4859 $ WC "d_setnent='" + d_setnent + "'"
4860 $ WC "d_setpent='" + d_setpent + "'"
4861 $ WC "d_setpgid='undef'"
4862 $ WC "d_setpgrp2='undef'"
4863 $ WC "d_setpgrp='undef'"
4864 $ WC "d_setprior='undef'"
4865 $ WC "d_setproctitle='" + d_setproctitle + "'"
4866 $ WC "d_setpwent='define'"
4867 $ WC "d_setregid='undef'"
4868 $ WC "d_setresgid='undef'"
4869 $ WC "d_setresuid='undef'"
4870 $ WC "d_setreuid='undef'"
4871 $ WC "d_setrgid='undef'"
4872 $ WC "d_setruid='undef'"
4873 $ WC "d_setsent='" + d_setsent + "'"
4874 $ WC "d_setsid='undef'"
4875 $ WC "d_setvbuf='" + d_setvbuf + "'"
4876 $ WC "d_sfio='undef'"
4877 $ WC "d_shm='undef'"
4878 $ WC "d_shmatprototype='undef'"
4879 $ WC "d_sigaction='" + d_sigaction + "'"
4880 $ WC "d_sigsetjmp='" + d_sigsetjmp + "'"
4881 $ WC "d_socket='" + d_socket + "'"
4882 $ WC "d_socklen_t='" + d_socklen_t + "'"
4883 $ WC "d_sockpair='undef'"
4884 $ WC "d_socks5_init='undef'"
4885 $ WC "d_sqrtl='define'"
4886 $ WC "d_statblks='undef'"
4887 $ WC "d_statfs_f_flags='undef'"
4888 $ WC "d_statfs_s='undef'"
4889 $ WC "d_statfsflags='undef'"
4890 $ WC "d_stdio_cnt_lval='" + d_stdio_cnt_lval + "'"
4891 $ WC "d_stdio_ptr_lval='" + d_stdio_ptr_lval + "'"
4892 $ WC "d_stdio_stream_array='undef'"
4893 $ WC "d_stdiobase='" + d_stdiobase + "'"
4894 $ WC "d_stdstdio='" + d_stdstdio + "'"
4895 $ WC "d_strchr='define'"
4896 $ WC "d_strcoll='" + d_strcoll + "'"
4897 $ WC "d_strctcpy='define'"
4898 $ WC "d_strerrm='strerror((e),vaxc$errno)'"
4899 $ WC "d_strerror='define'"
4900 $ WC "d_strtod='define'"
4901 $ WC "d_strtol='define'"
4902 $ WC "d_strtold='" + d_strtold + "'"
4903 $ WC "d_strtoll='" + d_strtoll + "'"
4904 $ WC "d_strtoul='define'"
4905 $ WC "d_strtoull='" + d_strtoull + "'"
4906 $ WC "d_strtouq='" + d_strtouq + "'"
4907 $ WC "d_strxfrm='" + d_strxfrm  + "'"
4908 $ WC "d_suidsafe='undef'"
4909 $ WC "d_symlink='undef'"
4910 $ WC "d_syscall='undef'"
4911 $ WC "d_sysconf='" + d_sysconf + "'"
4912 $ WC "d_syserrlst='undef'"
4913 $ WC "d_system='define'"
4914 $ WC "d_tcgetpgrp='undef'"
4915 $ WC "d_tcsetpgrp='undef'"
4916 $ WC "d_telldir='define'"
4917 $ WC "d_telldirproto='define'"
4918 $ WC "d_times='define'"
4919 $ WC "d_truncate='" + d_truncate + "'"
4920 $ WC "d_tzname='undef'"
4921 $ WC "d_umask='define'"
4922 $ WC "d_uname='" + d_uname + "'"
4923 $ WC "d_union_semun='undef'"
4924 $ WC "d_unlink_all_versions='undef'"
4925 $ WC "d_ustat='undef'"
4926 $ WC "d_vendorarch='undef'"
4927 $ WC "d_vendorlib='undef'"
4928 $ WC "d_vfork='define'"
4929 $ WC "d_vms_case_sensitive_symbols='" + d_vms_be_case_sensitive + "'" ! VMS
4930 $ WC "d_vms_do_sockets='" + d_vms_do_sockets + "'" ! VMS
4931 $ WC "d_void_closedir='define'"
4932 $ WC "d_volatile='define'"
4933 $ WC "d_vprintf='define'"
4934 $ WC "d_wait4='" + d_wait4 + "'"
4935 $ WC "d_waitpid='define'"
4936 $ WC "d_wcstombs='" + d_wcstombs + "'"
4937 $ WC "d_wctomb='" + d_wctomb + "'"
4938 $ WC "d_writev='undef'"
4939 $ WC "db_hashtype=' '"
4940 $ WC "db_prefixtype=' '"
4941 $ WC "dbgprefix='" + dbgprefix + "'"
4942 $ WC "defvoidused='15'"
4943 $ WC "devtype='" + devtype + "'"
4944 $ WC "direntrytype='struct dirent'"
4945 $ WC "dlext='" + dlext + "'"
4946 $ WC "dlobj='" + dlobj + "'"
4947 $ WC "dlsrc='dl_vms.c'"
4948 $ WC "doublesize='" + doublesize + "'"
4949 $ WC "drand01='" + drand01 + "'"
4950 $ WC "dynamic_ext='" + extensions + "'"
4951 $ WC "eagain=' '"
4952 $ WC "ebcdic='undef'"
4953 $ WC "eunicefix=':'"
4954 $ WC "exe_ext='" + exe_ext + "'"
4955 $ WC "extensions='" + extensions + "'"
4956 $ WC "fflushNULL='define'"
4957 $ WC "fflushall='undef'"
4958 $ WC "fpostype='fpos_t'"
4959 $ WC "freetype='void'"
4960 $ WC "full_ar='" + "'"
4961 $ WC "full_csh='" + " '"
4962 $ WC "full_sed='_NLA0:'"
4963 $ WC "gccversion='" + gccversion + "'"
4964 $ WC "gidformat='lu'"
4965 $ WC "gidsign='1'"
4966 $ WC "gidsize='4'"
4967 $ WC "gidtype='" + gidtype + "'"
4968 $ WC "groupstype='Gid_t'"
4969 $ WC "hint='none'"
4970 $ WC "hintfile='" + "'"
4971 $ WC "i16size='" + i16size + "'"
4972 $ WC "i16type='" + i16type + "'"
4973 $ WC "i32size='" + i32size + "'"
4974 $ WC "i32type='" + i32type + "'"
4975 $ WC "i64size='" + i64size + "'"
4976 $ WC "i64type='" + i64type + "'"
4977 $ WC "i8size='" + i8size + "'"
4978 $ WC "i8type='" + i8type + "'"
4979 $ WC "i_arpainet='undef'"
4980 $ WC "i_dbm='undef'"
4981 $ WC "i_dirent='undef'"
4982 $ WC "i_dlfcn='undef'"
4983 $ WC "i_fcntl='" + i_fcntl + "'"
4984 $ WC "i_float='define'"
4985 $ WC "i_grp='undef'"
4986 $ WC "i_iconv='" + i_iconv +"'"
4987 $ WC "i_ieeefp='undef'"
4988 $ WC "i_inttypes='" + i_inttypes + "'"
4989 $ WC "i_libutil='" + i_libutil + "'"
4990 $ WC "i_limits='define'"
4991 $ WC "i_locale='" + i_locale + "'"
4992 $ WC "i_machcthr='undef'"
4993 $ WC "i_machcthreads='undef'"
4994 $ WC "i_math='define'"
4995 $ WC "i_memory='undef'"
4996 $ WC "i_mntent='undef'"
4997 $ WC "i_ndbm='undef'"
4998 $ WC "i_netdb='" + i_netdb + "'"
4999 $ WC "i_neterrno='define'"
5000 $ WC "i_netinettcp='" + i_netinettcp + "'"
5001 $ WC "i_niin='" + i_niin + "'"
5002 $ WC "i_poll='" + i_poll + "'"
5003 $ WC "i_prot='undef'"
5004 $ WC "i_pthread='define'"
5005 $ WC "i_pwd='undef'"
5006 $ WC "i_rpcsvcdbm='undef'"
5007 $ WC "i_sfio='undef'"
5008 $ WC "i_sgtty='undef'"
5009 $ WC "i_shadow='" + i_shadow + "'"
5010 $ WC "i_socks='" + i_socks + "'"
5011 $ WC "i_stdarg='define'"
5012 $ WC "i_stddef='define'"
5013 $ WC "i_stdlib='define'"
5014 $ WC "i_string='define'"
5015 $ WC "i_sunmath='undef'"
5016 $ WC "i_sysaccess='" + i_sysaccess + "'"
5017 $ WC "i_sysdir='undef'"
5018 $ WC "i_sysfile='" + i_sysfile + "'"
5019 $ WC "i_sysioctl='undef'"
5020 $ WC "i_syslog='" + i_syslog + "'"
5021 $ WC "i_sysmman='undef'"
5022 $ WC "i_sysmode='" + i_sysmode + "'"
5023 $ WC "i_sysmount='undef'"
5024 $ WC "i_sysndir='undef'"
5025 $ WC "i_sysparam='undef'"
5026 $ WC "i_sysresrc='undef'"
5027 $ WC "i_syssecrt='" + i_syssecrt + "'"
5028 $ WC "i_sysselct='undef'"
5029 $ WC "i_sysstat='define'"
5030 $ WC "i_sysstatfs='undef'"
5031 $ WC "i_sysstatvfs='undef'"
5032 $ WC "i_systime='undef'"
5033 $ WC "i_systimek='undef'"
5034 $ WC "i_systimes='undef'"
5035 $ WC "i_systypes='define'"
5036 $ WC "i_sysuio='" + i_sysuio + "'"
5037 $ WC "i_sysun='undef'"
5038 $ WC "i_sysutsname='" + i_sysutsname + "'"
5039 $ WC "i_sysvfs='undef'"
5040 $ WC "i_syswait='undef'"
5041 $ WC "i_termio='undef'"
5042 $ WC "i_termios='undef'"
5043 $ WC "i_time='define'"
5044 $ WC "i_unistd='" + i_unistd + "'"
5045 $ WC "i_ustat='undef'"
5046 $ WC "i_utime='undef'"
5047 $ WC "i_values='undef'"
5048 $ WC "i_varargs='undef'"
5049 $ WC "i_vfork='undef'"
5050 $ WC "inc_version_list='0'"
5051 $ WC "inc_version_list_init='0'"
5052 $ WC "installarchlib='" + installarchlib + "'"
5053 $ WC "installbin='" + installbin + "'"
5054 $ WC "installman1dir='" + installman1dir + "'"
5055 $ WC "installman3dir='" + installman3dir + "'"
5056 $ WC "installprivlib='" + installprivlib + "'"
5057 $ WC "installscript='" + installscript + "'"
5058 $ WC "installsitearch='" + installsitearch + "'"
5059 $ WC "installsitelib='" + installsitelib + "'"
5060 $ WC "installusrbinperl='undef'"
5061 $ WC "intsize='" + intsize + "'"
5062 $ WC "ivdformat='" + ivdformat + "'"
5063 $ WC "ivsize='" + ivsize + "'"
5064 $ WC "ivtype='" + ivtype + "'"
5065 $ WC "known_extensions='" + known_extensions + "'"
5066 $ WC "ld='" + ld + "'"
5067 $ WC "lddlflags='/Share'"
5068 $ WC "ldflags='/NoTrace/NoMap'"
5069 $ WC "lib_ext='" + lib_ext + "'"
5070 $ WC "libc='" + libc + "'"
5071 $ WC "libpth='/sys$share /sys$library'"
5072 $ WC "libs='" + libs + "'"
5073 $ WC "longdblsize='" + longdblsize + "'"
5074 $ WC "longlongsize='" + longlongsize + "'"
5075 $ WC "longsize='" + longsize + "'"
5076 $ WC "lseeksize='4'"
5077 $ WC "lseektype='int'"
5078 $ WC "mab='" + "'"
5079 $ WC "make='" + make + "'"
5080 $ WC "malloctype='void *'"
5081 $ WC "man1ext='rno'"
5082 $ WC "man3ext='rno'"
5083 $ WC "mmaptype=' " + "'"
5084 $ WC "modetype='unsigned int'"
5085 $ WC "multiarch='undef'"
5086 $ WC "mydomain='" + mydomain + "'"
5087 $ WC "myhostname='" + myhostname + "'"
5088 $ WC "myuname='" + myuname + "'"
5089 $ WC "netdb_hlen_type='" + netdb_hlen_type + "'"
5090 $ WC "netdb_host_type='" + netdb_host_type + "'"
5091 $ WC "netdb_name_type='" + netdb_name_type + "'"
5092 $ WC "netdb_net_type='" + netdb_net_type + "'"
5093 $ WC "nveformat='" + nveformat + "'"
5094 $ WC "nvfformat='" + nvfformat + "'"
5095 $ WC "nvgformat='" + nvgformat + "'"
5096 $ WC "nvsize='" + nvsize + "'"
5097 $ WC "nvtype='" + nvtype + "'"
5098 $ WC "o_nonblock=' '"
5099 $ WC "obj_ext='" + obj_ext + "'"
5100 $ WC "old_pthread_create_joinable='" + old_pthread_create_joinable + "'"
5101 $ WC "oldarchlib='" + oldarchlib + "'"
5102 $ WC "oldarchlibexp='" + oldarchlibexp + "'"
5103 $ WC "optimize='" + optimize + "'"
5104 $ WC "osname='" + osname + "'"
5105 $ WC "osvers='" + osvers + "'"
5106 $ WC "otherlibdirs='" + "'"
5107 $ WC "package='" + package + "'"
5108 $ WC "pager='" + pager + "'"
5109 $ WC "patchlevel='" + patchlevel + "'"
5110 $ WC "path_sep='|'"
5111 $ WC "perl_root='" + perl_root + "'" ! VMS specific $trnlnm()
5112 $ WC "perladmin='" + perladmin + "'"
5113 $ WC "perllibs='" + perllibs + "'"
5114 $ WC "pgflquota='" + pgflquota + "'"
5115 $ WC "pidtype='" + pidtype + "'"
5116 $ WC "pm_apiversion='" + version + "'"
5117 $! WC "prefix='" + vms_prefix + "'"
5118 $ WC "prefix='" + prefix + "'"
5119 $ WC "privlib='" + privlib + "'"
5120 $ WC "privlibexp='" + privlibexp + "'"
5121 $ WC "prototype='define'"
5122 $ WC "ptrsize='" + ptrsize + "'"
5123 $ WC "quadkind='" + quadkind + "'"
5124 $ WC "quadtype='" + quadtype + "'" 
5125 $ WC "randbits='31'"
5126 $ WC "randseedtype='" + randseedtype + "'"
5127 $ WC "ranlib='" + "'"
5128 $ WC "rd_nodata=' '"
5129 $ WC "revision='" + revision + "'"
5130 $ WC "sPRId64='" + sPRId64 + "'"
5131 $ WC "sPRIEldbl='" + sPRIEUldbl + "'"
5132 $ WC "sPRIFldbl='" + sPRIFUldbl + "'"
5133 $ WC "sPRIGldbl='" + sPRIGUldbl + "'"
5134 $ WC "sPRIX64='" + sPRIXU64 + "'"
5135 $ WC "sPRIeldbl='" + sPRIeldbl + "'"
5136 $ WC "sPRIfldbl='" + sPRIfldbl + "'"
5137 $ WC "sPRIgldbl='" + sPRIgldbl + "'"
5138 $! WC "sPRIi64='" + sPRIi64 + "'"
5139 $ WC "sPRIo64='" + sPRIo64 + "'"
5140 $ WC "sPRIu64='" + sPRIu64 + "'"
5141 $ WC "sPRIx64='" + sPRIx64 + "'"
5142 $ WC "sSCNfldbl='" + sSCNfldbl + "'"
5143 $ WC "sched_yield='" + sched_yield + "'"
5144 $ WC "seedfunc='" + seedfunc + "'"
5145 $ WC "selectminbits='32'"
5146 $ WC "selecttype='" + selecttype + "'"
5147 $ WC "sh='MCR'"
5148 $ WC "shmattype='" + "'"
5149 $ WC "shortsize='" + shortsize + "'"
5150 $ WC "shrplib='define'"
5151 $ WC "sig_name='" + sig_name + "'"
5152 $ tmp = "sig_name_init='" + sig_name_init + "'"
5153 $ WC/symbol tmp
5154 $ DELETE/SYMBOL tmp
5155 $ WC "sig_num='" + sig_num + "'"
5156 $ WC "sig_num_init='" + sig_num_init + "'"
5157 $ WC "signal_t='" + signal_t + "'"
5158 $ WC "sitearch='" + sitearch + "'"
5159 $ WC "sitearchexp='" + sitearchexp + "'"
5160 $ WC "sitelib='" + sitelib + "'"
5161 $ WC "sitelib_stem='" + sitelib_stem + "'"
5162 $ WC "sitelibexp='" + sitelibexp + "'"
5163 $ WC "sizesize='" + sizesize + "'"
5164 $ WC "sizetype='size_t'"
5165 $ WC "so='" + so + "'"
5166 $ WC "socksizetype='" + socksizetype + "'"
5167 $ WC "spitshell='write sys$output '"
5168 $ WC "src='" + src + "'"
5169 $ WC "ssizetype='int'"
5170 $ WC "startperl=" + startperl ! This one's special--no enclosing single quotes
5171 $ WC "static_ext='" + "'"
5172 $ WC "stdchar='" + stdchar + "'"
5173 $ WC "stdio_base='((*fp)->_base)'"
5174 $ WC "stdio_bufsiz='((*fp)->_cnt + (*fp)->_ptr - (*fp)->_base)'"
5175 $ WC "stdio_cnt='((*fp)->_cnt)'"
5176 $ WC "stdio_ptr='((*fp)->_ptr)'"
5177 $ WC "stdio_stream_array=' " + "'"
5178 $ WC "subversion='" + subversion + "'"
5179 $ WC "timetype='" + timetype + "'"
5180 $ WC "u16size='" + u16size + "'"
5181 $ WC "u16type='" + u16type + "'"
5182 $ WC "u32size='" + u32size + "'"
5183 $ WC "u32type='" + u32type + "'"
5184 $ WC "u64size='" + u64size + "'"
5185 $ WC "u64type='" + u64type + "'"
5186 $ WC "u8size='" + u8size + "'"
5187 $ WC "u8type='" + u8type + "'"
5188 $ WC "uidformat='lu'"
5189 $ WC "uidsign='1'"
5190 $ WC "uidsize='4'"
5191 $ WC "uidtype='" + uidtype + "'"
5192 $ WC "uquadtype='" + uquadtype + "'" 
5193 $ WC "use5005threads='" + use5005threads + "'"
5194 $ WC "use64bitall='" + use64bitall + "'"
5195 $ WC "use64bitint='" + use64bitint + "'"
5196 $ WC "usedl='" + usedl + "'"
5197 $ WC "useithreads='" + useithreads + "'"
5198 $ WC "uselargefiles='" + uselargefiles + "'"
5199 $ WC "uselongdouble='" + uselongdouble + "'"
5200 $ WC "usemorebits='" + usemorebits + "'"
5201 $ WC "usemultiplicity='" + usemultiplicity + "'"
5202 $ WC "usemymalloc='" + usemymalloc + "'"
5203 $ WC "useperlio='undef'"
5204 $ WC "useposix='false'"
5205 $ WC "usesocks='undef'"
5206 $ WC "usethreads='" + usethreads + "'"
5207 $ WC "usevfork='true'"
5208 $ WC "uvoformat='" + uvoformat + "'"
5209 $ WC "uvsize='" + uvsize + "'"
5210 $ WC "uvtype='" + uvtype + "'"
5211 $ WC "uvuformat='" + uvuformat + "'"
5212 $ WC "uvxformat='" + uvxformat + "'"
5213 $ WC "vendorarchexp='" + "'"
5214 $ WC "vendorlib_stem='" + "'"
5215 $ WC "vendorlibexp='" + "'"
5216 $ WC "version='" + version + "'"
5217 $ WC "vms_cc_type='" + vms_cc_type + "'" ! VMS specific
5218 $ WC "vms_prefix='" + vms_prefix + "'" ! VMS specific
5219 $ WC "vms_ver='" + vms_ver + "'" ! VMS specific
5220 $ WC "voidflags='15'"
5221 $ WC "xs_apiversion='" + version + "'"
5222 $ WC "CONFIGDOTSH='true'"
5223 $!
5224 $! ##END WRITE NEW CONSTANTS HERE##
5225 $!
5226 $ CLOSE CONFIG
5227 $!
5228 $! Okay, we've gotten here. Build munchconfig.exe
5229 $ COPY/NOLOG [-.vms]munchconfig.c []
5230 $ COPY/NOLOG [-.vms]'Makefile_SH []
5231 $ 'Perl_CC' munchconfig.c
5232 $ IF Needs_Opt
5233 $ THEN
5234 $   OPEN/WRITE CONFIG []munchconfig.opt
5235 $   IF Using_Gnu_C
5236 $   THEN
5237 $     WRITE CONFIG "Gnu_CC:[000000]gcclib.olb/library"
5238 $   ENDIF
5239 $   WRITE CONFIG "Sys$Share:VAXCRTL/Share"
5240 $   CLOSE CONFIG
5241 $   'ld' munchconfig.obj,munchconfig.opt/opt
5242 $   DELETE/NOLOG/NOCONFIRM munchconfig.opt;
5243 $ ELSE
5244 $   'ld' munchconfig.obj
5245 $ ENDIF
5246 $ IF F$SEARCH("munchconfig.obj") .NES. "" THEN DELETE/NOLOG/NOCONFIRM munchconfig.obj;
5247 $ IF F$SEARCH("munchconfig.c") .NES. "" THEN DELETE/NOLOG/NOCONFIRM munchconfig.c;
5248 $ IF using_cxx
5249 $ THEN
5250 $   CALL Cxx_demangler_cleanup
5251 $ ENDIF
5252 $!
5253 $ IF alldone .EQS. ""
5254 $ THEN
5255 $   cat4 SYS$INPUT:
5256
5257 If you'd like to make any changes to the config.sh file before I begin
5258 to configure things, answer yes to the following question.
5259
5260 $   dflt="n"
5261 $   rp="Do you wish to edit ''basename_config_sh'? [''dflt'] "
5262 $   GOSUB myread
5263 $   IF ans .EQS. "" then ans = dflt
5264 $   IF ans
5265 $   THEN
5266 $     echo4 ""
5267 $     echo4 "Be sure to type LOGOUT after you have edited the file,"
5268 $     echo4 "then this procedure will resume."
5269 $     echo4 ""
5270 $     default = F$ENVIRONMENT("DEFAULT")
5271 $     DIRECTORY 'config_sh
5272 $     SET DEFAULT [-]
5273 $     SPAWN/WAIT
5274 $     SET DEFAULT 'default
5275 $   ENDIF
5276 $ ENDIF
5277 $!
5278 $ echo ""
5279 $ echo4 "Adding ''osname' specific preprocessor commands."
5280 $ !
5281 $ ! we need an fdl file
5282 $ CREATE [-]CONFIG.FDL
5283 RECORD
5284   FORMAT STREAM_LF
5285 $ CREATE /FDL=[-]CONFIG.FDL [-]CONFIG.LOCAL
5286 $ ! First spit out the header info with the local defines (to get
5287 $ ! around the 255 character command line limit)
5288 $ OPEN/APPEND CONFIG [-]config.local
5289 $ IF use_debugging_perl THEN WC "#define DEBUGGING"
5290 $ IF use_two_pot_malloc THEN WC "#define TWO_POT_OPTIMIZE"
5291 $ IF mymalloc THEN WC "#define EMBEDMYMALLOC"
5292 $ IF use_pack_malloc THEN WC "#define PACK_MALLOC"
5293 $ IF use_debugmalloc THEN WC "#define DEBUGGING_MSTATS"
5294 $ IF Using_Gnu_C THEN WC "#define GNUC_ATTRIBUTE_CHECK"
5295 $ IF (Has_Dec_C_Sockets)
5296 $ THEN
5297 $    WC "#define VMS_DO_SOCKETS"
5298 $    WC "#define DECCRTL_SOCKETS"
5299 $ ELSE
5300 $    IF Has_Socketshr THEN WC "#define VMS_DO_SOCKETS"
5301 $ ENDIF
5302 $! This is VMS-specific for now
5303 $ WC "#''d_setenv' HAS_SETENV"
5304 $ IF d_secintgenv THEN WC "#define SECURE_INTERNAL_GETENV"
5305 $ IF d_alwdeftype THEN WC "#define ALWAYS_DEFTYPES"
5306 $ IF use64bitint .OR. use64bitint .EQS. "define"
5307 $ THEN
5308 $   WC "#define USE_64_BIT_INT"
5309 $   WC "#define USE_LONG_DOUBLE"
5310 $ ENDIF
5311 $ IF use64bitall .OR. use64bitall .EQS. "define" THEN -
5312     WC "#define USE_64_BIT_ALL"
5313 $ IF be_case_sensitive THEN WC "#define VMS_WE_ARE_CASE_SENSITIVE"
5314 $ IF d_herrno .EQS. "undef" THEN WC "#define NEED_AN_H_ERRNO"
5315 $ WC "#define HAS_ENVGETENV"
5316 $ WC "#define PERL_EXTERNAL_GLOB"
5317 $ CLOSE CONFIG
5318 $!
5319 $ echo4 "Doing variable substitutions on .SH files..."
5320 $ echo4 "Extracting config.h (with variable substitutions)"
5321 $!
5322 $! Now build the normal config.h
5323 $ DEFINE/USER_MODE sys$output [-]config.main
5324 $ mcr []munchconfig 'config_sh [-]config_h.sh
5325 $ ! Concatenate them together
5326 $ copy [-]config.local,[-]config.main [-]config.h
5327 $! Clean up
5328 $ DELETE/NOLOG [-]CONFIG.MAIN;*
5329 $ DELETE/NOLOG [-]CONFIG.LOCAL;*
5330 $ DELETE/NOLOG [-]CONFIG.FDL;*
5331 $!
5332 $ IF Using_Dec_C
5333 $ THEN
5334 $   DECC_REPLACE = "DECC=decc=1"
5335 $ ELSE
5336 $   DECC_REPLACE = "DECC=" 
5337 $ ENDIF
5338 $ IF Using_Gnu_C
5339 $ THEN
5340 $   GNUC_REPLACE = "GNUC=gnuc=1"
5341 $ ELSE
5342 $   GNUC_REPLACE = "GNUC=" 
5343 $ ENDIF
5344 $ IF Has_Dec_C_Sockets
5345 $ THEN
5346 $   SOCKET_REPLACE = "SOCKET=DECC_SOCKETS=1"
5347 $ ELSE
5348 $   IF Has_Socketshr
5349 $   THEN
5350 $     SOCKET_REPLACE = "SOCKET=SOCKETSHR_SOCKETS=1"
5351 $   ELSE
5352 $     SOCKET_REPLACE = "SOCKET="
5353 $   ENDIF
5354 $ ENDIF
5355 $ IF Use_Threads
5356 $ THEN
5357 $   IF (vms_ver .LES. "6.2")
5358 $   THEN
5359 $     THREAD_REPLACE = "THREAD=OLDTHREADED=1"
5360 $   ELSE
5361 $     THREAD_REPLACE = "THREAD=THREADED=1"
5362 $   ENDIF
5363 $ ELSE
5364 $   THREAD_REPLACE = "THREAD="
5365 $ ENDIF
5366 $ IF mymalloc
5367 $ THEN
5368 $   MALLOC_REPLACE = "MALLOC=MALLOC=1"
5369 $ ELSE
5370 $   MALLOC_REPLACE = "MALLOC="
5371 $ ENDIF
5372 $ echo4 "Extracting ''defmakefile' (with variable substitutions)"
5373 $ DEFINE/USER_MODE sys$output 'UUmakefile 
5374 $ mcr []munchconfig 'config_sh 'Makefile_SH "''DECC_REPLACE'" "''ARCH_TYPE'" "''GNUC_REPLACE'" "''SOCKET_REPLACE'" "''THREAD_REPLACE'" -
5375 "''C_Compiler_Replace'" "''MALLOC_REPLACE'" "''Thread_Live_Dangerously'" "PV=''version'" "FLAGS=FLAGS=''extra_flags'"
5376 $ echo4 "Extracting Build_Ext.Com (without variable substitutions)"
5377 $ Create Sys$Disk:[-]Build_Ext.Com
5378 $ Deck/Dollar="$EndOfTpl$"
5379 $!++ Build_Ext.Com
5380 $!   NOTE: This file is extracted as part of the VMS configuration process.
5381 $!   Any changes made to it directly will be lost.  If you need to make any
5382 $!   changes, please edit the template in Configure.Com instead.
5383 $    def = F$Environment("Default")
5384 $    exts1 = F$Edit(p1,"Compress")
5385 $    p2 = F$Edit(p2,"Upcase,Compress,Trim")
5386 $    If F$Locate("MCR ",p2).eq.0 Then p2 = F$Extract(3,255,p2)
5387 $    miniperl = "$" + F$Search(F$Parse(p2,".Exe"))
5388 $    makeutil = p3
5389 $    if f$type('p3') .nes. "" then makeutil = 'p3'
5390 $    targ = F$Edit(p4,"Lowercase")
5391 $    i = 0
5392 $ next_ext:
5393 $    ext = F$Element(i," ",p1)
5394 $    If ext .eqs. " " Then Goto done
5395 $    Define/User_mode Perl_Env_Tables CLISYM_LOCAL
5396 $    miniperl
5397      ($extdir = $ENV{'ext'}) =~ s/::/./g;
5398      $extdir =~ s#/#.#g;
5399      if ($extdir =~ /^vms/i) { $extdir =~ s/vms/.vms.ext/i; }
5400      else                    { $extdir = ".ext.$extdir";   }
5401      ($ENV{'extdir'} = "[$extdir]");
5402      ($ENV{'up'} = ('-') x ($extdir =~ tr/././));
5403 $    Set Default &extdir
5404 $    redesc = 0
5405 $    If F$Locate("clean",targ) .eqs. F$Length(targ)
5406 $    Then
5407 $      Write Sys$Output "Building ''ext' . . ."
5408 $      On Error Then Goto done
5409 $      If F$Search("Descrip.MMS") .eqs. ""
5410 $      Then
5411 $        redesc = 1
5412 $      Else
5413 $        If F$CvTime(F$File("Descrip.MMS","rdt")) .lts. -
5414             F$CvTime(F$File("Makefile.PL","rdt")) Then redesc = 1
5415 $      EndIf
5416 $    Else
5417 $      Write Sys$Output "''targ'ing ''ext' . . ."
5418 $      On Error Then Continue
5419 $    EndIf
5420 $    If redesc Then -
5421        miniperl "-I[''up'.lib]" Makefile.PL "INST_LIB=[''up'.lib]" "INST_ARCHLIB=[''up'.lib]"
5422 $    makeutil 'targ'
5423 $    i = i + 1
5424 $    Set Def &def
5425 $    Goto next_ext
5426 $ done:
5427 $    sts = $Status
5428 $    Set Def &def
5429 $    Exit sts
5430 $!-- Build_Ext.Com
5431 $EndOfTpl$
5432 $!
5433 $! Clean up after ourselves
5434 $ DELETE/NOLOG/NOCONFIRM []munchconfig.exe;
5435 $!
5436 $!  Warn of dangerous symbols or logical names
5437 $!
5438 $Bad_environment: SUBROUTINE
5439 $   Bad_env = ""
5440 $   IF p2 .eqs. "SYMBOL"
5441 $   THEN
5442 $     IF f$type('p1) .nes. "" THEN  Bad_env := SYMBOL
5443 $   ELSE
5444 $     IF f$trnlnm(p1) .nes. "" THEN Bad_env := LOGICAL
5445 $   ENDIF
5446 $   IF Bad_env .eqs. "SYMBOL" .or. Bad_env .eqs. "LOGICAL"
5447 $   THEN
5448 $     IF f$search("config.msg") .nes. ""
5449 $     THEN
5450 $       OPEN/APPEND CONFIG config.msg
5451 $     ELSE
5452 $       OPEN/WRITE CONFIG config.msg
5453 $     ENDIF
5454 $     IF Bad_env .eqs. "SYMBOL"
5455 $     THEN
5456 $       WRITE CONFIG ""
5457 $       WRITE CONFIG "Symbol name ''p1' found in environment as " + &p1
5458 $       WRITE CONFIG " delete before building ''package' via:"
5459 $       WRITE CONFIG "     $ DELETE/SYMBOL/GLOBAL ''p1'"
5460 $       IF f$locate("""",&p1) .ge. f$length(&p1)
5461 $       THEN
5462 $       WRITE CONFIG " after building, testing, and installing ''package'
5463 $       WRITE CONFIG " restore the symbol with:"
5464 $       WRITE CONFIG "     $ ''p1' == """ + &p1 + """"
5465 $       ENDIF
5466 $     ENDIF
5467 $     IF Bad_env .eqs. "LOGICAL"
5468 $     THEN
5469 $       WRITE CONFIG ""
5470 $       WRITE CONFIG "Logical name ''p1' found in environment as " + f$trnlnm(p1)
5471 $       WRITE CONFIG " deassign before building ''package'"
5472 $     ENDIF
5473 $     CLOSE CONFIG
5474 $     Bad_env = ""
5475 $   ENDIF
5476 $ EXIT
5477 $ ENDSUBROUTINE ! Bad_environment
5478 $ echo ""
5479 $ echo4 "Checking for dangerous pre-existing global symbols and logical names."
5480 $ CALL Bad_environment "TMP"
5481 $ CALL Bad_environment "LIB"
5482 $ CALL Bad_environment "T"
5483 $ CALL Bad_environment "FOO"
5484 $ CALL Bad_environment "EXT"
5485 $ CALL Bad_environment "TEST" "SYMBOL"
5486 $ IF f$search("config.msg") .eqs. "" THEN echo "OK."
5487 $!
5488 $! %Config-I-VMS, write perl_setup.com here
5489 $!
5490 $ IF (.NOT.perl_symbol)
5491 $ THEN
5492 $   file_2_find = "[-]''packageup'.cld"
5493 $   echo ""
5494 $   echo4 "The perl.cld file is now being written..."
5495 $   OPEN/WRITE CONFIG 'file_2_find'
5496 $   ext = ".exe"
5497 $   IF ((sharedperl) .AND. (F$GETSYI("HW_MODEL") .GE. 1024)) THEN ext := .AXE
5498 $   IF (use_vmsdebug_perl)
5499 $   THEN
5500 $     WRITE CONFIG "define verb dbgperl"
5501 $     WRITE CONFIG F$FAO("!_!AS","image ''vms_prefix':[000000]dbgperl''ext'")
5502 $     WRITE CONFIG F$FAO("!_!AS","cliflags (foreign)")
5503 $     WRITE CONFIG ""
5504 $     WRITE CONFIG "define verb perl"
5505 $     WRITE CONFIG F$FAO("!_!AS","image ''vms_prefix':[000000]ndbgPerl''ext'")
5506 $     WRITE CONFIG F$FAO("!_!AS","cliflags (foreign)")
5507 $   ELSE
5508 $     WRITE CONFIG "define verb perl"
5509 $     WRITE CONFIG F$FAO("!_!AS","image ''vms_prefix':[000000]perl''ext'")
5510 $     WRITE CONFIG F$FAO("!_!AS","cliflags (foreign)")
5511 $   ENDIF
5512 $   CLOSE CONFIG
5513 $ ENDIF ! (.NOT.perl_symbol)
5514 $ echo ""
5515 $ echo4 "The perl_setup.com file is now being written..."
5516 $ file_2_find = "[-]perl_setup.com"
5517 $ OPEN/WRITE CONFIG 'file_2_find'
5518 $ WRITE CONFIG "$!"
5519 $ WRITE CONFIG "$! Perl_Setup.com    ''cf_time'"
5520 $ IF cf_email.NES.perladmin
5521 $ THEN
5522 $ WRITE CONFIG "$! perl configured by ''cf_email'"
5523 $ ELSE
5524 $ WRITE CONFIG "$! This perl configured & administered by ''perladmin'"
5525 $ ENDIF
5526 $ WRITE CONFIG "$!"
5527 $ prefix = prefix - "000000."
5528 $ IF F$LOCATE(".]",prefix) .EQ. F$LENGTH(prefix) THEN -
5529     prefix = prefix - "]" + ".]" 
5530 $ WRITE CONFIG "$ define/translation=concealed ''vms_prefix' ''prefix'"
5531 $ WRITE CONFIG "$ ext = "".exe"""
5532 $ IF sharedperl
5533 $ THEN
5534 $   write config "$ if f$getsyi(""HW_MODEL"") .ge. 1024 then ext = "".AXE"""
5535 $ ENDIF
5536 $ IF (perl_symbol)
5537 $ THEN
5538 $   IF (use_vmsdebug_perl)
5539 $   THEN
5540 $     WRITE CONFIG "$ dbgperl :== $''vms_prefix':[000000]dbgPerl'ext'"
5541 $     WRITE CONFIG "$ perl    :== $''vms_prefix':[000000]ndbgPerl'ext'"
5542 $     WRITE CONFIG "$ define dbgPerlShr ''vms_prefix':[000000]dbgPerlShr'ext'"
5543 $   ELSE
5544 $     WRITE CONFIG "$ perl :== $''vms_prefix':[000000]Perl'ext'"
5545 $     WRITE CONFIG "$ define PerlShr ''vms_prefix':[000000]PerlShr'ext'"
5546 $   ENDIF
5547 $ ELSE ! .NOT.perl_symbol
5548 $   IF (use_vmsdebug_perl)
5549 $   THEN
5550 $     WRITE CONFIG "$ define dbgPerlShr ''vms_prefix':[000000]dbgPerlShr'ext'"
5551 $   ELSE
5552 $     WRITE CONFIG "$ define PerlShr ''vms_prefix':[000000]PerlShr'ext'"
5553 $   ENDIF
5554 $   IF perl_verb .EQS. "PROCESS"
5555 $   THEN
5556 $     WRITE CONFIG "$ set command ''vms_prefix':[000000]''packageup'.CLD"
5557 $   ENDIF
5558 $ ENDIF !  perl_symbol
5559 $ WRITE CONFIG "$ define/nolog pod2text ''vms_prefix':[lib.pod]pod2text.com"
5560 $ WRITE CONFIG "$ define/nolog pod2html ''vms_prefix':[lib.pod]pod2html.com"
5561 $ WRITE CONFIG "$ define/nolog pod2man  ''vms_prefix':[lib.pod]pod2man.com"
5562 $!
5563 $ IF (tzneedset)
5564 $ THEN
5565 $ WRITE CONFIG "$ define SYS$TIMEZONE_DIFFERENTIAL ''tzd'"
5566 $ ELSE    !leave in but commented out (in case setting was from perl :-)
5567 $ WRITE CONFIG "$! define SYS$TIMEZONE_DIFFERENTIAL ''tzd'"
5568 $ ENDIF
5569 $ WRITE CONFIG "$!"
5570 $ WRITE CONFIG "$! Symbols for commonly used scripts:"
5571 $ WRITE CONFIG "$!"
5572 $ IF (perl_symbol)
5573 $ THEN
5574 $   WRITE CONFIG "$ Perldoc  == ""'"+"'Perl' ''vms_prefix':[lib.pod]Perldoc.com -t"""
5575 $   WRITE CONFIG "$ pod2text == ""'"+"'Perl' pod2text"""
5576 $   WRITE CONFIG "$ pod2html == ""'"+"'Perl' pod2html"""
5577 $   WRITE CONFIG "$ pod2latex == ""'"+"'Perl' ''vms_prefix':[lib.pod]pod2latex.com"""
5578 $   WRITE CONFIG "$!pod2man  == ""'"+"'Perl' pod2man"""
5579 $   WRITE CONFIG "$!Perlbug  == ""'"+"'Perl' ''vms_prefix':[lib]Perlbug.com"""
5580 $   WRITE CONFIG "$ c2ph     == ""'"+"'Perl' ''vms_prefix':[utils]c2ph.com"""
5581 $   IF F$LOCATE("Devel::DProf",extensions) .LT. F$LENGTH(extensions)
5582 $   THEN
5583 $     WRITE CONFIG "$ dprofpp     == ""'"+"'Perl' ''vms_prefix':[utils]dprofpp.com"""
5584 $   ENDIF 
5585 $   WRITE CONFIG "$ h2ph     == ""'"+"'Perl' ''vms_prefix':[utils]h2ph.com"""
5586 $   WRITE CONFIG "$ h2xs     == ""'"+"'Perl' ''vms_prefix':[utils]h2xs.com"""
5587 $   WRITE CONFIG "$!perlcc   == ""'"+"'Perl' ''vms_prefix':[utils]perlcc.com"""
5588 $   WRITE CONFIG "$ splain   == ""'"+"'Perl' ''vms_prefix':[utils]splain.com"""
5589 $ ELSE
5590 $   WRITE CONFIG "$ Perldoc  == ""Perl ''vms_prefix':[lib.pod]Perldoc.com -t"""
5591 $   WRITE CONFIG "$ pod2text == ""Perl pod2text"""
5592 $   WRITE CONFIG "$ pod2html == ""Perl pod2html"""
5593 $   WRITE CONFIG "$ pod2latex == ""Perl ''vms_prefix':[lib.pod]pod2latex.com"""
5594 $   WRITE CONFIG "$!pod2man  == ""Perl pod2man"""
5595 $   WRITE CONFIG "$!Perlbug  == ""Perl ''vms_prefix':[lib]Perlbug.com"""
5596 $   WRITE CONFIG "$ c2ph     == ""Perl ''vms_prefix':[utils]c2ph.com"""
5597 $   IF F$LOCATE("Devel::DProf",extensions) .LT. F$LENGTH(extensions)
5598 $   THEN
5599 $     WRITE CONFIG "$ dprofpp     == ""Perl ''vms_prefix':[utils]dprofpp.com"""
5600 $   ENDIF 
5601 $   WRITE CONFIG "$ h2ph     == ""Perl ''vms_prefix':[utils]h2ph.com"""
5602 $   WRITE CONFIG "$ h2xs     == ""Perl ''vms_prefix':[utils]h2xs.com"""
5603 $   WRITE CONFIG "$!perlcc   == ""Perl ''vms_prefix':[utils]perlcc.com"""
5604 $   WRITE CONFIG "$ splain   == ""Perl ''vms_prefix':[utils]splain.com"""
5605 $ ENDIF
5606 $ CLOSE CONFIG
5607 $!
5608 $ echo  ""
5609 $ echo  "The file can be found at:"
5610 $ echo4 "    ''F$SEARCH(file_2_find)'"
5611 $ echo  "Add that file (or an @ call to it) to your [SY]LOGIN.COM"
5612 $ echo  "when you are satisfied with a successful compilation,"
5613 $ echo  "testing, and installation of your perl."
5614 $ echo  ""
5615 $ IF ((.NOT.perl_symbol) .AND. (perl_verb .EQS. "DCLTABLES"))
5616 $ THEN
5617 $   file_2_find = "[-]''packageup'_install.com"
5618 $   OPEN/WRITE CONFIG 'file_2_find
5619 $   WRITE CONFIG "$ set command perl /table=sys$common:[syslib]dcltables.exe -"
5620 $   WRITE CONFIG "    /output=sys$common:[syslib]dcltables.exe"
5621 $   WRITE CONFIG "$ install replace sys$common:[syslib]dcltables.exe"
5622 $   CLOSE CONFIG
5623 $   echo4 ""
5624 $   echo4 "In order to install the ''packageup' verb into DCLTABLES run:"
5625 $   echo4 "    @ ''F$SEARCH(file_2_find)'"
5626 $   echo4 "after a successful build, test, and install.  Do so with CMKRNL privilege."
5627 $   echo4 ""
5628 $ ENDIF
5629 $!
5630 $!figure out where we "are" by parsing 'vms_default_directory_name' 
5631 $!
5632 $ set_def_command = ""
5633 $ dflt = F$ENVIRONMENT("DEFAULT") - ".UU]" 
5634 $ tmp = vms_default_directory_name - dflt - "]"
5635 $ i = 0
5636 $ IF tmp .EQS. "" THEN GOTO Beyond_set_def_loop
5637 $Set_def_loop:
5638 $ tmp1 = F$ELEMENT(i,".",tmp)
5639 $ IF tmp1 .EQS. "." THEN GOTO Beyond_set_def_loop
5640 $ IF i .EQ. 0 
5641 $ THEN set_def_command = "set default [-"
5642 $ ELSE set_def_command = set_def_command + "-"
5643 $ ENDIF
5644 $ i = i + 1
5645 $ GOTO Set_def_loop
5646 $Beyond_set_def_loop:
5647 $ IF set_def_command.NES.""
5648 $ THEN
5649 $   set_def_command = set_def_command - "-" + "]"
5650 $   echo4 ""
5651 $   echo4 "In order to build ''package' you must now issue the commands:"
5652 $   echo4 ""
5653 $   echo4 " ''set_def_command'"
5654 $ ELSE
5655 $   echo4 ""
5656 $   echo4 "In order to build ''package' you must now issue the command:"
5657 $   echo4 ""
5658 $ ENDIF
5659 $ echo4 " ''make'''makefile'", macros
5660 $ echo4 ""
5661 $!
5662 $ IF ( F$SEARCH("config.msg").NES."" ) 
5663 $ THEN
5664 $   echo "Hmm.  I also noted the following information while running:"
5665 $   echo ""
5666 $   type config.msg
5667 $   SET PROTECTION=(SYSTEM:RWED,OWNER:RWED) config.msg
5668 $   DELETE/NOLOG/NOCONFIRM config.msg;
5669 $ ENDIF
5670 $!
5671 $Clean_up:
5672 $ IF (silent)
5673 $ THEN
5674 $   DEASSIGN SYS$OUTPUT
5675 $!   DEASSIGN SYS$ERROR
5676 $ ENDIF
5677 $ IF F$GETJPI("","FILCNT").NE.vms_filcnt THEN CLOSE CONFIG
5678 $ IF F$GETJPI("","FILCNT").NE.vms_filcnt 
5679 $ THEN WRITE SYS$ERROR "%Config-W-VMS, WARNING: There is a file still open"
5680 $ ENDIF
5681 $ dflt = F$ENVIRONMENT("DEFAULT")
5682 $ IF F$LOCATE("UU]",dflt).EQS.(F$LENGTH(dflt)-3)
5683 $ THEN
5684 $   IF ( F$SEARCH("[]*.*").NES."" ) THEN DELETE/NOLOG/NOCONFIRM []*.*;*
5685 $   SET DEFAULT [-]
5686 $   SET PROTECTION=(SYSTEM:RWED,OWNER:RWED) UU.DIR
5687 $   DELETE/NOLOG/NOCONFIRM UU.DIR;
5688 $ ENDIF
5689 $ SET DEFAULT 'vms_default_directory_name' !be kind rewind
5690 $ STOP
5691 $ EXIT
5692 $!: End of Configure