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