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