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