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