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