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