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