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