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