5c0f48d8315621527a65f6d759c4050d1e95e0c7
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc so you may fetch it yourself from your nearest
18 # archive site. Check with Archie if you don't know where that can be.)
19 #
20
21 # $Id: Head.U,v 3.0.1.8 1995/07/25 13:40:02 ram Exp $
22 #
23 # Generated on Thu Oct 10 15:08:34 EDT 1996 [metaconfig 3.0 PL60]
24
25 cat >/tmp/c1$$ <<EOF
26 ARGGGHHHH!!!!!
27
28 SCO csh still thinks true is false.  Write to SCO today and tell them that next
29 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
30
31 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
32 we'd have to do is go in and swap the && and || tokens, wherever they are.)
33
34 [End of diatribe. We now return you to your regularly scheduled programming...]
35 EOF
36 cat >/tmp/c2$$ <<EOF
37
38 OOPS!  You naughty creature!  You didn't run Configure with sh!
39 I will attempt to remedy the situation by running sh for you...
40 EOF
41
42 true || cat /tmp/c1$$ /tmp/c2$$
43 true || exec sh $0 $argv:q
44
45 (exit $?0) || cat /tmp/c2$$
46 (exit $?0) || exec sh $0 $argv:q
47 rm -f /tmp/c1$$ /tmp/c2$$
48
49 : compute my invocation name
50 me=$0
51 case "$0" in
52 */*)
53         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
54         test "$me" || me=$0
55         ;;
56 esac
57
58 : Proper PATH separator
59 p_=:
60 : On OS/2 this directory should exist if this is not floppy only system :-]
61 if test -d c:/. -a -n "$OS2_SHELL"; then
62         p_=\;
63         PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
64         OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
65 fi
66
67 : Proper PATH setting
68 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
69 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
70 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
71 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
72 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
73 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
74 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
75 paths="$paths /sbin /usr/sbin /usr/libexec"
76
77 for p in $paths
78 do
79         case "$p_$PATH$p_" in
80         *$p_$p$p_*) ;;
81         *) test -d $p && PATH=$PATH$p_$p ;;
82         esac
83 done
84
85 PATH=.$p_$PATH
86 export PATH
87
88 : Sanity checks
89 if test ! -t 0; then
90         echo "Say 'sh $me', not 'sh <$me'"
91         exit 1
92 fi
93
94 : On HP-UX, large Configure scripts may exercise a bug in /bin/sh
95 if test -f /hp-ux -a -f /bin/ksh; then
96         if (PATH=.; alias -x) >/dev/null 2>&1; then
97                 : already under /bin/ksh
98         else
99                 cat <<'EOM'
100 (Feeding myself to ksh to avoid nasty sh bug in "here document" expansion.)
101 EOM
102                 unset ENV
103                 exec /bin/ksh $0 "$@"
104         fi
105 else
106         : Warn them if they use ksh on other systems
107         (PATH=.; alias -x) >/dev/null 2>&1 && \
108                 cat <<EOM
109 (I see you are using the Korn shell.  Some ksh's blow up on $me,
110 especially on older exotic systems.  If yours does, try the Bourne 
111 shell instead.)
112 EOM
113 fi
114
115 : Configure runs within the UU subdirectory
116 test -d UU || mkdir UU
117 cd UU && rm -f ./*
118
119 dynamic_ext=''
120 extensions=''
121 known_extensions=''
122 static_ext=''
123 useopcode=''
124 useposix=''
125 d_bsd=''
126 d_eunice=''
127 d_xenix=''
128 eunicefix=''
129 Mcc=''
130 awk=''
131 bash=''
132 bison=''
133 byacc=''
134 cat=''
135 chgrp=''
136 chmod=''
137 chown=''
138 comm=''
139 compress=''
140 cp=''
141 cpio=''
142 cpp=''
143 csh=''
144 date=''
145 echo=''
146 egrep=''
147 emacs=''
148 expr=''
149 find=''
150 flex=''
151 gcc=''
152 grep=''
153 gzip=''
154 inews=''
155 ksh=''
156 less=''
157 line=''
158 lint=''
159 ln=''
160 lp=''
161 lpr=''
162 ls=''
163 mail=''
164 mailx=''
165 mkdir=''
166 more=''
167 mv=''
168 nroff=''
169 perl=''
170 pg=''
171 pmake=''
172 pr=''
173 rm=''
174 rmail=''
175 sed=''
176 sendmail=''
177 shar=''
178 sleep=''
179 smail=''
180 sort=''
181 submit=''
182 tail=''
183 tar=''
184 tbl=''
185 test=''
186 touch=''
187 tr=''
188 troff=''
189 uname=''
190 uniq=''
191 uuname=''
192 vi=''
193 zcat=''
194 zip=''
195 full_sed=''
196 libswanted=''
197 hint=''
198 myuname=''
199 osname=''
200 osvers=''
201 Author=''
202 Date=''
203 Header=''
204 Id=''
205 Locker=''
206 Log=''
207 RCSfile=''
208 Revision=''
209 Source=''
210 State=''
211 ar=''
212 archobjs=''
213 exe_ext=''
214 firstmakefile=''
215 lib_ext=''
216 obj_ext=''
217 path_sep=''
218 afs=''
219 alignbytes=''
220 archlib=''
221 archlibexp=''
222 d_archlib=''
223 installarchlib=''
224 archname=''
225 myarchname=''
226 baserev=''
227 bin=''
228 binexp=''
229 installbin=''
230 byteorder=''
231 cc=''
232 gccversion=''
233 ccflags=''
234 cppflags=''
235 ldflags=''
236 lkflags=''
237 locincpth=''
238 optimize=''
239 cf_email=''
240 cf_by=''
241 cf_time=''
242 contains=''
243 cpp_stuff=''
244 cpplast=''
245 cppminus=''
246 cpprun=''
247 cppstdin=''
248 d_access=''
249 d_alarm=''
250 d_attribut=''
251 d_bcmp=''
252 d_bcopy=''
253 d_bzero=''
254 d_casti32=''
255 castflags=''
256 d_castneg=''
257 d_chown=''
258 d_chroot=''
259 d_chsize=''
260 d_closedir=''
261 d_void_closedir=''
262 d_const=''
263 cryptlib=''
264 d_crypt=''
265 d_csh=''
266 full_csh=''
267 d_cuserid=''
268 d_dbl_dig=''
269 d_difftime=''
270 d_dlerror=''
271 d_dlopen=''
272 d_dlsymun=''
273 d_dosuid=''
274 d_suidsafe=''
275 d_dup2=''
276 d_fchmod=''
277 d_fchown=''
278 d_fcntl=''
279 d_fd_macros=''
280 d_fd_set=''
281 d_fds_bits=''
282 d_fgetpos=''
283 d_flexfnam=''
284 d_flock=''
285 d_fork=''
286 d_fsetpos=''
287 d_Gconvert=''
288 d_getgrps=''
289 d_gethent=''
290 aphostname=''
291 d_gethname=''
292 d_phostname=''
293 d_uname=''
294 d_getlogin=''
295 d_getpgid=''
296 d_getpgrp2=''
297 d_bsdgetpgrp=''
298 d_getpgrp=''
299 d_getppid=''
300 d_getprior=''
301 d_gnulibc=''
302 d_htonl=''
303 d_isascii=''
304 d_killpg=''
305 d_link=''
306 d_locconv=''
307 d_lockf=''
308 d_lstat=''
309 d_mblen=''
310 d_mbstowcs=''
311 d_mbtowc=''
312 d_memcmp=''
313 d_memcpy=''
314 d_memmove=''
315 d_memset=''
316 d_mkdir=''
317 d_mkfifo=''
318 d_mktime=''
319 d_msg=''
320 d_msgctl=''
321 d_msgget=''
322 d_msgrcv=''
323 d_msgsnd=''
324 d_nice=''
325 d_open3=''
326 d_fpathconf=''
327 d_pathconf=''
328 d_pause=''
329 d_pipe=''
330 d_poll=''
331 d_portable=''
332 d_readdir=''
333 d_rewinddir=''
334 d_seekdir=''
335 d_telldir=''
336 d_readlink=''
337 d_rename=''
338 d_rmdir=''
339 d_safebcpy=''
340 d_safemcpy=''
341 d_select=''
342 d_sem=''
343 d_semctl=''
344 d_semget=''
345 d_semop=''
346 d_setegid=''
347 d_seteuid=''
348 d_setlinebuf=''
349 d_setlocale=''
350 d_setpgid=''
351 d_setpgrp2=''
352 d_bsdpgrp=''
353 d_bsdsetpgrp=''
354 d_setpgrp=''
355 d_setprior=''
356 d_setregid=''
357 d_setresgid=''
358 d_setresuid=''
359 d_setreuid=''
360 d_setrgid=''
361 d_setruid=''
362 d_setsid=''
363 d_sfio=''
364 usesfio=''
365 d_shm=''
366 d_shmat=''
367 d_shmatprototype=''
368 shmattype=''
369 d_shmctl=''
370 d_shmdt=''
371 d_shmget=''
372 d_sigaction=''
373 d_sigsetjmp=''
374 d_oldsock=''
375 d_socket=''
376 d_sockpair=''
377 sockethdr=''
378 socketlib=''
379 d_statblks=''
380 d_stdio_cnt_lval=''
381 d_stdio_ptr_lval=''
382 d_stdiobase=''
383 d_stdstdio=''
384 stdio_base=''
385 stdio_bufsiz=''
386 stdio_cnt=''
387 stdio_filbuf=''
388 stdio_ptr=''
389 d_index=''
390 d_strchr=''
391 d_strcoll=''
392 d_strctcpy=''
393 d_strerrm=''
394 d_strerror=''
395 d_sysernlst=''
396 d_syserrlst=''
397 d_strtod=''
398 d_strtol=''
399 d_strtoul=''
400 d_strxfrm=''
401 d_symlink=''
402 d_syscall=''
403 d_sysconf=''
404 d_system=''
405 d_tcgetpgrp=''
406 d_tcsetpgrp=''
407 d_time=''
408 timetype=''
409 clocktype=''
410 d_times=''
411 d_truncate=''
412 d_tzname=''
413 d_umask=''
414 d_vfork=''
415 usevfork=''
416 d_voidsig=''
417 signal_t=''
418 d_volatile=''
419 d_charvspr=''
420 d_vprintf=''
421 d_wait4=''
422 d_waitpid=''
423 d_wcstombs=''
424 d_wctomb=''
425 dlext=''
426 cccdlflags=''
427 ccdlflags=''
428 dlsrc=''
429 ld=''
430 lddlflags=''
431 usedl=''
432 fpostype=''
433 gidtype=''
434 groupstype=''
435 h_fcntl=''
436 h_sysfile=''
437 db_hashtype=''
438 db_prefixtype=''
439 i_db=''
440 i_dbm=''
441 i_rpcsvcdbm=''
442 d_dirnamlen=''
443 direntrytype=''
444 i_dirent=''
445 i_dld=''
446 i_dlfcn=''
447 i_fcntl=''
448 i_float=''
449 i_gdbm=''
450 i_grp=''
451 i_limits=''
452 i_locale=''
453 i_malloc=''
454 i_math=''
455 i_memory=''
456 i_ndbm=''
457 i_neterrno=''
458 i_niin=''
459 i_sysin=''
460 d_pwage=''
461 d_pwchange=''
462 d_pwclass=''
463 d_pwcomment=''
464 d_pwexpire=''
465 d_pwquota=''
466 i_pwd=''
467 i_sfio=''
468 i_stddef=''
469 i_stdlib=''
470 i_string=''
471 strings=''
472 i_sysdir=''
473 i_sysfile=''
474 d_voidtty=''
475 i_bsdioctl=''
476 i_sysfilio=''
477 i_sysioctl=''
478 i_syssockio=''
479 i_sysndir=''
480 i_sysparam=''
481 i_sysresrc=''
482 i_sysselct=''
483 i_sysstat=''
484 i_systimes=''
485 i_systypes=''
486 i_sysun=''
487 i_syswait=''
488 i_sgtty=''
489 i_termio=''
490 i_termios=''
491 i_systime=''
492 i_systimek=''
493 i_time=''
494 timeincl=''
495 i_unistd=''
496 i_utime=''
497 i_values=''
498 i_stdarg=''
499 i_varargs=''
500 i_varhdr=''
501 i_vfork=''
502 intsize=''
503 libc=''
504 libperl=''
505 shrpenv=''
506 useshrplib=''
507 glibpth=''
508 libpth=''
509 loclibpth=''
510 plibpth=''
511 xlibpth=''
512 libs=''
513 lns=''
514 lseektype=''
515 make=''
516 make_set_make=''
517 d_mymalloc=''
518 freetype=''
519 mallocobj=''
520 mallocsrc=''
521 malloctype=''
522 usemymalloc=''
523 installman1dir=''
524 man1dir=''
525 man1direxp=''
526 man1ext=''
527 installman3dir=''
528 man3dir=''
529 man3direxp=''
530 man3ext=''
531 huge=''
532 large=''
533 medium=''
534 models=''
535 small=''
536 split=''
537 modetype=''
538 mydomain=''
539 myhostname=''
540 phostname=''
541 c=''
542 n=''
543 d_eofnblk=''
544 eagain=''
545 o_nonblock=''
546 rd_nodata=''
547 groupcat=''
548 hostcat=''
549 passcat=''
550 d_oldarchlib=''
551 oldarchlib=''
552 oldarchlibexp=''
553 orderlib=''
554 ranlib=''
555 package=''
556 spackage=''
557 pager=''
558 patchlevel=''
559 subversion=''
560 perladmin=''
561 perlpath=''
562 prefix=''
563 prefixexp=''
564 installprivlib=''
565 privlib=''
566 privlibexp=''
567 prototype=''
568 randbits=''
569 installscript=''
570 scriptdir=''
571 scriptdirexp=''
572 selecttype=''
573 sh=''
574 sig_name=''
575 sig_num=''
576 installsitearch=''
577 sitearch=''
578 sitearchexp=''
579 installsitelib=''
580 sitelib=''
581 sitelibexp=''
582 sizetype=''
583 so=''
584 sharpbang=''
585 shsharp=''
586 spitshell=''
587 ssizetype=''
588 startperl=''
589 startsh=''
590 stdchar=''
591 sysman=''
592 uidtype=''
593 nm_opt=''
594 nm_so_opt=''
595 runnm=''
596 usenm=''
597 useperlio=''
598 incpath=''
599 mips=''
600 mips_type=''
601 usrinc=''
602 defvoidused=''
603 voidflags=''
604 CONFIG=''
605
606 define='define'
607 undef='undef'
608 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
609 rmlist=''
610
611 : We must find out about Eunice early
612 eunicefix=':'
613 if test -f /etc/unixtovms; then
614         eunicefix=/etc/unixtovms
615 fi
616 if test -f /etc/unixtovms.exe; then
617         eunicefix=/etc/unixtovms.exe
618 fi
619
620 : list of known cpp symbols, sorted alphabetically
621 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
622 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
623 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
624 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
625 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
626 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
627 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
628 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
629 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
630 al="$al VMS Xenix286"
631 al="$al _AIX _AIX32 _AIX370 _AM29000 _COFF _CRAY _CX_UX _EPI"
632 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET"
633 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
634 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
635 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
636 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
637 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
638 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
639 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
640 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
641 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
642 al="$al __SVR4_2__ __UMAXV__"
643 al="$al ____386BSD____ __alpha __alpha__ __amiga"
644 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
645 al="$al __host_mips__"
646 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
647 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
648 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
649 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
650 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
651 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
652 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
653 al="$al __mc88100 __mc88100__ __mips __mips__"
654 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
655 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
656 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
657 al="$al _host_mips _mips _unix"
658 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
659 al="$al apollo ardent att386 att3b"
660 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
661 al="$al cadmus clipper concurrent convex cray ctix"
662 al="$al dmert encore gcos gcx gimpel gould"
663 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
664 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
665 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
666 al="$al i186 i286 i386 i486 i8086"
667 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
668 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
669 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
670 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
671 al="$al mc88000 mc88100 merlin mert mips mvs n16"
672 al="$al ncl_el ncl_mr"
673 al="$al news1500 news1700 news1800 news1900 news3700"
674 al="$al news700 news800 news900 ns16000 ns32000"
675 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
676 al="$al parisc pc532 pdp11 plexus posix pyr"
677 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
678 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
679 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
680 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
681 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
682 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
683 al="$al xenix z8000"
684
685 groupstype=''
686 i_whoami=''
687 : default library list
688 libswanted=''
689 : set useposix=false in your hint file to disable the POSIX extension.
690 useposix=true
691 : set useopcode=false in your hint file to disable the Opcode extension.
692 useopcode=true
693 : Define several unixisms.  These can be used in hint files.
694 exe_ext='' 
695 : Extra object files, if any, needed on this platform.
696 archobjs=''
697 : Possible local include directories to search.
698 : Set locincpth to "" in a hint file to defeat local include searches.
699 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
700 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
701 :
702 : no include file wanted by default
703 inclwanted=''
704
705 : change the next line if compiling for Xenix/286 on Xenix/386
706 xlibpth='/usr/lib/386 /lib/386'
707
708 : Possible local library directories to search.
709 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
710 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
711
712 : general looking path for locating libraries
713 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
714 glibpth="$glibpth /lib /usr/lib $xlibpth"
715 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
716 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
717
718 : Private path used by Configure to find libraries.  Its value
719 : is prepended to libpth. This variable takes care of special
720 : machines, like the mips.  Usually, it should be empty.
721 plibpth=''
722
723 : full support for void wanted by default
724 defvoidused=15
725
726 : List of libraries we want.
727 libswanted='sfio net socket inet nsl nm ndbm gdbm dbm db malloc dl'
728 libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt"
729 libswanted="$libswanted ucb bsd BSD PW x"
730 : We probably want to search /usr/shlib before most other libraries.
731 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
732 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
733 glibpth="/usr/shlib $glibpth"
734 : Do not use vfork unless overridden by a hint file.
735 usevfork=false
736
737 : Find the basic shell for Bourne shell scripts
738 case "$sh" in
739 '')
740         : SYSTYPE is for some older MIPS systems. 
741         : I do not know if it is still needed.
742         case "$SYSTYPE" in
743         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
744         *) xxx='/bin/sh';;
745         esac
746         if test -f "$xxx"; then
747                 sh="$xxx"
748         else
749                 : Build up a list and do a single loop so we can 'break' out.
750                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
751                 for xxx in sh bash ksh pdksh ash; do
752                         for p in $pth; do
753                                 try="$try ${p}/${xxx}"
754                         done
755                 done
756                 for xxx in $try; do
757                         if test -f "$xxx"; then
758                                 sh="$xxx";
759                                 echo "Your Bourne shell appears to be in $sh."
760                                 break
761                         elif test -f "$xxx.exe"; then
762                                 sh="$xxx";
763                                 echo "Hmm.  Your Bourne shell appears to be in $sh."
764                                 break
765                         fi
766                 done
767         fi
768         ;;
769 esac
770
771 case "$sh" in
772 '')     cat <<EOM >&2
773 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
774 Usually it's in /bin/sh.  How did you even get this far?
775 Please contact me (Andy Dougherty) at doughera@lafcol.lafayette.edu and 
776 we'll try to straigten this all out.
777 EOM
778         exit 1
779         ;;
780 esac
781
782 : see if sh knows # comments
783 if `$sh -c '#' >/dev/null 2>&1`; then
784         shsharp=true
785         spitshell=cat
786         echo " "
787         xcat=/bin/cat
788         test -f $xcat || xcat=/usr/bin/cat
789         echo "#!$xcat" >try
790         $eunicefix try
791         chmod +x try
792         ./try > today
793         if test -s today; then
794                 sharpbang='#!'
795         else
796                 echo "#! $xcat" > try
797                 $eunicefix try
798                 chmod +x try
799                 ./try > today
800                 if test -s today; then
801                         sharpbang='#! '
802                 else
803                         echo "Okay, let's see if #! works on this system..."
804                         echo "It's just a comment."
805                         sharpbang=': use '
806                 fi
807         fi
808 else
809         echo "Your $sh doesn't grok # comments--I will strip them later on."
810         shsharp=false
811         cd ..
812         echo "exec grep -v '^[  ]*#'" >spitshell
813         chmod +x spitshell
814         $eunicefix spitshell
815         spitshell=`pwd`/spitshell
816         cd UU
817         echo "I presume that if # doesn't work, #! won't work either!"
818         sharpbang=': use '
819 fi
820 rm -f try today
821
822 : figure out how to guarantee sh startup
823 case "$startsh" in
824 '') startsh=${sharpbang}${sh} ;;
825 *)
826 esac
827 cat >try <<EOSS
828 $startsh
829 set abc
830 test "$?abc" != 1
831 EOSS
832
833 chmod +x try
834 $eunicefix try
835 if ./try; then
836         : echo "Yup, it does."
837 else
838         echo "Hmm.  '$startsh' didn't work."
839         echo "You may have to fix up the shell scripts to make sure sh runs them."
840 fi
841 rm -f try
842
843 : script used to extract .SH files with variable substitutions
844 cat >extract <<EOS
845 $startsh
846 EOS
847 cat >>extract <<'EOS'
848 CONFIG=true
849 echo "Doing variable substitutions on .SH files..."
850 if test -f MANIFEST; then
851         shlist=`awk '{print $1}' <MANIFEST | grep '\.SH'`
852         : Pick up possible extension manifests.
853         for dir in ext/* ; do
854                 if test -f $dir/MANIFEST; then
855                         xxx=`awk '{print $1}' < $dir/MANIFEST | 
856                                 sed -n "/\.SH$/ s@^@$dir/@p"`
857                         shlist="$shlist $xxx"
858                 fi
859         done
860         set x $shlist
861 else
862         echo "(Looking for .SH files under the current directory.)"
863         set x `find . -name "*.SH" -print`
864 fi
865 shift
866 case $# in
867 0) set x *.SH; shift;;
868 esac
869 if test ! -f $1; then
870         shift
871 fi
872 for file in $*; do
873         case "$file" in
874         */*)
875                 dir=`expr X$file : 'X\(.*\)/'`
876                 file=`expr X$file : 'X.*/\(.*\)'`
877                 (cd $dir && . ./$file)
878                 ;;
879         *)
880                 . ./$file
881                 ;;
882         esac
883 done
884 if test -f config_h.SH; then
885         if test ! -f config.h; then
886         : oops, they left it out of MANIFEST, probably, so do it anyway.
887         . ./config_h.SH
888         fi
889 fi
890 EOS
891
892 : produce awk script to parse command line options
893 cat >options.awk <<'EOF'
894 BEGIN {
895         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
896
897         len = length(optstr);
898         for (i = 1; i <= len; i++) {
899                 c = substr(optstr, i, 1);
900                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
901                 if (a == ":") {
902                         arg[c] = 1;
903                         i++;
904                 }
905                 opt[c] = 1;
906         }
907 }
908 {
909         expect = 0;
910         str = $0;
911         if (substr(str, 1, 1) != "-") {
912                 printf("'%s'\n", str);
913                 next;
914         }
915         len = length($0);
916         for (i = 2; i <= len; i++) {
917                 c = substr(str, i, 1);
918                 if (!opt[c]) {
919                         printf("-%s\n", substr(str, i));
920                         next;
921                 }
922                 printf("-%s\n", c);
923                 if (arg[c]) {
924                         if (i < len)
925                                 printf("'%s'\n", substr(str, i + 1));
926                         else
927                                 expect = 1;
928                         next;
929                 }
930         }
931 }
932 END {
933         if (expect)
934                 print "?";
935 }
936 EOF
937
938 : process the command line options
939 set X `for arg in "$@"; do echo "X$arg"; done |
940         sed -e s/X// | awk -f options.awk`
941 eval "set $*"
942 shift
943 rm -f options.awk
944
945 : set up default values
946 fastread=''
947 reuseval=false
948 config_sh=''
949 alldone=''
950 error=''
951 silent=''
952 extractsh=''
953 override=''
954 knowitall=''
955 rm -f optdef.sh
956
957 : option parsing
958 while test $# -gt 0; do
959         case "$1" in
960         -d) shift; fastread=yes;;
961         -e) shift; alldone=cont;;
962         -f)
963                 shift
964                 cd ..
965                 if test -r "$1"; then
966                         config_sh="$1"
967                 else
968                         echo "$me: cannot read config file $1." >&2
969                         error=true
970                 fi
971                 cd UU
972                 shift;;
973         -h) shift; error=true;;
974         -r) shift; reuseval=true;;
975         -s) shift; silent=true;;
976         -E) shift; alldone=exit;;
977         -K) shift; knowitall=true;;
978         -O) shift; override=true;;
979         -S) shift; extractsh=true;;
980         -D)
981                 shift
982                 case "$1" in
983                 *=)
984                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
985                         echo "$me: ignoring -D $1" >&2
986                         ;;
987                 *=*) echo "$1" | \
988                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
989                 *) echo "$1='define'" >> optdef.sh;;
990                 esac
991                 shift
992                 ;;
993         -U)
994                 shift
995                 case "$1" in
996                 *=) echo "$1" >> optdef.sh;;
997                 *=*)
998                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
999                         echo "$me: ignoring -U $1" >&2
1000                         ;;
1001                 *) echo "$1='undef'" >> optdef.sh;;
1002                 esac
1003                 shift
1004                 ;;
1005         -V) echo "$me generated by metaconfig 3.0 PL60." >&2
1006                 exit 0;;
1007         --) break;;
1008         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1009         *) break;;
1010         esac
1011 done
1012
1013 case "$error" in
1014 true)
1015         cat >&2 <<EOM
1016 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1017                  [-U symbol] [-U symbol=]
1018   -d : use defaults for all answers.
1019   -e : go on without questioning past the production of config.sh.
1020   -f : specify an alternate default configuration file.
1021   -h : print this help message and exit (with an error status).
1022   -r : reuse C symbols value if possible (skips costly nm extraction).
1023   -s : silent mode, only echoes questions and essential information.
1024   -D : define symbol to have some value:
1025          -D symbol         symbol gets the value 'define'
1026          -D symbol=value   symbol gets the value 'value'
1027   -E : stop at the end of questions, after having produced config.sh.
1028   -K : do not use unless you know what you are doing.
1029   -O : let -D and -U override definitions from loaded configuration file.
1030   -S : perform variable substitutions on all .SH files (can mix with -f)
1031   -U : undefine symbol:
1032          -U symbol    symbol gets the value 'undef'
1033          -U symbol=   symbol gets completely empty
1034   -V : print version number and exit (with a zero status).
1035 EOM
1036         exit 1
1037         ;;
1038 esac
1039
1040 exec 4>&1
1041 case "$silent" in
1042 true) exec 1>/dev/null;;
1043 esac
1044
1045 : run the defines and the undefines, if any, but leave the file out there...
1046 touch optdef.sh
1047 . ./optdef.sh
1048
1049 case "$extractsh" in
1050 true)
1051         case "$config_sh" in
1052         '') config_sh='config.sh'; config='./config.sh';;
1053         /*) config="$config_sh";;
1054         *) config="./$config_sh";;
1055         esac
1056         echo " "
1057         echo "Fetching answers from $config_sh..."
1058         cd ..
1059         . $config
1060         test "$override" && . ./optdef.sh
1061         echo " "
1062         . ./UU/extract
1063         rm -rf UU
1064         echo "Done."
1065         exit 0
1066         ;;
1067 esac
1068
1069 : set package name
1070 package=perl5
1071 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1072 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1073 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1074 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1075 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1076 esac
1077
1078 : Eunice requires " " instead of "", can you believe it
1079 echo " "
1080 : Here we go...
1081 echo "Beginning of configuration questions for $package."
1082
1083 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1084
1085 : Some greps do not return status, grrr.
1086 echo "grimblepritz" >grimble
1087 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1088         contains=contains
1089 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1090         contains=grep
1091 else
1092         contains=contains
1093 fi
1094 rm -f grimble
1095 : the following should work in any shell
1096 case "$contains" in
1097 contains*)
1098         echo " "
1099         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1100         cat >contains <<'EOSS'
1101 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1102 EOSS
1103 chmod +x contains
1104 esac
1105
1106 : first determine how to suppress newline on echo command
1107 echo " "
1108 echo "Checking echo to see how to suppress newlines..."
1109 (echo "hi there\c" ; echo " ") >.echotmp
1110 if $contains c .echotmp >/dev/null 2>&1 ; then
1111         echo "...using -n."
1112         n='-n'
1113         c=''
1114 else
1115         cat <<'EOM'
1116 ...using \c
1117 EOM
1118         n=''
1119         c='\c'
1120 fi
1121 echo $n "The star should be here-->$c"
1122 echo '*'
1123 rm -f .echotmp
1124
1125 : Now test for existence of everything in MANIFEST
1126 echo " "
1127 if test -f ../MANIFEST; then
1128         echo "First let's make sure your kit is complete.  Checking..." >&4
1129         awk '$1 !~ /PACK[A-Z]+/ {print $1}' ../MANIFEST | split -50
1130         rm -f missing
1131         for filelist in x??; do
1132                 (cd ..; ls `cat UU/$filelist` >/dev/null 2>>UU/missing)
1133         done
1134         if test -s missing; then
1135                 cat missing >&4
1136                 cat >&4 <<'EOM'
1137
1138 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1139
1140 You have the option of continuing the configuration process, despite the
1141 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1142 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1143 and contact the author (doughera@lafcol.lafayette.edu).
1144
1145 EOM
1146                 echo $n "Continue? [n] $c" >&4
1147                 read ans
1148                 case "$ans" in
1149                 y*)
1150                         echo "Continuing..." >&4
1151                         rm -f missing
1152                         ;;
1153                 *)
1154                         echo "ABORTING..." >&4
1155                         kill $$
1156                         ;;
1157                 esac
1158         else
1159                 echo "Looks good..." >&4
1160         fi
1161 else
1162         echo "There is no MANIFEST file.  I hope your kit is complete !"
1163 fi
1164 rm -f missing x??
1165
1166 : compute the number of columns on the terminal for proper question formatting
1167 case "$COLUMNS" in
1168 '') COLUMNS='80';;
1169 esac
1170
1171 : set up the echo used in my read
1172 myecho="case \"\$xxxm\" in
1173 '') echo $n \"\$rp $c\" >&4;;
1174 *) case \"\$rp\" in
1175         '') echo $n \"[\$xxxm] $c\";;
1176         *)
1177                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1178                         echo \"\$rp\" >&4
1179                         echo $n \"[\$xxxm] $c\" >&4
1180                 else
1181                         echo $n \"\$rp [\$xxxm] $c\" >&4
1182                 fi
1183                 ;;
1184         esac;;
1185 esac"
1186
1187 : now set up to do reads with possible shell escape and default assignment
1188 cat <<EOSC >myread
1189 xxxm=\$dflt
1190 $myecho
1191 ans='!'
1192 case "\$fastread" in
1193 yes) case "\$dflt" in
1194         '') ;;
1195         *) ans='';
1196                 case "\$silent-\$rp" in
1197                 true-) ;;
1198                 *) echo " " >&4;;
1199                 esac;;
1200         esac;;
1201 *) case "\$silent" in
1202         true) case "\$rp" in
1203                 '') ans='';;
1204                 esac;;
1205         esac;;
1206 esac
1207 while expr "X\$ans" : "X!" >/dev/null; do
1208         read answ
1209         set x \$xxxm
1210         shift
1211         aok=''; eval "ans=\"\$answ\"" && aok=y
1212         case  "\$answ" in
1213         "\$ans")
1214                 case "\$ans" in
1215                 \\&*)
1216                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1217                         shift
1218                         case "\$1" in
1219                         -d)
1220                                 fastread=yes
1221                                 echo "(OK, I'll run with -d after this question.)" >&4
1222                                 ;;
1223                         -*)
1224                                 echo "*** Sorry, \$1 not supported yet." >&4
1225                                 ;;
1226                         esac
1227                         $myecho
1228                         ans=!
1229                         ;;
1230                 "!")
1231                         sh 1>&4
1232                         echo " "
1233                         $myecho
1234                         ;;
1235                 !*)
1236                         set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1237                         shift
1238                         sh 1>&4 -c "\$*"
1239                         echo " "
1240                         $myecho
1241                         ;;
1242                 esac;;
1243         *)
1244                 case "\$aok" in
1245                 y)
1246                         echo "*** Substitution done -- please confirm."
1247                         xxxm="\$ans"
1248                         ans=\`echo $n "\$ans$c" | tr '\012' ' '\`
1249                         xxxm="\$ans"
1250                         ans=!
1251                         ;;
1252                 *)
1253                         echo "*** Error -- try again."
1254                         ans=!
1255                         ;;
1256                 esac
1257                 $myecho
1258                 ;;
1259         esac
1260         case "\$ans\$xxxm\$nostick" in
1261         '')
1262                 ans=!
1263                 $myecho
1264                 ;;
1265         esac
1266 done
1267 case "\$ans" in
1268 '') ans="\$xxxm";;
1269 esac
1270 EOSC
1271
1272 : create .config dir to save info across Configure sessions
1273 test -d ../.config || mkdir ../.config
1274 cat >../.config/README <<EOF
1275 This directory created by Configure to save information that should
1276 persist across sessions.
1277
1278 You may safely delete it if you wish.
1279 EOF
1280
1281 : general instructions
1282 needman=true
1283 firsttime=true
1284 user=`(logname) 2>/dev/null`
1285 case "$user" in "")
1286         user=`whoami 2>&1` ;;
1287 esac
1288 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1289         firsttime=false
1290         echo " "
1291         rp='Would you like to see the instructions?'
1292         dflt=n
1293         . ./myread
1294         case "$ans" in
1295         [yY]*) ;;
1296         *) needman=false;;
1297         esac
1298 fi
1299 if $needman; then
1300         cat <<EOH
1301  
1302 This installation shell script will examine your system and ask you questions
1303 to determine how the perl5 package should be installed. If you get
1304 stuck on a question, you may use a ! shell escape to start a subshell or
1305 execute a command.  Many of the questions will have default answers in square
1306 brackets; typing carriage return will give you the default.
1307
1308 On some of the questions which ask for file or directory names you are allowed
1309 to use the ~name construct to specify the login directory belonging to "name",
1310 even if you don't have a shell which knows about that.  Questions where this is
1311 allowed will be marked "(~name ok)".
1312
1313 EOH
1314         rp=''
1315         dflt='Type carriage return to continue'
1316         . ./myread
1317         cat <<'EOH'
1318
1319 The prompter used in this script allows you to use shell variables and
1320 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1321 in the default answer, as if the default line was a set of arguments given to a
1322 script shell.  This means you may also use $* to repeat the whole default line,
1323 so you do not have to re-type everything to add something to the default.
1324
1325 Everytime there is a substitution, you will have to confirm.  If there is an
1326 error (e.g. an unmatched backtick), the default answer will remain unchanged
1327 and you will be prompted again.
1328
1329 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1330 the questions and use the computed defaults (or the previous answers if there
1331 was already a config.sh file). Type 'Configure -h' for a list of options.
1332 You may also start interactively and then answer '& -d' at any prompt to turn
1333 on the non-interactive behaviour for the remaining of the execution.
1334
1335 EOH
1336         . ./myread
1337         cat <<EOH
1338
1339 Much effort has been expended to ensure that this shell script will run on any
1340 Unix system.  If despite that it blows up on yours, your best bet is to edit
1341 Configure and run it again.  If you can't run Configure for some reason,
1342 you'll have to generate a config.sh file by hand.  Whatever problems you
1343 have, let me (doughera@lafcol.lafayette.edu) know how I blew it.
1344
1345 This installation script affects things in two ways:
1346
1347 1) it may do direct variable substitutions on some of the files included
1348    in this kit.
1349 2) it builds a config.h file for inclusion in C programs.  You may edit
1350    any of these files as the need arises after running this script.
1351
1352 If you make a mistake on a question, there is no easy way to back up to it
1353 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1354 files.  Configure will offer to let you do this before it runs the SH files.
1355
1356 EOH
1357         dflt='Type carriage return to continue'
1358         . ./myread
1359         case "$firsttime" in
1360         true) echo $user >>../.config/instruct;;
1361         esac
1362 fi
1363
1364 : find out where common programs are
1365 echo " "
1366 echo "Locating common programs..." >&4
1367 cat <<EOSC >loc
1368 $startsh
1369 case \$# in
1370 0) exit 1;;
1371 esac
1372 thing=\$1
1373 shift
1374 dflt=\$1
1375 shift
1376 for dir in \$*; do
1377         case "\$thing" in
1378         .)
1379         if test -d \$dir/\$thing; then
1380                 echo \$dir
1381                 exit 0
1382         fi
1383         ;;
1384         *)
1385         for thisthing in \$dir/\$thing; do
1386                 : just loop through to pick last item
1387         done
1388         if test -f \$thisthing; then
1389                 echo \$thisthing
1390                 exit 0
1391         elif test -f \$dir/\$thing.exe; then
1392                 : on Eunice apparently
1393                 echo \$dir/\$thing
1394                 exit 0
1395         fi
1396         ;;
1397         esac
1398 done
1399 echo \$dflt
1400 exit 1
1401 EOSC
1402 chmod +x loc
1403 $eunicefix loc
1404 loclist="
1405 awk
1406 cat
1407 comm
1408 cp
1409 echo
1410 expr
1411 find
1412 grep
1413 ls
1414 mkdir
1415 rm
1416 sed
1417 sort
1418 touch
1419 tr
1420 uniq
1421 "
1422 trylist="
1423 Mcc
1424 byacc
1425 cpp
1426 csh
1427 date
1428 egrep
1429 gzip
1430 less
1431 line
1432 ln
1433 more
1434 nroff
1435 perl
1436 pg
1437 sendmail
1438 test
1439 uname
1440 zip
1441 "
1442 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1443 pth="$pth /lib /usr/lib"
1444 for file in $loclist; do
1445         xxx=`./loc $file $file $pth`
1446         eval $file=$xxx
1447         eval _$file=$xxx
1448         case "$xxx" in
1449         /*)
1450                 echo $file is in $xxx.
1451                 ;;
1452         ?:[\\/]*)
1453                 echo $file is in $xxx.
1454                 ;;
1455         *)
1456                 echo "I don't know where '$file' is, and my life depends on it." >&4
1457                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1458                 exit 1
1459                 ;;
1460         esac
1461 done
1462 echo " "
1463 echo "Don't worry if any of the following aren't found..."
1464 say=offhand
1465 for file in $trylist; do
1466         xxx=`./loc $file $file $pth`
1467         eval $file=$xxx
1468         eval _$file=$xxx
1469         case "$xxx" in
1470         /*)
1471                 echo $file is in $xxx.
1472                 ;;
1473         ?:[\\/]*)
1474                 echo $file is in $xxx.
1475                 ;;
1476         *)
1477                 echo "I don't see $file out there, $say."
1478                 say=either
1479                 ;;
1480         esac
1481 done
1482 case "$egrep" in
1483 egrep)
1484         echo "Substituting grep for egrep."
1485         egrep=$grep
1486         ;;
1487 esac
1488 case "$ln" in
1489 ln)
1490         echo "Substituting cp for ln."
1491         ln=$cp
1492         ;;
1493 esac
1494 case "$test" in
1495 test)
1496         echo "Hopefully test is built into your sh."
1497         ;;
1498 *)
1499         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1500                 echo "Using the test built into your sh."
1501                 test=test
1502                 _test=test
1503         fi
1504         ;;
1505 esac
1506 case "$echo" in
1507 echo)
1508         echo "Hopefully echo is built into your sh."
1509         ;;
1510 '') ;;
1511 *)
1512         echo " "
1513 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1514         $echo $n "hi there$c" >foo1
1515         echo $n "hi there$c" >foo2
1516         if cmp foo1 foo2 >/dev/null 2>&1; then
1517                 echo "They are compatible.  In fact, they may be identical."
1518         else
1519                 case "$n" in
1520                 '-n') n='' c='\c';;
1521                 *) n='-n' c='';;
1522                 esac
1523                 cat <<FOO
1524 They are not compatible!  You are probably running ksh on a non-USG system.
1525 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1526 have echo built in and we may have to run some Bourne shell scripts.  That
1527 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1528
1529 FOO
1530                 $echo $n "The star should be here-->$c"
1531                 $echo "*"
1532         fi
1533         $rm -f foo1 foo2
1534         ;;
1535 esac
1536
1537 : determine whether symbolic links are supported
1538 echo " "
1539 $touch blurfl
1540 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1541         echo "Symbolic links are supported." >&4
1542         lns="$ln -s"
1543 else
1544         echo "Symbolic links are NOT supported." >&4
1545         lns="$ln"
1546 fi
1547 $rm -f blurfl sym
1548
1549 : see whether [:lower:] and [:upper:] are supported character classes
1550 echo " "
1551 up='[A-Z]'
1552 low='[a-z]'
1553 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1554 ABYZ)
1555         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1556         up='[:upper:]'
1557         low='[:lower:]'
1558         ;;
1559 *)
1560         echo "Your tr only supports [a-z] and [A-Z] to convert case." >&4
1561         ;;
1562 esac
1563 : set up the translation script tr, must be called with ./tr of course
1564 cat >tr <<EOSC
1565 $startsh
1566 case "\$1\$2" in
1567 '[A-Z][a-z]') exec $tr '$up' '$low';;
1568 '[a-z][A-Z]') exec $tr '$low' '$up';;
1569 esac
1570 exec $tr "\$@"
1571 EOSC
1572 chmod +x tr
1573 $eunicefix tr
1574
1575 : Try to determine whether config.sh was made on this system
1576 case "$config_sh" in
1577 '')
1578 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
1579 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
1580         ./tr '[A-Z]' '[a-z]' | tr '\012' ' '`
1581 newmyuname="$myuname"
1582 dflt=n
1583 case "$knowitall" in
1584 '')
1585         if test -f ../config.sh; then
1586                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
1587                         eval "`grep myuname= ../config.sh`"
1588                 fi
1589                 if test "X$myuname" = "X$newmyuname"; then
1590                         dflt=y
1591                 fi
1592         fi
1593         ;;
1594 *) dflt=y;;
1595 esac
1596
1597 : Get old answers from old config file if Configure was run on the
1598 : same system, otherwise use the hints.
1599 hint=default
1600 cd ..
1601 if test -f config.sh; then
1602         echo " "
1603         rp="I see a config.sh file.  Shall I use it to set the defaults?"
1604         . UU/myread
1605         case "$ans" in
1606         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
1607         *)  echo "Fetching default answers from your old config.sh file..." >&4
1608                 tmp_n="$n"
1609                 tmp_c="$c"
1610                 tmp_sh="$sh"
1611                 . ./config.sh
1612                 cp config.sh UU
1613                 n="$tmp_n"
1614                 c="$tmp_c"
1615                 : Older versions did not always set $sh.  Catch re-use of such
1616                 : an old config.sh.
1617                 case "$sh" in
1618                 '') sh="$tmp_sh" ;;
1619                 esac
1620                 hint=previous
1621                 ;;
1622         esac
1623 fi
1624 if test ! -f config.sh; then
1625         $cat <<EOM
1626
1627 First time through, eh?  I have some defaults handy for the following systems:
1628
1629 EOM
1630         cd hints; ls -C *.sh | $sed 's/\.sh/   /g' >&4
1631         dflt=''
1632         : Half the following guesses are probably wrong... If you have better
1633         : tests or hints, please send them to doughera@lafcol.lafayette.edu
1634         : The metaconfig authors would also appreciate a copy...
1635         $test -f /irix && osname=irix
1636         $test -f /xenix && osname=sco_xenix
1637         $test -f /dynix && osname=dynix
1638         $test -f /dnix && osname=dnix
1639         $test -f /unicos && osname=unicos && osvers=`$uname -r`
1640         $test -f /bin/mips && /bin/mips && osname=mips
1641         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
1642                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
1643         $test -d /usr/apollo/bin && osname=apollo
1644         $test -f /etc/saf/_sactab && osname=svr4
1645         $test -d /usr/include/minix && osname=minix
1646         if $test -d /MachTen; then
1647                 osname=machten 
1648                 if $test -x /sbin/version; then
1649                         osvers=`/sbin/version | $awk '{print $2}' | 
1650                         $sed -e 's/[A-Za-z]$//'`
1651                 elif $test -x /usr/etc/version; then
1652                         osvers=`/usr/etc/version | $awk '{print $2}' | 
1653                         $sed -e 's/[A-Za-z]$//'`
1654                 else
1655                         osvers="$2.$3"
1656                 fi
1657         fi
1658         if $test -f $uname; then
1659                 set X $myuname
1660                 shift
1661
1662                 case "$5" in
1663                 fps*) osname=fps ;;
1664                 mips*)
1665                         case "$4" in
1666                         umips) osname=umips ;;
1667                         *) osname=mips ;;
1668                         esac;;
1669                 [23]100) osname=mips ;;
1670                 next*) osname=next ;;
1671                 news*) osname=news ;;
1672                 i386*)
1673                         if $test -f /etc/kconfig; then
1674                                 osname=isc
1675                                 if test "$lns" = "ln -s"; then
1676                                         osvers=4
1677                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
1678                                         osvers=3
1679                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
1680                                         osvers=2
1681                                 fi
1682                         fi
1683                         ;;
1684                 esac
1685
1686                 case "$1" in
1687                 aix) osname=aix
1688                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
1689                         case "$tmp" in
1690                         'not found') osvers="$4"."$3" ;;
1691                         '<3240'|'<>3240') osvers=3.2.0 ;;
1692                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
1693                         '=3250'|'>3250') osvers=3.2.5 ;;
1694                         *) osvers=$tmp;;
1695                         esac
1696                         ;;
1697                 dnix) osname=dnix
1698                         osvers="$3"
1699                         ;;
1700                 domainos) osname=apollo
1701                         osvers="$3"
1702                         ;;
1703                 dgux) osname=dgux 
1704                         osvers="$3"
1705                         ;;
1706                 dynixptx*) osname=dynixptx
1707                         osvers="$3"
1708                         ;;
1709                 freebsd) osname=freebsd 
1710                         osvers="$3" ;;
1711                 genix) osname=genix ;;
1712                 hp*) osname=hpux 
1713                         case "$3" in
1714                         *.08.*) osvers=9 ;;
1715                         *.09.*) osvers=9 ;;
1716                         *.10.*) osvers=10 ;;
1717                         *)      osvers="$3" ;;
1718                         esac
1719                         ;;
1720                 irix*) osname=irix
1721                         case "$3" in
1722                         4*) osvers=4 ;;
1723                         5*) osvers=5 ;;
1724                         *)      osvers="$3" ;;
1725                         esac
1726                         ;;
1727                 linux) osname=linux
1728                         case "$3" in
1729                         1*) osvers=1 ;;
1730                         *)      osvers="$3" ;;
1731                         esac
1732                         ;;
1733                 netbsd*) osname=netbsd 
1734                         osvers="$3"
1735                         ;;
1736                 bsd386) osname=bsd386
1737                         osvers=`$uname -r`
1738                         ;;
1739                 next*) osname=next ;;
1740                 solaris) osname=solaris
1741                         case "$3" in
1742                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
1743                         *)      osvers="$3" ;;
1744                         esac
1745                         ;;
1746                 sunos) osname=sunos
1747                         case "$3" in
1748                         5*) osname=solaris
1749                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
1750                         *)      osvers="$3" ;;
1751                         esac
1752                         ;;
1753                 titanos) osname=titanos
1754                         case "$3" in
1755                         1*) osvers=1 ;;
1756                         2*) osvers=2 ;;
1757                         3*) osvers=3 ;;
1758                         4*) osvers=4 ;;
1759                         *)      osvers="$3" ;;
1760                         esac
1761                         ;;
1762                 ultrix) osname=ultrix
1763                         osvers="$3"
1764                         ;;
1765                 osf1)   case "$5" in
1766                                 alpha)
1767                                         osname=dec_osf
1768                                         osvers=`echo "$3" | sed 's/^[vt]//'`
1769                                         ;;
1770                         hp*)    osname=hp_osf1  ;;
1771                         mips)   osname=mips_osf1 ;;
1772                         esac
1773                         ;;
1774                 uts) osname=uts 
1775                         osvers="$3"
1776                         ;;
1777                 $2) case "$osname" in
1778                         *isc*) ;;
1779                         *freebsd*) ;;
1780                         svr*)
1781                                 : svr4.x or possibly later
1782                                 case "svr$3" in 
1783                                 ${osname}*)
1784                                         osname=svr$3
1785                                         osvers=$4
1786                                         ;;
1787                                 esac
1788                                 case "$osname" in
1789                                 svr4.0)
1790                                         : Check for ESIX
1791                                         if test -f /stand/boot ; then
1792                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
1793                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
1794                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
1795                                                         if test -n "$isesix"; then
1796                                                                 osname=esix4
1797                                                         fi
1798                                                 fi
1799                                         fi
1800                                         ;;
1801                                 esac
1802                                 ;;
1803                         *)      if test -f /etc/systemid; then
1804                                         osname=sco
1805                                         set `echo $3 | $sed 's/\./ /g'` $4
1806                                         if $test -f sco_$1_$2_$3.sh; then
1807                                                 osvers=$1.$2.$3
1808                                         elif $test -f sco_$1_$2.sh; then
1809                                                 osvers=$1.$2
1810                                         elif $test -f sco_$1.sh; then
1811                                                 osvers=$1
1812                                         fi
1813                                 else
1814                                         case "$osname" in
1815                                         '') : Still unknown.  Probably a generic Sys V.
1816                                                 osname="sysv"
1817                                                 osvers="$3"
1818                                                 ;;
1819                                         esac
1820                                 fi
1821                                 ;;
1822                         esac
1823                         ;;
1824                 *)      case "$osname" in
1825                         '') : Still unknown.  Probably a generic BSD.
1826                                 osname="$1"
1827                                 osvers="$3"
1828                                 ;;
1829                         esac
1830                         ;;
1831                 esac
1832         else
1833                 if test -f /vmunix -a -f news_os.sh; then
1834                         (what /vmunix | ../UU/tr '[A-Z]' '[a-z]') > ../UU/kernel.what 2>&1
1835                         if $contains news-os ../UU/kernel.what >/dev/null 2>&1; then
1836                                 osname=news_os
1837                         fi
1838                         $rm -f ../UU/kernel.what
1839                 elif test -d c:/.; then
1840                         set X $myuname
1841                         osname=os2
1842                         osvers="$5"
1843                 fi
1844         fi
1845         
1846         : Now look for a hint file osname_osvers, unless one has been
1847         : specified already.
1848         case "$hintfile" in
1849         ''|' ')
1850                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
1851                 : Also try without trailing minor version numbers.
1852                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
1853                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
1854                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
1855                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
1856                 case "$file" in
1857                 '') dflt=none ;;
1858                 *)  case "$osvers" in
1859                         '') dflt=$file
1860                                 ;;
1861                         *)  if $test -f $file.sh ; then
1862                                         dflt=$file
1863                                 elif $test -f $xfile.sh ; then
1864                                         dflt=$xfile
1865                                 elif $test -f $xxfile.sh ; then
1866                                         dflt=$xxfile
1867                                 elif $test -f $xxxfile.sh ; then
1868                                         dflt=$xxxfile
1869                                 elif $test -f $xxxxfile.sh ; then
1870                                         dflt=$xxxxfile
1871                                 elif $test -f "${osname}.sh" ; then
1872                                         dflt="${osname}"
1873                                 else
1874                                         dflt=none
1875                                 fi
1876                                 ;;
1877                         esac
1878                         ;;
1879                 esac
1880                 ;;
1881         *)
1882                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
1883                 ;;
1884         esac
1885
1886         $cat <<EOM
1887
1888 You may give one or more space-separated answers, or "none" if appropriate.
1889 If your OS version has no hints, DO NOT give a wrong version -- say "none".
1890
1891 EOM
1892         rp="Which of these apply, if any?"
1893         . ../UU/myread
1894         tans=$ans
1895         for file in $tans; do
1896                 if $test -f $file.sh; then
1897                         . ./$file.sh
1898                         $cat $file.sh >> ../UU/config.sh
1899                 elif $test X$tans = X -o X$tans = Xnone ; then
1900                         : nothing
1901                 else
1902                         : Give one chance to correct a possible typo.
1903                         echo "$file.sh does not exist"
1904                         dflt=$file
1905                         rp="hint to use instead?"
1906                         . ../UU/myread
1907                         for file in $ans; do
1908                                 if $test -f "$file.sh"; then
1909                                         . ./$file.sh
1910                                         $cat $file.sh >> ../UU/config.sh
1911                                 elif $test X$ans = X -o X$ans = Xnone ; then
1912                                         : nothing
1913                                 else
1914                                         echo "$file.sh does not exist -- ignored."
1915                                 fi
1916                         done
1917                 fi
1918         done
1919
1920         hint=recommended
1921         : Remember our hint file for later.
1922         if $test -f "$file.sh" ; then
1923                 hintfile="$file"
1924         else
1925                 hintfile=''
1926         fi
1927
1928         cd ..
1929 fi
1930 cd UU
1931 ;;
1932 *)
1933         echo " "
1934         echo "Fetching default answers from $config_sh..." >&4
1935         tmp_n="$n"
1936         tmp_c="$c"
1937         cd ..
1938         cp $config_sh config.sh 2>/dev/null
1939         chmod +w config.sh
1940         . ./config.sh
1941         cd UU
1942         cp ../config.sh .
1943         n="$tmp_n"
1944         c="$tmp_c"
1945         hint=previous
1946         ;;
1947 esac
1948 test "$override" && . ./optdef.sh
1949 myuname="$newmyuname"
1950
1951 : Restore computed paths
1952 for file in $loclist $trylist; do
1953         eval $file="\$_$file"
1954 done
1955
1956 cat << EOM
1957
1958 Configure uses the operating system name and version to set some defaults.
1959 The default value is probably right if the name rings a bell. Otherwise,
1960 since spelling matters for me, either accept the default or answer "none"
1961 to leave it blank.
1962
1963 EOM
1964 case "$osname" in
1965         ''|' ')
1966                 case "$hintfile" in
1967                 ''|' '|none) dflt=none ;;
1968                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
1969                 esac
1970                 ;;
1971         *) dflt="$osname" ;;
1972 esac
1973 rp="Operating system name?"
1974 . ./myread
1975 case "$ans" in
1976 none)  osname='' ;;
1977 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
1978 esac
1979 echo " "
1980 case "$osvers" in
1981         ''|' ')
1982                 case "$hintfile" in
1983                 ''|' '|none) dflt=none ;;
1984                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
1985                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
1986                         case "$dflt" in
1987                         ''|' ') dflt=none ;;
1988                         esac
1989                         ;;
1990                 esac
1991                 ;;
1992         *) dflt="$osvers" ;;
1993 esac
1994 rp="Operating system version?"
1995 . ./myread
1996 case "$ans" in
1997 none)  osvers='' ;;
1998 *) osvers="$ans" ;;
1999 esac
2000
2001
2002
2003 : who configured the system
2004 cf_time=`$date 2>&1`
2005 cf_by=`(logname) 2>/dev/null`
2006 case "$cf_by" in "")
2007         cf_by=`(whoami) 2>/dev/null`
2008         case "$cf_by" in "")
2009                 cf_by=unknown ;;
2010         esac ;;
2011 esac
2012
2013 : determine the architecture name
2014 echo " "
2015 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2016         tarch=`arch`"-$osname"
2017 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2018         if uname -m > tmparch 2>&1 ; then
2019                 tarch=`$sed -e 's/ /_/g' -e 's/$/'"-$osname/" tmparch`
2020         else
2021                 tarch="$osname"
2022         fi
2023         $rm -f tmparch
2024 else
2025         tarch="$osname"
2026 fi
2027 case "$myarchname" in
2028 ''|"$tarch") ;;
2029 *)
2030         echo "(Your architecture name used to be $myarchname.)"
2031         archname=''
2032         ;;
2033 esac
2034 case "$archname" in
2035 '') dflt="$tarch";;
2036 *) dflt="$archname";;
2037 esac
2038 rp='What is your architecture name'
2039 . ./myread
2040 archname="$ans"
2041 myarchname="$tarch"
2042
2043 : is AFS running?
2044 echo " "
2045 case "$afs" in
2046 $define|true)   afs=true ;;
2047 $undef|false)   afs=false ;;
2048 *)      if test -d /afs; then
2049                 afs=true
2050         else
2051                 afs=false
2052         fi
2053         ;;
2054 esac
2055 if $afs; then
2056         echo "AFS may be running... I'll be extra cautious then..." >&4
2057 else
2058         echo "AFS does not seem to be running..." >&4
2059 fi
2060
2061 : decide how portable to be.  Allow command line overrides.
2062 case "$d_portable" in
2063 "$undef") ;;
2064 *)      d_portable="$define" ;;
2065 esac
2066
2067 : set up shell script to do ~ expansion
2068 cat >filexp <<EOSS
2069 $startsh
2070 : expand filename
2071 case "\$1" in
2072  ~/*|~)
2073         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2074         ;;
2075  ~*)
2076         if $test -f /bin/csh; then
2077                 /bin/csh -f -c "glob \$1"
2078                 failed=\$?
2079                 echo ""
2080                 exit \$failed
2081         else
2082                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2083                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2084                 if $test ! -d "\$dir"; then
2085                         me=\`basename \$0\`
2086                         echo "\$me: can't locate home directory for: \$name" >&2
2087                         exit 1
2088                 fi
2089                 case "\$1" in
2090                 */*)
2091                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2092                         ;;
2093                 *)
2094                         echo \$dir
2095                         ;;
2096                 esac
2097         fi
2098         ;;
2099 *)
2100         echo \$1
2101         ;;
2102 esac
2103 EOSS
2104 chmod +x filexp
2105 $eunicefix filexp
2106
2107 : now set up to get a file name
2108 cat <<'EOSC' >getfile
2109 tilde=''
2110 fullpath=''
2111 already=''
2112 skip=''
2113 none_ok=''
2114 exp_file=''
2115 nopath_ok=''
2116 orig_rp="$rp"
2117 orig_dflt="$dflt"
2118
2119 case "$fn" in
2120 *\(*)
2121         expr $fn : '.*(\(.*\)).*' | tr ',' '\012' >getfile.ok
2122         fn=`echo $fn | sed 's/(.*)//'`
2123         ;;
2124 esac
2125
2126 case "$fn" in
2127 *:*)
2128         loc_file=`expr $fn : '.*:\(.*\)'`
2129         fn=`expr $fn : '\(.*\):.*'`
2130         ;;
2131 esac
2132
2133 case "$fn" in
2134 *~*) tilde=true;;
2135 esac
2136 case "$fn" in
2137 */*) fullpath=true;;
2138 esac
2139 case "$fn" in
2140 *+*) skip=true;;
2141 esac
2142 case "$fn" in
2143 *n*) none_ok=true;;
2144 esac
2145 case "$fn" in
2146 *e*) exp_file=true;;
2147 esac
2148 case "$fn" in
2149 *p*) nopath_ok=true;;
2150 esac
2151
2152 case "$fn" in
2153 *f*) type='File';;
2154 *d*) type='Directory';;
2155 *l*) type='Locate';;
2156 esac
2157
2158 what="$type"
2159 case "$what" in
2160 Locate) what='File';;
2161 esac
2162
2163 case "$exp_file" in
2164 '')
2165         case "$d_portable" in
2166         "$define") ;;
2167         *) exp_file=true;;
2168         esac
2169         ;;
2170 esac
2171
2172 cd ..
2173 while test "$type"; do
2174         redo=''
2175         rp="$orig_rp"
2176         dflt="$orig_dflt"
2177         case "$tilde" in
2178         true) rp="$rp (~name ok)";;
2179         esac
2180         . UU/myread
2181         if test -f UU/getfile.ok && \
2182                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2183         then
2184                 value="$ans"
2185                 ansexp="$ans"
2186                 break
2187         fi
2188         case "$ans" in
2189         none)
2190                 value=''
2191                 ansexp=''
2192                 case "$none_ok" in
2193                 true) type='';;
2194                 esac
2195                 ;;
2196         *)
2197                 case "$tilde" in
2198                 '') value="$ans"
2199                         ansexp="$ans";;
2200                 *)
2201                         value=`UU/filexp $ans`
2202                         case $? in
2203                         0)
2204                                 if test "$ans" != "$value"; then
2205                                         echo "(That expands to $value on this system.)"
2206                                 fi
2207                                 ;;
2208                         *) value="$ans";;
2209                         esac
2210                         ansexp="$value"
2211                         case "$exp_file" in
2212                         '') value="$ans";;
2213                         esac
2214                         ;;
2215                 esac
2216                 case "$fullpath" in
2217                 true)
2218                         case "$ansexp" in
2219                         /*) value="$ansexp" ;;
2220                         *)
2221                                 redo=true
2222                                 case "$already" in
2223                                 true)
2224                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2225                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2226                                         ;;
2227                                 *)
2228                                 echo "Please give a full path name, starting with slash." >&4
2229                                         case "$tilde" in
2230                                         true)
2231                                 echo "Note that using ~name is ok provided it expands well." >&4
2232                                                 already=true
2233                                                 ;;
2234                                         esac
2235                                 esac
2236                                 ;;
2237                         esac
2238                         ;;
2239                 esac
2240                 case "$redo" in
2241                 '')
2242                         case "$type" in
2243                         File)
2244                                 if test -f "$ansexp"; then
2245                                         type=''
2246                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2247                                 then
2248                                         echo "($value is not a plain file, but that's ok.)"
2249                                         type=''
2250                                 fi
2251                                 ;;
2252                         Directory)
2253                                 if test -d "$ansexp"; then
2254                                         type=''
2255                                 fi
2256                                 ;;
2257                         Locate)
2258                                 if test -d "$ansexp"; then
2259                                         echo "(Looking for $loc_file in directory $value.)"
2260                                         value="$value/$loc_file"
2261                                         ansexp="$ansexp/$loc_file"
2262                                 fi
2263                                 if test -f "$ansexp"; then
2264                                         type=''
2265                                 fi
2266                                 case "$nopath_ok" in
2267                                 true)   case "$value" in
2268                                         */*) ;;
2269                                         *)      echo "Assuming $value will be in people's path."
2270                                                 type=''
2271                                                 ;;
2272                                         esac
2273                                         ;;
2274                                 esac
2275                                 ;;
2276                         esac
2277
2278                         case "$skip" in
2279                         true) type='';
2280                         esac
2281
2282                         case "$type" in
2283                         '') ;;
2284                         *)
2285                                 if test "$fastread" = yes; then
2286                                         dflt=y
2287                                 else
2288                                         dflt=n
2289                                 fi
2290                                 rp="$what $value doesn't exist.  Use that name anyway?"
2291                                 . UU/myread
2292                                 dflt=''
2293                                 case "$ans" in
2294                                 y*) type='';;
2295                                 *) echo " ";;
2296                                 esac
2297                                 ;;
2298                         esac
2299                         ;;
2300                 esac
2301                 ;;
2302         esac
2303 done
2304 cd UU
2305 ans="$value"
2306 rp="$orig_rp"
2307 dflt="$orig_dflt"
2308 rm -f getfile.ok
2309 EOSC
2310
2311 : determine root of directory hierarchy where package will be installed.
2312 case "$prefix" in
2313 '')
2314         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2315         ;;
2316 *)
2317         dflt="$prefix"
2318         ;;
2319 esac
2320 $cat <<EOM
2321
2322 By default, $package will be installed in $dflt/bin, manual
2323 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
2324 all installation directories. Typically set to /usr/local, but you
2325 may choose /usr if you wish to install $package among your system
2326 binaries. If you wish to have binaries under /bin but manual pages
2327 under /usr/local/man, that's ok: you will be prompted separately
2328 for each of the installation directories, the prefix being only used
2329 to set the defaults.
2330
2331 EOM
2332 fn=d~
2333 rp='Installation prefix to use?'
2334 . ./getfile
2335 oldprefix=''
2336 case "$prefix" in
2337 '') ;;
2338 *)
2339         case "$ans" in
2340         "$prefix") ;;
2341         *) oldprefix="$prefix";;
2342         esac
2343         ;;
2344 esac
2345 prefix="$ans"
2346 prefixexp="$ansexp"
2347
2348 : set the prefixit variable, to compute a suitable default value
2349 prefixit='case "$3" in
2350 ""|none)
2351         case "$oldprefix" in
2352         "") eval "$1=\"\$$2\"";;
2353         *)
2354                 case "$3" in
2355                 "") eval "$1=";;
2356                 none)
2357                         eval "tp=\"\$$2\"";
2358                         case "$tp" in
2359                         ""|" ") eval "$1=\"\$$2\"";;
2360                         *) eval "$1=";;
2361                         esac;;
2362                 esac;;
2363         esac;;
2364 *)
2365         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
2366         case "$tp" in
2367         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
2368         /*-$oldprefix/*|\~*-$oldprefix/*)
2369                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
2370         *) eval "$1=\"\$$2\"";;
2371         esac;;
2372 esac'
2373
2374 : determine where private library files go
2375 : Usual default is /usr/local/lib/perl5.  Also allow things like 
2376 : /opt/perl/lib, since /opt/perl/lib/perl5 would be redundant.
2377 case "$prefix" in
2378 *perl*) set dflt privlib lib ;;
2379 *)       set dflt privlib lib/$package ;;
2380 esac
2381 eval $prefixit
2382 $cat <<EOM
2383
2384 There are some auxiliary files for $package that need to be put into a
2385 private library directory that is accessible by everyone.
2386
2387 EOM
2388 fn=d~+
2389 rp='Pathname where the private library files will reside?'
2390 . ./getfile
2391 if $test "X$privlibexp" != "X$ansexp"; then
2392         installprivlib=''
2393 fi
2394 privlib="$ans"
2395 privlibexp="$ansexp"
2396 if $afs; then
2397         $cat <<EOM
2398
2399 Since you are running AFS, I need to distinguish the directory in which
2400 private files reside from the directory in which they are installed (and from
2401 which they are presumably copied to the former directory by occult means).
2402
2403 EOM
2404         case "$installprivlib" in
2405         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
2406         *) dflt="$installprivlib";;
2407         esac
2408         fn=de~
2409         rp='Where will private files be installed?'
2410         . ./getfile
2411         installprivlib="$ans"
2412 else
2413         installprivlib="$privlibexp"
2414 fi
2415
2416 : set the base revision
2417 baserev=5.0
2418
2419 : get the patchlevel
2420 echo " "
2421 echo "Getting the current patchlevel..." >&4
2422 if $test -r ../patchlevel.h;then
2423         patchlevel=`awk '/PATCHLEVEL/ {print $3}' ../patchlevel.h`
2424         subversion=`awk '/SUBVERSION/ {print $3}' ../patchlevel.h`
2425 else
2426         patchlevel=0
2427         subversion=0
2428 fi
2429 echo "(You have $package $baserev patchlevel $patchlevel subversion $subversion.)"
2430
2431 : set the prefixup variable, to restore leading tilda escape
2432 prefixup='case "$prefixexp" in
2433 "$prefix") ;;
2434 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
2435 esac'
2436
2437 : determine where public architecture dependent libraries go
2438 set archlib archlib
2439 eval $prefixit
2440 case "$archlib" in
2441 '')
2442         case "$privlib" in
2443         '')     dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib`
2444                 set dflt
2445                 eval $prefixup
2446                 ;;
2447         *)      version=`LC_ALL=C;export LC_ALL;\
2448                         echo $baserev $patchlevel $subversion | \
2449                         $awk '{print $1 + $2/1000.0 + $3/100000.0}'`
2450                 dflt="$privlib/$archname/$version"
2451                 ;;
2452         esac
2453         ;;
2454 *) dflt="$archlib";;
2455 esac
2456 cat <<EOM
2457
2458 $spackage contains architecture-dependent library files.  If you are
2459 sharing libraries in a heterogeneous environment, you might store
2460 these files in a separate location.  Otherwise, you can just include
2461 them with the rest of the public library files.
2462
2463 EOM
2464 fn=d+~
2465 rp='Where do you want to put the public architecture-dependent libraries?'
2466 . ./getfile
2467 archlib="$ans"
2468 archlibexp="$ansexp"
2469
2470 if $afs; then
2471         $cat <<EOM
2472
2473 Since you are running AFS, I need to distinguish the directory in which
2474 private files reside from the directory in which they are installed (and from
2475 which they are presumably copied to the former directory by occult means).
2476
2477 EOM
2478         case "$installarchlib" in
2479         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
2480         *) dflt="$installarchlib";;
2481         esac
2482         fn=de~
2483         rp='Where will architecture-dependent library files be installed?'
2484         . ./getfile
2485         installarchlib="$ans"
2486 else
2487         installarchlib="$archlibexp"
2488 fi
2489 if $test X"$archlib" = X"$privlib"; then
2490         d_archlib="$undef"
2491 else
2492         d_archlib="$define"
2493 fi
2494
2495 : set up the script used to warn in case of inconsistency
2496 cat <<'EOSC' >whoa
2497 dflt=y
2498 echo " "
2499 echo "*** WHOA THERE!!! ***" >&4
2500 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2501 rp="    Keep the $hint value?"
2502 . ./myread
2503 case "$ans" in
2504 y) td=$was; tu=$was;;
2505 esac
2506 EOSC
2507
2508 : function used to set $1 to $val
2509 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2510 case "$val$was" in
2511 $define$undef) . ./whoa; eval "$var=\$td";;
2512 $undef$define) . ./whoa; eval "$var=\$tu";;
2513 *) eval "$var=$val";;
2514 esac'
2515
2516 : make some quick guesses about what we are up against
2517 echo " "
2518 $echo $n "Hmm...  $c"
2519 echo exit 1 >bsd
2520 echo exit 1 >usg
2521 echo exit 1 >v7
2522 echo exit 1 >osf1
2523 echo exit 1 >eunice
2524 echo exit 1 >xenix
2525 echo exit 1 >venix
2526 echo exit 1 >os2
2527 d_bsd="$undef"
2528 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2529 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2530 then
2531         echo "Looks kind of like an OSF/1 system, but we'll see..."
2532         echo exit 0 >osf1
2533 elif test `echo abc | tr a-z A-Z` = Abc ; then
2534         xxx=`./loc addbib blurfl $pth`
2535         if $test -f $xxx; then
2536         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2537                 echo exit 0 >bsd
2538                 echo exit 0 >usg
2539         else
2540                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2541                         echo "Looks kind of like an extended USG system, but we'll see..."
2542                 else
2543                         echo "Looks kind of like a USG system, but we'll see..."
2544                 fi
2545                 echo exit 0 >usg
2546         fi
2547 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2548         echo "Looks kind of like a BSD system, but we'll see..."
2549         d_bsd="$define"
2550         echo exit 0 >bsd
2551 else
2552         echo "Looks kind of like a Version 7 system, but we'll see..."
2553         echo exit 0 >v7
2554 fi
2555 case "$eunicefix" in
2556 *unixtovms*)
2557         $cat <<'EOI'
2558 There is, however, a strange, musty smell in the air that reminds me of
2559 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2560 EOI
2561         echo exit 0 >eunice
2562         d_eunice="$define"
2563 : it so happens the Eunice I know will not run shell scripts in Unix format
2564         ;;
2565 *)
2566         echo " "
2567         echo "Congratulations.  You aren't running Eunice."
2568         d_eunice="$undef"
2569         ;;
2570 esac
2571 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2572 case "$p_" in
2573 :) ;;
2574 *)
2575         $cat <<'EOI'
2576 I have the feeling something is not exactly right, however...don't tell me...
2577 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2578 EOI
2579         echo exit 0 >os2
2580         ;;
2581 esac
2582 if test -f /xenix; then
2583         echo "Actually, this looks more like a XENIX system..."
2584         echo exit 0 >xenix
2585         d_xenix="$define"
2586 else
2587         echo " "
2588         echo "It's not Xenix..."
2589         d_xenix="$undef"
2590 fi
2591 chmod +x xenix
2592 $eunicefix xenix
2593 if test -f /venix; then
2594         echo "Actually, this looks more like a VENIX system..."
2595         echo exit 0 >venix
2596 else
2597         echo " "
2598         if ./xenix; then
2599                 : null
2600         else
2601                 echo "Nor is it Venix..."
2602         fi
2603 fi
2604 chmod +x bsd usg v7 osf1 eunice xenix venix os2
2605 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
2606 $rm -f foo
2607
2608 : see if setuid scripts can be secure
2609 $cat <<EOM
2610
2611 Some kernels have a bug that prevents setuid #! scripts from being
2612 secure.  Some sites have disabled setuid #! scripts because of this.
2613
2614 First let's decide if your kernel supports secure setuid #! scripts.
2615 (If setuid #! scripts would be secure but have been disabled anyway,
2616 don't say that they are secure if asked.)
2617
2618 EOM
2619
2620 val="$undef"
2621 if $test -d /dev/fd; then
2622         echo "#!$ls" >reflect
2623         chmod +x,u+s reflect
2624         ./reflect >flect 2>&1
2625         if $contains "/dev/fd" flect >/dev/null; then
2626                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
2627                 val="$define"
2628         else
2629                 $cat <<EOM
2630 If you are not sure if they are secure, I can check but I'll need a
2631 username and password different from the one you are using right now.
2632 If you don't have such a username or don't want me to test, simply
2633 enter 'none'.
2634
2635 EOM
2636                 rp='Other username to test security of setuid scripts with?'
2637                 dflt='none'
2638                 . ./myread
2639                 case "$ans" in
2640                 n|none)
2641                         case "$d_suidsafe" in
2642                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
2643                                 dflt=n;;
2644                         "$undef")
2645                                 echo "Well, the $hint value is *not* secure." >&4
2646                                 dflt=n;;
2647                         *)      echo "Well, the $hint value *is* secure." >&4
2648                                 dflt=y;;
2649                         esac
2650                         ;;
2651                 *)
2652                         $rm -f reflect flect
2653                         echo "#!$ls" >reflect
2654                         chmod +x,u+s reflect
2655                         echo >flect
2656                         chmod a+w flect
2657                         echo '"su" will (probably) prompt you for '"$ans's password."
2658                         su $ans -c './reflect >flect'
2659                         if $contains "/dev/fd" flect >/dev/null; then
2660                                 echo "Okay, it looks like setuid scripts are secure." >&4
2661                                 dflt=y
2662                         else
2663                                 echo "I don't think setuid scripts are secure." >&4
2664                                 dflt=n
2665                         fi
2666                         ;;
2667                 esac
2668                 rp='Does your kernel have *secure* setuid scripts?'
2669                 . ./myread
2670                 case "$ans" in
2671                 [yY]*)  val="$define";;
2672                 *)      val="$undef";;
2673                 esac
2674         fi
2675 else
2676         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
2677         echo "(That's for file descriptors, not floppy disks.)"
2678         val="$undef"
2679 fi
2680 set d_suidsafe
2681 eval $setvar
2682
2683 $rm -f reflect flect
2684
2685 : now see if they want to do setuid emulation
2686 echo " "
2687 val="$undef"
2688 case "$d_suidsafe" in
2689 "$define")
2690         val="$undef"
2691         echo "No need to emulate SUID scripts since they are secure here." >& 4
2692         ;;
2693 *)
2694         $cat <<EOM
2695 Some systems have disabled setuid scripts, especially systems where
2696 setuid scripts cannot be secure.  On systems where setuid scripts have
2697 been disabled, the setuid/setgid bits on scripts are currently
2698 useless.  It is possible for $package to detect those bits and emulate
2699 setuid/setgid in a secure fashion.  This emulation will only work if
2700 setuid scripts have been disabled in your kernel.
2701
2702 EOM
2703         case "$d_dosuid" in
2704         "$define") dflt=y ;;
2705         *) dflt=n ;;
2706         esac
2707         rp="Do you want to do setuid/setgid emulation?"
2708         . ./myread
2709         case "$ans" in
2710         [yY]*)  val="$define";;
2711         *)      val="$undef";;
2712         esac
2713         ;;
2714 esac
2715 set d_dosuid
2716 eval $setvar
2717
2718 : determine where site specific libraries go.
2719 set sitelib sitelib
2720 eval $prefixit
2721 case "$sitelib" in
2722 '')     dflt="$privlib/site_perl" ;;
2723 *)      dflt="$sitelib" ;;
2724 esac
2725 $cat <<EOM
2726
2727 The installation process will also create a directory for
2728 site-specific extensions and modules.  Some users find it convenient
2729 to place all local files in this directory rather than in the main
2730 distribution directory.
2731
2732 EOM
2733 fn=d~+
2734 rp='Pathname for the site-specific library files?'
2735 . ./getfile
2736 if $test "X$sitelibexp" != "X$ansexp"; then
2737         installsitelib=''
2738 fi
2739 sitelib="$ans"
2740 sitelibexp="$ansexp"
2741 if $afs; then
2742         $cat <<EOM
2743
2744 Since you are running AFS, I need to distinguish the directory in which
2745 private files reside from the directory in which they are installed (and from
2746 which they are presumably copied to the former directory by occult means).
2747
2748 EOM
2749         case "$installsitelib" in
2750         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
2751         *) dflt="$installsitelib";;
2752         esac
2753         fn=de~
2754         rp='Where will private files be installed?'
2755         . ./getfile
2756         installsitelib="$ans"
2757 else
2758         installsitelib="$sitelibexp"
2759 fi
2760
2761 : determine where site specific architecture-dependent libraries go.
2762 xxx=`echo $sitelib/$archname | sed 's!^$prefix!!'`
2763 : xxx is usuually lib/site_perl/archname.
2764 set sitearch sitearch none
2765 eval $prefixit
2766 case "$sitearch" in
2767 '')     dflt="$sitelib/$archname" ;;
2768 *)      dflt="$sitearch" ;;
2769 esac
2770 $cat <<EOM
2771
2772 The installation process will also create a directory for
2773 architecture-dependent site-specific extensions and modules.
2774
2775 EOM
2776 fn=nd~+
2777 rp='Pathname for the site-specific architecture-dependent library files?'
2778 . ./getfile
2779 if $test "X$sitearchexp" != "X$ansexp"; then
2780         installsitearch=''
2781 fi
2782 sitearch="$ans"
2783 sitearchexp="$ansexp"
2784 if $afs; then
2785         $cat <<EOM
2786
2787 Since you are running AFS, I need to distinguish the directory in which
2788 private files reside from the directory in which they are installed (and from
2789 which they are presumably copied to the former directory by occult means).
2790
2791 EOM
2792         case "$installsitearch" in
2793         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
2794         *) dflt="$installsitearch";;
2795         esac
2796         fn=de~
2797         rp='Where will private files be installed?'
2798         . ./getfile
2799         installsitearch="$ans"
2800 else
2801         installsitearch="$sitearchexp"
2802 fi
2803
2804 : determine where old public architecture dependent libraries might be
2805 case "$oldarchlib" in
2806 '')     case "$privlib" in
2807         '') ;;
2808         *)      dflt="$privlib/$archname"
2809                 ;;
2810         esac
2811         ;;
2812 *)      dflt="$oldarchlib" 
2813         ;;
2814 esac
2815 if $test ! -d "$dflt/auto"; then
2816         dflt=none
2817 fi
2818 cat <<EOM
2819
2820 In 5.001, Perl stored architecture-dependent library files in a directory
2821 with a name such as $privlib/$archname, 
2822 and this directory contained files from the standard extensions and 
2823 files from any additional extensions you might have added.  Starting 
2824 with version 5.002, all the architecture-dependent standard extensions 
2825 will go into a version-specific directory such as
2826 $archlib, 
2827 while locally-added extensions will go into
2828 $sitearch.
2829
2830 If you wish Perl to continue to search the old architecture-dependent
2831 library for your local extensions, give the path to that directory.
2832 If you do not wish to use your old architecture-dependent library
2833 files, answer 'none'.
2834
2835 EOM
2836 fn=dn~
2837 rp='Directory for your old 5.001 architecture-dependent libraries?'
2838 . ./getfile
2839 oldarchlib="$ans"
2840 oldarchlibexp="$ansexp"
2841 case "$oldarchlib" in
2842 ''|' ') val="$undef" ;;
2843 *) val="$define" ;;
2844 esac
2845 set d_oldarchlib
2846 eval $setvar
2847
2848 : determine where public executables go
2849 echo " "
2850 set dflt bin bin
2851 eval $prefixit
2852 fn=d~
2853 rp='Pathname where the public executables will reside?'
2854 . ./getfile
2855 if $test "X$ansexp" != "X$binexp"; then
2856         installbin=''
2857 fi
2858 bin="$ans"
2859 binexp="$ansexp"
2860 if $afs; then
2861         $cat <<EOM
2862
2863 Since you are running AFS, I need to distinguish the directory in which
2864 executables reside from the directory in which they are installed (and from
2865 which they are presumably copied to the former directory by occult means).
2866
2867 EOM
2868         case "$installbin" in
2869         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
2870         *) dflt="$installbin";;
2871         esac
2872         fn=de~
2873         rp='Where will public executables be installed?'
2874         . ./getfile
2875         installbin="$ans"
2876 else
2877         installbin="$binexp"
2878 fi
2879
2880 : determine where manual pages are on this system
2881 echo " "
2882 case "$sysman" in
2883 '') 
2884         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2885         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2886         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2887         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2888         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2889         sysman=`./loc . /usr/man/man1 $syspath`
2890         ;;
2891 esac
2892 if $test -d "$sysman"; then
2893         echo "System manual is in $sysman." >&4
2894 else
2895         echo "Could not find manual pages in source form." >&4
2896 fi
2897
2898 : see what memory models we can support
2899 case "$models" in
2900 '')
2901         $cat >pdp11.c <<'EOP'
2902 main() {
2903 #ifdef pdp11
2904         exit(0);
2905 #else
2906         exit(1);
2907 #endif
2908 }
2909 EOP
2910         cc -o pdp11 pdp11.c >/dev/null 2>&1
2911         if ./pdp11 2>/dev/null; then
2912                 dflt='unsplit split'
2913         else
2914                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2915                 case "$tans" in
2916                 X) dflt='none';;
2917                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2918                                 dflt='small'
2919                         else
2920                                 dflt=''
2921                         fi
2922                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2923                                 dflt="$dflt medium"
2924                         fi
2925                         if $test -d /lib/large || $test -d /usr/lib/large; then
2926                                 dflt="$dflt large"
2927                         fi
2928                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2929                                 dflt="$dflt huge"
2930                         fi
2931                 esac
2932         fi;;
2933 *) dflt="$models";;
2934 esac
2935 $cat <<EOM
2936  
2937 Some systems have different model sizes.  On most systems they are called
2938 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2939 split.  If your system doesn't support different memory models, say "none".
2940 If you wish to force everything to one memory model, say "none" here and
2941 put the appropriate flags later when it asks you for other cc and ld flags.
2942 Venix systems may wish to put "none" and let the compiler figure things out.
2943 (In the following question multiple model names should be space separated.)
2944
2945 EOM
2946 rp="Which memory models are supported?"
2947 . ./myread
2948 models="$ans"
2949
2950 case "$models" in
2951 none)
2952         small=''
2953         medium=''
2954         large=''
2955         huge=''
2956         unsplit=''
2957         split=''
2958         ;;
2959 *split)
2960         case "$split" in
2961         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2962                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2963                         dflt='-i'
2964                 else
2965                         dflt='none'
2966                 fi;;
2967         *) dflt="$split";;
2968         esac
2969         rp="What flag indicates separate I and D space?"
2970         . ./myread
2971         tans="$ans"
2972         case "$tans" in
2973         none) tans='';;
2974         esac
2975         split="$tans"
2976         unsplit='';;
2977 *large*|*small*|*medium*|*huge*)
2978         case "$models" in
2979         *large*)
2980                 case "$large" in
2981                 '') dflt='-Ml';;
2982                 *) dflt="$large";;
2983                 esac
2984         rp="What flag indicates large model?"
2985         . ./myread
2986         tans="$ans"
2987         case "$tans" in
2988         none) tans='';
2989         esac
2990         large="$tans";;
2991         *) large='';;
2992         esac
2993         case "$models" in
2994         *huge*) case "$huge" in
2995                 '') dflt='-Mh';;
2996                 *) dflt="$huge";;
2997                 esac
2998                 rp="What flag indicates huge model?"
2999                 . ./myread
3000                 tans="$ans"
3001                 case "$tans" in
3002                 none) tans='';
3003                 esac
3004                 huge="$tans";;
3005         *) huge="$large";;
3006         esac
3007         case "$models" in
3008         *medium*) case "$medium" in
3009                 '') dflt='-Mm';;
3010                 *) dflt="$medium";;
3011                 esac
3012                 rp="What flag indicates medium model?"
3013                 . ./myread
3014                 tans="$ans"
3015                 case "$tans" in
3016                 none) tans='';
3017                 esac
3018                 medium="$tans";;
3019         *) medium="$large";;
3020         esac
3021         case "$models" in
3022         *small*) case "$small" in
3023                 '') dflt='none';;
3024                 *) dflt="$small";;
3025                 esac
3026                 rp="What flag indicates small model?"
3027                 . ./myread
3028                 tans="$ans"
3029                 case "$tans" in
3030                 none) tans='';
3031                 esac
3032                 small="$tans";;
3033         *) small='';;
3034         esac
3035         ;;
3036 *)
3037         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3038         ;;
3039 esac
3040
3041 : see if we need a special compiler
3042 echo " "
3043 if ./usg; then
3044         case "$cc" in
3045         '') case "$Mcc" in
3046                 /*) dflt='Mcc';;
3047                 *) case "$large" in
3048                         -M*) dflt='cc';;
3049                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3050                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3051                                                 dflt='cc'
3052                                         else
3053                                                 dflt='cc -M'
3054                                         fi
3055                                 else
3056                                         dflt='cc'
3057                                 fi;;
3058                         esac;;
3059                 esac;;
3060         *)  dflt="$cc";;
3061         esac
3062         $cat <<'EOM'
3063 On some systems the default C compiler will not resolve multiple global
3064 references that happen to have the same name.  On some such systems the "Mcc"
3065 command may be used to force these to be resolved.  On other systems a "cc -M"
3066 command is required.  (Note that the -M flag on other systems indicates a
3067 memory model to use!) If you have the Gnu C compiler, you might wish to use
3068 that instead.
3069
3070 EOM
3071         rp="What command will force resolution on this system?"
3072         . ./myread
3073         cc="$ans"
3074 else
3075         case "$cc" in
3076         '') dflt=cc;;
3077         *) dflt="$cc";;
3078         esac
3079         rp="Use which C compiler?"
3080         . ./myread
3081         cc="$ans"
3082 fi
3083 echo " "
3084 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3085 $cat >gccvers.c <<EOM
3086 #include <stdio.h>
3087 int main() {
3088 #ifdef __GNUC__
3089 #ifdef __VERSION__
3090         printf("%s\n", __VERSION__);
3091 #else
3092         printf("%s\n", "1");
3093 #endif
3094 #endif
3095         exit(0);
3096 }
3097 EOM
3098 if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3099         gccversion=`./gccvers`
3100         case "$gccversion" in
3101         '') echo "You are not using GNU cc." ;;
3102         *)  echo "You are using GNU cc $gccversion." ;;
3103         esac
3104 else
3105         echo " "
3106         echo "*** WHOA THERE!!! ***" >&4
3107         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3108         case "$knowitall" in
3109         '')
3110         echo "    You'd better start hunting for one and let me know about it." >&4
3111                 exit 1
3112                 ;;
3113         esac
3114 fi
3115 $rm -f gccvers*
3116 case "$gccversion" in
3117 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3118 esac
3119
3120 : What should the include directory be ?
3121 echo " "
3122 $echo $n "Hmm...  $c"
3123 dflt='/usr/include'
3124 incpath=''
3125 mips_type=''
3126 if $test -f /bin/mips && /bin/mips; then
3127         echo "Looks like a MIPS system..."
3128         $cat >usr.c <<'EOCP'
3129 #ifdef SYSTYPE_BSD43
3130 /bsd43
3131 #endif
3132 EOCP
3133         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3134                 dflt='/bsd43/usr/include'
3135                 incpath='/bsd43'
3136                 mips_type='BSD 4.3'
3137         else
3138                 mips_type='System V'
3139         fi
3140         $rm -f usr.c usr.out
3141         echo "and you're compiling with the $mips_type compiler and libraries."
3142         xxx_prompt=y
3143         echo "exit 0" >mips
3144 else
3145         echo "Doesn't look like a MIPS system."
3146         xxx_prompt=n
3147         echo "exit 1" >mips
3148 fi
3149 chmod +x mips
3150 $eunicefix mips
3151 echo " "
3152 case "$usrinc" in
3153 '') ;;
3154 *) dflt="$usrinc";;
3155 esac
3156 case "$xxx_prompt" in
3157 y)      fn=d/
3158         rp='Where are the include files you want to use?'
3159         . ./getfile
3160         usrinc="$ans"
3161         ;;
3162 *)      usrinc="$dflt"
3163         ;;
3164 esac
3165
3166 : Set private lib path
3167 case "$plibpth" in
3168 '') if ./mips; then
3169                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3170         fi;;
3171 esac
3172 case "$libpth" in
3173 ' ') dlist='';;
3174 '') dlist="$loclibpth $plibpth $glibpth";;
3175 *) dlist="$libpth";;
3176 esac
3177
3178 : Now check and see which directories actually exist, avoiding duplicates
3179 libpth=''
3180 for xxx in $dlist
3181 do
3182     if $test -d $xxx; then
3183                 case " $libpth " in
3184                 *" $xxx "*) ;;
3185                 *) libpth="$libpth $xxx";;
3186                 esac
3187     fi
3188 done
3189 $cat <<'EOM'
3190
3191 Some systems have incompatible or broken versions of libraries.  Among
3192 the directories listed in the question below, please remove any you
3193 know not to be holding relevant libraries, and add any that are needed.
3194 Say "none" for none.
3195
3196 EOM
3197 case "$libpth" in
3198 '') dflt='none';;
3199 *)
3200         set X $libpth
3201         shift
3202         dflt=${1+"$@"}
3203         ;;
3204 esac
3205 rp="Directories to use for library searches?"
3206 . ./myread
3207 case "$ans" in
3208 none) libpth=' ';;
3209 *) libpth="$ans";;
3210 esac
3211
3212 : compute shared library extension
3213 case "$so" in
3214 '')
3215         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3216                 dflt='sl'
3217         else
3218                 dflt='so'
3219         fi
3220         ;;
3221 *) dflt="$so";;
3222 esac
3223 $cat <<EOM
3224
3225 On some systems, shared libraries may be available.  Answer 'none' if
3226 you want to suppress searching of shared libraries for the remaining
3227 of this configuration.
3228
3229 EOM
3230 rp='What is the file extension used for shared libraries?'
3231 . ./myread
3232 so="$ans"
3233
3234 : Looking for optional libraries
3235 echo " "
3236 echo "Checking for optional libraries..." >&4
3237 case "$libs" in
3238 ' '|'') dflt='';;
3239 *) dflt="$libs";;
3240 esac
3241 case "$libswanted" in
3242 '') libswanted='c_s';;
3243 esac
3244 for thislib in $libswanted; do
3245         
3246         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then
3247                 echo "Found -l$thislib (shared)."
3248                 case " $dflt " in
3249                 *"-l$thislib "*);;
3250                 *) dflt="$dflt -l$thislib";;
3251                 esac
3252         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3253                 echo "Found -l$thislib (shared)."
3254                 case " $dflt " in
3255                 *"-l$thislib "*);;
3256                 *) dflt="$dflt -l$thislib";;
3257                 esac
3258         elif xxx=`./loc lib$thislib.a X $libpth`; $test -f "$xxx"; then
3259                 echo "Found -l$thislib."
3260                 case " $dflt " in
3261                 *"-l$thislib "*);;
3262                 *) dflt="$dflt -l$thislib";;
3263                 esac
3264         elif xxx=`./loc $thislib.a X $libpth`; $test -f "$xxx"; then
3265                 echo "Found -l$thislib."
3266                 case " $dflt " in
3267                 *"-l$thislib "*);;
3268                 *) dflt="$dflt -l$thislib";;
3269                 esac
3270         elif xxx=`./loc lib${thislib}_s.a X $libpth`; $test -f "$xxx"; then
3271                 echo "Found -l${thislib}_s."
3272                 case " $dflt " in
3273                 *"-l$thislib "*);;
3274                 *) dflt="$dflt -l${thislib}_s";;
3275                 esac
3276         elif xxx=`./loc Slib$thislib.a X $xlibpth`; $test -f "$xxx"; then
3277                 echo "Found -l$thislib."
3278                 case " $dflt " in
3279                 *"-l$thislib "*);;
3280                 *) dflt="$dflt -l$thislib";;
3281                 esac
3282         else
3283                 echo "No -l$thislib."
3284         fi
3285 done
3286 set X $dflt
3287 shift
3288 dflt="$*"
3289 case "$libs" in
3290 '') dflt="$dflt";;
3291 *) dflt="$libs";;
3292 esac
3293 case "$dflt" in
3294 ' '|'') dflt='none';;
3295 esac
3296
3297 $cat <<EOM
3298  
3299 Some versions of Unix support shared libraries, which make executables smaller
3300 but make load time slightly longer.
3301
3302 On some systems, mostly System V Release 3's, the shared library is included
3303 by putting the option "-lc_s" as the last thing on the cc command line when
3304 linking.  Other systems use shared libraries by default.  There may be other
3305 libraries needed to compile $package on your machine as well.  If your system
3306 needs the "-lc_s" option, include it here.  Include any other special libraries
3307 here as well.  Say "none" for none.
3308 EOM
3309
3310 echo " "
3311 rp="Any additional libraries?"
3312 . ./myread
3313 case "$ans" in
3314 none) libs=' ';;
3315 *) libs="$ans";;
3316 esac
3317
3318 : see how we invoke the C preprocessor
3319 echo " "
3320 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3321 cat <<'EOT' >testcpp.c
3322 #define ABC abc
3323 #define XYZ xyz
3324 ABC.XYZ
3325 EOT
3326 cd ..
3327 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3328 chmod 755 cppstdin
3329 wrapper=`pwd`/cppstdin
3330 ok='false'
3331 cd UU
3332
3333 if $test "X$cppstdin" != "X" && \
3334         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3335         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3336 then
3337         echo "You used to use $cppstdin $cppminus so we'll use that again."
3338         case "$cpprun" in
3339         '') echo "But let's see if we can live without a wrapper..." ;;
3340         *)
3341                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3342                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3343                 then
3344                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3345                         ok='true'
3346                 else
3347                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3348                 fi
3349                 ;;
3350         esac
3351 else
3352         case "$cppstdin" in
3353         '') ;;
3354         *)
3355                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3356                 ;;
3357         esac
3358 fi
3359
3360 if $ok; then
3361         : nothing
3362 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3363         $cc -E <testcpp.c >testcpp.out 2>&1; \
3364         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3365         echo "Yup, it does."
3366         x_cpp="$cc -E"
3367         x_minus='';
3368 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3369         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3370         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3371         echo "Yup, it does."
3372         x_cpp="$cc -E"
3373         x_minus='-';
3374 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3375         $cc -P <testcpp.c >testcpp.out 2>&1; \
3376         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3377         echo "Yipee, that works!"
3378         x_cpp="$cc -P"
3379         x_minus='';
3380 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3381         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3382         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3383         echo "At long last!"
3384         x_cpp="$cc -P"
3385         x_minus='-';
3386 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3387         $cpp <testcpp.c >testcpp.out 2>&1; \
3388         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3389         echo "It works!"
3390         x_cpp="$cpp"
3391         x_minus='';
3392 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3393         $cpp - <testcpp.c >testcpp.out 2>&1; \
3394         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3395         echo "Hooray, it works!  I was beginning to wonder."
3396         x_cpp="$cpp"
3397         x_minus='-';
3398 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3399         $wrapper <testcpp.c >testcpp.out 2>&1; \
3400         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3401         x_cpp="$wrapper"
3402         x_minus=''
3403         echo "Eureka!"
3404 else
3405         dflt=''
3406         rp="No dice.  I can't find a C preprocessor.  Name one:"
3407         . ./myread
3408         x_cpp="$ans"
3409         x_minus=''
3410         $x_cpp <testcpp.c >testcpp.out 2>&1
3411         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3412                 echo "OK, that will do." >&4
3413         else
3414 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3415                 exit 1
3416         fi
3417 fi
3418
3419 case "$ok" in
3420 false)
3421         cppstdin="$x_cpp"
3422         cppminus="$x_minus"
3423         cpprun="$x_cpp"
3424         cpplast="$x_minus"
3425         set X $x_cpp
3426         shift
3427         case "$1" in
3428         "$cpp")
3429                 echo "Perhaps can we force $cc -E using a wrapper..."
3430                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3431                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3432                 then
3433                         echo "Yup, we can."
3434                         cppstdin="$wrapper"
3435                         cppminus='';
3436                 else
3437                         echo "Nope, we'll have to live without it..."
3438                 fi
3439                 ;;
3440         esac
3441         case "$cpprun" in
3442         "$wrapper")
3443                 cpprun=''
3444                 cpplast=''
3445                 ;;
3446         esac
3447         ;;
3448 esac
3449
3450 case "$cppstdin" in
3451 "$wrapper") ;;
3452 *) $rm -f $wrapper;;
3453 esac
3454 $rm -f testcpp.c testcpp.out
3455
3456 : determine optimize, if desired, or use for debug flag also
3457 case "$optimize" in
3458 ' ') dflt='none';;
3459 '') dflt='-O';;
3460 *) dflt="$optimize";;
3461 esac
3462 $cat <<EOH
3463
3464 Some C compilers have problems with their optimizers.  By default, $package
3465 compiles with the -O flag to use the optimizer.  Alternately, you might want
3466 to use the symbolic debugger, which uses the -g flag (on traditional Unix
3467 systems).  Either flag can be specified here.  To use neither flag, specify
3468 the word "none".
3469
3470 EOH
3471 rp="What optimizer/debugger flag should be used?"
3472 . ./myread
3473 optimize="$ans"
3474 case "$optimize" in
3475 'none') optimize=" ";;
3476 esac
3477
3478 dflt=''
3479 : We will not override a previous value, but we might want to
3480 : augment a hint file
3481 case "$hint" in
3482 none|recommended)
3483         case "$gccversion" in
3484         1*) dflt='-fpcc-struct-return' ;;
3485         esac
3486         case "$optimize" in
3487         *-g*) dflt="$dflt -DDEBUGGING";;
3488         esac
3489         case "$gccversion" in
3490         2*) if test -d /etc/conf/kconfig.d &&
3491                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3492                 then
3493                         dflt="$dflt -posix"
3494                 fi
3495                 ;;
3496         esac
3497         ;;
3498 esac
3499
3500 case "$mips_type" in
3501 *BSD*|'') inclwanted="$locincpth $usrinc";;
3502 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3503 esac
3504 for thisincl in $inclwanted; do
3505         if $test -d $thisincl; then
3506                 if $test x$thisincl != x$usrinc; then
3507                         case "$dflt" in
3508                         *$thisincl*);;
3509                         *) dflt="$dflt -I$thisincl";;
3510                         esac
3511                 fi
3512         fi
3513 done
3514
3515 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3516         xxx=true;
3517 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3518         xxx=true;
3519 else
3520         xxx=false;
3521 fi;
3522 if $xxx; then
3523         case "$dflt" in
3524         *$2*);;
3525         *) dflt="$dflt -D$2";;
3526         esac;
3527 fi'
3528
3529 if ./osf1; then
3530         set signal.h __LANGUAGE_C__; eval $inctest
3531 else
3532         set signal.h LANGUAGE_C; eval $inctest
3533 fi
3534 set signal.h NO_PROTOTYPE; eval $inctest
3535 set signal.h _NO_PROTO; eval $inctest
3536
3537 case "$hint" in
3538 none|recommended) dflt="$ccflags $dflt" ;;
3539 *) dflt="$ccflags";;
3540 esac
3541
3542 case "$dflt" in
3543 ''|' ') dflt=none;;
3544 esac
3545 $cat <<EOH
3546
3547 Your C compiler may want other flags.  For this question you should include
3548 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3549 but you should NOT include libraries or ld flags like -lwhatever.  If you
3550 want $package to honor its debug switch, you should include -DDEBUGGING here.
3551 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE,
3552 -DHIDEMYMALLOC or -DCRIPPLED_CC.
3553
3554 To use no flags, specify the word "none".
3555
3556 EOH
3557 set X $dflt
3558 shift
3559 dflt=${1+"$@"}
3560 rp="Any additional cc flags?"
3561 . ./myread
3562 case "$ans" in
3563 none) ccflags='';;
3564 *) ccflags="$ans";;
3565 esac
3566
3567 : the following weeds options from ccflags that are of no interest to cpp
3568 cppflags="$ccflags"
3569 case "$gccversion" in
3570 1*) cppflags="$cppflags -D__GNUC__"
3571 esac
3572 case "$mips_type" in
3573 '');;
3574 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
3575 esac
3576 case "$cppflags" in
3577 '');;
3578 *)
3579         echo " "
3580         echo "Let me guess what the preprocessor flags are..." >&4
3581         set X $cppflags
3582         shift
3583         cppflags=''
3584         $cat >cpp.c <<'EOM'
3585 #define BLURFL foo
3586
3587 BLURFL xx LFRULB
3588 EOM
3589         previous=''
3590         for flag in $*
3591         do
3592                 case "$flag" in
3593                 -*) ftry="$flag";;
3594                 *) ftry="$previous $flag";;
3595                 esac
3596                 if $cppstdin -DLFRULB=bar $ftry $cppminus <cpp.c \
3597                         >cpp1.out 2>/dev/null && \
3598                         $cpprun -DLFRULB=bar $ftry $cpplast <cpp.c \
3599                         >cpp2.out 2>/dev/null && \
3600                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
3601                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
3602                 then
3603                         cppflags="$cppflags $ftry"
3604                         previous=''
3605                 else
3606                         previous="$flag"
3607                 fi
3608         done
3609         set X $cppflags
3610         shift
3611         cppflags=${1+"$@"}
3612         case "$cppflags" in
3613         *-*)  echo "They appear to be: $cppflags";;
3614         esac
3615         $rm -f cpp.c cpp?.out
3616         ;;
3617 esac
3618
3619 : flags used in final linking phase
3620
3621 case "$ldflags" in
3622 '') if ./venix; then
3623                 dflt='-i -z'
3624         else
3625                 dflt=''
3626         fi
3627         case "$ccflags" in
3628         *-posix*) dflt="$dflt -posix" ;;
3629         esac
3630         ;;
3631 *) dflt="$ldflags";;
3632 esac
3633
3634 : Try to guess additional flags to pick up local libraries.
3635 for thislibdir in $libpth; do
3636         case " $loclibpth " in
3637         *" $thislibdir "*)
3638                 case "$dflt " in 
3639                 *"-L$thislibdir "*) ;;
3640                 *)  dflt="$dflt -L$thislibdir" ;;
3641                 esac
3642                 ;;
3643         esac
3644 done
3645
3646 case "$dflt" in
3647 '') dflt='none' ;;
3648 esac
3649
3650 $cat <<EOH
3651
3652 Your C linker may need flags.  For this question you should
3653 include -L/whatever and any other flags used by the C linker, but you
3654 should NOT include libraries like -lwhatever.
3655
3656 Make sure you include the appropriate -L/path flags if your C linker
3657 does not normally search all of the directories you specified above,
3658 namely
3659         $libpth
3660 To use no flags, specify the word "none".
3661
3662 EOH
3663
3664 rp="Any additional ld flags (NOT including libraries)?"
3665 . ./myread
3666 case "$ans" in
3667 none) ldflags='';;
3668 *) ldflags="$ans";;
3669 esac
3670 rmlist="$rmlist pdp11"
3671
3672 : coherency check
3673 echo " "
3674 echo "Checking your choice of C compiler and flags for coherency..." >&4
3675 set X $cc $optimize $ccflags $ldflags try.c -o try
3676 shift
3677 $cat >try.msg <<EOM
3678 I've tried to compile and run a simple program with:
3679
3680         $*
3681         ./try
3682
3683 and I got the following output:
3684
3685 EOM
3686 $cat > try.c <<'EOF'
3687 #include <stdio.h>
3688 main() { exit(0); }
3689 EOF
3690 dflt=y
3691 if sh -c "$cc $optimize $ccflags try.c -o try $ldflags" >>try.msg 2>&1; then
3692         if sh -c './try' >>try.msg 2>&1; then
3693                 dflt=n
3694         else
3695                 echo "The program compiled OK, but exited with status $?." >>try.msg
3696                 rp="You have a problem.  Shall I abort Configure"
3697                 dflt=y
3698         fi
3699 else
3700         echo "I can't compile the test program." >>try.msg
3701         rp="You have a BIG problem.  Shall I abort Configure"
3702         dflt=y
3703 fi
3704 case "$dflt" in
3705 y)
3706         $cat try.msg
3707         case "$knowitall" in
3708         '')
3709                 echo "(The supplied flags might be incorrect with this C compiler.)"
3710                 ;;
3711         *) dflt=n;;
3712         esac
3713         echo " "
3714         . ./myread
3715         case "$ans" in
3716         n*|N*) ;;
3717         *)      echo "Ok.  Stopping Configure." >&4
3718                 exit 1
3719                 ;;
3720         esac
3721         ;;
3722 n) echo "OK, that should do.";;
3723 esac
3724 $rm -f try try.* core
3725
3726 echo " "
3727 echo "Checking for GNU C Library..." >&4
3728 cat >gnulibc.c <<EOM
3729 int
3730 main()
3731 {
3732   return __libc_main();
3733 }
3734 EOM
3735 if $cc $ccflags $ldflags -o gnulibc gnulibc.c $libs >/dev/null 2>&1 && \
3736     ./gnulibc | $contains '^GNU C Library' >/dev/null 2>&1; then
3737         val="$define"
3738         echo "You are using the GNU C Library"
3739 else
3740         val="$undef"
3741         echo "You are not using the GNU C Library"
3742 fi
3743 $rm -f gnulibc*
3744 set d_gnulibc
3745 eval $setvar
3746
3747 : see if nm is to be used to determine whether a symbol is defined or not
3748 case "$usenm" in
3749 '')
3750         case "$d_gnulibc" in
3751         $define)
3752                 dflt=n
3753                 ;;
3754         *)
3755                 dflt=`egrep 'inlibc|csym' ../Configure | wc -l 2>/dev/null`
3756                 if $test $dflt -gt 20; then
3757                         dflt=y
3758                 else
3759                         dflt=n
3760                 fi
3761                 ;;
3762         esac
3763         ;;
3764 *)
3765         case "$usenm" in
3766         true) dflt=y;;
3767         *) dflt=n;;
3768         esac
3769         ;;
3770 esac
3771 $cat <<EOM
3772
3773 I can use 'nm' to extract the symbols from your C libraries. This is a time
3774 consuming task which may generate huge output on the disk (up to 3 megabytes)
3775 but that should make the symbols extraction faster. The alternative is to skip
3776 the 'nm' extraction part and to compile a small test program instead to
3777 determine whether each symbol is present. If you have a fast C compiler and/or
3778 if your 'nm' output cannot be parsed, this may be the best solution.
3779 You shouldn't let me use 'nm' if you have the GNU C Library.
3780
3781 EOM
3782 rp='Shall I use nm to extract C symbols from the libraries?'
3783 . ./myread
3784 case "$ans" in
3785 n|N) usenm=false;;
3786 *) usenm=true;;
3787 esac
3788
3789 runnm=$usenm
3790 case "$reuseval" in
3791 true) runnm=false;;
3792 esac
3793
3794 : nm options which may be necessary
3795 case "$nm_opt" in
3796 '') if $test -f /mach_boot; then
3797                 nm_opt=''
3798         elif $test -d /usr/ccs/lib; then
3799                 nm_opt='-p'
3800         elif $test -f /dgux; then
3801                 nm_opt='-p'
3802         else
3803                 nm_opt=''
3804         fi;;
3805 esac
3806
3807 : nm options which may be necessary for shared libraries but illegal
3808 : for archive libraries.  Thank you, Linux.
3809 case "$nm_so_opt" in
3810 '')     case "$myuname" in
3811         *linux*)
3812                 if nm --help | $grep 'dynamic' > /dev/null 2>&1; then
3813                         nm_so_opt='--dynamic'
3814                 fi
3815                 ;;
3816         esac
3817         ;;
3818 esac
3819
3820 case "$runnm" in
3821 true)
3822 : get list of predefined functions in a handy place
3823 echo " "
3824 case "$libc" in
3825 '') libc=unknown
3826         case "$libs" in
3827         *-lc_s*) libc=`./loc libc_s.a $libc $libpth`
3828         esac
3829         ;;
3830 esac
3831 libnames='';
3832 case "$libs" in
3833 '') ;;
3834 *)  for thislib in $libs; do
3835         case "$thislib" in
3836         -lc|-lc_s)
3837                 : Handle C library specially below.
3838                 ;;
3839         -l*)
3840                 thislib=`echo $thislib | $sed -e 's/^-l//'`
3841                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
3842                         :
3843                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
3844                         :
3845                 elif try=`./loc lib$thislib.a X $libpth`; $test -f "$try"; then
3846                         :
3847                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
3848                         :
3849                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
3850                         :
3851                 elif try=`./loc Slib$thislib.a X $xlibpth`; $test -f "$try"; then
3852                         :
3853                 else
3854                         try=''
3855                 fi
3856                 libnames="$libnames $try"
3857                 ;;
3858         *) libnames="$libnames $thislib" ;;
3859         esac
3860         done
3861         ;;
3862 esac
3863 xxx=normal
3864 case "$libc" in
3865 unknown)
3866         set /lib/libc.$so
3867         for xxx in $libpth; do
3868                 $test -r $1 || set $xxx/libc.$so
3869                 : The messy sed command sorts on library version numbers.
3870                 $test -r $1 || \
3871                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
3872                                 tr ' ' '\012' | egrep -v '\.[A-Za-z]*$' | $sed -e '
3873                                 h
3874                                 s/[0-9][0-9]*/0000&/g
3875                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
3876                                 G
3877                                 s/\n/ /' | \
3878                         sort | $sed -e 's/^.* //'`
3879                 eval set \$$#
3880         done
3881         $test -r $1 || set /usr/ccs/lib/libc.$so
3882         $test -r $1 || set /lib/libsys_s.a
3883         ;;
3884 *)
3885         set blurfl
3886         ;;
3887 esac
3888 if $test -r "$1"; then
3889         echo "Your (shared) C library seems to be in $1."
3890         libc="$1"
3891 elif $test -r /lib/libc && $test -r /lib/clib; then
3892         echo "Your C library seems to be in both /lib/clib and /lib/libc."
3893         xxx=apollo
3894         libc='/lib/clib /lib/libc'
3895         if $test -r /lib/syslib; then
3896                 echo "(Your math library is in /lib/syslib.)"
3897                 libc="$libc /lib/syslib"
3898         fi
3899 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
3900         echo "Your C library seems to be in $libc, as you said before."
3901 elif $test -r $incpath/usr/lib/libc.a; then
3902         libc=$incpath/usr/lib/libc.a;
3903         echo "Your C library seems to be in $libc.  That's fine."
3904 elif $test -r /lib/libc.a; then
3905         libc=/lib/libc.a;
3906         echo "Your C library seems to be in $libc.  You're normal."
3907 else
3908         if tans=`./loc libc.a blurfl/dyick $libpth`; $test -r "$tans"; then
3909                 :
3910         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
3911                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
3912         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
3913                 :
3914         elif tans=`./loc Slibc.a blurfl/dyick $xlibpth`; $test -r "$tans"; then
3915                 :
3916         elif tans=`./loc Mlibc.a blurfl/dyick $xlibpth`; $test -r "$tans"; then
3917                 :
3918         else
3919                 tans=`./loc Llibc.a blurfl/dyick $xlibpth`
3920         fi
3921         if $test -r "$tans"; then
3922                 echo "Your C library seems to be in $tans, of all places."
3923                 libc=$tans
3924         else
3925                 libc='blurfl'
3926         fi
3927 fi
3928 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
3929         dflt="$libc"
3930         cat <<EOM
3931
3932 If the guess above is wrong (which it might be if you're using a strange
3933 compiler, or your machine supports multiple models), you can override it here.
3934
3935 EOM
3936 else
3937         dflt=''
3938         echo $libpth | tr ' ' '\012' | sort | uniq > libpath
3939         cat >&4 <<EOM
3940 I can't seem to find your C library.  I've looked in the following places:
3941
3942 EOM
3943         $sed 's/^/      /' libpath
3944         cat <<EOM
3945
3946 None of these seems to contain your C library. I need to get its name...
3947
3948 EOM
3949 fi
3950 fn=f
3951 rp='Where is your C library?'
3952 . ./getfile
3953 libc="$ans"
3954
3955 echo " "
3956 echo $libc $libnames | tr ' ' '\012' | sort | uniq > libnames
3957 set X `cat libnames`
3958 shift
3959 xxx=files
3960 case $# in 1) xxx=file; esac
3961 echo "Extracting names from the following $xxx for later perusal:" >&4
3962 echo " "
3963 $sed 's/^/      /' libnames >&4
3964 echo " "
3965 $echo $n "This may take a while...$c" >&4
3966
3967 : Linux may need the special Dynamic option to nm for shared libraries.
3968 : In general, this is stored in the nm_so_opt variable.
3969 : Unfortunately, that option may be fatal on non-shared libraries.
3970 for nm_libs_ext in $*; do
3971     case $nm_libs_ext in
3972         *$so*)  nm $nm_so_opt $nm_opt $nm_libs_ext 2>/dev/null ;;
3973         *)              nm $nm_opt $nm_libs_ext 2>/dev/null ;;
3974         esac
3975 done > libc.tmp
3976
3977 $echo $n ".$c"
3978 $grep fprintf libc.tmp > libc.ptf
3979 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
3980 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
3981 xxx='[ADTSIW]'
3982 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
3983         eval $xscan;\
3984         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
3985                 eval $xrun
3986 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
3987         eval $xscan;\
3988         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
3989                 eval $xrun
3990 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
3991         eval $xscan;\
3992         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
3993                 eval $xrun
3994 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
3995         eval $xscan;\
3996         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
3997                 eval $xrun
3998 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
3999         eval $xscan;\
4000         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4001                 eval $xrun
4002 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4003         eval $xscan;\
4004         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4005                 eval $xrun
4006 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4007                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4008         eval $xscan;\
4009         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4010                 eval $xrun
4011 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4012         eval $xscan;\
4013         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4014                 eval $xrun
4015 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4016         eval $xscan;\
4017         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4018                 eval $xrun
4019 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4020         eval $xscan;\
4021         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4022                 eval $xrun
4023 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4024         eval $xscan;\
4025         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4026                 eval $xrun
4027 else
4028         nm -p $* 2>/dev/null >libc.tmp
4029         $grep fprintf libc.tmp > libc.ptf
4030         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4031                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4032         then
4033                 nm_opt='-p'
4034                 eval $xrun
4035         else
4036                 echo " "
4037                 echo "nm didn't seem to work right. Trying ar instead..." >&4
4038                 com=''
4039                 if ar t $libc > libc.tmp; then
4040                         for thisname in $libnames; do
4041                                 ar t $thisname >>libc.tmp
4042                         done
4043                         $sed -e 's/\.o$//' < libc.tmp > libc.list
4044                         echo "Ok." >&4
4045                 else
4046                         echo "ar didn't seem to work right." >&4
4047                         echo "Maybe this is a Cray...trying bld instead..." >&4
4048                         if bld t $libc | $sed -e 's/.*\///' -e 's/\.o:.*$//' > libc.list
4049                         then
4050                                 for thisname in $libnames; do
4051                                         bld t $libnames | \
4052                                         $sed -e 's/.*\///' -e 's/\.o:.*$//' >>libc.list
4053                                         ar t $thisname >>libc.tmp
4054                                 done
4055                                 echo "Ok." >&4
4056                         else
4057                                 echo "That didn't work either.  Giving up." >&4
4058                                 exit 1
4059                         fi
4060                 fi
4061         fi
4062 fi
4063 nm_extract="$com"
4064 if $test -f /lib/syscalls.exp; then
4065         echo " "
4066         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4067         $sed -n 's/^\([^        ]*\)[   ]*syscall$/\1/p' /lib/syscalls.exp >>libc.list
4068 fi
4069 ;;
4070 esac
4071 $rm -f libnames libpath
4072
4073 : Define several unixisms. Hints files or command line options
4074 : can be used to override them.
4075 case "$ar" in
4076 '') ar='ar';;
4077 esac
4078 case "$lib_ext" in
4079 '') lib_ext='.a';;
4080 esac
4081 case "$obj_ext" in
4082 '') obj_ext='.o';;
4083 esac
4084 case "$path_sep" in
4085 '') path_sep=':';;
4086 esac
4087 : Which makefile gets called first.  This is used by make depend.
4088 case "$firstmakefile" in
4089 '') firstmakefile='makefile';;
4090 esac
4091
4092 : determine filename position in cpp output
4093 echo " "
4094 echo "Computing filename position in cpp output for #include directives..." >&4
4095 echo '#include <stdio.h>' > foo.c
4096 $cat >fieldn <<EOF
4097 $startsh
4098 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4099 $grep '^[       ]*#.*stdio\.h' | \
4100 while read cline; do
4101         pos=1
4102         set \$cline
4103         while $test \$# -gt 0; do
4104                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4105                         echo "\$pos"
4106                         exit 0
4107                 fi
4108                 shift
4109                 pos=\`expr \$pos + 1\`
4110         done
4111 done
4112 EOF
4113 chmod +x fieldn
4114 fieldn=`./fieldn`
4115 $rm -f foo.c fieldn
4116 case $fieldn in
4117 '') pos='???';;
4118 1) pos=first;;
4119 2) pos=second;;
4120 3) pos=third;;
4121 *) pos="${fieldn}th";;
4122 esac
4123 echo "Your cpp writes the filename in the $pos field of the line."
4124
4125 : locate header file
4126 $cat >findhdr <<EOF
4127 $startsh
4128 wanted=\$1
4129 name=''
4130 if test -f $usrinc/\$wanted; then
4131         echo "$usrinc/\$wanted"
4132         exit 0
4133 fi
4134 awkprg='{ print \$$fieldn }'
4135 echo "#include <\$wanted>" > foo\$\$.c
4136 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4137 $grep "^[       ]*#.*\$wanted" | \
4138 while read cline; do
4139         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4140         case "\$name" in
4141         */\$wanted) echo "\$name"; exit 0;;
4142         *) name='';;
4143         esac;
4144 done;
4145 $rm -f foo\$\$.c;
4146 case "\$name" in
4147 '') exit 1;;
4148 esac
4149 EOF
4150 chmod +x findhdr
4151
4152 : define an alternate in-header-list? function
4153 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4154 cont=true; xxf="echo \"<\$1> found.\" >&4";
4155 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4156 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4157 esac;
4158 case $# in 4) instead=instead;; *) instead="at last";; esac;
4159 while $test "$cont"; do
4160         xxx=`./findhdr $1`
4161         var=$2; eval "was=\$$2";
4162         if $test "$xxx" && $test -r "$xxx";
4163         then eval $xxf;
4164         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4165                 cont="";
4166         else eval $xxnf;
4167         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4168         set $yyy; shift; shift; yyy=$@;
4169         case $# in 0) cont="";;
4170         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4171                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4172         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4173                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4174         esac;
4175 done;
4176 while $test "$yyy";
4177 do set $yyy; var=$2; eval "was=\$$2";
4178         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4179         set $yyy; shift; shift; yyy=$@;
4180 done'
4181
4182 : see if dld is available
4183 set dld.h i_dld
4184 eval $inhdr
4185
4186 : is a C symbol defined?
4187 csym='tlook=$1;
4188 case "$3" in
4189 -v) tf=libc.tmp; tc=""; tdc="";;
4190 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
4191 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
4192 esac;
4193 tx=yes;
4194 case "$reuseval-$4" in
4195 true-) ;;
4196 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
4197 esac;
4198 case "$tx" in
4199 yes)
4200         case "$runnm" in
4201         true)
4202                 if $contains $tlook $tf >/dev/null 2>&1;
4203                 then tval=true;
4204                 else tval=false;
4205                 fi;;
4206         *)
4207                 echo "main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
4208                 if $cc $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
4209                 then tval=true;
4210                 else tval=false;
4211                 fi;
4212                 $rm -f t t.c;;
4213         esac;;
4214 *)
4215         case "$tval" in
4216         $define) tval=true;;
4217         *) tval=false;;
4218         esac;;
4219 esac;
4220 eval "$2=$tval"'
4221
4222 : define an is-in-libc? function
4223 inlibc='echo " "; td=$define; tu=$undef;
4224 sym=$1; var=$2; eval "was=\$$2";
4225 tx=yes;
4226 case "$reuseval$was" in
4227 true) ;;
4228 true*) tx=no;;
4229 esac;
4230 case "$tx" in
4231 yes)
4232         set $sym tres -f;
4233         eval $csym;
4234         case "$tres" in
4235         true)
4236                 echo "$sym() found." >&4;
4237                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
4238         *)
4239                 echo "$sym() NOT found." >&4;
4240                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
4241         esac;;
4242 *)
4243         case "$was" in
4244         $define) echo "$sym() found." >&4;;
4245         *) echo "$sym() NOT found." >&4;;
4246         esac;;
4247 esac'
4248
4249 : see if dlopen exists
4250 xxx_runnm="$runnm"
4251 runnm=false
4252 set dlopen d_dlopen
4253 eval $inlibc
4254 runnm="$xxx_runnm"
4255
4256 : determine which dynamic loading, if any, to compile in
4257 echo " "
4258 dldir="ext/DynaLoader"
4259 case "$usedl" in
4260 $define|y|true)
4261         dflt='y'
4262         usedl="$define"
4263         ;;
4264 $undef|n|false)
4265         dflt='n'
4266         usedl="$undef"
4267         ;;
4268 *) 
4269         dflt='n'
4270         case "$d_dlopen" in
4271             $define) dflt='y' ;;
4272         esac
4273         case "$i_dld" in
4274             $define) dflt='y' ;;
4275         esac
4276         : Does a dl_xxx.xs file exist for this operating system
4277         $test -f ../$dldir/dl_${osname}.xs && dflt='y'
4278         ;;
4279 esac
4280 rp="Do you wish to use dynamic loading?"
4281 . ./myread
4282 usedl="$ans"
4283 case "$ans" in
4284 y*) usedl="$define"
4285         case "$dlsrc" in
4286         '')
4287                 if $test -f ../$dldir/dl_${osname}.xs ; then
4288                         dflt="$dldir/dl_${osname}.xs"
4289                 elif $test "$d_dlopen" = "$define" ; then
4290                         dflt="$dldir/dl_dlopen.xs"
4291                 elif $test "$i_dld" = "$define" ; then
4292                         dflt="$dldir/dl_dld.xs"
4293                 else
4294                         dflt=''
4295                 fi
4296                 ;;
4297         *)      dflt="$dldir/$dlsrc"
4298                 ;;
4299         esac
4300     echo "The following dynamic loading files are available:"
4301         : Can not go over to $dldir because getfile has path hard-coded in.
4302     cd ..; ls -C $dldir/dl*.xs; cd UU
4303     rp="Source file to use for dynamic loading"
4304     fn="fne"
4305     . ./getfile
4306         usedl="$define"
4307         : emulate basename
4308         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
4309
4310     $cat << EOM
4311
4312 Some systems may require passing special flags to $cc -c to
4313 compile modules that will be used to create a shared library.
4314 To use no flags, say "none".
4315
4316 EOM
4317     case "$cccdlflags" in
4318     '') case "$gccversion" in
4319                 '') case "$osname" in
4320                         hpux)   dflt='+z' ;;
4321                         next)   dflt='none' ;;
4322                         solaris|svr4*|esix*) dflt='-Kpic' ;;
4323                         irix*)  dflt='-KPIC' ;;
4324                         sunos)  dflt='-pic' ;;
4325                         *)      dflt='none' ;;
4326                     esac ;;
4327                 *)      dflt='-fpic' ;;
4328             esac ;;
4329     *)  dflt="$cccdlflags" ;;
4330     esac
4331     rp="Any special flags to pass to $cc -c to compile shared library modules?"
4332     . ./myread
4333     case "$ans" in
4334     none) cccdlflags=' ' ;;
4335     *) cccdlflags="$ans" ;;
4336     esac
4337
4338     cat << EOM
4339
4340 Some systems use ld to create libraries that can be dynamically loaded,
4341 while other systems (such as those using ELF) use $cc.
4342
4343 EOM
4344         case "$ld" in
4345         '')     $cat >try.c <<'EOM'
4346 /* Test for whether ELF binaries are produced */
4347 #include <fcntl.h>
4348 #include <stdlib.h>
4349 main() {
4350         char b[4];
4351         int i = open("a.out",O_RDONLY);
4352         if(i == -1) 
4353                 exit(1); /* fail */
4354         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
4355                 exit(0); /* succeed (yes, it's ELF) */
4356         else
4357                 exit(1); /* fail */
4358 }
4359 EOM
4360                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
4361                         cat <<EOM
4362 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
4363 EOM
4364                         dflt="$cc"
4365                 else
4366                         echo "I'll use ld to build dynamic libraries."
4367                         dflt='ld'
4368                 fi
4369                 rm -f try.c a.out
4370                 ;;
4371         *)      dflt="$ld"
4372                 ;;
4373         esac
4374
4375     rp="What command should be used to create dynamic libraries?"
4376     . ./myread
4377         ld="$ans"
4378
4379     cat << EOM
4380
4381 Some systems may require passing special flags to $ld to create a
4382 library that can be dynamically loaded.  If your ld flags include
4383 -L/other/path options to locate libraries outside your loader's normal
4384 search path, you may need to specify those -L options here as well.  To
4385 use no flags, say "none".
4386
4387 EOM
4388     case "$lddlflags" in
4389     '') case "$osname" in
4390                         hpux)  dflt='-b' ;;
4391                         linux|irix*)    dflt='-shared' ;;
4392                         next)  dflt='none' ;;
4393                         solaris) dflt='-G' ;;
4394                         sunos) dflt='-assert nodefinitions' ;;
4395                         svr4*|esix*) dflt="-G $ldflags" ;;
4396                 *)     dflt='none' ;;
4397                         esac
4398                         ;;
4399     *) dflt="$lddlflags" ;;
4400     esac
4401
4402 : Try to guess additional flags to pick up local libraries.
4403 for thisflag in $ldflags; do
4404         case "$thisflag" in
4405         -L*)
4406                 case " $dflt " in
4407                 *" $thisflag "*) ;;
4408                 *) dflt="$dflt $thisflag" ;;
4409                 esac
4410                 ;;
4411         esac
4412 done
4413
4414 case "$dflt" in
4415 '') dflt='none' ;;
4416 esac
4417
4418     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
4419     . ./myread
4420     case "$ans" in
4421     none) lddlflags=' ' ;;
4422     *) lddlflags="$ans" ;;
4423     esac
4424
4425         cat <<EOM
4426
4427 Some systems may require passing special flags to $cc to indicate that
4428 the resulting executable will use dynamic linking.  To use no flags,
4429 say "none".
4430
4431 EOM
4432     case "$ccdlflags" in
4433     '') case "$osname" in
4434                 hpux)   dflt='-Wl,-E' ;;
4435                 linux)  dflt='-rdynamic' ;;
4436                 next)   dflt='none' ;;
4437                 sunos)  dflt='none' ;;
4438                 *)      dflt='none' ;;
4439             esac ;;
4440     *)  dflt="$ccdlflags" ;;
4441     esac
4442     rp="Any special flags to pass to $cc to use dynamic loading?"
4443     . ./myread
4444     case "$ans" in
4445     none) ccdlflags=' ' ;;
4446     *) ccdlflags="$ans" ;;
4447     esac
4448     ;;
4449 *)  usedl="$undef"
4450         ld='ld'
4451     dlsrc='dl_none.xs'
4452     lddlflags=''
4453     ccdlflags=''
4454     ;;
4455 esac
4456
4457 also=''
4458 case "$usedl" in
4459 $undef)
4460         # No dynamic loading being used, so don't bother even to prompt.
4461         useshrplib='false'
4462         ;;
4463 *)      case "$useshrplib" in
4464         '')     case "$osname" in
4465                 svr4|dgux|dynixptx|esix|powerux)
4466                         dflt='yes'
4467                         also='Building a shared libperl is required for dynamic loading to work on your system.'
4468                         ;;
4469                 next*)
4470                         case "$osvers" in
4471                         4*)     dflt='yes'
4472                                 also='Building a shared libperl is needed for MAB support.'
4473                                 ;;
4474                         *)      dflt='no'
4475                                 ;;
4476                         esac
4477                         ;;
4478                 sunos)
4479                         dflt='no'
4480                         also='Building a shared libperl will definitely not work on SunOS 4.'
4481                         ;;
4482                 *)      dflt='no'
4483                         ;;
4484                 esac
4485                 ;;
4486         $define|true|[Yy]*)
4487                 dflt='yes'
4488                 ;;
4489         *)      dflt='no'
4490                 ;;
4491         esac
4492         $cat << EOM
4493
4494 The perl executable is normally obtained by linking perlmain.c with
4495 libperl${lib_ext}, any static extensions (usually just DynaLoader), and
4496 any other libraries needed on this system (such as -lm, etc.).  Since
4497 your system supports dynamic loading, it is probably possible to build
4498 a shared libperl.$so.  If you will have more than one executable linked
4499 to libperl.$so, this will significantly reduce the size of each
4500 executable, but it may have a noticeable affect on performance.  The
4501 default is probably sensible for your system.
4502 $also
4503
4504 EOM
4505         rp="Build a shared libperl.$so (y/n)"
4506         . ./myread
4507         case "$ans" in
4508         true|$define|[Yy]*)
4509                 useshrplib='true'
4510                 # Why does next4 have to be so different?
4511                 case "${osname}${osvers}" in
4512                 next4*) xxx='DYLD_LIBRARY_PATH' ;;
4513                 *)              xxx='LD_LIBRARY_PATH' ;;
4514                 esac
4515                 $cat <<EOM >&4
4516
4517 To build perl, you must add the current working directory to your
4518 $xxx environtment variable before running make.  You can do
4519 this with
4520    $xxx=\`pwd\`; export $xxx
4521 for Bourne-style shells, or
4522    setenv $xxx \`pwd\`
4523 for Csh-style shells.  You *MUST* do this before running make.
4524
4525 EOM
4526                 ;;
4527         *)      useshrplib='false' ;;
4528         esac
4529         ;;
4530 esac
4531
4532 case "$useshrplib" in
4533 true)
4534         case "$libperl" in
4535         '')
4536                 # Figure out a good name for libperl.so.  Since it gets stored in
4537                 # a version-specific architecture-dependent library, the version
4538                 # number isn't really that important, except for making cc/ld happy.
4539                 #
4540                 # A name such as libperl.so.3.1
4541                 majmin="libperl.$so.$patchlevel.$subversion"
4542                 # A name such as libperl.so.301
4543                 majonly=`echo $patchlevel $subversion |
4544                         $awk '{printf "%d%02d", $1, $2}'`
4545                 majonly=libperl.$so.$majonly
4546                 # I'd prefer to keep the os-specific stuff here to a minimum, and
4547                 # rely on figuring it out from the naming of libc.
4548                 case "${osname}${osvers}" in
4549                 next4*)
4550                         dflt=libperl.5.$so
4551                         # XXX How handle the --version stuff for MAB?
4552                         ;;
4553                 linux*)  # ld won't link with a bare -lperl otherwise.
4554                         dflt=libperl.$so
4555                         ;;
4556                 *)      # Try to guess based on whether libc has major.minor.
4557                         case "$libc" in
4558                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
4559                         *libc.$so.[0-9]*) dflt=$majonly ;;
4560                         *)      dflt=libperl.$so ;;
4561                         esac
4562                         ;;
4563                 esac
4564                 ;;
4565         *)      dflt=$libperl
4566                 ;;
4567         esac
4568         cat << EOM
4569
4570 I need to select a good name for the shared libperl.  If your system uses
4571 library names with major and minor numbers, then you might want something
4572 like $majmin.  Alternatively, if your system uses a single version
4573 number for shared libraries, then you might want to use $majonly.
4574 Or, your system might be quite happy with a simple libperl.$so.
4575
4576 Since the shared libperl will get installed into a version-specific
4577 architecture-dependent directory, the version number of the shared perl
4578 library probably isn't important, so the default should be o.k.
4579
4580 EOM
4581         rp='What name do you want to give to the shared libperl?'
4582         . ./myread
4583         libperl=$ans
4584         echo "Ok, I'll use $libperl"
4585         ;;
4586 *)
4587         libperl="libperl${lib_ext}"
4588         ;;
4589 esac
4590
4591 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
4592 case "$shrpdir" in
4593 '') ;;
4594 *)      $cat >&4 <<EOM
4595 WARNING:  Use of the shrpdir variable for the installation location of
4596 the shared $libperl is not supported.  It was never documented and
4597 will not work in this version.  Let me (doughera@lafcol.lafayette.edu)
4598 know of any problems this may cause.
4599
4600 EOM
4601         case "$shrpdir" in
4602         "$archlibexp/CORE")
4603                 $cat >&4 <<EOM
4604 But your current setting of $shrpdir is
4605 the default anyway, so it's harmless.
4606 EOM
4607                 ;;
4608         *)
4609                 $cat >&4 <<EOM
4610 Further, your current attempted setting of $shrpdir
4611 conflicts with the value of $archlibexp/CORE
4612 that installperl will use.
4613 EOM
4614                 ;;
4615         esac
4616         ;;
4617 esac
4618
4619 # How will the perl executable find the installed shared $libperl?
4620 # Add $xxx to ccdlflags.
4621 # If we can't figure out a command-line option, use $shrpenv to
4622 # set env LD_RUN_PATH.  The main perl makefile uses this.
4623 shrpdir=$archlibexp/CORE
4624 xxx=''
4625 tmp_shrpenv=''
4626 if "$useshrplib"; then
4627     case "$osname" in 
4628         solaris|netbsd)
4629                 xxx="-R $shrpdir"
4630                 ;;
4631         linux|irix*)
4632                 xxx="-Wl,-rpath,$shrpdir"
4633                 ;;
4634         *)
4635                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
4636                 ;;
4637         esac
4638         case "$xxx" in
4639         '') ;;
4640         *)      ccdlflags="$ccdlflags $xxx"
4641                 cat <<EOM >&4
4642
4643 Adding $xxx to the flags
4644 passed to $ld so that the perl executable will find the 
4645 installed shared $libperl.
4646
4647 EOM
4648                 ;;
4649         esac
4650 fi
4651 # Respect a hint or command-line value.
4652 case "$shrpenv" in
4653 '') shrpenv="$tmp_shrpenv" ;;
4654 esac
4655
4656 : determine where manual pages go
4657 set man1dir man1dir none
4658 eval $prefixit
4659 $cat <<EOM
4660
4661 $spackage has manual pages available in source form.
4662 EOM
4663 case "$nroff" in
4664 nroff)
4665         echo "However, you don't have nroff, so they're probably useless to you."
4666         case "$man1dir" in
4667         '') man1dir="none";;
4668         esac;;
4669 esac
4670 echo "If you don't want the manual sources installed, answer 'none'."
4671 case "$man1dir" in
4672 ' ') dflt=none
4673         ;;
4674 '')
4675         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
4676         lookpath="$lookpath $prefixexp/man/p_man/man1"
4677         lookpath="$lookpath $prefixexp/man/u_man/man1"
4678         lookpath="$lookpath $prefixexp/man/man.1"
4679         : If prefix contains 'perl' then we want to keep the man pages
4680         : under the prefix directory.  Otherwise, look in a variety of
4681         : other possible places.  This is debatable, but probably a
4682         : good compromise.  Well, apparently not.
4683         : Experience has shown people expect man1dir to be under prefix,
4684         : so we now always put it there.  Users who want other behavior
4685         : can answer interactively or use a command line option.
4686         : Does user have System V-style man paths.
4687         case "$sysman" in
4688         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
4689         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
4690         esac
4691         set dflt
4692         eval $prefixup
4693         ;;
4694 *)  dflt="$man1dir"
4695         ;;
4696 esac
4697 echo " "
4698 fn=dn+~
4699 rp="Where do the main $spackage manual pages (source) go?"
4700 . ./getfile
4701 if $test "X$man1direxp" != "X$ansexp"; then
4702         installman1dir=''
4703 fi
4704 man1dir="$ans"
4705 man1direxp="$ansexp"
4706 case "$man1dir" in
4707 '') man1dir=' '
4708         installman1dir='';;
4709 esac
4710 if $afs; then
4711         $cat <<EOM
4712
4713 Since you are running AFS, I need to distinguish the directory in which
4714 manual pages reside from the directory in which they are installed (and from
4715 which they are presumably copied to the former directory by occult means).
4716
4717 EOM
4718         case "$installman1dir" in
4719         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
4720         *) dflt="$installman1dir";;
4721         esac
4722         fn=de~
4723         rp='Where will man pages be installed?'
4724         . ./getfile
4725         installman1dir="$ans"
4726 else
4727         installman1dir="$man1direxp"
4728 fi
4729
4730 : What suffix to use on installed man pages
4731
4732 case "$man1dir" in
4733 ' ')
4734         man1ext='0'
4735         ;;
4736 *)
4737         rp="What suffix should be used for the main $spackage man pages?"
4738         case "$man1ext" in
4739         '')     case "$man1dir" in
4740                 *1)  dflt=1 ;;
4741                 *1p) dflt=1p ;;
4742                 *1pm) dflt=1pm ;;
4743                 *l) dflt=l;;
4744                 *n) dflt=n;;
4745                 *o) dflt=o;;
4746                 *p) dflt=p;;
4747                 *C) dflt=C;;
4748                 *L) dflt=L;;
4749                 *L1) dflt=L1;;
4750                 *) dflt=1;;
4751                 esac
4752                 ;;
4753         *)      dflt="$man1ext";;
4754         esac
4755         . ./myread
4756         man1ext="$ans"
4757         ;;
4758 esac
4759
4760 : see if we can have long filenames
4761 echo " "
4762 rmlist="$rmlist /tmp/cf$$"
4763 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
4764 first=123456789abcdef
4765 second=/tmp/cf$$/$first
4766 $rm -f $first $second
4767 if (echo hi >$first) 2>/dev/null; then
4768         if $test -f 123456789abcde; then
4769                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
4770                 val="$undef"
4771         else
4772                 if (echo hi >$second) 2>/dev/null; then
4773                         if $test -f /tmp/cf$$/123456789abcde; then
4774                                 $cat <<'EOM'
4775 That's peculiar... You can have filenames longer than 14 characters, but only
4776 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
4777 I shall consider your system cannot support long filenames at all.
4778 EOM
4779                                 val="$undef"
4780                         else
4781                                 echo 'You can have filenames longer than 14 characters.' >&4
4782                                 val="$define"
4783                         fi
4784                 else
4785                         $cat <<'EOM'
4786 How confusing! Some of your filesystems are sane enough to allow filenames
4787 longer than 14 characters but some others like /tmp can't even think about them.
4788 So, for now on, I shall assume your kernel does not allow them at all.
4789 EOM
4790                         val="$undef"
4791                 fi
4792         fi
4793 else
4794         $cat <<'EOM'
4795 You can't have filenames longer than 14 chars.  You can't even think about them!
4796 EOM
4797         val="$undef"
4798 fi 
4799 set d_flexfnam
4800 eval $setvar
4801 $rm -rf /tmp/cf$$ 123456789abcde*
4802
4803 : determine where library module manual pages go
4804 set man3dir man3dir none
4805 eval $prefixit
4806 $cat <<EOM
4807
4808 $spackage has manual pages for many of the library modules.
4809 EOM
4810
4811 case "$nroff" in
4812 nroff)
4813         $cat <<'EOM'
4814 However, you don't have nroff, so they're probably useless to you.
4815 You can use the supplied perldoc script instead.
4816 EOM
4817         case "$man3dir" in
4818         '') man3dir="none";;
4819         esac;;
4820 esac
4821
4822 case "$d_flexfnam" in
4823 undef)
4824         $cat <<'EOM'
4825 However, your system can't handle the long file names like File::Basename.3. 
4826 You can use the supplied perldoc script instead.
4827 EOM
4828         case "$man3dir" in
4829         '') man3dir="none";;
4830         esac;;
4831 esac
4832
4833 echo "If you don't want the manual sources installed, answer 'none'."
4834 : We dont use /usr/local/man/man3 because some man programs will
4835 : only show the /usr/local/man/man3 contents, and not the system ones,
4836 : thus man less will show the perl module less.pm, but not the system
4837 : less command.  We might also conflict with TCL man pages.
4838 : However, something like /opt/perl/man/man3 is fine.
4839 case "$man3dir" in
4840 '')     case "$prefix" in 
4841         *perl*) dflt=`echo $man1dir | 
4842                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
4843         *)      dflt="$privlib/man/man3" ;;
4844         esac
4845         ;;
4846 ' ') dflt=none;;
4847 *)      dflt="$man3dir" ;;
4848 esac
4849 echo " "
4850
4851 fn=dn+~
4852 rp="Where do the $spackage library man pages (source) go?"
4853 . ./getfile
4854 if test "X$man3direxp" != "X$ansexp"; then
4855         installman3dir=''
4856 fi
4857
4858 man3dir="$ans"
4859 man3direxp="$ansexp"
4860 case "$man3dir" in
4861 '') man3dir=' '
4862         installman3dir='';;
4863 esac
4864 if $afs; then
4865         $cat <<EOM
4866
4867 Since you are running AFS, I need to distinguish the directory in which
4868 manual pages reside from the directory in which they are installed (and from
4869 which they are presumably copied to the former directory by occult means).
4870
4871 EOM
4872         case "$installman3dir" in
4873         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
4874         *) dflt="$installman3dir";;
4875         esac
4876         fn=de~
4877         rp='Where will man pages be installed?'
4878         . ./getfile
4879         installman3dir="$ans"
4880 else
4881         installman3dir="$man3direxp"
4882 fi
4883
4884 : What suffix to use on installed man pages
4885
4886 case "$man3dir" in
4887 ' ')
4888         man3ext='0'
4889         ;;
4890 *)
4891         rp="What suffix should be used for the $spackage library man pages?"
4892         case "$man3ext" in
4893         '')     case "$man3dir" in
4894                 *3)  dflt=3 ;;
4895                 *3p) dflt=3p ;;
4896                 *3pm) dflt=3pm ;;
4897                 *l) dflt=l;;
4898                 *n) dflt=n;;
4899                 *o) dflt=o;;
4900                 *p) dflt=p;;
4901                 *C) dflt=C;;
4902                 *L) dflt=L;;
4903                 *L3) dflt=L3;;
4904                 *) dflt=3;;
4905                 esac
4906                 ;;
4907         *)      dflt="$man3ext";;
4908         esac
4909         . ./myread
4910         man3ext="$ans"
4911         ;;
4912 esac
4913
4914 : see if we have to deal with yellow pages, now NIS.
4915 if $test -d /usr/etc/yp || $test -d /etc/yp; then
4916         if $test -f /usr/etc/nibindd; then
4917                 echo " "
4918                 echo "I'm fairly confident you're on a NeXT."
4919                 echo " "
4920                 rp='Do you get the hosts file via NetInfo?'
4921                 dflt=y
4922                 case "$hostcat" in
4923                 nidump*) ;;
4924                 '') ;;
4925                 *) dflt=n;;
4926                 esac
4927                 . ./myread
4928                 case "$ans" in
4929                 y*) hostcat='nidump hosts .';;
4930                 *)      case "$hostcat" in
4931                         nidump*) hostcat='';;
4932                         esac
4933                         ;;
4934                 esac
4935         fi
4936         case "$hostcat" in
4937         nidump*) ;;
4938         *)
4939                 case "$hostcat" in
4940                 *ypcat*) dflt=y;;
4941                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
4942                                 dflt=y
4943                         else
4944                                 dflt=n
4945                         fi;;
4946                 *) dflt=n;;
4947                 esac
4948                 echo " "
4949                 rp='Are you getting the hosts file via yellow pages?'
4950                 . ./myread
4951                 case "$ans" in
4952                 y*) hostcat='ypcat hosts';;
4953                 *) hostcat='cat /etc/hosts';;
4954                 esac
4955                 ;;
4956         esac
4957 fi
4958
4959 : now get the host name
4960 echo " "
4961 echo "Figuring out host name..." >&4
4962 case "$myhostname" in
4963 '') cont=true
4964         echo 'Maybe "hostname" will work...'
4965         if tans=`sh -c hostname 2>&1` ; then
4966                 myhostname=$tans
4967                 phostname=hostname
4968                 cont=''
4969         fi
4970         ;;
4971 *) cont='';;
4972 esac
4973 if $test "$cont"; then
4974         if ./xenix; then
4975                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
4976                 if tans=`cat /etc/systemid 2>&1` ; then
4977                         myhostname=$tans
4978                         phostname='cat /etc/systemid'
4979                         echo "Whadyaknow.  Xenix always was a bit strange..."
4980                         cont=''
4981                 fi
4982         elif $test -r /etc/systemid; then
4983                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
4984         fi
4985 fi
4986 if $test "$cont"; then
4987         echo 'No, maybe "uuname -l" will work...'
4988         if tans=`sh -c 'uuname -l' 2>&1` ; then
4989                 myhostname=$tans
4990                 phostname='uuname -l'
4991         else
4992                 echo 'Strange.  Maybe "uname -n" will work...'
4993                 if tans=`sh -c 'uname -n' 2>&1` ; then
4994                         myhostname=$tans
4995                         phostname='uname -n'
4996                 else
4997                         echo 'Oh well, maybe I can mine it out of whoami.h...'
4998                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
4999                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5000                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5001                         else
5002                                 case "$myhostname" in
5003                                 '') echo "Does this machine have an identity crisis or something?"
5004                                         phostname='';;
5005                                 *)
5006                                         echo "Well, you said $myhostname before..."
5007                                         phostname='echo $myhostname';;
5008                                 esac
5009                         fi
5010                 fi
5011         fi
5012 fi
5013 : you do not want to know about this
5014 set $myhostname
5015 myhostname=$1
5016
5017 : verify guess
5018 if $test "$myhostname" ; then
5019         dflt=y
5020         rp='Your host name appears to be "'$myhostname'".'" Right?"
5021         . ./myread
5022         case "$ans" in
5023         y*) ;;
5024         *) myhostname='';;
5025         esac
5026 fi
5027
5028 : bad guess or no guess
5029 while $test "X$myhostname" = X ; do
5030         dflt=''
5031         rp="Please type the (one word) name of your host:"
5032         . ./myread
5033         myhostname="$ans"
5034 done
5035
5036 : translate upper to lower if necessary
5037 case "$myhostname" in
5038 *[A-Z]*)
5039         echo "(Normalizing case in your host name)"
5040         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5041         ;;
5042 esac
5043
5044 case "$myhostname" in
5045 *.*)
5046         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5047         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5048         echo "(Trimming domain name from host name--host name is now $myhostname)"
5049         ;;
5050 *) case "$mydomain" in
5051         '')
5052                 {
5053                         : If we use NIS, try ypmatch.
5054                         : Is there some reason why this was not done before?
5055                         test "X$hostcat" = "Xypcat hosts" &&
5056                         ypmatch "$myhostname" hosts 2>/dev/null |\
5057                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5058                         $test -s hosts
5059                 } || {
5060                         : Extract only the relevant hosts, reducing file size,
5061                         : remove comments, insert trailing space for later use.
5062                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5063                                         /[       ]$myhostname[  . ]/p" > hosts
5064                 }
5065                 tmp_re="[       . ]"
5066                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5067                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5068                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5069                         hosts | $sort | $uniq | \
5070                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5071                 case `$echo X$dflt` in
5072                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5073                         dflt=.
5074                         ;;
5075                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5076                         ;;
5077                 esac
5078                 case "$dflt" in
5079                 .)
5080                         tans=`./loc resolv.conf X /etc /usr/etc`
5081                         if $test -f "$tans"; then
5082                                 echo "(Attempting domain name extraction from $tans)"
5083                                 : Why was there an Egrep here, when Sed works?
5084                                 : Look for either a search or a domain directive.
5085                                 dflt=.`$sed -n -e 's/^search[   ]*\(.*\)/\1/p' $tans \
5086                                         | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5087                                 case "$dflt" in
5088                                 .)      dflt=.`$sed -n -e 's/^domain[   ]*\(.*\)/\1/p' $tans \
5089                                                 | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5090                                         ;;
5091                                 esac
5092                         fi
5093                         ;;
5094                 esac
5095                 case "$dflt" in
5096                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5097                         dflt=.`sh -c domainname 2>/dev/null`
5098                         case "$dflt" in
5099                         '') dflt='.';;
5100                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5101                         esac
5102                         ;;
5103                 esac
5104                 case "$dflt" in
5105                 .) echo "(Lost all hope -- silly guess then)"
5106                         dflt='.uucp'
5107                         ;;
5108                 esac
5109                 $rm -f hosts
5110                 ;;
5111         *) dflt="$mydomain";;
5112         esac;;
5113 esac
5114 echo " "
5115 rp="What is your domain name?"
5116 . ./myread
5117 tans="$ans"
5118 case "$ans" in
5119 '') ;;
5120 .*) ;;
5121 *) tans=".$tans";;
5122 esac
5123 mydomain="$tans"
5124
5125 : translate upper to lower if necessary
5126 case "$mydomain" in
5127 *[A-Z]*)
5128         echo "(Normalizing case in your domain name)"
5129         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5130         ;;
5131 esac
5132
5133 : a little sanity check here
5134 case "$phostname" in
5135 '') ;;
5136 *)
5137         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5138         $myhostname$mydomain|$myhostname) ;;
5139         *)
5140                 case "$phostname" in
5141                 sed*)
5142                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5143                         ;;
5144                 *)
5145                         echo "(That doesn't agree with your $phostname command, by the way.)"
5146                         ;;
5147                 esac
5148         ;;
5149         esac
5150         ;;
5151 esac
5152
5153 $cat <<EOM
5154
5155 I need to get your e-mail address in Internet format if possible, i.e.
5156 something like user@host.domain. Please answer accurately since I have
5157 no easy means to double check it. The default value provided below
5158 is most probably close to the reality but may not be valid from outside
5159 your organization...
5160
5161 EOM
5162 cont=x
5163 while test "$cont"; do
5164         case "$cf_email" in
5165         '') dflt="$cf_by@$myhostname$mydomain";;
5166         *) dflt="$cf_email";;
5167         esac
5168         rp='What is your e-mail address?'
5169         . ./myread
5170         cf_email="$ans"
5171         case "$cf_email" in
5172         *@*.*) cont='' ;;
5173         *)
5174                 rp='Address does not look like an Internet one.  Use it anyway?'
5175                 case "$fastread" in
5176                 yes) dflt=y ;;
5177                 *) dflt=n ;;
5178                 esac
5179                 . ./myread
5180                 case "$ans" in
5181                 y*) cont='' ;;
5182                 *) echo " " ;;
5183                 esac
5184                 ;;
5185         esac
5186 done
5187
5188 $cat <<EOM
5189
5190 If you or somebody else will be maintaining perl at your site, please
5191 fill in the correct e-mail address here so that they may be contacted
5192 if necessary. Currently, the "perlbug" program included with perl
5193 will send mail to this address in addition to perlbug@perl.com. You may
5194 enter "none" for no administrator.
5195
5196 EOM
5197 case "$perladmin" in
5198 '') dflt="$cf_email";;
5199 *) dflt="$perladmin";;
5200 esac
5201 rp='Perl administrator e-mail address'
5202 . ./myread
5203 perladmin="$ans"
5204
5205 : determine where public executable scripts go
5206 set scriptdir scriptdir
5207 eval $prefixit
5208 case "$scriptdir" in
5209 '')
5210         dflt="$bin"
5211         : guess some guesses
5212         $test -d /usr/share/scripts && dflt=/usr/share/scripts
5213         $test -d /usr/share/bin && dflt=/usr/share/bin
5214         $test -d /usr/local/script && dflt=/usr/local/script
5215         $test -d $prefixexp/script && dflt=$prefixexp/script
5216         set dflt
5217         eval $prefixup
5218         ;;
5219 *)  dflt="$scriptdir"
5220         ;;
5221 esac
5222 $cat <<EOM
5223  
5224 Some installations have a separate directory just for executable scripts so
5225 that they can mount it across multiple architectures but keep the scripts in
5226 one spot.  You might, for example, have a subdirectory of /usr/share for this.
5227 Or you might just lump your scripts in with all your other executables.
5228  
5229 EOM
5230 fn=d~
5231 rp='Where do you keep publicly executable scripts?'
5232 . ./getfile
5233 if $test "X$ansexp" != "X$scriptdirexp"; then
5234         installscript=''
5235 fi
5236 scriptdir="$ans"
5237 scriptdirexp="$ansexp"
5238 if $afs; then
5239         $cat <<EOM
5240
5241 Since you are running AFS, I need to distinguish the directory in which
5242 scripts reside from the directory in which they are installed (and from
5243 which they are presumably copied to the former directory by occult means).
5244
5245 EOM
5246         case "$installscript" in
5247         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
5248         *) dflt="$installscript";;
5249         esac
5250         fn=de~
5251         rp='Where will public scripts be installed?'
5252         . ./getfile
5253         installscript="$ans"
5254 else
5255         installscript="$scriptdirexp"
5256 fi
5257
5258 : determine perl absolute location
5259 case "$perlpath" in
5260 '')     perlpath=$binexp/perl ;;
5261 esac
5262
5263 : figure out how to guarantee perl startup
5264 case "$startperl" in
5265 '')
5266         case "$sharpbang" in
5267         *!)
5268                 $cat <<EOH
5269
5270 I can use the #! construct to start perl on your system. This will
5271 make startup of perl scripts faster, but may cause problems if you
5272 want to share those scripts and perl is not in a standard place
5273 ($perlpath) on all your platforms. The alternative is to force
5274 a shell by starting the script with a single ':' character.
5275
5276 EOH
5277                 dflt=$perlpath
5278                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
5279                 . ./myread
5280                 case "$ans" in
5281                 none) startperl=": # use perl";;
5282                 *) startperl="#!$ans";;
5283                 esac
5284                 ;;
5285         *) startperl=": # use perl"
5286                 ;;
5287         esac
5288         ;;
5289 esac
5290 echo "I'll use $startperl to start perl scripts."
5291
5292 cat <<EOM
5293
5294 Previous version of $package used the standard IO mechanisms as defined in
5295 <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
5296 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
5297 the default and is the only supported mechanism.  This abstraction
5298 layer can use AT&T's sfio (if you already have sfio installed) or
5299 fall back on standard IO.  This PerlIO abstraction layer is
5300 experimental and may cause problems with some extension modules.
5301
5302 If this doesn't make any sense to you, just accept the default 'n'.
5303 EOM
5304 case "$useperlio" in
5305 $define|true|[yY]*)     dflt='y';;
5306 *) dflt='n';;
5307 esac
5308 rp='Use the experimental PerlIO abstraction layer?'
5309 . ./myread
5310 case "$ans" in
5311 y|Y) 
5312         val="$define"
5313         ;;     
5314 *)      
5315         echo "Ok, doing things the stdio way"
5316         val="$undef"
5317         ;;
5318 esac
5319 set useperlio
5320 eval $setvar 
5321
5322 : Check how to convert floats to strings.
5323 echo " "
5324 echo "Checking for an efficient way to convert floats to strings."
5325 $cat >try.c <<'EOP'
5326 #ifdef TRY_gconvert
5327 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
5328 char *myname = "gconvert";
5329 #endif
5330 #ifdef TRY_gcvt
5331 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
5332 char *myname = "gcvt";
5333 #endif
5334 #ifdef TRY_sprintf
5335 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
5336 char *myname = "sprintf";
5337 #endif
5338
5339 #include <stdio.h>
5340
5341 int
5342 checkit(expect, got)
5343 char *expect;
5344 char *got;
5345 {
5346     if (strcmp(expect, got)) {
5347                 printf("%s oddity:  Expected %s, got %s\n",
5348                         myname, expect, got);
5349                 exit(1);
5350         }
5351 }
5352
5353 int
5354 main()
5355
5356         char buf[64]; 
5357         buf[63] = '\0';
5358
5359         /* This must be 1st test on (which?) platform */
5360         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
5361         Gconvert(0.1, 8, 0, buf);
5362         checkit("0.1", buf);
5363
5364         Gconvert(1.0, 8, 0, buf); 
5365         checkit("1", buf);
5366
5367         Gconvert(0.0, 8, 0, buf); 
5368         checkit("0", buf);
5369
5370         Gconvert(-1.0, 8, 0, buf); 
5371         checkit("-1", buf);
5372
5373         /* Some Linux gcvt's give 1.e+5 here. */
5374         Gconvert(100000.0, 8, 0, buf); 
5375         checkit("100000", buf);
5376         
5377         /* Some Linux gcvt's give -1.e+5 here. */
5378         Gconvert(-100000.0, 8, 0, buf); 
5379         checkit("-100000", buf);
5380
5381         exit(0);
5382 }
5383 EOP
5384 case "$d_Gconvert" in
5385 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
5386 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
5387 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
5388 *) xxx_list='gconvert gcvt sprintf' ;;
5389 esac
5390
5391 for xxx_convert in $xxx_list; do
5392         echo "Trying $xxx_convert"
5393         $rm -f try try.o
5394         if $cc $ccflags -DTRY_$xxx_convert $ldflags -o try \
5395                 try.c $libs > /dev/null 2>&1 ; then
5396                 echo "$xxx_convert" found. >&4
5397                 if ./try; then
5398                         echo "I'll use $xxx_convert to convert floats into a string." >&4
5399                         break;
5400                 else
5401                         echo "...But $xxx_convert didn't work as I expected."
5402                 fi
5403         else
5404                 echo "$xxx_convert NOT found." >&4
5405         fi
5406 done
5407                 
5408 case "$xxx_convert" in
5409 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
5410 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
5411 *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
5412 esac
5413
5414 : Initialize h_fcntl
5415 h_fcntl=false
5416
5417 : Initialize h_sysfile
5418 h_sysfile=false
5419
5420 : access call always available on UNIX
5421 set access d_access
5422 eval $inlibc
5423
5424 : locate the flags for 'access()'
5425 case "$d_access" in
5426 "$define")
5427         echo " "
5428         $cat >access.c <<'EOCP'
5429 #include <sys/types.h>
5430 #ifdef I_FCNTL
5431 #include <fcntl.h>
5432 #endif
5433 #ifdef I_SYS_FILE
5434 #include <sys/file.h>
5435 #endif
5436 #ifdef I_UNISTD
5437 #include <unistd.h>
5438 #endif
5439 main() {
5440         exit(R_OK);
5441 }
5442 EOCP
5443         : check sys/file.h first, no particular reason here
5444         if $test `./findhdr sys/file.h` && \
5445                 $cc $cppflags -DI_SYS_FILE access.c -o access >/dev/null 2>&1 ; then
5446                 h_sysfile=true;
5447                 echo "<sys/file.h> defines the *_OK access constants." >&4
5448         elif $test `./findhdr fcntl.h` && \
5449                 $cc $cppflags -DI_FCNTL access.c -o access >/dev/null 2>&1 ; then
5450                 h_fcntl=true;
5451                 echo "<fcntl.h> defines the *_OK access constants." >&4
5452         elif $test `./findhdr unistd.h` && \
5453                 $cc $cppflags -DI_UNISTD access.c -o access >/dev/null 2>&1 ; then
5454                 echo "<unistd.h> defines the *_OK access constants." >&4
5455         else
5456                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
5457         fi
5458         ;;
5459 esac
5460 $rm -f access*
5461
5462 : see if alarm exists
5463 set alarm d_alarm
5464 eval $inlibc
5465
5466 : Look for GNU-cc style attribute checking
5467 echo " "
5468 echo "Checking whether your compiler can handle __attribute__ ..." >&4
5469 $cat >attrib.c <<'EOCP'
5470 #include <stdio.h>
5471 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
5472 EOCP
5473 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
5474         if $contains 'warning' attrib.out >/dev/null 2>&1; then
5475                 echo "Your C compiler doesn't fully support __attribute__."
5476                 val="$undef"
5477         else
5478                 echo "Your C compiler supports __attribute__."
5479                 val="$define"
5480         fi
5481 else
5482         echo "Your C compiler doesn't seem to understand __attribute__ at all."
5483         val="$undef"
5484 fi
5485 set d_attribut
5486 eval $setvar
5487 $rm -f attrib*
5488
5489 : see if bcmp exists
5490 set bcmp d_bcmp
5491 eval $inlibc
5492
5493 : see if bcopy exists
5494 set bcopy d_bcopy
5495 eval $inlibc
5496
5497 : see if this is a unistd.h system
5498 set unistd.h i_unistd
5499 eval $inhdr
5500
5501 : see if getpgrp exists
5502 set getpgrp d_getpgrp
5503 eval $inlibc
5504
5505 echo "Checking to see which flavor of getpgrp is in use . . . "
5506 case "$d_getpgrp" in
5507 "$define")
5508         echo " "
5509         $cat >set.c <<EOP
5510 #$i_unistd I_UNISTD
5511 #include <sys/types.h>
5512 #ifdef I_UNISTD
5513 #  include <unistd.h>
5514 #endif
5515 main()
5516 {
5517         if (getuid() == 0) {
5518                 printf("(I see you are running Configure as super-user...)\n");
5519                 setuid(1);
5520         }
5521 #ifdef TRY_BSD_PGRP
5522         if (getpgrp(1) == 0)
5523                 exit(0);
5524 #else
5525         if (getpgrp() > 0)
5526                 exit(0);
5527 #endif
5528         exit(1);
5529 }
5530 EOP
5531         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
5532                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
5533                 val="$define"
5534         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
5535                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
5536                 val="$undef"
5537         else
5538                 echo "I can't seem to compile and run the test program."
5539                 if ./usg; then
5540                         xxx="a USG one, i.e. you use getpgrp()."
5541                 else
5542                         # SVR4 systems can appear rather BSD-ish.
5543                         case "$i_unistd" in
5544                         $undef)
5545                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
5546                                 val="$define"
5547                                 ;;
5548                         $define)
5549                                 xxx="probably a USG one, i.e. you use getpgrp()."
5550                                 val="$undef"
5551                                 ;;
5552                         esac
5553                 fi
5554                 echo "Assuming your getpgrp is $xxx" >&4
5555         fi
5556         ;;
5557 *) val="$undef";;
5558 esac
5559 set d_bsdgetpgrp
5560 eval $setvar
5561 $rm -f set set.c
5562
5563 : see if setpgrp exists
5564 set setpgrp d_setpgrp
5565 eval $inlibc
5566
5567 echo "Checking to see which flavor of setpgrp is in use . . . "
5568 case "$d_setpgrp" in
5569 "$define")
5570         echo " "
5571         $cat >set.c <<EOP
5572 #$i_unistd I_UNISTD
5573 #include <sys/types.h>
5574 #ifdef I_UNISTD
5575 #  include <unistd.h>
5576 #endif
5577 main()
5578 {
5579         if (getuid() == 0) {
5580                 printf("(I see you are running Configure as super-user...)\n");
5581                 setuid(1);
5582         }
5583 #ifdef TRY_BSD_PGRP
5584         if (-1 == setpgrp(1, 1))
5585                 exit(0);
5586 #else
5587         if (setpgrp() != -1)
5588                 exit(0);
5589 #endif
5590         exit(1);
5591 }
5592 EOP
5593         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
5594                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
5595                 val="$define"
5596         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
5597                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
5598                 val="$undef"
5599         else
5600                 echo "I can't seem to compile and run the test program."
5601                 if ./usg; then
5602                         xxx="a USG one, i.e. you use setpgrp()."
5603                 else
5604                         # SVR4 systems can appear rather BSD-ish.
5605                         case "$i_unistd" in
5606                         $undef)
5607                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
5608                                 val="$define"
5609                                 ;;
5610                         $define)
5611                                 xxx="probably a USG one, i.e. you use setpgrp()."
5612                                 val="$undef"
5613                                 ;;
5614                         esac
5615                 fi
5616                 echo "Assuming your setpgrp is $xxx" >&4
5617         fi
5618         ;;
5619 *) val="$undef";;
5620 esac
5621 set d_bsdsetpgrp
5622 eval $setvar
5623 d_bsdpgrp=$d_bsdsetpgrp
5624 $rm -f set set.c
5625 : see if bzero exists
5626 set bzero d_bzero
5627 eval $inlibc
5628
5629 : check for length of integer
5630 echo " "
5631 case "$intsize" in
5632 '')
5633         echo "Checking to see how big your integers are..." >&4
5634         $cat >try.c <<'EOCP'
5635 #include <stdio.h>
5636 main()
5637 {
5638         printf("%d\n", sizeof(int));
5639         exit(0);
5640 }
5641 EOCP
5642         if $cc $ccflags try.c -o try >/dev/null 2>&1 && ./try > /dev/null; then
5643                 intsize=`./try`
5644                 echo "Your integers are $intsize bytes long."
5645         else
5646                 dflt='4'
5647                 echo "(I can't seem to compile the test program.  Guessing...)"
5648                 rp="What is the size of an integer (in bytes)?"
5649                 . ./myread
5650                 intsize="$ans"
5651         fi
5652         ;;
5653 esac
5654 $rm -f try.c try
5655
5656 : see if signal is declared as pointer to function returning int or void
5657 echo " "
5658 xxx=`./findhdr signal.h`
5659 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
5660 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
5661         echo "You have int (*signal())() instead of void." >&4
5662         val="$undef"
5663 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
5664         echo "You have void (*signal())() instead of int." >&4
5665         val="$define"
5666 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
5667         echo "You have int (*signal())() instead of void." >&4
5668         val="$undef"
5669 else
5670         case "$d_voidsig" in
5671         '')
5672         echo "I can't determine whether signal handler returns void or int..." >&4
5673                 dflt=void
5674                 rp="What type does your signal handler return?"
5675                 . ./myread
5676                 case "$ans" in
5677                 v*) val="$define";;
5678                 *) val="$undef";;
5679                 esac;;
5680         "$define")
5681                 echo "As you already told me, signal handler returns void." >&4;;
5682         *)
5683                 echo "As you already told me, signal handler returns int." >&4;;
5684         esac
5685 fi
5686 set d_voidsig
5687 eval $setvar
5688 case "$d_voidsig" in
5689 "$define") signal_t="void";;
5690 *) signal_t="int";;
5691 esac
5692 $rm -f $$.tmp
5693
5694 : check for ability to cast large floats to 32-bit ints.
5695 echo " "
5696 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
5697 if $test "$intsize" -eq 4; then
5698         xxx=int
5699 else
5700         xxx=long
5701 fi
5702 $cat >try.c <<EOCP
5703 #include <sys/types.h>
5704 #include <signal.h>
5705 $signal_t blech() { exit(3); }
5706 main()
5707 {
5708         $xxx i32;
5709         double f;
5710         int result = 0;
5711         signal(SIGFPE, blech);
5712
5713         f = (double) 0x7fffffff;
5714         f = 10 * f;
5715         i32  = ($xxx) f;
5716
5717         if (i32 != ($xxx) f)
5718                 result |= 1;
5719         exit(result);
5720 }
5721 EOCP
5722 if $cc -o try $ccflags try.c >/dev/null 2>&1; then
5723         ./try
5724         yyy=$?
5725 else
5726         echo "(I can't seem to compile the test program--assuming it can't)"
5727         yyy=1
5728 fi
5729 case "$yyy" in
5730 0)      val="$define"
5731         echo "Yup, it can."
5732         ;;
5733 *)      val="$undef"
5734         echo "Nope, it can't."
5735         ;;
5736 esac
5737 set d_casti32
5738 eval $setvar
5739 $rm -f try try.*
5740
5741 : check for ability to cast negative floats to unsigned
5742 echo " "
5743 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
5744 $cat >try.c <<EOCP
5745 #include <sys/types.h>
5746 #include <signal.h>
5747 $signal_t blech() { exit(7); }
5748 $signal_t blech_in_list() { exit(4); }
5749 unsigned long dummy_long(p) unsigned long p; { return p; }
5750 unsigned int dummy_int(p) unsigned int p; { return p; }
5751 unsigned short dummy_short(p) unsigned short p; { return p; }
5752 main()
5753 {
5754         double f = -123.;
5755         unsigned long along;
5756         unsigned int aint;
5757         unsigned short ashort;
5758         int result = 0;
5759
5760         signal(SIGFPE, blech);
5761         along = (unsigned long)f;
5762         aint = (unsigned int)f;
5763         ashort = (unsigned short)f;
5764         if (along != (unsigned long)-123)
5765                 result |= 1;
5766         if (aint != (unsigned int)-123)
5767                 result |= 1;
5768         if (ashort != (unsigned short)-123)
5769                 result |= 1;
5770         f = (double)0x40000000;
5771         f = f + f;
5772         along = 0;
5773         along = (unsigned long)f;
5774         if (along != 0x80000000)
5775                 result |= 2;
5776         f -= 1.;
5777         along = 0;
5778         along = (unsigned long)f;
5779         if (along != 0x7fffffff)
5780                 result |= 1;
5781         f += 2.;
5782         along = 0;
5783         along = (unsigned long)f;
5784         if (along != 0x80000001)
5785                 result |= 2;
5786         if (result)
5787                 exit(result);
5788         signal(SIGFPE, blech_in_list);
5789         f = 123.;
5790         along = dummy_long((unsigned long)f);
5791         aint = dummy_int((unsigned int)f);
5792         ashort = dummy_short((unsigned short)f);
5793         if (along != (unsigned long)123)
5794                 result |= 4;
5795         if (aint != (unsigned int)123)
5796                 result |= 4;
5797         if (ashort != (unsigned short)123)
5798                 result |= 4;
5799         exit(result);
5800
5801 }
5802 EOCP
5803 if $cc -o try $ccflags try.c >/dev/null 2>&1; then
5804         ./try
5805         castflags=$?
5806 else
5807         echo "(I can't seem to compile the test program--assuming it can't)"
5808         castflags=7
5809 fi
5810 case "$castflags" in
5811 0)      val="$define"
5812         echo "Yup, it can."
5813         ;;
5814 *)      val="$undef"
5815         echo "Nope, it can't."
5816         ;;
5817 esac
5818 set d_castneg
5819 eval $setvar
5820 $rm -f try.*
5821
5822 : see if vprintf exists
5823 echo " "
5824 if set vprintf val -f d_vprintf; eval $csym; $val; then
5825         echo 'vprintf() found.' >&4
5826         val="$define"
5827         $cat >vprintf.c <<'EOF'
5828 #include <varargs.h>
5829
5830 main() { xxx("foo"); }
5831
5832 xxx(va_alist)
5833 va_dcl
5834 {
5835         va_list args;
5836         char buf[10];
5837
5838         va_start(args);
5839         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
5840 }
5841 EOF
5842         if $cc $ccflags vprintf.c -o vprintf >/dev/null 2>&1 && ./vprintf; then
5843                 echo "Your vsprintf() returns (int)." >&4
5844                 val2="$undef"
5845         else
5846                 echo "Your vsprintf() returns (char*)." >&4
5847                 val2="$define"
5848         fi
5849 else
5850         echo 'vprintf() NOT found.' >&4
5851                 val="$undef"
5852                 val2="$undef"
5853 fi
5854 set d_vprintf
5855 eval $setvar
5856 val=$val2
5857 set d_charvspr
5858 eval $setvar
5859
5860 : see if chown exists
5861 set chown d_chown
5862 eval $inlibc
5863
5864 : see if chroot exists
5865 set chroot d_chroot
5866 eval $inlibc
5867
5868 : see if chsize exists
5869 set chsize d_chsize
5870 eval $inlibc
5871
5872 : check for const keyword
5873 echo " "
5874 echo 'Checking to see if your C compiler knows about "const"...' >&4
5875 $cat >const.c <<'EOCP'
5876 typedef struct spug { int drokk; } spug;
5877 main()
5878 {
5879         const char *foo;
5880         const spug y;
5881 }
5882 EOCP
5883 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
5884         val="$define"
5885         echo "Yup, it does."
5886 else
5887         val="$undef"
5888         echo "Nope, it doesn't."
5889 fi
5890 set d_const
5891 eval $setvar
5892
5893 : see if crypt exists
5894 echo " "
5895 if set crypt val -f d_crypt; eval $csym; $val; then
5896         echo 'crypt() found.' >&4
5897         val="$define"
5898         cryptlib=''
5899 else
5900         cryptlib=`./loc Slibcrypt.a "" $xlibpth`
5901         if $test -z "$cryptlib"; then
5902                 cryptlib=`./loc Mlibcrypt.a "" $xlibpth`
5903         else
5904                 cryptlib=-lcrypt
5905         fi
5906         if $test -z "$cryptlib"; then
5907                 cryptlib=`./loc Llibcrypt.a "" $xlibpth`
5908         else
5909                 cryptlib=-lcrypt
5910         fi
5911         if $test -z "$cryptlib"; then
5912                 cryptlib=`./loc libcrypt.a "" $libpth`
5913         else
5914                 cryptlib=-lcrypt
5915         fi
5916         if $test -z "$cryptlib"; then
5917                 echo 'crypt() NOT found.' >&4
5918                 val="$undef"
5919         else
5920                 val="$define"
5921         fi
5922 fi
5923 set d_crypt
5924 eval $setvar
5925
5926 : get csh whereabouts
5927 case "$csh" in
5928 'csh') val="$undef" ;;
5929 *) val="$define" ;;
5930 esac
5931 set d_csh
5932 eval $setvar
5933 full_csh=$csh
5934
5935 : see if cuserid exists
5936 set cuserid d_cuserid
5937 eval $inlibc
5938
5939 : see if this is a limits.h system
5940 set limits.h i_limits
5941 eval $inhdr
5942
5943 : see if this is a float.h system
5944 set float.h i_float
5945 eval $inhdr
5946
5947 : See if number of significant digits in a double precision number is known
5948 echo " "
5949 $cat >dbl_dig.c <<EOM
5950 #$i_limits I_LIMITS
5951 #$i_float I_FLOAT
5952 #ifdef I_LIMITS
5953 #include <limits.h>
5954 #endif
5955 #ifdef I_FLOAT
5956 #include <float.h>
5957 #endif
5958 #ifdef DBL_DIG
5959 printf("Contains DBL_DIG");
5960 #endif
5961 EOM
5962 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
5963 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
5964         echo "DBL_DIG found." >&4
5965         val="$define"
5966 else
5967         echo "DBL_DIG NOT found." >&4
5968         val="$undef"
5969 fi
5970 $rm -f dbl_dig.?
5971 set d_dbl_dig
5972 eval $setvar
5973
5974 : see if difftime exists
5975 set difftime d_difftime
5976 eval $inlibc
5977
5978 : see if this is a dirent system
5979 echo " "
5980 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
5981         val="$define"
5982         echo "<dirent.h> found." >&4
5983 else
5984         val="$undef"
5985         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
5986                 echo "<sys/dir.h> found." >&4
5987                 echo " "
5988         else
5989                 xinc=`./findhdr sys/ndir.h`
5990         fi
5991         echo "<dirent.h> NOT found." >&4
5992 fi
5993 set i_dirent
5994 eval $setvar
5995
5996 : Look for type of directory structure.
5997 echo " "
5998 $cppstdin $cppflags $cppminus < "$xinc" > try.c
5999
6000 case "$direntrytype" in
6001 ''|' ')
6002         case "$i_dirent" in
6003         $define) guess1='struct dirent' ;;
6004         *) guess1='struct direct'  ;;
6005         esac
6006         ;;
6007 *)      guess1="$direntrytype"
6008         ;;
6009 esac
6010
6011 case "$guess1" in
6012 'struct dirent') guess2='struct direct' ;;
6013 *) guess2='struct dirent' ;;
6014 esac
6015                 
6016 if $contains "$guess1" try.c >/dev/null 2>&1; then
6017         direntrytype="$guess1"
6018         echo "Your directory entries are $direntrytype." >&4
6019 elif $contains "$guess2" try.c >/dev/null 2>&1; then
6020         direntrytype="$guess2"
6021         echo "Your directory entries seem to be $direntrytype." >&4
6022 else
6023         echo "I don't recognize your system's directory entries." >&4
6024         rp="What type is used for directory entries on this system?"
6025         dflt="$guess1"
6026         . ./myread
6027         direntrytype="$ans"
6028 fi
6029 $rm -f try.c
6030
6031
6032 : see if the directory entry stores field length
6033 echo " "
6034 $cppstdin $cppflags $cppminus < "$xinc" > try.c
6035 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
6036         echo "Good, your directory entry keeps length information in d_namlen." >&4
6037         val="$define"
6038 else
6039         echo "Your directory entry does not know about the d_namlen field." >&4
6040         val="$undef"
6041 fi
6042 set d_dirnamlen
6043 eval $setvar
6044 $rm -f try.c
6045
6046 : see if dlerror exists
6047 xxx_runnm="$runnm"
6048 runnm=false
6049 set dlerror d_dlerror
6050 eval $inlibc
6051 runnm="$xxx_runnm"
6052
6053 : see if dlfcn is available
6054 set dlfcn.h i_dlfcn
6055 eval $inhdr
6056
6057 case "$usedl" in
6058 $define|y|true)
6059         $cat << EOM
6060
6061 On a few systems, the dynamically loaded modules that perl generates and uses
6062 will need a different extension then shared libs. The default will probably
6063 be appropriate.
6064
6065 EOM
6066         case "$dlext" in
6067         '')     dflt="$so" ;;
6068         *)      dflt="$dlext" ;;
6069         esac
6070         rp='What is the extension of dynamically loaded modules'
6071         . ./myread
6072         dlext="$ans"
6073         ;;
6074 *)
6075         dlext="none"
6076         ;;
6077 esac
6078
6079 : Check if dlsym need a leading underscore
6080 echo " "
6081 val="$undef"
6082
6083 case "$dlsrc" in
6084 dl_dlopen.xs)
6085         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
6086         $cat >dyna.c <<'EOM'
6087 fred () { }
6088 EOM
6089
6090 $cat >fred.c<<EOM
6091
6092 #include <stdio.h>
6093 #$i_dlfcn I_DLFCN
6094 #ifdef I_DLFCN
6095 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
6096 #else
6097 #include <sys/types.h>
6098 #include <nlist.h>
6099 #include <link.h>
6100 #endif
6101
6102 extern int fred() ;
6103
6104 main()
6105 {
6106     void * handle ;
6107     void * symbol ;
6108 #ifndef RTLD_LAZY
6109     int mode = 1 ;
6110 #else
6111     int mode = RTLD_LAZY ;
6112 #endif
6113     handle = dlopen("./dyna.$dlext", mode) ;
6114     if (handle == NULL) {
6115         printf ("1\n") ;
6116             exit(0);
6117     }
6118     symbol = dlsym(handle, "fred") ;
6119     if (symbol == NULL) {
6120                 /* try putting a leading underscore */
6121         symbol = dlsym(handle, "_fred") ;
6122         if (symbol == NULL) {
6123             printf ("2\n") ;
6124                 exit(0);
6125                 }
6126         printf ("3\n") ;
6127     }
6128     else
6129         printf ("4\n") ;
6130         exit(0);
6131 }
6132 EOM
6133         : Call the object file tmp-dyna.o in case dlext=o.
6134         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
6135                 mv dyna${obj_ext} tmp-dyna${obj_ext} > /dev/null 2>&1 && 
6136                 $ld $lddlflags -o dyna.$dlext tmp-dyna${obj_ext} > /dev/null 2>&1 && 
6137                 $cc $ccflags $ldflags $cccdlflags $ccdlflags fred.c -o fred $libs > /dev/null 2>&1; then
6138                 xxx=`./fred`
6139                 case $xxx in
6140                 1)      echo "Test program failed using dlopen." >&4
6141                         echo "Perhaps you should not use dynamic loading." >&4;;
6142                 2)      echo "Test program failed using dlsym." >&4
6143                         echo "Perhaps you should not use dynamic loading." >&4;;
6144                 3)      echo "dlsym needs a leading underscore" >&4
6145                         val="$define" ;;
6146                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
6147                 esac
6148         else
6149                 echo "I can't compile and run the test program." >&4
6150         fi
6151         ;;
6152 esac
6153                 
6154 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
6155
6156 set d_dlsymun
6157 eval $setvar
6158
6159 : see if dup2 exists
6160 set dup2 d_dup2
6161 eval $inlibc
6162
6163 : Locate the flags for 'open()'
6164 echo " "
6165 $cat >open3.c <<'EOCP'
6166 #include <sys/types.h>
6167 #ifdef I_FCNTL
6168 #include <fcntl.h>
6169 #endif
6170 #ifdef I_SYS_FILE
6171 #include <sys/file.h>
6172 #endif
6173 main() {
6174         if(O_RDONLY);
6175 #ifdef O_TRUNC
6176         exit(0);
6177 #else
6178         exit(1);
6179 #endif
6180 }
6181 EOCP
6182 : check sys/file.h first to get FREAD on Sun
6183 if $test `./findhdr sys/file.h` && \
6184                 $cc $cppflags "-DI_SYS_FILE" open3.c -o open3 >/dev/null 2>&1 ; then
6185         h_sysfile=true;
6186         echo "<sys/file.h> defines the O_* constants..." >&4
6187         if ./open3; then
6188                 echo "and you have the 3 argument form of open()." >&4
6189                 val="$define"
6190         else
6191                 echo "but not the 3 argument form of open().  Oh, well." >&4
6192                 val="$undef"
6193         fi
6194 elif $test `./findhdr fcntl.h` && \
6195                 $cc "-DI_FCNTL" open3.c -o open3 >/dev/null 2>&1 ; then
6196         h_fcntl=true;
6197         echo "<fcntl.h> defines the O_* constants..." >&4
6198         if ./open3; then
6199                 echo "and you have the 3 argument form of open()." >&4
6200                 val="$define"
6201         else
6202                 echo "but not the 3 argument form of open().  Oh, well." >&4
6203                 val="$undef"
6204         fi
6205 else
6206         val="$undef"
6207         echo "I can't find the O_* constant definitions!  You got problems." >&4
6208 fi
6209 set d_open3
6210 eval $setvar
6211 $rm -f open3*
6212
6213 : check for non-blocking I/O stuff
6214 case "$h_sysfile" in
6215 true) echo "#include <sys/file.h>" > head.c;;
6216 *)
6217         case "$h_fcntl" in
6218         true) echo "#include <fcntl.h>" > head.c;;
6219         *) echo "#include <sys/fcntl.h>" > head.c;;
6220         esac
6221         ;;
6222 esac
6223 echo " "
6224 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
6225 case "$o_nonblock" in
6226 '')
6227         $cat head.c > try.c
6228         $cat >>try.c <<'EOCP'
6229 main() {
6230 #ifdef O_NONBLOCK
6231         printf("O_NONBLOCK\n");
6232         exit(0);
6233 #endif
6234 #ifdef O_NDELAY
6235         printf("O_NDELAY\n");
6236         exit(0);
6237 #endif
6238 #ifdef FNDELAY
6239         printf("FNDELAY\n");
6240         exit(0);
6241 #endif
6242         exit(0);
6243 }
6244 EOCP
6245         if $cc $ccflags $ldflags try.c -o try >/dev/null 2>&1; then
6246                 o_nonblock=`./try`
6247                 case "$o_nonblock" in
6248                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
6249                 *) echo "Seems like we can use $o_nonblock.";;
6250                 esac
6251         else
6252                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
6253         fi
6254         ;;
6255 *) echo "Using $hint value $o_nonblock.";;
6256 esac
6257 $rm -f try try.* .out core
6258
6259 echo " "
6260 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
6261 case "$eagain" in
6262 '')
6263         $cat head.c > try.c
6264         $cat >>try.c <<EOCP
6265 #include <errno.h>
6266 #include <sys/types.h>
6267 #include <signal.h>
6268 #define MY_O_NONBLOCK $o_nonblock
6269 extern int errno;
6270 $signal_t blech(x) int x; { exit(3); }
6271 EOCP
6272         $cat >> try.c <<'EOCP'
6273 main()
6274 {
6275         int pd[2];
6276         int pu[2];
6277         char buf[1];
6278         char string[100];
6279
6280         pipe(pd);       /* Down: child -> parent */
6281         pipe(pu);       /* Up: parent -> child */
6282         if (0 != fork()) {
6283                 int ret;
6284                 close(pd[1]);   /* Parent reads from pd[0] */
6285                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
6286                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
6287                         exit(1);
6288                 signal(SIGALRM, blech);
6289                 alarm(5);
6290                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
6291                         exit(2);
6292                 sprintf(string, "%d\n", ret);
6293                 write(2, string, strlen(string));
6294                 alarm(0);
6295 #ifdef EAGAIN
6296                 if (errno == EAGAIN) {
6297                         printf("EAGAIN\n");
6298                         goto ok;
6299                 }
6300 #endif
6301 #ifdef EWOULDBLOCK
6302                 if (errno == EWOULDBLOCK)
6303                         printf("EWOULDBLOCK\n");
6304 #endif
6305         ok:
6306                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
6307                 sleep(2);                               /* Give it time to close our pipe */
6308                 alarm(5);
6309                 ret = read(pd[0], buf, 1);      /* Should read EOF */
6310                 alarm(0);
6311                 sprintf(string, "%d\n", ret);
6312                 write(3, string, strlen(string));
6313                 exit(0);
6314         }
6315
6316         close(pd[0]);                   /* We write to pd[1] */
6317         close(pu[1]);                   /* We read from pu[0] */
6318         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
6319         close(pd[1]);                   /* Pipe pd is now fully closed! */
6320         exit(0);                                /* Bye bye, thank you for playing! */
6321 }
6322 EOCP
6323         if $cc $ccflags $ldflags try.c -o try >/dev/null 2>&1; then
6324                 echo "$startsh" >mtry
6325                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
6326                 chmod +x mtry
6327                 ./mtry >/dev/null 2>&1
6328                 case $? in
6329                 0) eagain=`$cat try.out`;;
6330                 1) echo "Could not perform non-blocking setting!";;
6331                 2) echo "I did a successful read() for something that was not there!";;
6332                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
6333                 *) echo "Something terribly wrong happened during testing.";;
6334                 esac
6335                 rd_nodata=`$cat try.ret`
6336                 echo "A read() system call with no data present returns $rd_nodata."
6337                 case "$rd_nodata" in
6338                 0|-1) ;;
6339                 *)
6340                         echo "(That's peculiar, fixing that to be -1.)"
6341                         rd_nodata=-1
6342                         ;;
6343                 esac
6344                 case "$eagain" in
6345                 '')
6346                         echo "Forcing errno EAGAIN on read() with no data available."
6347                         eagain=EAGAIN
6348                         ;;
6349                 *)
6350                         echo "Your read() sets errno to $eagain when no data is available."
6351                         ;;
6352                 esac
6353                 status=`$cat try.err`
6354                 case "$status" in
6355                 0) echo "And it correctly returns 0 to signal EOF.";;
6356                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
6357                 *) echo "However, your read() returns '$status' on EOF??";;
6358                 esac
6359                 val="$define"
6360                 if test "$status" -eq "$rd_nodata"; then
6361                         echo "WARNING: you can't distinguish between EOF and no data!"
6362                         val="$undef"
6363                 fi
6364         else
6365                 echo "I can't compile the test program--assuming errno EAGAIN will do."
6366                 eagain=EAGAIN
6367         fi
6368         set d_eofnblk
6369         eval $setvar
6370         ;;
6371 *)
6372         echo "Using $hint value $eagain."
6373         echo "Your read() returns $rd_nodata when no data is present."
6374         case "$d_eofnblk" in
6375         "$define") echo "And you can see EOF because read() returns 0.";;
6376         "$undef") echo "But you can't see EOF status from read() returned value.";;
6377         *)
6378                 echo "(Assuming you can't see EOF status from read anyway.)"
6379                 d_eofnblk=$undef
6380                 ;;
6381         esac
6382         ;;
6383 esac
6384 $rm -f try try.* .out core head.c mtry
6385
6386 : see if fchmod exists
6387 set fchmod d_fchmod
6388 eval $inlibc
6389
6390 : see if fchown exists
6391 set fchown d_fchown
6392 eval $inlibc
6393
6394 : see if this is an fcntl system
6395 set fcntl d_fcntl
6396 eval $inlibc
6397
6398 : see if fgetpos exists
6399 set fgetpos d_fgetpos
6400 eval $inlibc
6401
6402 : see if flock exists
6403 set flock d_flock
6404 eval $inlibc
6405
6406 : see if fork exists
6407 set fork d_fork
6408 eval $inlibc
6409
6410 : see if pathconf exists
6411 set pathconf d_pathconf
6412 eval $inlibc
6413
6414 : see if fpathconf exists
6415 set fpathconf d_fpathconf
6416 eval $inlibc
6417
6418 : see if fsetpos exists
6419 set fsetpos d_fsetpos
6420 eval $inlibc
6421
6422 : see if gethostent exists
6423 set gethostent d_gethent
6424 eval $inlibc
6425
6426 : see if getlogin exists
6427 set getlogin d_getlogin
6428 eval $inlibc
6429
6430 : see if getpgid exists
6431 set getpgid d_getpgid
6432 eval $inlibc
6433
6434 : see if getpgrp2 exists
6435 set getpgrp2 d_getpgrp2
6436 eval $inlibc
6437
6438 : see if getppid exists
6439 set getppid d_getppid
6440 eval $inlibc
6441
6442 : see if getpriority exists
6443 set getpriority d_getprior
6444 eval $inlibc
6445
6446 : see if this is a netinet/in.h or sys/in.h system
6447 set netinet/in.h i_niin sys/in.h i_sysin
6448 eval $inhdr
6449
6450 : see if htonl --and friends-- exists
6451 val=''
6452 set htonl val
6453 eval $inlibc
6454
6455 : Maybe they are macros.
6456 case "$val" in
6457 $undef)
6458         $cat >htonl.c <<EOM
6459 #include <stdio.h>
6460 #include <sys/types.h>
6461 #$i_niin I_NETINET_IN
6462 #$i_sysin I_SYS_IN
6463 #ifdef I_NETINET_IN
6464 #include <netinet/in.h>
6465 #endif
6466 #ifdef I_SYS_IN
6467 #include <sys/in.h>
6468 #endif
6469 #ifdef htonl
6470 printf("Defined as a macro.");
6471 #endif
6472 EOM
6473         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
6474         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
6475                 val="$define"
6476                 echo "But it seems to be defined as a macro." >&4
6477         fi
6478         $rm -f htonl.?
6479         ;;
6480 esac
6481 set d_htonl
6482 eval $setvar
6483
6484 : see which of string.h or strings.h is needed
6485 echo " "
6486 strings=`./findhdr string.h`
6487 if $test "$strings" && $test -r "$strings"; then
6488         echo "Using <string.h> instead of <strings.h>." >&4
6489         val="$define"
6490 else
6491         val="$undef"
6492         strings=`./findhdr strings.h`
6493         if $test "$strings" && $test -r "$strings"; then
6494                 echo "Using <strings.h> instead of <string.h>." >&4
6495         else
6496                 echo "No string header found -- You'll surely have problems." >&4
6497         fi
6498 fi
6499 set i_string
6500 eval $setvar
6501 case "$i_string" in
6502 "$undef") strings=`./findhdr strings.h`;;
6503 *)        strings=`./findhdr string.h`;;
6504 esac
6505
6506 : index or strchr
6507 echo " "
6508 if set index val -f; eval $csym; $val; then
6509         if set strchr val -f d_strchr; eval $csym; $val; then
6510                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
6511                         val="$define"
6512                         vali="$undef"
6513                         echo "strchr() found." >&4
6514                 else
6515                         val="$undef"
6516                         vali="$define"
6517                         echo "index() found." >&4
6518                 fi
6519         else
6520                 val="$undef"
6521                 vali="$define"
6522                 echo "index() found." >&4
6523         fi
6524 else
6525         if set strchr val -f d_strchr; eval $csym; $val; then
6526                 val="$define"
6527                 vali="$undef"
6528                 echo "strchr() found." >&4
6529         else
6530                 echo "No index() or strchr() found!" >&4
6531                 val="$undef"
6532                 vali="$undef"
6533         fi
6534 fi
6535 set d_strchr; eval $setvar
6536 val="$vali"
6537 set d_index; eval $setvar
6538
6539 : Look for isascii
6540 echo " "
6541 $cat >isascii.c <<'EOCP'
6542 #include <stdio.h>
6543 #include <ctype.h>
6544 main() {
6545         int c = 'A';
6546         if (isascii(c))
6547                 exit(0);
6548         else
6549                 exit(1);
6550 }
6551 EOCP
6552 if $cc $ccflags $ldflags -o isascii isascii.c $libs >/dev/null 2>&1 ; then
6553         echo "isascii() found." >&4
6554         val="$define"
6555 else
6556         echo "isascii() NOT found." >&4
6557         val="$undef"
6558 fi
6559 set d_isascii
6560 eval $setvar
6561 $rm -f isascii*
6562
6563 : see if killpg exists
6564 set killpg d_killpg
6565 eval $inlibc
6566
6567 : see if link exists
6568 set link d_link
6569 eval $inlibc
6570
6571 : see if localeconv exists
6572 set localeconv d_locconv
6573 eval $inlibc
6574
6575 : see if lockf exists
6576 set lockf d_lockf
6577 eval $inlibc
6578
6579 : see if lstat exists
6580 set lstat d_lstat
6581 eval $inlibc
6582
6583 : see if mblen exists
6584 set mblen d_mblen
6585 eval $inlibc
6586
6587 : see if mbstowcs exists
6588 set mbstowcs d_mbstowcs
6589 eval $inlibc
6590
6591 : see if mbtowc exists
6592 set mbtowc d_mbtowc
6593 eval $inlibc
6594
6595 : see if memcmp exists
6596 set memcmp d_memcmp
6597 eval $inlibc
6598
6599 : see if memcpy exists
6600 set memcpy d_memcpy
6601 eval $inlibc
6602
6603 : see if memmove exists
6604 set memmove d_memmove
6605 eval $inlibc
6606
6607 : see if memset exists
6608 set memset d_memset
6609 eval $inlibc
6610
6611 : see if mkdir exists
6612 set mkdir d_mkdir
6613 eval $inlibc
6614
6615 : see if mkfifo exists
6616 set mkfifo d_mkfifo
6617 eval $inlibc
6618
6619 : see if mktime exists
6620 set mktime d_mktime
6621 eval $inlibc
6622
6623 : see if msgctl exists
6624 set msgctl d_msgctl
6625 eval $inlibc
6626
6627 : see if msgget exists
6628 set msgget d_msgget
6629 eval $inlibc
6630
6631 : see if msgsnd exists
6632 set msgsnd d_msgsnd
6633 eval $inlibc
6634
6635 : see if msgrcv exists
6636 set msgrcv d_msgrcv
6637 eval $inlibc
6638
6639 : see how much of the 'msg*(2)' library is present.
6640 h_msg=true
6641 echo " "
6642 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
6643 *"$undef"*) h_msg=false;;
6644 esac
6645 : we could also check for sys/ipc.h ...
6646 if $h_msg && $test `./findhdr sys/msg.h`; then
6647         echo "You have the full msg*(2) library." >&4
6648         val="$define"
6649 else
6650         echo "You don't have the full msg*(2) library." >&4
6651         val="$undef"
6652 fi
6653 set d_msg
6654 eval $setvar
6655
6656 : see if this is a malloc.h system
6657 set malloc.h i_malloc
6658 eval $inhdr
6659
6660 : see if stdlib is available
6661 set stdlib.h i_stdlib
6662 eval $inhdr
6663
6664 : determine which malloc to compile in
6665 echo " "
6666 case "$usemymalloc" in
6667 ''|y*|true)     dflt='y' ;;
6668 n*|false)       dflt='n' ;;
6669 *)      dflt="$usemymalloc" ;;
6670 esac
6671 rp="Do you wish to attempt to use the malloc that comes with $package?"
6672 . ./myread
6673 usemymalloc="$ans"
6674 case "$ans" in
6675 y*|true)
6676         usemymalloc='y'
6677         mallocsrc='malloc.c'
6678         mallocobj='malloc.o'
6679         d_mymalloc="$define"
6680         case "$libs" in
6681         *-lmalloc*)
6682                 : Remove malloc from list of libraries to use
6683                 echo "Removing unneeded -lmalloc from library list" >&4
6684                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6685                 shift
6686                 libs="$*"
6687                 echo "libs = $libs" >&4
6688                 ;;
6689         esac
6690         ;;
6691 *)
6692         usemymalloc='n'
6693         mallocsrc=''
6694         mallocobj=''
6695         d_mymalloc="$undef"
6696         ;;
6697 esac
6698
6699 : compute the return types of malloc and free
6700 echo " "
6701 $cat >malloc.c <<END
6702 #$i_malloc I_MALLOC
6703 #$i_stdlib I_STDLIB
6704 #include <stdio.h>
6705 #include <sys/types.h>
6706 #ifdef I_MALLOC
6707 #include <malloc.h>
6708 #endif
6709 #ifdef I_STDLIB
6710 #include <stdlib.h>
6711 #endif
6712 #ifdef TRY_MALLOC
6713 void *malloc();
6714 #endif
6715 #ifdef TRY_FREE
6716 void free();
6717 #endif
6718 END
6719 case "$malloctype" in
6720 '')
6721         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6722                 malloctype='void *'
6723         else
6724                 malloctype='char *'
6725         fi
6726         ;;
6727 esac
6728 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6729
6730 case "$freetype" in
6731 '')
6732         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6733                 freetype='void'
6734         else
6735                 freetype='int'
6736         fi
6737         ;;
6738 esac
6739 echo "Your system uses $freetype free(), it would seem." >&4
6740 $rm -f malloc.[co]
6741 : see if nice exists
6742 set nice d_nice
6743 eval $inlibc
6744
6745 : see if pause exists
6746 set pause d_pause
6747 eval $inlibc
6748
6749 : see if pipe exists
6750 set pipe d_pipe
6751 eval $inlibc
6752
6753 : see if poll exists
6754 set poll d_poll
6755 eval $inlibc
6756
6757 : see if this is a pwd.h system
6758 set pwd.h i_pwd
6759 eval $inhdr
6760
6761 case "$i_pwd" in
6762 $define)
6763         xxx=`./findhdr pwd.h`
6764         $cppstdin $cppflags $cppminus < $xxx >$$.h
6765
6766         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
6767                 val="$define"
6768         else
6769                 val="$undef"
6770         fi
6771         set d_pwquota
6772         eval $setvar
6773
6774         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
6775                 val="$define"
6776         else
6777                 val="$undef"
6778         fi
6779         set d_pwage
6780         eval $setvar
6781
6782         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
6783                 val="$define"
6784         else
6785                 val="$undef"
6786         fi
6787         set d_pwchange
6788         eval $setvar
6789
6790         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
6791                 val="$define"
6792         else
6793                 val="$undef"
6794         fi
6795         set d_pwclass
6796         eval $setvar
6797
6798         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
6799                 val="$define"
6800         else
6801                 val="$undef"
6802         fi
6803         set d_pwexpire
6804         eval $setvar
6805
6806         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
6807                 val="$define"
6808         else
6809                 val="$undef"
6810         fi
6811         set d_pwcomment
6812         eval $setvar
6813
6814         $rm -f $$.h
6815         ;;
6816 *)
6817         val="$undef"; 
6818         set d_pwquota; eval $setvar
6819         set d_pwage; eval $setvar
6820         set d_pwchange; eval $setvar
6821         set d_pwclass; eval $setvar
6822         set d_pwexpire; eval $setvar
6823         set d_pwcomment; eval $setvar
6824         ;;
6825 esac
6826
6827 : see if readdir and friends exist
6828 set readdir d_readdir
6829 eval $inlibc
6830 set seekdir d_seekdir
6831 eval $inlibc
6832 set telldir d_telldir
6833 eval $inlibc
6834 set rewinddir d_rewinddir
6835 eval $inlibc
6836
6837 : see if readlink exists
6838 set readlink d_readlink
6839 eval $inlibc
6840
6841 : see if rename exists
6842 set rename d_rename
6843 eval $inlibc
6844
6845 : see if rmdir exists
6846 set rmdir d_rmdir
6847 eval $inlibc
6848
6849 : see if memory.h is available.
6850 val=''
6851 set memory.h val
6852 eval $inhdr
6853
6854 : See if it conflicts with string.h
6855 case "$val" in
6856 $define)
6857         case "$strings" in
6858         '') ;;
6859         *)
6860                 $cppstdin $cppflags $cppminus < $strings > mem.h
6861                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
6862                         echo " "
6863                         echo "We won't be including <memory.h>."
6864                         val="$undef"
6865                 fi
6866                 $rm -f mem.h
6867                 ;;
6868         esac
6869 esac
6870 set i_memory
6871 eval $setvar
6872
6873 : can bcopy handle overlapping blocks?
6874 val="$undef"
6875 case "$d_bcopy" in
6876 "$define")
6877         echo " "
6878         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
6879         $cat >foo.c <<EOCP
6880 #$i_memory I_MEMORY
6881 #$i_stdlib I_STDLIB
6882 #$i_string I_STRING
6883 #$i_unistd I_UNISTD
6884 EOCP
6885         $cat >>foo.c <<'EOCP'
6886 #include <stdio.h>
6887
6888 #ifdef I_MEMORY
6889 #  include <memory.h>
6890 #endif
6891 #ifdef I_STDLIB
6892 #  include <stdlib.h>
6893 #endif
6894 #ifdef I_STRING
6895 #  include <string.h>
6896 #else
6897 #  include <strings.h>
6898 #endif
6899 #ifdef I_UNISTD
6900 #  include <unistd.h>  /* Needed for NetBSD */
6901 #endif
6902 main()
6903 {
6904 char buf[128], abc[128];
6905 char *b;
6906 int len;
6907 int off;
6908 int align;
6909
6910 /* Copy "abcde..." string to char abc[] so that gcc doesn't
6911    try to store the string in read-only memory.  */
6912 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
6913
6914 for (align = 7; align >= 0; align--) {
6915         for (len = 36; len; len--) {
6916                 b = buf+align;
6917                 bcopy(abc, b, len);
6918                 for (off = 1; off <= len; off++) {
6919                         bcopy(b, b+off, len);
6920                         bcopy(b+off, b, len);
6921                         if (bcmp(b, abc, len))
6922                                 exit(1);
6923                 }
6924         }
6925 }
6926 exit(0);
6927 }
6928 EOCP
6929         if $cc $ccflags $ldflags foo.c -o safebcpy $libs >/dev/null 2>&1; then
6930                 if ./safebcpy 2>/dev/null; then
6931                         echo "Yes, it can."
6932                         val="$define"
6933                 else
6934                         echo "It can't, sorry."
6935                         case "$d_memmove" in
6936                         "$define") echo "But that's Ok since you have memmove()." ;;
6937                         esac
6938                 fi
6939         else
6940                 echo "(I can't compile the test program, so we'll assume not...)"
6941                 case "$d_memmove" in
6942                 "$define") echo "But that's Ok since you have memmove()." ;;
6943                 esac
6944         fi
6945         ;;
6946 esac
6947 $rm -f foo.* safebcpy core
6948 set d_safebcpy
6949 eval $setvar
6950
6951 : can memcpy handle overlapping blocks?
6952 val="$undef"
6953 case "$d_memcpy" in
6954 "$define")
6955         echo " "
6956         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
6957         $cat >foo.c <<EOCP
6958 #$i_memory I_MEMORY
6959 #$i_stdlib I_STDLIB
6960 #$i_string I_STRING
6961 #$i_unistd I_UNISTD
6962 EOCP
6963         $cat >>foo.c <<'EOCP'
6964 #include <stdio.h>
6965
6966 #ifdef I_MEMORY
6967 #  include <memory.h>
6968 #endif
6969 #ifdef I_STDLIB
6970 #  include <stdlib.h>
6971 #endif
6972 #ifdef I_STRING
6973 #  include <string.h>
6974 #else
6975 #  include <strings.h>
6976 #endif
6977 #ifdef I_UNISTD
6978 #  include <unistd.h>  /* Needed for NetBSD */
6979 #endif
6980 main()
6981 {
6982 char buf[128], abc[128];
6983 char *b;
6984 int len;
6985 int off;
6986 int align;
6987
6988 /* Copy "abcde..." string to char abc[] so that gcc doesn't
6989    try to store the string in read-only memory. */
6990 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
6991
6992 for (align = 7; align >= 0; align--) {
6993         for (len = 36; len; len--) {
6994                 b = buf+align;
6995                 memcpy(b, abc, len);
6996                 for (off = 1; off <= len; off++) {
6997                         memcpy(b+off, b, len);
6998                         memcpy(b, b+off, len);
6999                         if (memcmp(b, abc, len))
7000                                 exit(1);
7001                 }
7002         }
7003 }
7004 exit(0);
7005 }
7006 EOCP
7007         if $cc $ccflags $ldflags foo.c -o safemcpy $libs >/dev/null 2>&1; then
7008                 if ./safemcpy 2>/dev/null; then
7009                         echo "Yes, it can."
7010                         val="$define"
7011                 else
7012                         echo "It can't, sorry."
7013                         case "$d_memmove" in
7014                         "$define") echo "But that's Ok since you have memmove()." ;;
7015                         esac
7016                 fi
7017         else
7018                 echo "(I can't compile the test program, so we'll assume not...)"
7019                 case "$d_memmove" in
7020                 "$define") echo "But that's Ok since you have memmove()." ;;
7021                 esac
7022         fi
7023         ;;
7024 esac
7025 $rm -f foo.* safemcpy core
7026 set d_safemcpy
7027 eval $setvar
7028
7029 : see if select exists
7030 set select d_select
7031 eval $inlibc
7032
7033 : see if semctl exists
7034 set semctl d_semctl
7035 eval $inlibc
7036
7037 : see if semget exists
7038 set semget d_semget
7039 eval $inlibc
7040
7041 : see if semop exists
7042 set semop d_semop
7043 eval $inlibc
7044
7045 : see how much of the 'sem*(2)' library is present.
7046 h_sem=true
7047 echo " "
7048 case "$d_semctl$d_semget$d_semop" in
7049 *"$undef"*) h_sem=false;;
7050 esac
7051 : we could also check for sys/ipc.h ...
7052 if $h_sem && $test `./findhdr sys/sem.h`; then
7053         echo "You have the full sem*(2) library." >&4
7054         val="$define"
7055 else
7056         echo "You don't have the full sem*(2) library." >&4
7057         val="$undef"
7058 fi
7059 set d_sem
7060 eval $setvar
7061
7062 : see if setegid exists
7063 set setegid d_setegid
7064 eval $inlibc
7065
7066 : see if seteuid exists
7067 set seteuid d_seteuid
7068 eval $inlibc
7069
7070 : see if setlinebuf exists
7071 set setlinebuf d_setlinebuf
7072 eval $inlibc
7073
7074 : see if setlocale exists
7075 set setlocale d_setlocale
7076 eval $inlibc
7077
7078 : see if setpgid exists
7079 set setpgid d_setpgid
7080 eval $inlibc
7081
7082 : see if setpgrp2 exists
7083 set setpgrp2 d_setpgrp2
7084 eval $inlibc
7085
7086 : see if setpriority exists
7087 set setpriority d_setprior
7088 eval $inlibc
7089
7090 : see if setregid exists
7091 set setregid d_setregid
7092 eval $inlibc
7093 set setresgid d_setresgid
7094 eval $inlibc
7095
7096 : see if setreuid exists
7097 set setreuid d_setreuid
7098 eval $inlibc
7099 set setresuid d_setresuid
7100 eval $inlibc
7101
7102 : see if setrgid exists
7103 set setrgid d_setrgid
7104 eval $inlibc
7105
7106 : see if setruid exists
7107 set setruid d_setruid
7108 eval $inlibc
7109
7110 : see if setsid exists
7111 set setsid d_setsid
7112 eval $inlibc
7113
7114 : see if sfio.h is available
7115 set sfio.h i_sfio
7116 eval $inhdr
7117
7118
7119 : see if sfio library is available
7120 case "$i_sfio" in
7121 $define)
7122         val=''
7123         set sfreserve val
7124         eval $inlibc
7125         ;;
7126 *)
7127         val="$undef"
7128         ;;
7129 esac
7130 : Ok, but do we want to use it.
7131 case "$val" in
7132 $define)
7133         case "$usesfio" in
7134         true|$define|[yY]*) dflt='y';;
7135         *) dflt='n';;
7136         esac
7137         echo "$package can use the sfio library, but it is experimental."
7138         rp="You seem to have sfio available, do you want to try using it?"
7139         . ./myread
7140         case "$ans" in
7141         y|Y) ;;
7142         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
7143                 val="$undef"
7144                 ;;
7145         esac
7146         ;;
7147 *)      case "$usesfio" in
7148         true|$define|[yY]*)
7149                 echo "Sorry, cannot find sfio on this machine" >&4
7150                 echo "Ignoring your setting of usesfio=$usesfio" >&4
7151                 ;;
7152         esac
7153         ;;
7154 esac
7155 set d_sfio
7156 eval $setvar
7157 case "$d_sfio" in
7158 $define) usesfio='true';;
7159 *) usesfio='false';;
7160 esac
7161
7162 : see if shmctl exists
7163 set shmctl d_shmctl
7164 eval $inlibc
7165
7166 : see if shmget exists
7167 set shmget d_shmget
7168 eval $inlibc
7169
7170 : see if shmat exists
7171 set shmat d_shmat
7172 eval $inlibc
7173 : see what shmat returns
7174 case "$d_shmat" in
7175 "$define")
7176         $cat >shmat.c <<'END'
7177 #include <sys/shm.h>
7178 void *shmat();
7179 END
7180         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
7181                 shmattype='void *'
7182         else
7183                 shmattype='char *'
7184         fi
7185         echo "and it returns ($shmattype)." >&4
7186         : see if a prototype for shmat is available
7187         xxx=`./findhdr sys/shm.h`
7188         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
7189         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
7190                 val="$define"
7191         else
7192                 val="$undef"
7193         fi
7194         $rm -f shmat.[co]
7195         ;;
7196 *)
7197         val="$undef"
7198         ;;
7199 esac
7200 set d_shmatprototype
7201 eval $setvar
7202
7203 : see if shmdt exists
7204 set shmdt d_shmdt
7205 eval $inlibc
7206
7207 : see how much of the 'shm*(2)' library is present.
7208 h_shm=true
7209 echo " "
7210 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
7211 *"$undef"*) h_shm=false;;
7212 esac
7213 : we could also check for sys/ipc.h ...
7214 if $h_shm && $test `./findhdr sys/shm.h`; then
7215         echo "You have the full shm*(2) library." >&4
7216         val="$define"
7217 else
7218         echo "You don't have the full shm*(2) library." >&4
7219         val="$undef"
7220 fi
7221 set d_shm
7222 eval $setvar
7223
7224 echo " "
7225 : see if we have sigaction
7226 if set sigaction val -f d_sigaction; eval $csym; $val; then
7227         echo 'sigaction() found.' >&4
7228         val="$define"
7229 else
7230         echo 'sigaction NOT found.' >&4
7231         val="$undef"
7232 fi
7233
7234 $cat > set.c <<'EOP'
7235 /* Solaris 2.5_x86 with SunWorks Pro C 3.0.1 doesn't have a complete
7236    sigaction structure if compiled with cc -Xc.  This compile test
7237    will fail then.  <doughera@lafcol.lafayette.edu>
7238 */
7239 #include <stdio.h>
7240 #include <sys/types.h>
7241 #include <signal.h>
7242 main()
7243 {
7244     struct sigaction act, oact;
7245 }
7246 EOP
7247
7248 if $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1; then
7249         :
7250 else
7251         echo "But you don't seem to have a useable struct sigaction." >&4
7252         val="$undef"
7253 fi
7254 set d_sigaction; eval $setvar
7255 $rm -f set set.o set.c
7256
7257 : see if sigsetjmp exists
7258 echo " "
7259 case "$d_sigsetjmp" in
7260 '')
7261         $cat >set.c <<'EOP'
7262 #include <setjmp.h>
7263 sigjmp_buf env;
7264 int set = 1;
7265 main()
7266 {
7267         if (sigsetjmp(env,1))
7268                 exit(set);
7269         set = 0;
7270         siglongjmp(env, 1);
7271         exit(1);
7272 }
7273 EOP
7274         if $cc $ccflags $ldflags -o set set.c $libs > /dev/null 2>&1 ; then
7275                 if ./set >/dev/null 2>&1; then
7276                         echo "POSIX sigsetjmp found." >&4
7277                         val="$define"
7278                 else
7279                         $cat >&4 <<EOM
7280 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
7281 I'll ignore them.
7282 EOM
7283                         val="$undef"
7284                 fi
7285         else
7286                 echo "sigsetjmp not found." >&4
7287                 val="$undef"
7288         fi
7289         ;;
7290 *) val="$d_sigsetjmp"
7291         case "$d_sigsetjmp" in
7292         $define) echo "POSIX sigsetjmp found." >&4;;
7293         $undef) echo "sigsetjmp not found." >&4;;
7294         esac
7295         ;;
7296 esac
7297 set d_sigsetjmp
7298 eval $setvar
7299 $rm -f set.c set
7300
7301 socketlib=''
7302 sockethdr=''
7303 : see whether socket exists
7304 echo " "
7305 $echo $n "Hmm... $c" >&4
7306 if set socket val -f d_socket; eval $csym; $val; then
7307         echo "Looks like you have Berkeley networking support." >&4
7308         d_socket="$define"
7309         if set setsockopt val -f; eval $csym; $val; then
7310                 d_oldsock="$undef"
7311         else
7312                 echo "...but it uses the old 4.1c interface, rather than 4.2" >&4
7313                 d_oldsock="$define"
7314         fi
7315 else
7316         if $contains socklib libc.list >/dev/null 2>&1; then
7317                 echo "Looks like you have Berkeley networking support." >&4
7318                 d_socket="$define"
7319                 : we will have to assume that it supports the 4.2 BSD interface
7320                 d_oldsock="$undef"
7321         else
7322                 echo "You don't have Berkeley networking in libc.a..." >&4
7323                 if test -f /usr/lib/libnet.a; then
7324                         ( (nm $nm_opt /usr/lib/libnet.a | eval $nm_extract) ||  \
7325                         ar t /usr/lib/libnet.a) 2>/dev/null >> libc.list
7326                         if $contains socket libc.list >/dev/null 2>&1; then
7327                         echo "...but the Wollongong group seems to have hacked it in." >&4
7328                                 socketlib="-lnet"
7329                                 sockethdr="-I/usr/netinclude"
7330                                 d_socket="$define"
7331                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
7332                                         d_oldsock="$undef"
7333                                 else
7334                                         echo "...using the old 4.1c interface, rather than 4.2" >&4
7335                                         d_oldsock="$define"
7336                                 fi
7337                         else
7338                                 echo "or even in libnet.a, which is peculiar." >&4
7339                                 d_socket="$undef"
7340                                 d_oldsock="$undef"
7341                         fi
7342                 else
7343                         echo "or anywhere else I see." >&4
7344                         d_socket="$undef"
7345                         d_oldsock="$undef"
7346                 fi
7347         fi
7348 fi
7349
7350 : see if socketpair exists
7351 set socketpair d_sockpair
7352 eval $inlibc
7353
7354 : see if stat knows about block sizes
7355 echo " "
7356 xxx=`./findhdr sys/stat.h`
7357 if $contains 'st_blocks;' "$xxx" >/dev/null 2>&1 ; then
7358         if $contains 'st_blksize;' "$xxx" >/dev/null 2>&1 ; then
7359                 echo "Your stat() knows about block sizes." >&4
7360                 val="$define"
7361         else
7362                 echo "Your stat() doesn't know about block sizes." >&4
7363                 val="$undef"
7364         fi
7365 else
7366         echo "Your stat() doesn't know about block sizes." >&4
7367         val="$undef"
7368 fi
7369 set d_statblks
7370 eval $setvar
7371
7372 : see if _ptr and _cnt from stdio act std
7373 echo " "
7374 if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
7375         echo "(Looks like you have stdio.h from Linux.)"
7376         case "$stdio_ptr" in
7377         '') stdio_ptr='((fp)->_IO_read_ptr)'
7378                 ptr_lval=$define
7379                 ;;
7380         *)      ptr_lval=$d_stdio_ptr_lval;;
7381         esac
7382         case "$stdio_cnt" in
7383         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
7384                 cnt_lval=$undef
7385                 ;;
7386         *)      cnt_lval=$d_stdio_cnt_lval;;
7387         esac
7388         case "$stdio_base" in
7389         '') stdio_base='((fp)->_IO_read_base)';;
7390         esac
7391         case "$stdio_bufsiz" in
7392         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
7393         esac
7394 else
7395         case "$stdio_ptr" in
7396         '') stdio_ptr='((fp)->_ptr)'
7397                 ptr_lval=$define
7398                 ;;
7399         *)      ptr_lval=$d_stdio_ptr_lval;;
7400         esac
7401         case "$stdio_cnt" in
7402         '') stdio_cnt='((fp)->_cnt)'
7403                 cnt_lval=$define
7404                 ;;
7405         *)      cnt_lval=$d_stdio_cnt_lval;;
7406         esac
7407         case "$stdio_base" in
7408         '') stdio_base='((fp)->_base)';;
7409         esac
7410         case "$stdio_bufsiz" in
7411         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
7412         esac
7413 fi
7414 : test whether _ptr and _cnt really work
7415 echo "Checking how std your stdio is..." >&4
7416 $cat >try.c <<EOP
7417 #include <stdio.h>
7418 #define FILE_ptr(fp)    $stdio_ptr
7419 #define FILE_cnt(fp)    $stdio_cnt
7420 main() {
7421         FILE *fp = fopen("try.c", "r");
7422         char c = getc(fp);
7423         if (
7424                 18 <= FILE_cnt(fp) &&
7425                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
7426         )
7427                 exit(0);
7428         exit(1);
7429 }
7430 EOP
7431 val="$undef"
7432 if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1; then
7433         if ./try; then
7434                 echo "Your stdio acts pretty std."
7435                 val="$define"
7436         else
7437                 echo "Your stdio isn't very std."
7438         fi
7439 else
7440         echo "Your stdio doesn't appear very std."
7441 fi
7442 $rm -f try.c try
7443 set d_stdstdio
7444 eval $setvar
7445
7446 : Can _ptr be used as an lvalue?
7447 case "$d_stdstdio$ptr_lval" in
7448 $define$define) val=$define ;;
7449 *) val=$undef ;;
7450 esac
7451 set d_stdio_ptr_lval
7452 eval $setvar
7453
7454 : Can _cnt be used as an lvalue?
7455 case "$d_stdstdio$cnt_lval" in
7456 $define$define) val=$define ;;
7457 *) val=$undef ;;
7458 esac
7459 set d_stdio_cnt_lval
7460 eval $setvar
7461
7462 : How to access the stdio _filbuf or __filbuf function.
7463 : If this fails, check how the getc macro in stdio.h works.
7464 case "${d_stdio_ptr_lval}${d_stdio_cnt_lval}" in
7465 ${define}${define})
7466         : Try $hint value, if any, then _filbuf, __filbuf, _fill, then punt.
7467         : _fill is for os/2.
7468         xxx='notok'
7469         for filbuf in $stdio_filbuf '_filbuf(fp)' '__filbuf(fp) ' '_fill(fp)' ; do
7470                 $cat >try.c <<EOP
7471 #include <stdio.h>
7472 #define FILE_ptr(fp)    $stdio_ptr
7473 #define FILE_cnt(fp)    $stdio_cnt
7474 #define FILE_filbuf(fp) $filbuf
7475 main() {
7476         FILE *fp = fopen("try.c", "r");
7477         int c;
7478         c = getc(fp);
7479         c = FILE_filbuf(fp);  /* Just looking for linker errors.*/
7480         exit(0);
7481 }
7482 EOP
7483                 if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1 && ./try; then
7484                         echo "Your stdio appears to use $filbuf"
7485                         stdio_filbuf="$filbuf"
7486                         xxx='ok'
7487                         break
7488                 else
7489                         echo "Hmm.  $filbuf doesn't seem to work."
7490                 fi
7491                 $rm -f try.c try
7492         done
7493         case "$xxx" in
7494         notok)  echo "I can't figure out how to access _filbuf"
7495                         echo "I'll just have to work around it."
7496                         d_stdio_ptr_lval="$undef"
7497                         d_stdio_cnt_lval="$undef"
7498                         ;;
7499         esac
7500         ;;
7501 esac
7502
7503
7504 : see if _base is also standard
7505 val="$undef"
7506 case "$d_stdstdio" in
7507 $define)
7508         $cat >try.c <<EOP
7509 #include <stdio.h>
7510 #define FILE_base(fp)   $stdio_base
7511 #define FILE_bufsiz(fp) $stdio_bufsiz
7512 main() {
7513         FILE *fp = fopen("try.c", "r");
7514         char c = getc(fp);
7515         if (
7516                 19 <= FILE_bufsiz(fp) &&
7517                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
7518         )
7519                 exit(0);
7520         exit(1);
7521 }
7522 EOP
7523         if $cc $ccflags $ldflags -o try try.c $libs > /dev/null 2>&1; then
7524                 if ./try; then
7525                         echo "And its _base field acts std."
7526                         val="$define"
7527                 else
7528                         echo "But its _base field isn't std."
7529                 fi
7530         else
7531                 echo "However, it seems to be lacking the _base field."
7532         fi
7533         $rm -f try.c try
7534         ;;
7535 esac
7536 set d_stdiobase
7537 eval $setvar
7538
7539 : see if strcoll exists
7540 set strcoll d_strcoll
7541 eval $inlibc
7542
7543 : check for structure copying
7544 echo " "
7545 echo "Checking to see if your C compiler can copy structs..." >&4
7546 $cat >try.c <<'EOCP'
7547 main()
7548 {
7549         struct blurfl {
7550                 int dyick;
7551         } foo, bar;
7552
7553         foo = bar;
7554 }
7555 EOCP
7556 if $cc -c try.c >/dev/null 2>&1 ; then
7557         val="$define"
7558         echo "Yup, it can."
7559 else
7560         val="$undef"
7561         echo "Nope, it can't."
7562 fi
7563 set d_strctcpy
7564 eval $setvar
7565 $rm -f try.*
7566
7567 : see if strerror and/or sys_errlist[] exist
7568 echo " "
7569 if set strerror val -f d_strerror; eval $csym; $val; then
7570         echo 'strerror() found.' >&4
7571         d_strerror="$define"
7572         d_strerrm='strerror(e)'
7573         if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
7574                 echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
7575                 d_syserrlst="$define"
7576         else
7577         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
7578                 d_syserrlst="$undef"
7579         fi
7580 elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
7581         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
7582         echo 'strerror() found in string header.' >&4
7583         d_strerror="$define"
7584         d_strerrm='strerror(e)'
7585         if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
7586                 echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
7587                 d_syserrlst="$define"
7588         else
7589                 echo "(You don't appear to have any sys_errlist[], how can this be?)"
7590                 d_syserrlst="$undef"
7591         fi
7592 elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
7593 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
7594         d_strerror="$undef"
7595         d_syserrlst="$define"
7596         d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
7597 else
7598         echo 'strerror() and sys_errlist[] NOT found.' >&4
7599         d_strerror="$undef"
7600         d_syserrlst="$undef"
7601         d_strerrm='"unknown"'
7602 fi
7603
7604 : see if strtod exists
7605 set strtod d_strtod
7606 eval $inlibc
7607
7608 : see if strtol exists
7609 set strtol d_strtol
7610 eval $inlibc
7611
7612 : see if strtoul exists
7613 set strtoul d_strtoul
7614 eval $inlibc
7615
7616 : see if strxfrm exists
7617 set strxfrm d_strxfrm
7618 eval $inlibc
7619
7620 : see if symlink exists
7621 set symlink d_symlink
7622 eval $inlibc
7623
7624 : see if syscall exists
7625 set syscall d_syscall
7626 eval $inlibc
7627
7628 : see if sysconf exists
7629 set sysconf d_sysconf
7630 eval $inlibc
7631
7632 : see if system exists
7633 set system d_system
7634 eval $inlibc
7635
7636 : see if tcgetpgrp exists
7637 set tcgetpgrp d_tcgetpgrp
7638 eval $inlibc
7639
7640 : see if tcsetpgrp exists
7641 set tcsetpgrp d_tcsetpgrp
7642 eval $inlibc
7643
7644 : define an is-a-typedef? function
7645 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
7646 case "$inclist" in
7647 "") inclist="sys/types.h";;
7648 esac;
7649 eval "varval=\$$var";
7650 case "$varval" in
7651 "")
7652         $rm -f temp.c;
7653         for inc in $inclist; do
7654                 echo "#include <$inc>" >>temp.c;
7655         done;
7656         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
7657         if $contains $type temp.E >/dev/null 2>&1; then
7658                 eval "$var=\$type";
7659         else
7660                 eval "$var=\$def";
7661         fi;
7662         $rm -f temp.?;;
7663 *) eval "$var=\$varval";;
7664 esac'
7665
7666 : see if this is a sys/times.h system
7667 set sys/times.h i_systimes
7668 eval $inhdr
7669
7670 : see if times exists
7671 echo " "
7672 if set times val -f d_times; eval $csym; $val; then
7673         echo 'times() found.' >&4
7674         d_times="$define"
7675         inc=''
7676         case "$i_systimes" in
7677         "$define") inc='sys/times.h';;
7678         esac
7679         set clock_t clocktype long stdio.h sys/types.h $inc
7680         eval $typedef
7681         dflt="$clocktype"
7682         echo " "
7683         rp="What type is returned by times() on this system?"
7684         . ./myread
7685         clocktype="$ans"
7686 else
7687         echo 'times() NOT found, hope that will do.' >&4
7688         d_times="$undef"
7689         clocktype='int'
7690 fi
7691
7692 : see if truncate exists
7693 set truncate d_truncate
7694 eval $inlibc
7695
7696 : see if tzname[] exists
7697 echo " "
7698 if set tzname val -a d_tzname; eval $csym; $val; then
7699         val="$define"
7700         echo 'tzname[] found.' >&4
7701 else
7702         val="$undef"
7703         echo 'tzname[] NOT found.' >&4
7704 fi
7705 set d_tzname
7706 eval $setvar
7707
7708 : see if umask exists
7709 set umask d_umask
7710 eval $inlibc
7711
7712 : see how we will look up host name
7713 echo " "
7714 if false; then
7715         : dummy stub to allow use of elif
7716 elif set uname val -f d_uname; eval $csym; $val; then
7717         if ./xenix; then
7718                 $cat <<'EOM'
7719 uname() was found, but you're running xenix, and older versions of xenix
7720 have a broken uname(). If you don't really know whether your xenix is old
7721 enough to have a broken system call, use the default answer.
7722
7723 EOM
7724                 dflt=y
7725                 case "$d_uname" in
7726                 "$define") dflt=n;;
7727                 esac
7728                 rp='Is your uname() broken?'
7729                 . ./myread
7730                 case "$ans" in
7731                 n*) d_uname="$define"; call=uname;;
7732                 esac
7733         else
7734                 echo 'uname() found.' >&4
7735                 d_uname="$define"
7736                 call=uname
7737         fi
7738 fi
7739 case "$d_gethname" in
7740 '') d_gethname="$undef";;
7741 esac
7742 case "$d_uname" in
7743 '') d_uname="$undef";;
7744 esac
7745 case "$d_phostname" in
7746 '') d_phostname="$undef";;
7747 esac
7748
7749 : backward compatibility for d_hvfork
7750 if test X$d_hvfork != X; then
7751         d_vfork="$d_hvfork"
7752         d_hvfork=''
7753 fi
7754 : see if there is a vfork
7755 val=''
7756 set vfork val
7757 eval $inlibc
7758
7759 : Ok, but do we want to use it. vfork is reportedly unreliable in 
7760 : perl on Solaris 2.x, and probably elsewhere.
7761 case "$val" in
7762 $define)
7763         echo " "
7764         case "$usevfork" in
7765         false) dflt='n';;
7766         *) dflt='y';;
7767         esac
7768         rp="Some systems have problems with vfork().  Do you want to use it?"
7769         . ./myread
7770         case "$ans" in
7771         y|Y) ;;
7772         *)
7773                 echo "Ok, we won't use vfork()."
7774                 val="$undef"
7775                 ;;
7776         esac
7777         ;;
7778 esac
7779 set d_vfork
7780 eval $setvar
7781 case "$d_vfork" in
7782 $define) usevfork='true';;
7783 *) usevfork='false';;
7784 esac
7785
7786 : see if this is an sysdir system
7787 set sys/dir.h i_sysdir
7788 eval $inhdr
7789
7790 : see if this is an sysndir system
7791 set sys/ndir.h i_sysndir
7792 eval $inhdr
7793
7794 : see if closedir exists
7795 set closedir d_closedir
7796 eval $inlibc
7797
7798 case "$d_closedir" in
7799 "$define")
7800         echo " "
7801         echo "Checking whether closedir() returns a status..." >&4
7802         cat > closedir.c <<EOM
7803 #$i_dirent I_DIRENT             /**/
7804 #$i_sysdir I_SYS_DIR            /**/
7805 #$i_sysndir I_SYS_NDIR          /**/
7806
7807 #if defined(I_DIRENT)
7808 #include <dirent.h>
7809 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
7810 #include <sys/dir.h>
7811 #endif
7812 #else
7813 #ifdef I_SYS_NDIR
7814 #include <sys/ndir.h>
7815 #else
7816 #ifdef I_SYS_DIR
7817 #ifdef hp9000s500
7818 #include <ndir.h>       /* may be wrong in the future */
7819 #else
7820 #include <sys/dir.h>
7821 #endif
7822 #endif
7823 #endif
7824 #endif 
7825 int main() { return closedir(opendir(".")); }
7826 EOM
7827         if $cc $ccflags $ldflags -o closedir closedir.c $libs > /dev/null 2>&1; then
7828                 if ./closedir > /dev/null 2>&1 ; then
7829                         echo "Yes, it does."
7830                         val="$undef"
7831                 else
7832                         echo "No, it doesn't."
7833                         val="$define"
7834                 fi
7835         else
7836                 echo "(I can't seem to compile the test program--assuming it doesn't)"
7837                 val="$define"
7838         fi
7839         ;;
7840 *)
7841         val="$undef";
7842         ;;
7843 esac
7844 set d_void_closedir
7845 eval $setvar
7846 $rm -f closedir*
7847 : check for volatile keyword
7848 echo " "
7849 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
7850 $cat >try.c <<'EOCP'
7851 main()
7852 {
7853         typedef struct _goo_struct goo_struct;
7854         goo_struct * volatile goo = ((goo_struct *)0);
7855         struct _goo_struct {
7856                 long long_int;
7857                 int reg_int;
7858                 char char_var;
7859         };
7860         typedef unsigned short foo_t;
7861         char *volatile foo;
7862         volatile int bar;
7863         volatile foo_t blech;
7864         foo = foo;
7865 }
7866 EOCP
7867 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
7868         val="$define"
7869         echo "Yup, it does."
7870 else
7871         val="$undef"
7872         echo "Nope, it doesn't."
7873 fi
7874 set d_volatile
7875 eval $setvar
7876 $rm -f try.*
7877
7878 : see if there is a wait4
7879 set wait4 d_wait4
7880 eval $inlibc
7881
7882 : see if waitpid exists
7883 set waitpid d_waitpid
7884 eval $inlibc
7885
7886 : see if wcstombs exists
7887 set wcstombs d_wcstombs
7888 eval $inlibc
7889
7890 : see if wctomb exists
7891 set wctomb d_wctomb
7892 eval $inlibc
7893
7894 : preserve RCS keywords in files with variable substitution, grrr
7895 Date='$Date'
7896 Id='$Id'
7897 Log='$Log'
7898 RCSfile='$RCSfile'
7899 Revision='$Revision'
7900
7901 : check for alignment requirements
7902 echo " "
7903 case "$alignbytes" in
7904 '') echo "Checking alignment constraints..." >&4
7905         $cat >try.c <<'EOCP'
7906 struct foobar {
7907         char foo;
7908         double bar;
7909 } try;
7910 main()
7911 {
7912         printf("%d\n", (char *)&try.bar - (char *)&try.foo);
7913 }
7914 EOCP
7915         if $cc $ccflags try.c -o try >/dev/null 2>&1; then
7916                 dflt=`./try`
7917         else
7918                 dflt='8'
7919                 echo"(I can't seem to compile the test program...)"
7920         fi
7921         ;;
7922 *) dflt="$alignbytes"
7923         ;;
7924 esac
7925 rp="Doubles must be aligned on a how-many-byte boundary?"
7926 . ./myread
7927 alignbytes="$ans"
7928 $rm -f try.c try
7929
7930 : check for ordering of bytes in a long
7931 case "$byteorder" in
7932 '')
7933         $cat <<'EOM'
7934   
7935 In the following, larger digits indicate more significance.  A big-endian
7936 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
7937 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
7938 machines may have weird orders like 3412.  A Cray will report 87654321. If
7939 the test program works the default is probably right.
7940 I'm now running the test program...
7941 EOM
7942         $cat >try.c <<'EOCP'
7943 #include <stdio.h>
7944 main()
7945 {
7946         int i;
7947         union {
7948                 unsigned long l;
7949                 char c[sizeof(long)];
7950         } u;
7951
7952         if (sizeof(long) > 4)
7953                 u.l = (0x08070605L << 32) | 0x04030201L;
7954         else
7955                 u.l = 0x04030201L;
7956         for (i = 0; i < sizeof(long); i++)
7957                 printf("%c", u.c[i]+'0');
7958         printf("\n");
7959         exit(0);
7960 }
7961 EOCP
7962         xxx_prompt=y
7963         if $cc $ccflags try.c -o try >/dev/null 2>&1 && ./try > /dev/null; then
7964                 dflt=`./try`
7965                 case "$dflt" in
7966                 [1-4][1-4][1-4][1-4]|12345678|87654321)
7967                         echo "(The test program ran ok.)"
7968                         echo "byteorder=$dflt"
7969                         xxx_prompt=n
7970                         ;;
7971                 ????|????????) echo "(The test program ran ok.)" ;;
7972                 *) echo "(The test program didn't run right for some reason.)" ;;
7973                 esac
7974         else
7975                 dflt='4321'
7976                 cat <<'EOM'
7977 (I can't seem to compile the test program.  Guessing big-endian...)
7978 EOM
7979         fi
7980         case "$xxx_prompt" in
7981         y)
7982                 rp="What is the order of bytes in a long?"
7983                 . ./myread
7984                 byteorder="$ans"
7985                 ;;
7986         *)      byteorder=$dflt
7987                 ;;
7988         esac
7989         ;;
7990 esac
7991 $rm -f try.c try
7992
7993 : how do we catenate cpp tokens here?
7994 echo " "
7995 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
7996 $cat >cpp_stuff.c <<'EOCP'
7997 #define RCAT(a,b)a/**/b
7998 #define ACAT(a,b)a ## b
7999 RCAT(Rei,ser)
8000 ACAT(Cir,cus)
8001 EOCP
8002 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
8003 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
8004         echo "Oh!  Smells like ANSI's been here."
8005         echo "We can catify or stringify, separately or together!"
8006         cpp_stuff=42
8007 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
8008         echo "Ah, yes!  The good old days!"
8009         echo "However, in the good old days we don't know how to stringify and"
8010         echo "catify at the same time."
8011         cpp_stuff=1
8012 else
8013         $cat >&4 <<EOM
8014 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
8015 to have to edit the values of CAT[2-5] in config.h...
8016 EOM
8017         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
8018 fi
8019 $rm -f cpp_stuff.*
8020
8021 : see if this is a db.h system
8022 set db.h i_db
8023 eval $inhdr
8024
8025 case "$i_db" in
8026 define)
8027         : Check the return type needed for hash 
8028         echo " "
8029         echo "Checking return type needed for hash for Berkeley DB ..." >&4
8030         $cat >try.c <<EOCP
8031 #$d_const HASCONST
8032 #ifndef HASCONST
8033 #define const
8034 #endif
8035 #include <sys/types.h>
8036 #include <db.h>
8037 u_int32_t hash_cb (ptr, size)
8038 const void *ptr;
8039 size_t size;
8040 {
8041 }
8042 HASHINFO info;
8043 main()
8044 {
8045         info.hash = hash_cb;
8046 }
8047 EOCP
8048         if $cc $ccflags -c try.c >try.out 2>&1 ; then
8049                 if $contains warning try.out >>/dev/null 2>&1 ; then
8050                         db_hashtype='int'
8051                 else
8052                         db_hashtype='u_int32_t'
8053                 fi
8054         else
8055                 echo "I can't seem to compile the test program." >&4
8056                 db_hashtype=int
8057         fi
8058         $rm -f try.*
8059         echo "Your version of Berkeley DB uses $db_hashtype for hash."
8060         ;;
8061 *)      db_hashtype=int
8062         ;;
8063 esac
8064
8065 case "$i_db" in
8066 define)
8067         : Check the return type needed for prefix 
8068         echo " "
8069         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
8070         cat >try.c <<EOCP
8071 #$d_const HASCONST
8072 #ifndef HASCONST
8073 #define const
8074 #endif
8075 #include <sys/types.h>
8076 #include <db.h>
8077 size_t prefix_cb (key1, key2)
8078 const DBT *key1;
8079 const DBT *key2;
8080 {
8081 }
8082 BTREEINFO info;
8083 main()
8084 {
8085         info.prefix = prefix_cb;
8086 }
8087 EOCP
8088         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
8089                 if $contains warning try.out >>/dev/null 2>&1 ; then
8090                         db_prefixtype='int'
8091                 else
8092                         db_prefixtype='size_t'
8093                 fi
8094         else
8095                 echo "I can't seem to compile the test program." >&4
8096                 db_prefixtype='int'
8097         fi
8098         $rm -f try.*
8099         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
8100         ;;
8101 *)      db_prefixtype='int'
8102         ;;
8103 esac
8104
8105 : check for void type
8106 echo " "
8107 echo "Checking to see how well your C compiler groks the void type..." >&4
8108 echo " "
8109 $cat >&4 <<EOM
8110   Support flag bits are:
8111     1: basic void declarations.
8112     2: arrays of pointers to functions returning void.
8113     4: operations between pointers to and addresses of void functions.
8114     8: generic void pointers.
8115 EOM
8116 echo " "
8117 case "$voidflags" in
8118 '')
8119         $cat >try.c <<'EOCP'
8120 #if TRY & 1
8121 void sub() {
8122 #else
8123 sub() {
8124 #endif
8125         extern void moo();      /* function returning void */
8126         void (*goo)();          /* ptr to func returning void */
8127 #if TRY & 8
8128         void *hue;              /* generic ptr */
8129 #endif
8130 #if TRY & 2
8131         void (*foo[10])();
8132 #endif
8133
8134 #if TRY & 4
8135         if(goo == moo) {
8136                 exit(0);
8137         }
8138 #endif
8139         exit(0);
8140 }
8141 main() { sub(); }
8142 EOCP
8143         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
8144                 voidflags=$defvoidused
8145         echo "It appears to support void to the level $package wants ($defvoidused)."
8146                 if $contains warning .out >/dev/null 2>&1; then
8147                         echo "However, you might get some warnings that look like this:"
8148                         $cat .out
8149                 fi
8150         else
8151 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
8152                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
8153                         echo "It supports 1..."
8154                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
8155                                 echo "It also supports 2..."
8156                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
8157                                         voidflags=7
8158                                         echo "And it supports 4 but not 8 definitely."
8159                                 else
8160                                         echo "It doesn't support 4..."
8161                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
8162                                                 voidflags=11
8163                                                 echo "But it supports 8."
8164                                         else
8165                                                 voidflags=3
8166                                                 echo "Neither does it support 8."
8167                                         fi
8168                                 fi
8169                         else
8170                                 echo "It does not support 2..."
8171                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
8172                                         voidflags=13
8173                                         echo "But it supports 4 and 8."
8174                                 else
8175                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
8176                                                 voidflags=5
8177                                                 echo "And it supports 4 but has not heard about 8."
8178                                         else
8179                                                 echo "However it supports 8 but not 4."
8180                                         fi
8181                                 fi
8182                         fi
8183                 else
8184                         echo "There is no support at all for void."
8185                         voidflags=0
8186                 fi
8187         fi
8188 esac
8189 : Only prompt user if support does not match the level we want
8190 case "$voidflags" in
8191 "$defvoidused") ;;
8192 *)
8193         dflt="$voidflags";
8194         rp="Your void support flags add up to what?"
8195         . ./myread
8196         voidflags="$ans"
8197         ;;
8198 esac
8199 $rm -f try.* .out
8200
8201 : see what type file positions are declared as in the library
8202 set fpos_t fpostype long stdio.h sys/types.h
8203 eval $typedef
8204 echo " "
8205 dflt="$fpostype"
8206 rp="What is the type for file position used by fsetpos()?"
8207 . ./myread
8208 fpostype="$ans"
8209
8210 : Store the full pathname to the sed program for use in the C program
8211 full_sed=$sed
8212
8213 : see what type gids are declared as in the kernel
8214 set gid_t gidtype xxx stdio.h sys/types.h
8215 eval $typedef
8216 case "$gidtype" in
8217 xxx)
8218         xxx=`./findhdr sys/user.h`
8219         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
8220         case $1 in
8221         unsigned) dflt="$1 $2" ;;
8222         *) dflt="$1" ;;
8223         esac
8224         ;;
8225 *) dflt="$gidtype";;
8226 esac
8227 echo " "
8228 rp="What is the type for group ids returned by getgid()?"
8229 . ./myread
8230 gidtype="$ans"
8231
8232 : see if getgroups exists
8233 set getgroups d_getgrps
8234 eval $inlibc
8235
8236 : Find type of 2nd arg to getgroups
8237 echo " "
8238 case "$d_getgrps" in
8239 'define')
8240         case "$groupstype" in
8241         '') dflt="$gidtype" ;;
8242         *)  dflt="$groupstype" ;;
8243         esac
8244         $cat <<EOM
8245 What is the type of the second argument to getgroups()?  Usually this
8246 is the same as group ids, $gidtype, but not always.
8247
8248 EOM
8249         rp='What type is the second argument to getgroups()?'
8250         . ./myread
8251         groupstype="$ans"
8252         ;;
8253 *)  groupstype="$gidtype";;
8254 esac
8255
8256 : see what type lseek is declared as in the kernel
8257 set off_t lseektype long stdio.h sys/types.h
8258 eval $typedef
8259 echo " "
8260 dflt="$lseektype"
8261 rp="What type is lseek's offset on this system declared as?"
8262 . ./myread
8263 lseektype="$ans"
8264
8265 echo " "
8266 case "$make" in
8267 '')
8268         make=`./loc make make $pth`
8269         case "$make" in
8270         /*)     echo make is in $make.  ;;
8271         ?:[\\/]*)       echo make is in $make.  ;;
8272         *)      echo "I don't know where 'make' is, and my life depends on it." >&4
8273                 echo "Go find a make program or fix your PATH setting!" >&4
8274                 exit 1
8275                 ;;
8276         esac
8277         ;;
8278 *)      echo make is in $make. ;;
8279 esac
8280
8281 $echo $n "Checking if your $make program sets \$(MAKE)... $c" >&4
8282 case "$make_set_make" in
8283 '')
8284         $sed 's/^X //' > testmake.mak << 'EOF'
8285 Xall:
8286 X       @echo 'ac_maketemp="$(MAKE)"'
8287 EOF
8288         : GNU make sometimes prints "make[1]: Entering...", which would confuse us.
8289         case "`$make -f testmake.mak 2>/dev/null`" in
8290         *ac_maketemp=*) make_set_make='#' ;;
8291         *)      make_set_make="MAKE=$make" ;;
8292         esac
8293         $rm -f testmake.mak
8294         ;;
8295 esac
8296 case "$make_set_make" in
8297 '#')    echo "Yup, it does." >&4 ;;
8298 *)      echo "Nope, it doesn't." >&4 ;;
8299 esac
8300
8301 : see what type is used for mode_t
8302 set mode_t modetype int stdio.h sys/types.h
8303 eval $typedef
8304 dflt="$modetype"
8305 echo " "
8306 rp="What type is used for file modes?"
8307 . ./myread
8308 modetype="$ans"
8309
8310 : locate the preferred pager for this system
8311 case "$pager" in
8312 '')
8313         dflt=''
8314         case "$pg" in
8315         /*) dflt=$pg;;
8316         esac
8317         case "$more" in
8318         /*) dflt=$more;;
8319         esac
8320         case "$less" in
8321         /*) dflt=$less;;
8322         esac
8323         case "$dflt" in
8324         '') dflt=/usr/ucb/more;;
8325         esac
8326         ;;
8327 *) dflt="$pager";;
8328 esac
8329 echo " "
8330 fn=f/
8331 rp='What pager is used on your system?'
8332 . ./getfile
8333 pager="$ans"
8334
8335 : Cruising for prototypes
8336 echo " "
8337 echo "Checking out function prototypes..." >&4
8338 $cat >prototype.c <<'EOCP'
8339 main(int argc, char *argv[]) {
8340         exit(0);}
8341 EOCP
8342 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
8343         echo "Your C compiler appears to support function prototypes."
8344         val="$define"
8345 else
8346         echo "Your C compiler doesn't seem to understand function prototypes."
8347         val="$undef"
8348 fi
8349 set prototype
8350 eval $setvar
8351 $rm -f prototype*
8352
8353 : check for size of random number generator
8354 echo " "
8355 case "$randbits" in
8356 '')
8357         echo "Checking to see how many bits your rand function produces..." >&4
8358         $cat >try.c <<EOCP
8359 #$i_unistd I_UNISTD
8360 #$i_stdlib I_STDLIB
8361 #include <stdio.h>
8362 #ifdef I_UNISTD
8363 #  include <unistd.h>
8364 #endif
8365 #ifdef I_STDLIB
8366 #  include <stdlib.h>
8367 #endif
8368 EOCP
8369         $cat >>try.c <<'EOCP'
8370 main()
8371 {
8372         register int i;
8373         register unsigned long tmp;
8374         register unsigned long max = 0L;
8375
8376         for (i = 1000; i; i--) {
8377                 tmp = (unsigned long)rand();
8378                 if (tmp > max) max = tmp;
8379         }
8380         for (i = 0; max; i++)
8381                 max /= 2;
8382         printf("%d\n",i);
8383 }
8384 EOCP
8385         if $cc try.c -o try >/dev/null 2>&1 ; then
8386                 dflt=`try`
8387         else
8388                 dflt='?'
8389                 echo "(I can't seem to compile the test program...)"
8390         fi
8391         ;;
8392 *)
8393         dflt="$randbits"
8394         ;;
8395 esac
8396 rp='How many bits does your rand() function produce?'
8397 . ./myread
8398 randbits="$ans"
8399 $rm -f try.c try
8400
8401 : see if ar generates random libraries by itself
8402 echo " "
8403 echo "Checking how to generate random libraries on your machine..." >&4
8404 echo 'int bar1() { return bar2(); }' > bar1.c
8405 echo 'int bar2() { return 2; }' > bar2.c
8406 $cat > foo.c <<'EOP'
8407 main() { printf("%d\n", bar1()); exit(0); }
8408 EOP
8409 $cc $ccflags -c bar1.c >/dev/null 2>&1
8410 $cc $ccflags -c bar2.c >/dev/null 2>&1
8411 $cc $ccflags -c foo.c >/dev/null 2>&1
8412 ar rc bar.a bar2.o bar1.o >/dev/null 2>&1
8413 if $cc $ccflags $ldflags -o foobar foo.o bar.a $libs > /dev/null 2>&1 &&
8414         ./foobar >/dev/null 2>&1; then
8415         echo "ar appears to generate random libraries itself."
8416         orderlib=false
8417         ranlib=":"
8418 elif ar ts bar.a >/dev/null 2>&1 &&
8419         $cc $ccflags $ldflags -o foobar foo.o bar.a $libs > /dev/null 2>&1 &&
8420         ./foobar >/dev/null 2>&1; then
8421                 echo "a table of contents needs to be added with 'ar ts'."
8422                 orderlib=false
8423                 ranlib="ar ts"
8424 else
8425         case "$ranlib" in
8426         :) ranlib='';;
8427         '')
8428                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
8429                 $test -f $ranlib || ranlib=''
8430                 ;;
8431         esac
8432         if $test -n "$ranlib"; then
8433                 echo "your system has '$ranlib'; we'll use that."
8434                 orderlib=false
8435         else
8436                 echo "your system doesn't seem to support random libraries"
8437                 echo "so we'll use lorder and tsort to order the libraries."
8438                 orderlib=true
8439                 ranlib=":"
8440         fi
8441 fi
8442 $rm -f foo* bar* 
8443
8444 : see if sys/select.h has to be included
8445 set sys/select.h i_sysselct
8446 eval $inhdr
8447
8448 : see if we should include time.h, sys/time.h, or both
8449 echo " "
8450 echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8451 $echo $n "I'm now running the test program...$c"
8452 $cat >try.c <<'EOCP'
8453 #include <sys/types.h>
8454 #ifdef I_TIME
8455 #include <time.h>
8456 #endif
8457 #ifdef I_SYSTIME
8458 #ifdef SYSTIMEKERNEL
8459 #define KERNEL
8460 #endif
8461 #include <sys/time.h>
8462 #endif
8463 #ifdef I_SYSSELECT
8464 #include <sys/select.h>
8465 #endif
8466 main()
8467 {
8468         struct tm foo;
8469 #ifdef S_TIMEVAL
8470         struct timeval bar;
8471 #endif
8472 #ifdef S_TIMEZONE
8473         struct timezone tzp;
8474 #endif
8475         if (foo.tm_sec == foo.tm_sec)
8476                 exit(0);
8477 #ifdef S_TIMEVAL
8478         if (bar.tv_sec == bar.tv_sec)
8479                 exit(0);
8480 #endif
8481         exit(1);
8482 }
8483 EOCP
8484 flags=''
8485 for s_timezone in '-DS_TIMEZONE' ''; do
8486 sysselect=''
8487 for s_timeval in '-DS_TIMEVAL' ''; do
8488 for i_systimek in '' '-DSYSTIMEKERNEL'; do
8489 for i_time in '' '-DI_TIME'; do
8490 for i_systime in '-DI_SYSTIME' ''; do
8491         case "$flags" in
8492         '') $echo $n ".$c"
8493                 if $cc $ccflags \
8494                 $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone \
8495                 try.c -o try >/dev/null 2>&1 ; then
8496                         set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8497                         shift
8498                         flags="$*"
8499                         echo " "
8500                         $echo $n "Succeeded with $flags$c"
8501                 fi
8502                 ;;
8503         esac
8504 done
8505 done
8506 done
8507 done
8508 done
8509 timeincl=''
8510 echo " "
8511 case "$flags" in
8512 *SYSTIMEKERNEL*) i_systimek="$define"
8513         timeincl=`./findhdr sys/time.h`
8514         echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8515 *) i_systimek="$undef";;
8516 esac
8517 case "$flags" in
8518 *I_TIME*) i_time="$define"
8519         timeincl=`./findhdr time.h`" $timeincl"
8520         echo "We'll include <time.h>." >&4;;
8521 *) i_time="$undef";;
8522 esac
8523 case "$flags" in
8524 *I_SYSTIME*) i_systime="$define"
8525         timeincl=`./findhdr sys/time.h`" $timeincl"
8526         echo "We'll include <sys/time.h>." >&4;;
8527 *) i_systime="$undef";;
8528 esac
8529 $rm -f try.c try
8530
8531 : check for fd_set items
8532 $cat <<EOM
8533
8534 Checking to see how well your C compiler handles fd_set and friends ...
8535 EOM
8536 $cat >fd_set.c <<EOCP
8537 #$i_systime I_SYS_TIME
8538 #$i_sysselct I_SYS_SELECT
8539 #$d_socket HAS_SOCKET
8540 #include <sys/types.h>
8541 #ifdef HAS_SOCKET
8542 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8543 #endif
8544 #ifdef I_SYS_TIME
8545 #include <sys/time.h>
8546 #endif
8547 #ifdef I_SYS_SELECT
8548 #include <sys/select.h>
8549 #endif
8550 main() {
8551         fd_set fds;
8552
8553 #ifdef TRYBITS
8554         if(fds.fds_bits);
8555 #endif
8556
8557 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8558         exit(0);
8559 #else
8560         exit(1);
8561 #endif
8562 }
8563 EOCP
8564 if $cc $ccflags -DTRYBITS fd_set.c -o fd_set >fd_set.out 2>&1 ; then
8565         d_fds_bits="$define"
8566         d_fd_set="$define"
8567         echo "Well, your system knows about the normal fd_set typedef..." >&4
8568         if ./fd_set; then
8569                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8570                 d_fd_macros="$define"
8571         else
8572                 $cat >&4 <<'EOM'
8573 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
8574 EOM
8575                 d_fd_macros="$undef"
8576         fi
8577 else
8578         $cat <<'EOM'
8579 Hmm, your compiler has some difficulty with fd_set.  Checking further...
8580 EOM
8581         if $cc $ccflags fd_set.c -o fd_set >fd_set.out 2>&1 ; then
8582                 d_fds_bits="$undef"
8583                 d_fd_set="$define"
8584                 echo "Well, your system has some sort of fd_set available..." >&4
8585                 if ./fd_set; then
8586                         echo "and you have the normal fd_set macros." >&4
8587                         d_fd_macros="$define"
8588                 else
8589                         $cat <<'EOM'
8590 but not the normal fd_set macros!  Gross!  More work for me...
8591 EOM
8592                         d_fd_macros="$undef"
8593                 fi
8594         else
8595         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8596                 d_fd_set="$undef"
8597                 d_fds_bits="$undef"
8598                 d_fd_macros="$undef"
8599         fi
8600 fi
8601 $rm -f fd_set*
8602
8603
8604 : check for type of arguments to select.  This will only really
8605 : work if the system supports prototypes and provides one for
8606 : select.
8607 case "$d_select" in
8608 $define)
8609         : Make initial guess
8610         case "$selecttype" in
8611         ''|' ')
8612                 case "$d_fd_set" in
8613                 $define) xxx='fd_set *' ;;
8614                 *) xxx='int *' ;;
8615                 esac
8616                 ;;
8617         *)      xxx="$selecttype" 
8618                 ;;
8619         esac
8620         : backup guess
8621         case "$xxx" in
8622         'fd_set *') yyy='int *' ;;
8623         'int *') yyy='fd_set *' ;;
8624         esac
8625
8626         $cat <<EOM
8627
8628 Checking to see what type of arguments are expected by select().
8629 EOM
8630         $cat >try.c <<EOCP
8631 #$i_systime I_SYS_TIME
8632 #$i_sysselct I_SYS_SELECT
8633 #$d_socket HAS_SOCKET
8634 #include <sys/types.h>
8635 #ifdef HAS_SOCKET
8636 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8637 #endif
8638 #ifdef I_SYS_TIME
8639 #include <sys/time.h>
8640 #endif
8641 #ifdef I_SYS_SELECT
8642 #include <sys/select.h>
8643 #endif
8644 main()
8645 {
8646         int width;
8647         Select_fd_set_t readfds;
8648         Select_fd_set_t writefds;
8649         Select_fd_set_t exceptfds;
8650         struct timeval timeout;
8651         select(width, readfds, writefds, exceptfds, &timeout);
8652         exit(0);
8653 }
8654 EOCP
8655         if $cc $ccflags -c -DSelect_fd_set_t="$xxx" try.c >/dev/null 2>&1 ; then
8656                 selecttype="$xxx"
8657                 echo "Your system uses $xxx for the arguments to select." >&4
8658         elif $cc $ccflags -c -DSelect_fd_set_t="$yyy" try.c >/dev/null 2>&1 ; then
8659                 selecttype="$yyy"
8660                 echo "Your system uses $yyy for the arguments to select." >&4
8661         else
8662                 rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
8663                 dflt="$xxx"
8664                 . ./myread
8665                 selecttype="$ans"
8666         fi
8667         $rm -f try.[co]
8668         ;;
8669 *)      selecttype='int *'
8670         ;;
8671 esac
8672
8673 : Trace out the files included by signal.h, then look for SIGxxx names.
8674 : Remove SIGARRAYSIZE used by HPUX.
8675 : Remove SIGTYP void lines used by OS2.
8676 xxx=`echo '#include <signal.h>' |
8677         $cppstdin $cppminus $cppflags 2>/dev/null |
8678         $grep '^[       ]*#.*include' | 
8679         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
8680 : Check this list of files to be sure we have parsed the cpp output ok.
8681 : This will also avoid potentially non-existent files, such 
8682 : as ../foo/bar.h
8683 xxxfiles=''
8684 for xx in $xxx /dev/null ; do
8685         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
8686 done
8687 : If we have found no files, at least try signal.h
8688 case "$xxxfiles" in
8689 '')     xxxfiles=`./findhdr signal.h` ;;
8690 esac
8691 xxx=`awk '
8692 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $3 !~ /void/ {
8693         print substr($2, 4, 20)
8694 }
8695 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
8696         print substr($3, 4, 20)
8697 }' $xxxfiles`
8698 : Append some common names just in case the awk scan failed.
8699 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
8700 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
8701 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
8702 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
8703 : generate a few handy files for later
8704 $cat > signal.c <<'EOP'
8705 #include <sys/types.h>
8706 #include <signal.h>
8707 int main() {
8708
8709 /* Strange style to avoid deeply-nested #if/#else/#endif */
8710 #ifndef NSIG
8711 #  ifdef _NSIG
8712 #    define NSIG (_NSIG)
8713 #  endif
8714 #endif
8715
8716 #ifndef NSIG
8717 #  ifdef SIGMAX
8718 #    define NSIG (SIGMAX+1)
8719 #  endif
8720 #endif
8721
8722 #ifndef NSIG
8723 #  ifdef SIG_MAX
8724 #    define NSIG (SIG_MAX+1)
8725 #  endif
8726 #endif
8727
8728 #ifndef NSIG
8729 #  ifdef MAXSIG
8730 #    define NSIG (MAXSIG+1)
8731 #  endif
8732 #endif
8733
8734 #ifndef NSIG
8735 #  ifdef MAX_SIG
8736 #    define NSIG (MAX_SIG+1)
8737 #  endif
8738 #endif
8739
8740 #ifndef NSIG
8741 #  ifdef SIGARRAYSIZE
8742 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
8743 #  endif
8744 #endif
8745
8746 #ifndef NSIG
8747 #  ifdef _sys_nsig
8748 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
8749 #  endif
8750 #endif
8751
8752 /* Default to some arbitrary number that's big enough to get most
8753    of the common signals.
8754 */
8755 #ifndef NSIG
8756 #    define NSIG 50
8757 #endif
8758
8759 printf("NSIG %d\n", NSIG);
8760
8761 EOP
8762 echo $xxx | $tr ' ' '\012' | $sort | $uniq | $awk '
8763 {
8764         printf "#ifdef SIG"; printf $1; printf "\n"
8765         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
8766         printf $1; printf ");\n"
8767         printf "#endif\n"
8768 }
8769 END {
8770         printf "}\n";
8771 }
8772 ' >>signal.c
8773 $cat >signal.awk <<'EOP'
8774 BEGIN { ndups = 0 }
8775 $1 ~ /^NSIG$/ { nsig = $2 }
8776 ($1 !~ /^NSIG$/) && (NF == 2) {
8777     if ($2 > maxsig) { maxsig = $2 }
8778     if (sig_name[$2]) {
8779         dup_name[ndups] = $1
8780         dup_num[ndups] = $2
8781         ndups++ 
8782     }
8783     else {
8784         sig_name[$2] = $1
8785         sig_num[$2] = $2
8786     }
8787
8788 }
8789 END { 
8790     if (nsig == 0) { nsig = maxsig + 1 }
8791         for (n = 1; n < nsig; n++) {
8792                 if (sig_name[n]) {
8793                         printf("%s %d\n", sig_name[n], sig_num[n])
8794                 }
8795                 else {
8796                         printf("NUM%d %d\n", n, n) 
8797                 }
8798         }
8799     for (n = 0; n < ndups; n++) {
8800                 printf("%s %d\n", dup_name[n], dup_num[n])
8801     }
8802 }
8803 EOP
8804 $cat >signal_cmd <<EOS
8805 $startsh
8806 $test -s signal.lst && exit 0
8807 if $cc $ccflags signal.c -o signal $ldflags >/dev/null 2>&1; then
8808         ./signal | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
8809 else
8810         echo "(I can't seem be able to compile the test program -- Guessing)"
8811         echo 'kill -l' >signal
8812         set X \`csh -f <signal\`
8813         $rm -f signal
8814         shift
8815         case \$# in
8816         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
8817         esac
8818         echo \$@ | $tr ' ' '\012' | \
8819                 $awk '{ printf $1; printf " %d\n", ++s; }' >signal.lst
8820 fi
8821 $rm -f signal.c signal signal.o
8822 EOS
8823 chmod a+x signal_cmd
8824 $eunicefix signal_cmd
8825
8826 : generate list of signal names
8827 echo " "
8828 case "$sig_name" in
8829 '')     sig_num='' ;;
8830 esac
8831 case "$sig_num" in
8832 '')     sig_name='' ;;
8833 esac
8834 case "$sig_name" in
8835 '')
8836         echo "Generating a list of signal names and numbers..." >&4
8837         ./signal_cmd
8838         sig_name=`$awk '{printf "%s ", $1}' signal.lst`
8839         sig_name="ZERO $sig_name"
8840         sig_num=`$awk '{printf "%d ", $2}' signal.lst`
8841         sig_num="0 $sig_num"
8842         ;;
8843 esac
8844 echo "The following signals are available:"
8845 echo " "
8846 echo $sig_name | $awk \
8847 'BEGIN { linelen = 0 }
8848 {
8849         for (i = 1; i <= NF; i++) {
8850                 name = "SIG" $i " "
8851                 linelen = linelen + length(name)
8852                 if (linelen > 70) {
8853                         printf "\n"
8854                         linelen = length(name)
8855                 }
8856                 printf "%s", name
8857         }
8858         printf "\n"
8859 }'
8860 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
8861
8862 : see what type is used for size_t
8863 set size_t sizetype 'unsigned int' stdio.h sys/types.h
8864 eval $typedef
8865 dflt="$sizetype"
8866 echo " "
8867 rp="What type is used for the length parameter for string functions?"
8868 . ./myread
8869 sizetype="$ans"
8870
8871 : see what type is used for signed size_t
8872 set ssize_t ssizetype int stdio.h sys/types.h
8873 eval $typedef
8874 dflt="$ssizetype"
8875 $cat > ssize.c <<EOM
8876 #include <stdio.h>
8877 #include <sys/types.h>
8878 #define Size_t $sizetype
8879 #define SSize_t $dflt
8880 main()
8881 {
8882         if (sizeof(Size_t) == sizeof(SSize_t))
8883                 printf("$dflt\n");
8884         else if (sizeof(Size_t) == sizeof(int))
8885                 printf("int\n");
8886         else 
8887                 printf("long\n");
8888         exit(0);
8889 }
8890 EOM
8891 echo " "
8892 if $cc $ccflags $ldflags -o ssize ssize.c $libs > /dev/null 2>&1  &&
8893                 ./ssize > /dev/null 2>&1 ; then
8894         ssizetype=`./ssize`
8895         echo "I'll be using $ssizetype for functions returning a byte count." >&4
8896 else
8897         echo "(I can't compile and run the test program--please enlighten me!)"
8898         $cat <<EOM
8899
8900 I need a type that is the same size as $sizetype, but is guaranteed to
8901 be signed.  Common values are int and long.
8902
8903 EOM
8904         rp="What signed type is the same size as $sizetype?"
8905         . ./myread
8906         ssizetype="$ans"
8907 fi
8908 $rm -f ssize ssize.[co]
8909
8910 : see what type of char stdio uses.
8911 echo " "
8912 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
8913         echo "Your stdio uses unsigned chars." >&4
8914         stdchar="unsigned char"
8915 else
8916         echo "Your stdio uses signed chars." >&4
8917         stdchar="char"
8918 fi
8919
8920 : see if time exists
8921 echo " "
8922 if set time val -f d_time; eval $csym; $val; then
8923         echo 'time() found.' >&4
8924         val="$define"
8925         set time_t timetype long stdio.h sys/types.h
8926         eval $typedef
8927         dflt="$timetype"
8928         echo " "
8929         rp="What type is returned by time() on this system?"
8930         . ./myread
8931         timetype="$ans"
8932 else
8933         echo 'time() not found, hope that will do.' >&4
8934         val="$undef"
8935         timetype='int';
8936 fi
8937 set d_time
8938 eval $setvar
8939
8940 : see what type uids are declared as in the kernel
8941 set uid_t uidtype xxx stdio.h sys/types.h
8942 eval $typedef
8943 case "$uidtype" in
8944 xxx)
8945         xxx=`./findhdr sys/user.h`
8946         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
8947         case $1 in
8948         unsigned) dflt="$1 $2" ;;
8949         *) dflt="$1" ;;
8950         esac
8951         ;;
8952 *) dflt="$uidtype";;
8953 esac
8954 echo " "
8955 rp="What is the type for user ids returned by getuid()?"
8956 . ./myread
8957 uidtype="$ans"
8958
8959 : see if dbm.h is available
8960 : see if dbmclose exists
8961 set dbmclose d_dbmclose
8962 eval $inlibc
8963
8964 case "$d_dbmclose" in
8965 $define)
8966         set dbm.h i_dbm
8967         eval $inhdr
8968         case "$i_dbm" in
8969         $define)
8970                 val="$undef"
8971                 set i_rpcsvcdbm
8972                 eval $setvar
8973                 ;;
8974         *)      set rpcsvc/dbm.h i_rpcsvcdbm
8975                 eval $inhdr
8976                 ;;
8977         esac
8978         ;;
8979 *)      echo "We won't be including <dbm.h>"
8980         val="$undef"
8981         set i_dbm
8982         eval $setvar
8983         val="$undef"
8984         set i_rpcsvcdbm
8985         eval $setvar
8986         ;;
8987 esac
8988
8989 : see if this is a sys/file.h system
8990 val=''
8991 set sys/file.h val
8992 eval $inhdr
8993
8994 : do we need to include sys/file.h ?
8995 case "$val" in
8996 "$define")
8997         echo " "
8998         if $h_sysfile; then
8999                 val="$define"
9000                 echo "We'll be including <sys/file.h>." >&4
9001         else
9002                 val="$undef"
9003                 echo "We won't be including <sys/file.h>." >&4
9004         fi
9005         ;;
9006 *)
9007         h_sysfile=false
9008         ;;
9009 esac
9010 set i_sysfile
9011 eval $setvar
9012
9013 : see if fcntl.h is there
9014 val=''
9015 set fcntl.h val
9016 eval $inhdr
9017
9018 : see if we can include fcntl.h
9019 case "$val" in
9020 "$define")
9021         echo " "
9022         if $h_fcntl; then
9023                 val="$define"
9024                 echo "We'll be including <fcntl.h>." >&4
9025         else
9026                 val="$undef"
9027                 if $h_sysfile; then
9028         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
9029                 else
9030                         echo "We won't be including <fcntl.h>." >&4
9031                 fi
9032         fi
9033         ;;
9034 *)
9035         h_fcntl=false
9036         val="$undef"
9037         ;;
9038 esac
9039 set i_fcntl
9040 eval $setvar
9041
9042 : see if this is an grp system
9043 set grp.h i_grp
9044 eval $inhdr
9045
9046 : see if locale.h is available
9047 set locale.h i_locale
9048 eval $inhdr
9049
9050 : see if this is a math.h system
9051 set math.h i_math
9052 eval $inhdr
9053
9054 : see if ndbm.h is available
9055 set ndbm.h t_ndbm
9056 eval $inhdr
9057 case "$t_ndbm" in
9058 $define)
9059         : see if dbm_open exists
9060         set dbm_open d_dbm_open
9061         eval $inlibc
9062         case "$d_dbm_open" in
9063         $undef)
9064                 t_ndbm="$undef"
9065                 echo "We won't be including <ndbm.h>"
9066                 ;;
9067         esac
9068         ;;
9069 esac
9070 val="$t_ndbm"
9071 set i_ndbm
9072 eval $setvar
9073
9074 : see if net/errno.h is available
9075 val=''
9076 set net/errno.h val
9077 eval $inhdr
9078
9079 : Unfortunately, it causes problems on some systems.  Arrgh.
9080 case "$val" in
9081 $define)
9082         cat > try.c <<'EOM'
9083 #include <stdio.h>
9084 #include <errno.h>
9085 #include <net/errno.h>
9086 int func()
9087 {
9088         return ENOTSOCK;
9089 }
9090 EOM
9091         if $cc $ccflags -c try.c >/dev/null 2>&1; then
9092                 echo "We'll be including <net/errno.h>." >&4
9093         else
9094                 echo "We won't be including <net/errno.h>." >&4
9095                 val="$undef"
9096         fi
9097         $rm -f try.* try
9098         ;;
9099 esac
9100 set i_neterrno
9101 eval $setvar
9102
9103 : get C preprocessor symbols handy
9104 echo " "
9105 $echo $n "Hmm... $c"
9106 echo $al | $tr ' ' '\012' >Cppsym.know
9107 $cat <<EOSS >Cppsym
9108 $startsh
9109 case "\$1" in
9110 -l) list=true
9111         shift
9112         ;;
9113 esac
9114 unknown=''
9115 case "\$list\$#" in
9116 1|2)
9117         for sym do
9118                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
9119                         exit 0
9120                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
9121                         :
9122                 else
9123                         unknown="\$unknown \$sym"
9124                 fi
9125         done
9126         set X \$unknown
9127         shift
9128         ;;
9129 esac
9130 case \$# in
9131 0) exit 1;;
9132 esac
9133 echo \$* | $tr ' ' '\012' | $sed -e 's/\(.*\)/\\
9134 #ifdef \1\\
9135 exit 0; _ _ _ _\1\\      \1\\
9136 #endif\\
9137 /' >Cppsym\$\$
9138 echo "exit 1; _ _ _" >>Cppsym\$\$
9139 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
9140 case "\$list" in
9141 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
9142 *)
9143         sh Cppsym2\$\$
9144         status=\$?
9145         ;;
9146 esac
9147 $rm -f Cppsym\$\$ Cppsym2\$\$
9148 exit \$status
9149 EOSS
9150 chmod +x Cppsym
9151 $eunicefix Cppsym
9152 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
9153
9154 : now check the C compiler for additional symbols
9155 $cat >ccsym <<EOS
9156 $startsh
9157 $cat >tmp.c <<EOF
9158 extern int foo;
9159 EOF
9160 for i in \`$cc -v -c tmp.c 2>&1\`
9161 do
9162         case "\$i" in
9163         -D*) echo "\$i" | $sed 's/^-D//';;
9164         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
9165         esac
9166 done
9167 $rm -f try.c
9168 EOS
9169 chmod +x ccsym
9170 $eunicefix ccsym
9171 ./ccsym | $sort | $uniq >ccsym.raw
9172 $awk '/\=/ { print $0; next }
9173         { print $0"=1" }' ccsym.raw >ccsym.list
9174 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
9175 $comm -13 ccsym.true ccsym.list >ccsym.own
9176 $comm -12 ccsym.true ccsym.list >ccsym.com
9177 $comm -23 ccsym.true ccsym.list >ccsym.cpp
9178 also=''
9179 symbols='symbols'
9180 if $test -z ccsym.raw; then
9181         echo "Your C compiler doesn't seem to define any symbol!" >&4
9182         echo " "
9183         echo "However, your C preprocessor defines the following ones:"
9184         $cat Cppsym.true
9185 else
9186         if $test -s ccsym.com; then
9187                 echo "Your C compiler and pre-processor define these symbols:"
9188                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
9189                 also='also '
9190                 symbols='ones'
9191                 $test "$silent" || sleep 1
9192         fi
9193         if $test -s ccsym.cpp; then
9194                 $test "$also" && echo " "
9195                 echo "Your C pre-processor ${also}defines the following $symbols:"
9196                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
9197                 also='further '
9198                 $test "$silent" || sleep 1
9199         fi
9200         if $test -s ccsym.own; then
9201                 $test "$also" && echo " "
9202                 echo "Your C compiler ${also}defines the following cpp variables:"
9203                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
9204                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
9205                 $test "$silent" || sleep 1
9206         fi
9207 fi
9208 $rm -f ccsym*
9209
9210 : see if this is a termio system
9211 val="$undef"
9212 val2="$undef"
9213 val3="$undef"
9214 if $test `./findhdr termios.h`; then
9215         set tcsetattr i_termios
9216         eval $inlibc
9217         val3="$i_termios"
9218 fi
9219 echo " "
9220 case "$val3" in
9221 "$define") echo "You have POSIX termios.h... good!" >&4;;
9222 *) if ./Cppsym pyr; then
9223                 case "`/bin/universe`" in
9224                 ucb) if $test `./findhdr sgtty.h`; then
9225                                 val2="$define"
9226                                 echo "<sgtty.h> found." >&4
9227                         else
9228                                 echo "System is pyramid with BSD universe."
9229                                 echo "<sgtty.h> not found--you could have problems." >&4
9230                         fi;;
9231                 *) if $test `./findhdr termio.h`; then
9232                                 val="$define"
9233                                 echo "<termio.h> found." >&4
9234                         else
9235                                 echo "System is pyramid with USG universe."
9236                                 echo "<termio.h> not found--you could have problems." >&4
9237                         fi;;
9238                 esac
9239         elif ./usg; then
9240                 if $test `./findhdr termio.h`; then
9241                         echo "<termio.h> found." >&4
9242                         val="$define"
9243                 elif $test `./findhdr sgtty.h`; then
9244                         echo "<sgtty.h> found." >&4
9245                         val2="$define"
9246                 else
9247 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
9248                 fi
9249         else
9250                 if $test `./findhdr sgtty.h`; then
9251                         echo "<sgtty.h> found." >&4
9252                         val2="$define"
9253                 elif $test `./findhdr termio.h`; then
9254                         echo "<termio.h> found." >&4
9255                         val="$define"
9256                 else
9257 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
9258                 fi
9259         fi;;
9260 esac
9261 set i_termio; eval $setvar
9262 val=$val2; set i_sgtty; eval $setvar
9263 val=$val3; set i_termios; eval $setvar
9264
9265 : see if stdarg is available
9266 echo " "
9267 if $test `./findhdr stdarg.h`; then
9268         echo "<stdarg.h> found." >&4
9269         valstd="$define"
9270 else
9271         echo "<stdarg.h> NOT found." >&4
9272         valstd="$undef"
9273 fi
9274
9275 : see if varags is available
9276 echo " "
9277 if $test `./findhdr varargs.h`; then
9278         echo "<varargs.h> found." >&4
9279 else
9280         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
9281 fi
9282
9283 : set up the varargs testing programs
9284 $cat > varargs.c <<EOP
9285 #ifdef I_STDARG
9286 #include <stdarg.h>
9287 #endif
9288 #ifdef I_VARARGS
9289 #include <varargs.h>
9290 #endif
9291
9292 #ifdef I_STDARG
9293 int f(char *p, ...)
9294 #else
9295 int f(va_alist)
9296 va_dcl
9297 #endif
9298 {
9299         va_list ap;
9300 #ifndef I_STDARG
9301         char *p;
9302 #endif
9303 #ifdef I_STDARG
9304         va_start(ap,p);
9305 #else
9306         va_start(ap);
9307         p = va_arg(ap, char *);
9308 #endif
9309         va_end(ap);
9310 }
9311 EOP
9312 $cat > varargs <<EOP
9313 $startsh
9314 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
9315         echo "true"
9316 else
9317         echo "false"
9318 fi
9319 $rm -f varargs.o
9320 EOP
9321 chmod +x varargs
9322
9323 : now check which varargs header should be included
9324 echo " "
9325 i_varhdr=''
9326 case "$valstd" in
9327 "$define")
9328         if `./varargs I_STDARG`; then
9329                 val='stdarg.h'
9330         elif `./varargs I_VARARGS`; then
9331                 val='varargs.h'
9332         fi
9333         ;;
9334 *)
9335         if `./varargs I_VARARGS`; then
9336                 val='varargs.h'
9337         fi
9338         ;;
9339 esac
9340 case "$val" in
9341 '')
9342 echo "I could not find the definition for va_dcl... You have problems..." >&4
9343         val="$undef"; set i_stdarg; eval $setvar
9344         val="$undef"; set i_varargs; eval $setvar
9345         ;;
9346 *) 
9347         set i_varhdr
9348         eval $setvar
9349         case "$i_varhdr" in
9350         stdarg.h)
9351                 val="$define"; set i_stdarg; eval $setvar
9352                 val="$undef"; set i_varargs; eval $setvar
9353                 ;;
9354         varargs.h)
9355                 val="$undef"; set i_stdarg; eval $setvar
9356                 val="$define"; set i_varargs; eval $setvar
9357                 ;;
9358         esac
9359         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
9360 esac
9361 $rm -f varargs*
9362
9363 : see if stddef is available
9364 set stddef.h i_stddef
9365 eval $inhdr
9366
9367 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
9368 set sys/filio.h i_sysfilio
9369 eval $inhdr
9370 echo " "
9371 if $test `./findhdr sys/ioctl.h`; then
9372         val="$define"
9373         echo '<sys/ioctl.h> found.' >&4
9374 else
9375         val="$undef"
9376         if $test $i_sysfilio = "$define"; then
9377             echo '<sys/ioctl.h> NOT found.' >&4
9378         else
9379                 $test $i_sgtty = "$define" && xxx="sgtty.h"
9380                 $test $i_termio = "$define" && xxx="termio.h"
9381                 $test $i_termios = "$define" && xxx="termios.h"
9382 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
9383         fi
9384 fi
9385 set i_sysioctl
9386 eval $setvar
9387
9388 : see if this is a sys/param system
9389 set sys/param.h i_sysparam
9390 eval $inhdr
9391
9392 : see if sys/resource.h has to be included
9393 set sys/resource.h i_sysresrc
9394 eval $inhdr
9395
9396 : see if sys/stat.h is available
9397 set sys/stat.h i_sysstat
9398 eval $inhdr
9399
9400 : see if sys/types.h has to be included
9401 set sys/types.h i_systypes
9402 eval $inhdr
9403
9404 : see if this is a sys/un.h system
9405 set sys/un.h i_sysun
9406 eval $inhdr
9407
9408 : see if this is a syswait system
9409 set sys/wait.h i_syswait
9410 eval $inhdr
9411
9412 : see if this is an utime system
9413 set utime.h i_utime
9414 eval $inhdr
9415
9416 : see if this is a values.h system
9417 set values.h i_values
9418 eval $inhdr
9419
9420 : see if this is a vfork system
9421 case "$d_vfork" in
9422 "$define")
9423         set vfork.h i_vfork
9424         eval $inhdr
9425         ;;
9426 *)
9427         i_vfork="$undef"
9428         ;;
9429 esac
9430
9431 : see if gdbm.h is available
9432 set gdbm.h t_gdbm
9433 eval $inhdr
9434 case "$t_gdbm" in
9435 $define)
9436         : see if gdbm_open exists
9437         set gdbm_open d_gdbm_open
9438         eval $inlibc
9439         case "$d_gdbm_open" in
9440         $undef)
9441                 t_gdbm="$undef"
9442                 echo "We won't be including <gdbm.h>"
9443                 ;;
9444         esac
9445         ;;
9446 esac
9447 val="$t_gdbm"
9448 set i_gdbm
9449 eval $setvar
9450
9451 echo " "
9452 echo "Looking for extensions..." >&4
9453 cd ../ext
9454 : If we are using the old config.sh, known_extensions may contain
9455 : old or inaccurate or duplicate values.
9456 known_extensions=''
9457 : We do not use find because it might not be available.
9458 : We do not just use MANIFEST because the user may have dropped
9459 : some additional extensions into the source tree and expect them
9460 : to be built.
9461 for xxx in * ; do
9462         case "$xxx" in
9463         DynaLoader) ;;
9464         *)
9465                 if $test -f $xxx/$xxx.xs; then
9466                         known_extensions="$known_extensions $xxx"
9467                 else
9468                         if $test -d $xxx; then
9469                                 cd $xxx
9470                                 for yyy in * ; do
9471                                         if $test -f $yyy/$yyy.xs; then
9472                                                 known_extensions="$known_extensions $xxx/$yyy"
9473                                         fi
9474                                 done
9475                                 cd ..
9476                         fi
9477                 fi ;;
9478         esac
9479 done
9480 set X $known_extensions
9481 shift
9482 known_extensions="$*"
9483 cd ../UU
9484
9485 : Now see which are supported on this system.
9486 avail_ext=''
9487 for xxx in $known_extensions ; do
9488     case "$xxx" in
9489     DB_File) case "$i_db" in 
9490             $define) avail_ext="$avail_ext $xxx" ;;
9491             esac
9492             ;;
9493     GDBM_File) case "$i_gdbm" in 
9494             $define) avail_ext="$avail_ext $xxx" ;;
9495             esac
9496             ;;
9497     NDBM_File) case "$i_ndbm" in 
9498             $define) avail_ext="$avail_ext $xxx" ;;
9499             esac
9500             ;;
9501     ODBM_File) case "${i_dbm}${i_rpcsvcdbm}" in 
9502             *"${define}"*) avail_ext="$avail_ext $xxx" ;;
9503             esac
9504             ;;
9505     POSIX) case "$useposix" in 
9506             true|define|y) avail_ext="$avail_ext $xxx" ;;
9507             esac
9508             ;;
9509     Opcode) case "$useopcode" in 
9510             true|define|y) avail_ext="$avail_ext $xxx" ;;
9511             esac
9512             ;;
9513     Socket) case "$d_socket" in 
9514             $define) avail_ext="$avail_ext $xxx" ;;
9515             esac
9516             ;;
9517     *)      avail_ext="$avail_ext $xxx"
9518             ;;
9519     esac
9520 done
9521
9522 set X $avail_ext
9523 shift
9524 avail_ext="$*"
9525
9526 case $usedl in
9527 $define)
9528         $cat <<EOM
9529 A number of extensions are supplied with $package.  You may choose to
9530 compile these extensions for dynamic loading (the default), compile
9531 them into the $package executable (static loading), or not include
9532 them at all.  Answer "none" to include no extensions.
9533
9534 EOM
9535         case "$dynamic_ext" in
9536         '') dflt="$avail_ext" ;;
9537         *)      dflt="$dynamic_ext" ;;
9538         esac
9539         case "$dflt" in
9540         '')     dflt=none;;
9541         esac
9542         rp="What extensions do you wish to load dynamically?"
9543         . ./myread
9544         case "$ans" in
9545         none) dynamic_ext=' ' ;;
9546         *) dynamic_ext="$ans" ;;
9547         esac
9548
9549         case "$static_ext" in
9550         '')
9551                 : Exclude those already listed in dynamic linking
9552                 dflt=''
9553                 for xxx in $avail_ext; do
9554                         case " $dynamic_ext " in
9555                         *" $xxx "*) ;;
9556                         *) dflt="$dflt $xxx" ;;
9557                         esac
9558                 done
9559                 set X $dflt
9560                 shift
9561                 dflt="$*"
9562                 ;;
9563         *)  dflt="$static_ext" 
9564                 ;;
9565         esac
9566
9567         case "$dflt" in
9568         '')     dflt=none;;
9569         esac
9570         rp="What extensions do you wish to load statically?"
9571         . ./myread
9572         case "$ans" in
9573         none) static_ext=' ' ;;
9574         *) static_ext="$ans" ;;
9575         esac
9576         ;;
9577 *)
9578         $cat <<EOM
9579 A number of extensions are supplied with $package.  Answer "none" 
9580 to include no extensions. 
9581
9582 EOM
9583         case "$static_ext" in
9584         '') dflt="$avail_ext" ;;
9585         *)      dflt="$static_ext" ;;
9586         esac
9587
9588         case "$dflt" in
9589         '')     dflt=none;;
9590         esac
9591         rp="What extensions do you wish to include?"
9592         . ./myread
9593         case "$ans" in
9594         none) static_ext=' ' ;;
9595         *) static_ext="$ans" ;;
9596         esac
9597         ;;
9598 esac
9599
9600 set X $dynamic_ext $static_ext
9601 shift
9602 extensions="$*"
9603
9604 : Remove build directory name from cppstdin so it can be used from
9605 : either the present location or the final installed location.
9606 echo " "
9607 : Get out of the UU directory to get correct path name.
9608 cd ..
9609 case "$cppstdin" in
9610 `pwd`/cppstdin)
9611         echo "Stripping down cppstdin path name"
9612         cppstdin=cppstdin
9613         ;;
9614 esac
9615 cd UU
9616
9617 : end of configuration questions
9618 echo " "
9619 echo "End of configuration questions."
9620 echo " "
9621
9622 : back to where it started
9623 if test -d ../UU; then
9624         cd ..
9625 fi
9626
9627 : configuration may be patched via a 'config.over' file
9628 if $test -f config.over; then
9629         echo " "
9630         dflt=y
9631         rp='I see a config.over file.  Do you wish to load it?'
9632         . UU/myread
9633         case "$ans" in
9634         n*) echo "OK, I'll ignore it.";;
9635         *)      . ./config.over
9636                 echo "Configuration override changes have been loaded."
9637                 ;;
9638         esac
9639 fi
9640
9641 : in case they want portability, strip down executable paths
9642 case "$d_portable" in
9643 "$define")
9644         echo " "
9645         echo "Stripping down executable paths..." >&4
9646         for file in $loclist $trylist; do
9647                 eval $file="\$file"
9648         done
9649         ;;
9650 esac
9651
9652 : create config.sh file
9653 echo " "
9654 echo "Creating config.sh..." >&4
9655 $spitshell <<EOT >config.sh
9656 $startsh
9657 #
9658 # This file was produced by running the Configure script. It holds all the
9659 # definitions figured out by Configure. Should you modify one of these values,
9660 # do not forget to propagate your changes by running "Configure -der". You may
9661 # instead choose to run each of the .SH files by yourself, or "Configure -S".
9662 #
9663
9664 # Configuration time: $cf_time
9665 # Configured by: $cf_by
9666 # Target system: $myuname
9667
9668 Author='$Author'
9669 Date='$Date'
9670 Header='$Header'
9671 Id='$Id'
9672 Locker='$Locker'
9673 Log='$Log'
9674 Mcc='$Mcc'
9675 RCSfile='$RCSfile'
9676 Revision='$Revision'
9677 Source='$Source'
9678 State='$State'
9679 afs='$afs'
9680 alignbytes='$alignbytes'
9681 aphostname='$aphostname'
9682 ar='$ar'
9683 archlib='$archlib'
9684 archlibexp='$archlibexp'
9685 archname='$archname'
9686 archobjs='$archobjs'
9687 awk='$awk'
9688 baserev='$baserev'
9689 bash='$bash'
9690 bin='$bin'
9691 binexp='$binexp'
9692 bison='$bison'
9693 byacc='$byacc'
9694 byteorder='$byteorder'
9695 c='$c'
9696 castflags='$castflags'
9697 cat='$cat'
9698 cc='$cc'
9699 cccdlflags='$cccdlflags'
9700 ccdlflags='$ccdlflags'
9701 ccflags='$ccflags'
9702 cf_by='$cf_by'
9703 cf_email='$cf_email'
9704 cf_time='$cf_time'
9705 chgrp='$chgrp'
9706 chmod='$chmod'
9707 chown='$chown'
9708 clocktype='$clocktype'
9709 comm='$comm'
9710 compress='$compress'
9711 contains='$contains'
9712 cp='$cp'
9713 cpio='$cpio'
9714 cpp='$cpp'
9715 cpp_stuff='$cpp_stuff'
9716 cppflags='$cppflags'
9717 cpplast='$cpplast'
9718 cppminus='$cppminus'
9719 cpprun='$cpprun'
9720 cppstdin='$cppstdin'
9721 cryptlib='$cryptlib'
9722 csh='$csh'
9723 d_Gconvert='$d_Gconvert'
9724 d_access='$d_access'
9725 d_alarm='$d_alarm'
9726 d_archlib='$d_archlib'
9727 d_attribut='$d_attribut'
9728 d_bcmp='$d_bcmp'
9729 d_bcopy='$d_bcopy'
9730 d_bsd='$d_bsd'
9731 d_bsdgetpgrp='$d_bsdgetpgrp'
9732 d_bsdpgrp='$d_bsdpgrp'
9733 d_bsdsetpgrp='$d_bsdsetpgrp'
9734 d_bzero='$d_bzero'
9735 d_casti32='$d_casti32'
9736 d_castneg='$d_castneg'
9737 d_charvspr='$d_charvspr'
9738 d_chown='$d_chown'
9739 d_chroot='$d_chroot'
9740 d_chsize='$d_chsize'
9741 d_closedir='$d_closedir'
9742 d_const='$d_const'
9743 d_crypt='$d_crypt'
9744 d_csh='$d_csh'
9745 d_cuserid='$d_cuserid'
9746 d_dbl_dig='$d_dbl_dig'
9747 d_difftime='$d_difftime'
9748 d_dirnamlen='$d_dirnamlen'
9749 d_dlerror='$d_dlerror'
9750 d_dlopen='$d_dlopen'
9751 d_dlsymun='$d_dlsymun'
9752 d_dosuid='$d_dosuid'
9753 d_dup2='$d_dup2'
9754 d_eofnblk='$d_eofnblk'
9755 d_eunice='$d_eunice'
9756 d_fchmod='$d_fchmod'
9757 d_fchown='$d_fchown'
9758 d_fcntl='$d_fcntl'
9759 d_fd_macros='$d_fd_macros'
9760 d_fd_set='$d_fd_set'
9761 d_fds_bits='$d_fds_bits'
9762 d_fgetpos='$d_fgetpos'
9763 d_flexfnam='$d_flexfnam'
9764 d_flock='$d_flock'
9765 d_fork='$d_fork'
9766 d_fpathconf='$d_fpathconf'
9767 d_fsetpos='$d_fsetpos'
9768 d_getgrps='$d_getgrps'
9769 d_gethent='$d_gethent'
9770 d_gethname='$d_gethname'
9771 d_getlogin='$d_getlogin'
9772 d_getpgid='$d_getpgid'
9773 d_getpgrp2='$d_getpgrp2'
9774 d_getpgrp='$d_getpgrp'
9775 d_getppid='$d_getppid'
9776 d_getprior='$d_getprior'
9777 d_gnulibc='$d_gnulibc'
9778 d_htonl='$d_htonl'
9779 d_index='$d_index'
9780 d_isascii='$d_isascii'
9781 d_killpg='$d_killpg'
9782 d_link='$d_link'
9783 d_locconv='$d_locconv'
9784 d_lockf='$d_lockf'
9785 d_lstat='$d_lstat'
9786 d_mblen='$d_mblen'
9787 d_mbstowcs='$d_mbstowcs'
9788 d_mbtowc='$d_mbtowc'
9789 d_memcmp='$d_memcmp'
9790 d_memcpy='$d_memcpy'
9791 d_memmove='$d_memmove'
9792 d_memset='$d_memset'
9793 d_mkdir='$d_mkdir'
9794 d_mkfifo='$d_mkfifo'
9795 d_mktime='$d_mktime'
9796 d_msg='$d_msg'
9797 d_msgctl='$d_msgctl'
9798 d_msgget='$d_msgget'
9799 d_msgrcv='$d_msgrcv'
9800 d_msgsnd='$d_msgsnd'
9801 d_mymalloc='$d_mymalloc'
9802 d_nice='$d_nice'
9803 d_oldarchlib='$d_oldarchlib'
9804 d_oldsock='$d_oldsock'
9805 d_open3='$d_open3'
9806 d_pathconf='$d_pathconf'
9807 d_pause='$d_pause'
9808 d_phostname='$d_phostname'
9809 d_pipe='$d_pipe'
9810 d_poll='$d_poll'
9811 d_portable='$d_portable'
9812 d_pwage='$d_pwage'
9813 d_pwchange='$d_pwchange'
9814 d_pwclass='$d_pwclass'
9815 d_pwcomment='$d_pwcomment'
9816 d_pwexpire='$d_pwexpire'
9817 d_pwquota='$d_pwquota'
9818 d_readdir='$d_readdir'
9819 d_readlink='$d_readlink'
9820 d_rename='$d_rename'
9821 d_rewinddir='$d_rewinddir'
9822 d_rmdir='$d_rmdir'
9823 d_safebcpy='$d_safebcpy'
9824 d_safemcpy='$d_safemcpy'
9825 d_seekdir='$d_seekdir'
9826 d_select='$d_select'
9827 d_sem='$d_sem'
9828 d_semctl='$d_semctl'
9829 d_semget='$d_semget'
9830 d_semop='$d_semop'
9831 d_setegid='$d_setegid'
9832 d_seteuid='$d_seteuid'
9833 d_setlinebuf='$d_setlinebuf'
9834 d_setlocale='$d_setlocale'
9835 d_setpgid='$d_setpgid'
9836 d_setpgrp2='$d_setpgrp2'
9837 d_setpgrp='$d_setpgrp'
9838 d_setprior='$d_setprior'
9839 d_setregid='$d_setregid'
9840 d_setresgid='$d_setresgid'
9841 d_setresuid='$d_setresuid'
9842 d_setreuid='$d_setreuid'
9843 d_setrgid='$d_setrgid'
9844 d_setruid='$d_setruid'
9845 d_setsid='$d_setsid'
9846 d_sfio='$d_sfio'
9847 d_shm='$d_shm'
9848 d_shmat='$d_shmat'
9849 d_shmatprototype='$d_shmatprototype'
9850 d_shmctl='$d_shmctl'
9851 d_shmdt='$d_shmdt'
9852 d_shmget='$d_shmget'
9853 d_sigaction='$d_sigaction'
9854 d_sigsetjmp='$d_sigsetjmp'
9855 d_socket='$d_socket'
9856 d_sockpair='$d_sockpair'
9857 d_statblks='$d_statblks'
9858 d_stdio_cnt_lval='$d_stdio_cnt_lval'
9859 d_stdio_ptr_lval='$d_stdio_ptr_lval'
9860 d_stdiobase='$d_stdiobase'
9861 d_stdstdio='$d_stdstdio'
9862 d_strchr='$d_strchr'
9863 d_strcoll='$d_strcoll'
9864 d_strctcpy='$d_strctcpy'
9865 d_strerrm='$d_strerrm'
9866 d_strerror='$d_strerror'
9867 d_strtod='$d_strtod'
9868 d_strtol='$d_strtol'
9869 d_strtoul='$d_strtoul'
9870 d_strxfrm='$d_strxfrm'
9871 d_suidsafe='$d_suidsafe'
9872 d_symlink='$d_symlink'
9873 d_syscall='$d_syscall'
9874 d_sysconf='$d_sysconf'
9875 d_sysernlst='$d_sysernlst'
9876 d_syserrlst='$d_syserrlst'
9877 d_system='$d_system'
9878 d_tcgetpgrp='$d_tcgetpgrp'
9879 d_tcsetpgrp='$d_tcsetpgrp'
9880 d_telldir='$d_telldir'
9881 d_time='$d_time'
9882 d_times='$d_times'
9883 d_truncate='$d_truncate'
9884 d_tzname='$d_tzname'
9885 d_umask='$d_umask'
9886 d_uname='$d_uname'
9887 d_vfork='$d_vfork'
9888 d_void_closedir='$d_void_closedir'
9889 d_voidsig='$d_voidsig'
9890 d_voidtty='$d_voidtty'
9891 d_volatile='$d_volatile'
9892 d_vprintf='$d_vprintf'
9893 d_wait4='$d_wait4'
9894 d_waitpid='$d_waitpid'
9895 d_wcstombs='$d_wcstombs'
9896 d_wctomb='$d_wctomb'
9897 d_xenix='$d_xenix'
9898 date='$date'
9899 db_hashtype='$db_hashtype'
9900 db_prefixtype='$db_prefixtype'
9901 defvoidused='$defvoidused'
9902 direntrytype='$direntrytype'
9903 dlext='$dlext'
9904 dlsrc='$dlsrc'
9905 dynamic_ext='$dynamic_ext'
9906 eagain='$eagain'
9907 echo='$echo'
9908 egrep='$egrep'
9909 emacs='$emacs'
9910 eunicefix='$eunicefix'
9911 exe_ext='$exe_ext'
9912 expr='$expr'
9913 extensions='$extensions'
9914 find='$find'
9915 firstmakefile='$firstmakefile'
9916 flex='$flex'
9917 fpostype='$fpostype'
9918 freetype='$freetype'
9919 full_csh='$full_csh'
9920 full_sed='$full_sed'
9921 gcc='$gcc'
9922 gccversion='$gccversion'
9923 gidtype='$gidtype'
9924 glibpth='$glibpth'
9925 grep='$grep'
9926 groupcat='$groupcat'
9927 groupstype='$groupstype'
9928 gzip='$gzip'
9929 h_fcntl='$h_fcntl'
9930 h_sysfile='$h_sysfile'
9931 hint='$hint'
9932 hostcat='$hostcat'
9933 huge='$huge'
9934 i_bsdioctl='$i_bsdioctl'
9935 i_db='$i_db'
9936 i_dbm='$i_dbm'
9937 i_dirent='$i_dirent'
9938 i_dld='$i_dld'
9939 i_dlfcn='$i_dlfcn'
9940 i_fcntl='$i_fcntl'
9941 i_float='$i_float'
9942 i_gdbm='$i_gdbm'
9943 i_grp='$i_grp'
9944 i_limits='$i_limits'
9945 i_locale='$i_locale'
9946 i_malloc='$i_malloc'
9947 i_math='$i_math'
9948 i_memory='$i_memory'
9949 i_ndbm='$i_ndbm'
9950 i_neterrno='$i_neterrno'
9951 i_niin='$i_niin'
9952 i_pwd='$i_pwd'
9953 i_rpcsvcdbm='$i_rpcsvcdbm'
9954 i_sfio='$i_sfio'
9955 i_sgtty='$i_sgtty'
9956 i_stdarg='$i_stdarg'
9957 i_stddef='$i_stddef'
9958 i_stdlib='$i_stdlib'
9959 i_string='$i_string'
9960 i_sysdir='$i_sysdir'
9961 i_sysfile='$i_sysfile'
9962 i_sysfilio='$i_sysfilio'
9963 i_sysin='$i_sysin'
9964 i_sysioctl='$i_sysioctl'
9965 i_sysndir='$i_sysndir'
9966 i_sysparam='$i_sysparam'
9967 i_sysresrc='$i_sysresrc'
9968 i_sysselct='$i_sysselct'
9969 i_syssockio='$i_syssockio'
9970 i_sysstat='$i_sysstat'
9971 i_systime='$i_systime'
9972 i_systimek='$i_systimek'
9973 i_systimes='$i_systimes'
9974 i_systypes='$i_systypes'
9975 i_sysun='$i_sysun'
9976 i_syswait='$i_syswait'
9977 i_termio='$i_termio'
9978 i_termios='$i_termios'
9979 i_time='$i_time'
9980 i_unistd='$i_unistd'
9981 i_utime='$i_utime'
9982 i_values='$i_values'
9983 i_varargs='$i_varargs'
9984 i_varhdr='$i_varhdr'
9985 i_vfork='$i_vfork'
9986 incpath='$incpath'
9987 inews='$inews'
9988 installarchlib='$installarchlib'
9989 installbin='$installbin'
9990 installman1dir='$installman1dir'
9991 installman3dir='$installman3dir'
9992 installprivlib='$installprivlib'
9993 installscript='$installscript'
9994 installsitearch='$installsitearch'
9995 installsitelib='$installsitelib'
9996 intsize='$intsize'
9997 known_extensions='$known_extensions'
9998 ksh='$ksh'
9999 large='$large'
10000 ld='$ld'
10001 lddlflags='$lddlflags'
10002 ldflags='$ldflags'
10003 less='$less'
10004 lib_ext='$lib_ext'
10005 libc='$libc'
10006 libperl='$libperl'
10007 libpth='$libpth'
10008 libs='$libs'
10009 libswanted='$libswanted'
10010 line='$line'
10011 lint='$lint'
10012 lkflags='$lkflags'
10013 ln='$ln'
10014 lns='$lns'
10015 locincpth='$locincpth'
10016 loclibpth='$loclibpth'
10017 lp='$lp'
10018 lpr='$lpr'
10019 ls='$ls'
10020 lseektype='$lseektype'
10021 mail='$mail'
10022 mailx='$mailx'
10023 make='$make'
10024 make_set_make='$make_set_make'
10025 mallocobj='$mallocobj'
10026 mallocsrc='$mallocsrc'
10027 malloctype='$malloctype'
10028 man1dir='$man1dir'
10029 man1direxp='$man1direxp'
10030 man1ext='$man1ext'
10031 man3dir='$man3dir'
10032 man3direxp='$man3direxp'
10033 man3ext='$man3ext'
10034 medium='$medium'
10035 mips='$mips'
10036 mips_type='$mips_type'
10037 mkdir='$mkdir'
10038 models='$models'
10039 modetype='$modetype'
10040 more='$more'
10041 mv='$mv'
10042 myarchname='$myarchname'
10043 mydomain='$mydomain'
10044 myhostname='$myhostname'
10045 myuname='$myuname'
10046 n='$n'
10047 nm_opt='$nm_opt'
10048 nm_so_opt='$nm_so_opt'
10049 nroff='$nroff'
10050 o_nonblock='$o_nonblock'
10051 obj_ext='$obj_ext'
10052 oldarchlib='$oldarchlib'
10053 oldarchlibexp='$oldarchlibexp'
10054 optimize='$optimize'
10055 orderlib='$orderlib'
10056 osname='$osname'
10057 osvers='$osvers'
10058 package='$package'
10059 pager='$pager'
10060 passcat='$passcat'
10061 patchlevel='$patchlevel'
10062 path_sep='$path_sep'
10063 perl='$perl'
10064 perladmin='$perladmin'
10065 perlpath='$perlpath'
10066 pg='$pg'
10067 phostname='$phostname'
10068 plibpth='$plibpth'
10069 pmake='$pmake'
10070 pr='$pr'
10071 prefix='$prefix'
10072 prefixexp='$prefixexp'
10073 privlib='$privlib'
10074 privlibexp='$privlibexp'
10075 prototype='$prototype'
10076 randbits='$randbits'
10077 ranlib='$ranlib'
10078 rd_nodata='$rd_nodata'
10079 rm='$rm'
10080 rmail='$rmail'
10081 runnm='$runnm'
10082 scriptdir='$scriptdir'
10083 scriptdirexp='$scriptdirexp'
10084 sed='$sed'
10085 selecttype='$selecttype'
10086 sendmail='$sendmail'
10087 sh='$sh'
10088 shar='$shar'
10089 sharpbang='$sharpbang'
10090 shmattype='$shmattype'
10091 shrpenv='$shrpenv'
10092 shsharp='$shsharp'
10093 sig_name='$sig_name'
10094 sig_num='$sig_num'
10095 signal_t='$signal_t'
10096 sitearch='$sitearch'
10097 sitearchexp='$sitearchexp'
10098 sitelib='$sitelib'
10099 sitelibexp='$sitelibexp'
10100 sizetype='$sizetype'
10101 sleep='$sleep'
10102 smail='$smail'
10103 small='$small'
10104 so='$so'
10105 sockethdr='$sockethdr'
10106 socketlib='$socketlib'
10107 sort='$sort'
10108 spackage='$spackage'
10109 spitshell='$spitshell'
10110 split='$split'
10111 ssizetype='$ssizetype'
10112 startperl='$startperl'
10113 startsh='$startsh'
10114 static_ext='$static_ext'
10115 stdchar='$stdchar'
10116 stdio_base='$stdio_base'
10117 stdio_bufsiz='$stdio_bufsiz'
10118 stdio_cnt='$stdio_cnt'
10119 stdio_filbuf='$stdio_filbuf'
10120 stdio_ptr='$stdio_ptr'
10121 strings='$strings'
10122 submit='$submit'
10123 subversion='$subversion'
10124 sysman='$sysman'
10125 tail='$tail'
10126 tar='$tar'
10127 tbl='$tbl'
10128 test='$test'
10129 timeincl='$timeincl'
10130 timetype='$timetype'
10131 touch='$touch'
10132 tr='$tr'
10133 troff='$troff'
10134 uidtype='$uidtype'
10135 uname='$uname'
10136 uniq='$uniq'
10137 usedl='$usedl'
10138 usemymalloc='$usemymalloc'
10139 usenm='$usenm'
10140 useopcode='$useopcode'
10141 useperlio='$useperlio'
10142 useposix='$useposix'
10143 usesfio='$usesfio'
10144 useshrplib='$useshrplib'
10145 usevfork='$usevfork'
10146 usrinc='$usrinc'
10147 uuname='$uuname'
10148 vi='$vi'
10149 voidflags='$voidflags'
10150 xlibpth='$xlibpth'
10151 zcat='$zcat'
10152 zip='$zip'
10153 EOT
10154
10155 : add special variables
10156 $test -f patchlevel.h && \
10157 awk '/^#define/ {printf "%s=%s\n",$2,$3}' patchlevel.h >>config.sh
10158 echo "CONFIG=true" >>config.sh
10159
10160 : propagate old symbols
10161 if $test -f UU/config.sh; then
10162         <UU/config.sh sort | uniq >UU/oldconfig.sh
10163         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
10164         sort | uniq -u >UU/oldsyms
10165         set X `cat UU/oldsyms`
10166         shift
10167         case $# in
10168         0) ;;
10169         *)
10170                 cat <<EOM
10171 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
10172 EOM
10173                 echo "# Variables propagated from previous config.sh file." >>config.sh
10174                 for sym in `cat UU/oldsyms`; do
10175                         echo "    Propagating $hint variable "'$'"$sym..."
10176                         eval 'tmp="$'"${sym}"'"'
10177                         echo "$tmp" | \
10178                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
10179                 done
10180                 ;;
10181         esac
10182 fi
10183
10184 : Finish up by extracting the .SH files
10185 case "$alldone" in
10186 exit)
10187         $rm -rf UU
10188         echo "Done."
10189         exit 0
10190         ;;
10191 cont)
10192         ;;
10193 '')
10194         dflt=''
10195         nostick=true
10196         $cat <<EOM
10197
10198 If you'd like to make any changes to the config.sh file before I begin
10199 to configure things, do it as a shell escape now (e.g. !vi config.sh).
10200
10201 EOM
10202         rp="Press return or use a shell escape to edit config.sh:"
10203         . UU/myread
10204         nostick=''
10205         case "$ans" in
10206         '') ;;
10207         *) : in case they cannot read
10208                 sh 1>&4 -c "$ans";;
10209         esac
10210         ;;
10211 esac
10212
10213 : if this fails, just run all the .SH files by hand
10214 . ./config.sh
10215
10216 echo " "
10217 exec 1>&4
10218 . ./UU/extract
10219
10220 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
10221         dflt=y
10222         case "$silent" in
10223         true) ;;
10224         *)
10225                 $cat <<EOM
10226
10227 Now you need to generate make dependencies by running "make depend".
10228 You might prefer to run it in background: "make depend > makedepend.out &"
10229 It can take a while, so you might not want to run it right now.
10230
10231 EOM
10232                 ;;
10233         esac
10234         rp="Run make depend now?"
10235         . UU/myread
10236         case "$ans" in
10237         y*)
10238                 make depend && echo "Now you must run a make."
10239                 ;;
10240         *)
10241                 echo "You must run 'make depend' then 'make'."
10242                 ;;
10243         esac
10244 elif test -f [Mm]akefile; then
10245         echo " "
10246         echo "Now you must run a make."
10247 else
10248         echo "Done."
10249 fi
10250
10251 $rm -f kit*isdone ark*isdone
10252 $rm -rf UU
10253
10254 : End of Configure
10255