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