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