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