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