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