source: trunk/third/perl/Configure @ 10724

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