perl5.000 patch.0m: [various fixes, hint file updates and documentation]
[p5sagit/p5-mst-13.2.git] / Configure
index bfa8fb3..86f28eb 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -18,9 +18,9 @@
 # archive site. Check with Archie if you don't know where that can be.)
 #
 
-# $Id: Head.U,v 3.0.1.3 1993/12/15 08:15:07 ram Exp $
+# $Id: Head.U,v 3.0.1.6 1994/10/29 15:54:19 ram Exp $
 #
-# Generated on Sat Apr  2 17:29:14 EST 1994 [metaconfig 3.0 PL22]
+# Generated on Tue Feb 28 10:00:27 EST 1995 [metaconfig 3.0 PL51]
 
 cat >/tmp/c1$$ <<EOF
 ARGGGHHHH!!!!!
@@ -46,17 +46,38 @@ true || exec sh $0 $argv:q
 (exit $?0) || exec sh $0 $argv:q
 rm -f /tmp/c1$$ /tmp/c2$$
 
-: Sanity checks
-PATH=".:$PATH:/bin:/usr/bin:/usr/local/bin:/usr/ucb:/usr/local:/usr/lbin"
-PATH=$PATH:'/usr/5bin:/etc:/usr/gnu/bin:/usr/new:/usr/new/bin:/usr/nbin'
-PATH=$PATH:'/sys5.3/bin:/sys5.3/usr/bin:/bsd4.3/bin:/bsd4.3/usr/ucb'
-PATH=$PATH:'/bsd4.3/usr/bin:/usr/bsd:/bsd43/bin:/usr/ccs/bin'
-PATH=$PATH:'/etc:/usr/lib:/usr/ucblib:/lib:/usr/ccs/lib'
-PATH=$PATH:'/sbin:/usr/sbin:/usr/libexec'
+: compute my invocation name
+me=$0
+case "$0" in
+*/*)
+       me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
+       test "$me" || me=$0
+       ;;
+esac
+
+
+: Proper PATH setting
+paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
+paths=$paths:'/usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin'
+paths=$paths:'/sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb'
+paths=$paths:'/bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin'
+paths=$paths:'/etc /usr/lib /usr/ucblib /lib /usr/ccs/lib'
+paths=$paths:'/sbin /usr/sbin /usr/libexec'
+
+for p in $paths
+do
+       case ":$PATH:" in
+       *:$p:*) ;;
+       *) test -d $p && PATH=$PATH:$p ;;
+       esac
+done
+
+PATH=.:$PATH
 export PATH
 
+: Sanity checks
 if test ! -t 0; then
-       echo "Say 'sh Configure', not 'sh <Configure'"
+       echo "Say 'sh $me', not 'sh <$me'"
        exit 1
 fi
 
@@ -68,13 +89,14 @@ if test -f /hp-ux -a -f /bin/ksh; then
                cat <<'EOM'
 (Feeding myself to ksh to avoid nasty sh bug in "here document" expansion.)
 EOM
+               unset ENV
                exec /bin/ksh $0 "$@"
        fi
 else
        : Warn them if they use ksh on other systems
        (PATH=.; alias -x) >/dev/null 2>&1 && \
-               cat <<'EOM'
-(I see you are using the Korn shell.  Some ksh's blow up on Configure,
+               cat <<EOM
+(I see you are using the Korn shell.  Some ksh's blow up on $me,
 especially on exotic machines.  If yours does, try the Bourne shell instead.)
 EOM
 fi
@@ -83,7 +105,11 @@ fi
 test -d UU || mkdir UU
 cd UU && rm -f *
 
+dynamic_ext=''
 extensions=''
+known_extensions=''
+static_ext=''
+useposix=''
 d_bsd=''
 d_eunice=''
 d_xenix=''
@@ -97,6 +123,7 @@ cat=''
 chgrp=''
 chmod=''
 chown=''
+comm=''
 compress=''
 cp=''
 cpio=''
@@ -153,8 +180,12 @@ uniq=''
 uuname=''
 vi=''
 zcat=''
+full_sed=''
+libswanted=''
 hint=''
 myuname=''
+osname=''
+osvers=''
 Author=''
 Date=''
 Header=''
@@ -167,6 +198,13 @@ Source=''
 State=''
 afs=''
 alignbytes=''
+archlib=''
+archlibexp=''
+d_archlib=''
+installarchlib=''
+archname=''
+myarchname=''
+baserev=''
 bin=''
 binexp=''
 installbin=''
@@ -181,57 +219,100 @@ optimize=''
 cf_by=''
 cf_time=''
 contains=''
+cpp_stuff=''
 cpplast=''
 cppminus=''
 cpprun=''
 cppstdin=''
 d_access=''
+d_alarm=''
+d_attribut=''
 d_bcmp=''
 d_bcopy=''
+d_byacc=''
 d_bzero=''
 d_casti32=''
 castflags=''
 d_castneg=''
-d_charsprf=''
+d_chown=''
+d_chroot=''
 d_chsize=''
+d_closedir=''
+d_void_closedir=''
 d_const=''
 cryptlib=''
 d_crypt=''
 d_csh=''
+full_csh=''
+d_cuserid=''
+d_dbl_dig=''
+d_difftime=''
+d_dlerror=''
+d_dlopen=''
+d_dlsymun=''
 d_dosuid=''
+d_suidsafe=''
+d_drem=''
 d_dup2=''
 d_fchmod=''
 d_fchown=''
 d_fcntl=''
+d_fd_macros=''
+d_fd_set=''
+d_fds_bits=''
+d_fgetpos=''
 d_flexfnam=''
 d_flock=''
+d_fmod=''
+d_fork=''
+d_fsetpos=''
+d_Gconvert=''
 d_getgrps=''
 d_gethent=''
 aphostname=''
 d_gethname=''
 d_phostname=''
 d_uname=''
+d_getlogin=''
 d_getpgrp2=''
 d_getpgrp=''
+d_getppid=''
 d_getprior=''
 d_htonl=''
 d_isascii=''
 d_killpg=''
 d_link=''
+d_linuxstd=''
+d_locconv=''
+d_lockf=''
 d_lstat=''
+d_mblen=''
+d_mbstowcs=''
+d_mbtowc=''
 d_memcmp=''
 d_memcpy=''
 d_memmove=''
 d_memset=''
 d_mkdir=''
+d_mkfifo=''
+d_mktime=''
 d_msg=''
 d_msgctl=''
 d_msgget=''
 d_msgrcv=''
 d_msgsnd=''
+d_nice=''
 d_open3=''
+d_fpathconf=''
+d_pathconf=''
+d_pause=''
+d_pipe=''
 d_portable=''
 d_readdir=''
+d_rewinddir=''
+d_seekdir=''
+d_telldir=''
+d_readlink=''
 d_rename=''
 d_rmdir=''
 d_safebcpy=''
@@ -243,6 +324,7 @@ d_semget=''
 d_semop=''
 d_setegid=''
 d_seteuid=''
+d_setlinebuf=''
 d_setlocale=''
 d_setpgid=''
 d_setpgrp2=''
@@ -258,6 +340,8 @@ d_setruid=''
 d_setsid=''
 d_shm=''
 d_shmat=''
+d_shmatprototype=''
+shmattype=''
 d_shmctl=''
 d_shmdt=''
 d_shmget=''
@@ -270,23 +354,28 @@ d_statblks=''
 d_stdstdio=''
 d_index=''
 d_strchr=''
+d_strcoll=''
 d_strctcpy=''
 d_strerrm=''
 d_strerror=''
 d_sysernlst=''
 d_syserrlst=''
+d_strxfrm=''
 d_symlink=''
 d_syscall=''
+d_sysconf=''
 d_system=''
+d_tcgetpgrp=''
+d_tcsetpgrp=''
+d_time=''
+timetype=''
 clocktype=''
 d_times=''
 d_truncate=''
-d_usendir=''
-i_ndir=''
-ndirc=''
-ndirlib=''
-ndiro=''
+d_tzname=''
+d_umask=''
 d_vfork=''
+usevfork=''
 d_voidsig=''
 signal_t=''
 d_volatile=''
@@ -294,21 +383,40 @@ d_charvspr=''
 d_vprintf=''
 d_wait4=''
 d_waitpid=''
-dlobj=''
+d_wcstombs=''
+d_wctomb=''
+dlext=''
+cccdlflags=''
+ccdlflags=''
+d_shrplib=''
 dlsrc=''
+lddlflags=''
+shrpdir=''
 usedl=''
+fpostype=''
 gidtype=''
 groupstype=''
 h_fcntl=''
 h_sysfile=''
+db_hashtype=''
+db_prefixtype=''
+i_db=''
 i_dbm=''
 d_dirnamlen=''
+direntrytype=''
 i_dirent=''
+i_dld=''
 i_dlfcn=''
 i_fcntl=''
+i_float=''
 i_gdbm=''
 i_grp=''
+i_limits=''
+i_malloc=''
+i_math=''
+i_memory=''
 i_ndbm=''
+i_neterrno=''
 i_niin=''
 i_sysin=''
 d_pwage=''
@@ -318,18 +426,23 @@ d_pwcomment=''
 d_pwexpire=''
 d_pwquota=''
 i_pwd=''
-i_stdarg=''
 i_stddef=''
+i_stdlib=''
 i_string=''
 strings=''
 i_sysdir=''
 i_sysfile=''
 d_voidtty=''
 i_bsdioctl=''
+i_sysfilio=''
 i_sysioctl=''
 i_syssockio=''
 i_sysndir=''
+i_sysparam=''
 i_sysselct=''
+i_sysstat=''
+i_systimes=''
+i_systypes=''
 i_sgtty=''
 i_termio=''
 i_termios=''
@@ -337,18 +450,23 @@ i_systime=''
 i_systimek=''
 i_time=''
 timeincl=''
+i_unistd=''
 i_utime=''
+i_stdarg=''
 i_varargs=''
 i_varhdr=''
 i_vfork=''
 intsize=''
-lib=''
-libexp=''
 libc=''
+glibpth=''
 libpth=''
 plibpth=''
 xlibpth=''
 libs=''
+lns=''
+lseektype=''
+d_mymalloc=''
+freetype=''
 mallocobj=''
 mallocsrc=''
 malloctype=''
@@ -363,6 +481,7 @@ medium=''
 models=''
 small=''
 split=''
+modetype=''
 mydomain=''
 myhostname=''
 phostname=''
@@ -371,8 +490,13 @@ n=''
 groupcat=''
 hostcat=''
 passcat=''
+orderlib=''
+ranlib=''
 package=''
 spackage=''
+patchlevel=''
+prefix=''
+prefixexp=''
 installprivlib=''
 privlib=''
 privlibexp=''
@@ -381,10 +505,14 @@ randbits=''
 installscript=''
 scriptdir=''
 scriptdirexp=''
+selecttype=''
 sig_name=''
+sizetype=''
+so=''
 sharpbang=''
 shsharp=''
 spitshell=''
+ssizetype=''
 startsh=''
 stdchar=''
 sysman=''
@@ -398,16 +526,142 @@ mips_type=''
 usrinc=''
 defvoidused=''
 voidflags=''
-yacc=''
-yaccflags=''
 CONFIG=''
 
+define='define'
+undef='undef'
+smallmach='pdp11 i8086 z8000 i80286 iAPX286'
+rmlist=''
+
+: We must find out about Eunice early
+eunicefix=':'
+if test -f /etc/unixtovms; then
+       eunicefix=/etc/unixtovms
+fi
+if test -f /etc/unixtovms.exe; then
+       eunicefix=/etc/unixtovms.exe
+fi
+
+: list of known cpp symbols, sorted alphabetically
+al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
+al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
+al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
+al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
+al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
+al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
+al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
+al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
+al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
+al="$al VMS Xenix286"
+al="$al _AIX _AIX32 _AIX370 _AM29000 _COFF _CRAY _CX_UX _EPI"
+al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET"
+al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
+al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
+al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
+al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
+al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
+al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
+al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
+al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
+al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
+al="$al __SVR4_2__ __UMAXV__"
+al="$al ____386BSD____ __alpha __alpha__ __amiga"
+al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
+al="$al __host_mips__"
+al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
+al="$al __hp9000s500 __hp9000s700 __hp9000s800"
+al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
+al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
+al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
+al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
+al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
+al="$al __mc88100 __mc88100__ __mips __mips__"
+al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
+al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
+al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
+al="$al _host_mips _mips _unix"
+al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
+al="$al apollo ardent att386 att3b"
+al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
+al="$al cadmus clipper concurrent convex cray ctix"
+al="$al dmert encore gcos gcx gimpel gould"
+al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
+al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
+al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
+al="$al i186 i286 i386 i486 i8086"
+al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
+al="$al ksr1 linux luna luna88k m68k m88100 m88k"
+al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
+al="$al mc68040 mc68060 mc68k mc68k32 mc700"
+al="$al mc88000 mc88100 merlin mert mips mvs n16"
+al="$al ncl_el ncl_mr"
+al="$al news1500 news1700 news1800 news1900 news3700"
+al="$al news700 news800 news900 ns16000 ns32000"
+al="$al ns32016 ns32332 ns32k nsc32000 os osf"
+al="$al parisc pc532 pdp11 plexus posix pyr"
+al="$al riscix riscos scs sequent sgi sinix sony sony_news"
+al="$al sonyrisc sparc sparclite spectrum stardent stratos"
+al="$al sun sun3 sun386 svr4 sysV68 sysV88"
+al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
+al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
+al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
+al="$al xenix z8000"
+
+gccversion=''
+groupstype=''
+i_whoami=''
+: change the next line if compiling for Xenix/286 on Xenix/386
+xlibpth='/usr/lib/386 /lib/386'
+
+: general looking path for locating libraries
+glibpth="/lib/pa1.1 /usr/lib/large /lib /usr/lib $xlibpth"
+glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
+glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib /usr/shlib"
+
+: Private path used by Configure to find libraries.  Its value
+: is prepended to libpth. This variable takes care of special
+: machines, like the mips.  Usually, it should be empty.
+plibpth=''
+
+: default library list
+libswanted=''
+: full support for void wanted by default
+defvoidused=15
+
+: set useposix=false in your hint file to disable the POSIX extension.
+useposix=true
+: no include file wanted by default
+inclwanted=''
+
+: List of libraries we want.
+libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl'
+libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt"
+libswanted="$libswanted ucb bsd BSD PW x"
+: We probably want to search /usr/shlib before most other libraries.
+: This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
+glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
+glibpth="/usr/shlib $glibpth"
+: Do not use vfork unless overridden by a hint file.
+usevfork=false
+: We might as well always be portable.  It makes no difference for
+: perl5, and makes people happy.
+d_portable=define
+
 : script used to extract .SH files with variable substitutions
 cat >extract <<'EOS'
 CONFIG=true
 echo "Doing variable substitutions on .SH files..."
 if test -f MANIFEST; then
-       set x `awk '{print $1}' <MANIFEST | grep '\.SH'`
+       shlist=`awk '{print $1}' <MANIFEST | grep '\.SH'`
+       : Pick up possible extension manifests.
+       for dir in ext/* ; do
+               if test -f $dir/MANIFEST; then
+                       xxx=`awk '{print $1}' < $dir/MANIFEST | 
+                               sed -n "/\.SH$/ s@^@$dir/@p"`
+                       shlist="$shlist $xxx"
+               fi
+       done
+       set x $shlist
 else
        echo "(Looking for .SH files under the current directory.)"
        set x `find . -name "*.SH" -print`
@@ -442,7 +696,7 @@ EOS
 : produce awk script to parse command line options
 cat >options.awk <<'EOF'
 BEGIN {
-       optstr = "deEf:hrsSV";  # getopt-style specification
+       optstr = "dD:eEf:hOrsSU:V";     # getopt-style specification
 
        len = length(optstr);
        for (i = 1; i <= len; i++) {
@@ -499,6 +753,8 @@ alldone=''
 error=''
 silent=''
 extractsh=''
+override=''
+rm -f optdef.sh
 
 : option parsing
 while test $# -gt 0; do
@@ -511,7 +767,7 @@ while test $# -gt 0; do
                if test -r "$1"; then
                        config_sh="$1"
                else
-                       echo "Configure: cannot read config file $1." >&2
+                       echo "$me: cannot read config file $1." >&2
                        error=true
                fi
                cd UU
@@ -520,11 +776,37 @@ while test $# -gt 0; do
        -r) shift; reuseval=true;;
        -s) shift; silent=true;;
        -E) shift; alldone=exit;;
+       -O) shift; override=true;;
        -S) shift; extractsh=true;;
-       -V) echo "Configure generated by metaconfig 3.0 PL22." >&2
+       -D)
+               shift
+               case "$1" in
+               *=)
+                       echo "$me: use '-U symbol=', not '-D symbol='." >&2
+                       echo "$me: ignoring -D $1" >&2
+                       ;;
+               *=*) echo "$1" | \
+                               sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
+               *) echo "$1='define'" >> optdef.sh;;
+               esac
+               shift
+               ;;
+       -U)
+               shift
+               case "$1" in
+               *=) echo "$1" >> optdef.sh;;
+               *=*)
+                       echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
+                       echo "$me: ignoring -U $1" >&2
+                       ;;
+               *) echo "$1='undef'" >> optdef.sh;;
+               esac
+               shift
+               ;;
+       -V) echo "$me generated by metaconfig 3.0 PL51." >&2
                exit 0;;
        --) break;;
-       -*) echo "Configure: unknown option $1" >&2; shift; error=true;;
+       -*) echo "$me: unknown option $1" >&2; shift; error=true;;
        *) break;;
        esac
 done
@@ -532,15 +814,23 @@ done
 case "$error" in
 true)
        cat >&2 <<EOM
-Usage: Configure [-dehrESV] [-f config.sh]
+Usage: $me [-dehrEOSV] [-f config.sh] [-D symbol] [-D symbol=value]
+                 [-U symbol] [-U symbol=]
   -d : use defaults for all answers.
   -e : go on without questioning past the production of config.sh.
   -f : specify an alternate default configuration file.
   -h : print this help message and exit (with an error status).
   -r : reuse C symbols value if possible (skips costly nm extraction).
   -s : silent mode, only echoes questions and essential information.
+  -D : define symbol to have some value:
+         -D symbol         symbol gets the value 'define'
+         -D symbol=value   symbol gets the value 'value'
   -E : stop at the end of questions, after having produced config.sh.
+  -O : let -D and -U override definitions from loaded configuration file.
   -S : perform variable substitutions on all .SH files (can mix with -f)
+  -U : undefine symbol:
+         -U symbol    symbol gets the value 'undef'
+         -U symbol=   symbol gets completely empty
   -V : print version number and exit (with a zero status).
 EOM
        exit 1
@@ -552,6 +842,10 @@ case "$silent" in
 true) exec 1>/dev/null;;
 esac
 
+: run the defines and the undefines, if any, but leave the file out there...
+touch optdef.sh
+. ./optdef.sh
+
 case "$extractsh" in
 true)
        case "$config_sh" in
@@ -563,6 +857,7 @@ true)
        echo "Fetching answers from $config_sh..."
        cd ..
        . $config
+       test "$override" && . ./optdef.sh
        echo " "
        . ./UU/extract
        rm -rf UU
@@ -572,70 +867,20 @@ true)
 esac
 
 : set package name
-package=perl
+package=perl5
+first=`echo $package | sed -e 's/^\(.\).*/\1/'`
+last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
+case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
+ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
+*) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
+esac
 
 : Eunice requires " " instead of "", can you believe it
 echo " "
 : Here we go...
 echo "Beginning of configuration questions for $package."
 
-define='define'
-undef='undef'
-smallmach='pdp11 i8086 z8000 i80286 iAPX286'
-rmlist=''
-
-trap 'echo " "; rm -rf $rmlist; exit 1' 1 2 3 15
-
-: We must find out about Eunice early
-eunicefix=':'
-if test -f /etc/unixtovms; then
-       eunicefix=/etc/unixtovms
-fi
-if test -f /etc/unixtovms.exe; then
-       eunicefix=/etc/unixtovms.exe
-fi
-
-: list of known cpp symbols
-attrlist="__alpha __bsdi__ BSD_NET2 DGUX M_I186 M_I286 M_I386"
-attrlist="$attrlist M_I8086 M_XENIX UTS __DGUX__"
-attrlist="$attrlist _AIX __STDC__ __m88k__ ansi bsd4_2 gcos gimpel"
-attrlist="$attrlist hp9000s300 hp9000s400 hp9000s500 hp9000s700"
-attrlist="$attrlist hp9000s800 hpux"
-attrlist="$attrlist i186 i386 i486 i8086 iAPX286 ibm interdata"
-attrlist="$attrlist m88k mc300 mc500 mc68000 mc68k mc700 mert"
-attrlist="$attrlist mips NeXT ns16000 ns32000 nsc32000 os"
-attrlist="$attrlist __osf__ pdp11 posix"
-attrlist="$attrlist pyr sinix sony sparc sun tower tower32 tower32_600"
-attrlist="$attrlist tower32_800 tss u3b2 u3b20 u3b200 u3b5 ultrix unix"
-attrlist="$attrlist __unix__ vax venix xenix z8000"
-
-i_whoami=''
-: List of extensions we want:
-extensions=''
-gccversion=''
-: no include file wanted by default
-inclwanted=''
-
- usedl=''
-groupstype=''
-: change the next line if compiling for Xenix/286 on Xenix/386
-xlibpth='/usr/lib/386 /lib/386'
-
-: general looking path for locating libraries
-libpth="/usr/lib/large /lib /usr/lib $xlibpth /lib/large"
-libpth="$libpth /usr/lib/small /lib/small"
-libpth="$libpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
-
-: Private path used by Configure to find libraries.  Its value
-: is prepend to libpth. This variable takes care of special
-: machines, like the mips.  Usually, it should be empty.
-plibpth=''
-
-libswanted="net socket nsl inet nm sdbm gdbm ndbm dbm malloc dl dld sun m c_s posix cposix ndir dir ucb bsd BSD PW x"
-
-: full support for void wanted by default
-defvoidused=15
-
+trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
 
 : Some greps do not return status, grrr.
 echo "grimblepritz" >grimble
@@ -767,6 +1012,21 @@ while expr "X\$ans" : "X!" >/dev/null; do
        case  "\$answ" in
        "\$ans")
                case "\$ans" in
+               \\&*)
+                       set x \`expr "X\$ans" : "X&\(.*\)\$"\`
+                       shift
+                       case "\$1" in
+                       -d)
+                               fastread=yes
+                               echo "(OK, I'll run with -d after this question.)"
+                               ;;
+                       -*)
+                               echo "*** Sorry, \$1 not supported yet."
+                               ;;
+                       esac
+                       $myecho
+                       ans=!
+                       ;;
                "!")
                        sh 1>&4
                        echo " "
@@ -837,7 +1097,7 @@ if $needman; then
        cat <<EOH
  
 This installation shell script will examine your system and ask you questions
-to determine how the perl package should be installed. If you get
+to determine how the perl5 package should be installed. If you get
 stuck on a question, you may use a ! shell escape to start a subshell or
 execute a command.  Many of the questions will have default answers in square
 brackets; typing carriage return will give you the default.
@@ -866,6 +1126,8 @@ and you will be prompted again.
 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
 the questions and use the computed defaults (or the previous answers if there
 was already a config.sh file). Type 'Configure -h' for a list of options.
+You may also start interactively and then answer '& -d' at any prompt to turn
+on the non-interactive behaviour for the remaining of the execution.
 
 EOH
        . ./myread
@@ -873,9 +1135,9 @@ EOH
 
 Much effort has been expended to ensure that this shell script will run on any
 Unix system.  If despite that it blows up on yours, your best bet is to edit
-Configure and run it again.  Also, let me (lwall@netlabs.com)
-know how I blew it.  If you can't run Configure for some reason, you'll have to
-generate a config.sh file by hand.
+Configure and run it again.  If you can't run Configure for some reason,
+you'll have to generate a config.sh file by hand.  Whatever problems you
+have, let me (lwall@netlabs.com) know how I blew it.
 
 This installation script affects things in two ways:
 
@@ -899,13 +1161,15 @@ fi
 : see if sh knows # comments
 echo " "
 echo "Checking your sh to see if it knows about # comments..." >&4
-if sh -c '#' >/dev/null 2>&1 ; then
+if `sh -c '#' >/dev/null 2>&1`; then
        echo "Your sh handles # comments correctly."
        shsharp=true
        spitshell=cat
        echo " "
        echo "Okay, let's see if #! works on this system..."
-       echo "#!/bin/cat" >try
+       xcat=/bin/cat
+       test -f $xcat || xcat=/usr/bin/cat
+       echo "#!$xcat" >try
        $eunicefix try
        chmod +x try
        ./try > today
@@ -913,7 +1177,7 @@ if sh -c '#' >/dev/null 2>&1 ; then
                echo "It does."
                sharpbang='#!'
        else
-               echo "#! /bin/cat" > try
+               echo "#! $xcat" > try
                $eunicefix try
                chmod +x try
                ./try > today
@@ -928,10 +1192,12 @@ if sh -c '#' >/dev/null 2>&1 ; then
 else
        echo "Your sh doesn't grok # comments--I will strip them later on."
        shsharp=false
+       cd ..
        echo "exec grep -v '^[  ]*#'" >spitshell
        chmod +x spitshell
        $eunicefix spitshell
        spitshell=`pwd`/spitshell
+       cd UU
        echo "I presume that if # doesn't work, #! won't work either!"
        sharpbang=': use '
 fi
@@ -981,8 +1247,11 @@ for dir in \$*; do
        fi
        ;;
        *)
-       if test -f \$dir/\$thing; then
-               echo \$dir/\$thing
+       for thisthing in \$dir/\$thing; do
+               : just loop through to pick last item
+       done
+       if test -f \$thisthing; then
+               echo \$thisthing
                exit 0
        elif test -f \$dir/\$thing.exe; then
                : on Eunice apparently
@@ -1000,27 +1269,29 @@ $eunicefix loc
 loclist="
 awk
 cat
+comm
 cp
 echo
 expr
+find
 grep
+ln
+ls
 mkdir
-mv
 rm
 sed
 sort
+touch
 tr
 uniq
 "
 trylist="
 Mcc
-bison
 byacc
 cpp
 csh
 date
 egrep
-find
 line
 nroff
 perl
@@ -1070,7 +1341,7 @@ test)
        echo "Hopefully test is built into your sh."
        ;;
 *)
-       if sh -c "PATH= test true" >/dev/null 2>&1; then
+       if `sh -c "PATH= test true" >/dev/null 2>&1`; then
                echo "Using the test built into your sh."
                test=test
                _test=test
@@ -1108,21 +1379,59 @@ FOO
        ;;
 esac
 
+: determine whether symbolic links are supported
+echo " "
+$touch blurfl
+if $ln -s blurfl sym > /dev/null 2>&1 ; then
+       echo "Symbolic links are supported." >&4
+       lns="$ln -s"
+else
+       echo "Symbolic links are NOT supported." >&4
+       lns="$ln"
+fi
+$rm -f blurfl sym
+
+: see whether [:lower:] and [:upper:] are supported character classes
+echo " "
+up='[A-Z]'
+low='[a-z]'
+case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
+ABYZ)
+       echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
+       up='[:upper:]'
+       low='[:lower:]'
+       ;;
+*)
+       echo "Your tr only supports [a-z] and [A-Z] to convert case." >&4
+       ;;
+esac
+: set up the translation script tr, must be called with ./tr of course
+cat >tr <<EOSC
+$startsh
+case "\$1\$2" in
+'[A-Z][a-z]') exec $tr '$up' '$low';;
+'[a-z][A-Z]') exec $tr '$low' '$up';;
+esac
+exec $tr "\$@"
+EOSC
+chmod +x tr
+$eunicefix tr
+
 : Try to determine whether config.sh was made on this system
 case "$config_sh" in
 '')
 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
-myuname=`echo $myuname | $sed -e 's/^[^=]*=//' | \
-       tr '[A-Z]' '[a-z]' | tr '\012' ' '`
+myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
+       ./tr '[A-Z]' '[a-z]' | tr '\012' ' '`
+newmyuname="$myuname"
 dflt=n
 if test "$fastread" = yes; then
        dflt=y
 elif test -f ../config.sh; then
-       oldmyuname=''
        if $contains myuname= ../config.sh >/dev/null 2>&1; then
-               eval "old`grep myuname= ../config.sh`"
+               eval "`grep myuname= ../config.sh`"
        fi
-       if test "X$myuname" = "X$oldmyuname"; then
+       if test "X$myuname" = "X$newmyuname"; then
                dflt=y
        fi
 fi
@@ -1138,12 +1447,12 @@ if test -f config.sh; then
        case "$ans" in
        n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
        *)  echo "Fetching default answers from your old config.sh file..." >&4
-               tmp="$n"
-               tans="$c"
+               tmp_n="$n"
+               tmp_c="$c"
                . ./config.sh
                cp config.sh UU
-               n="$tmp"
-               c="$tans"
+               n="$tmp_n"
+               c="$tmp_c"
                hint=previous
                ;;
        esac
@@ -1159,106 +1468,238 @@ EOM
        : Half the following guesses are probably wrong... If you have better
        : tests or hints, please send them to lwall@netlabs.com
        : The metaconfig authors would also appreciate a copy...
-       $test -f /irix && dflt="$dflt sgi"
-       $test -f /xenix && dflt="$dflt sco_xenix"
-       $test -f /dynix && dflt="$dflt dynix"
-       $test -f /dnix && dflt="$dflt dnix"
-       $test -f /bin/mips && /bin/mips && dflt="$dflt mips"
-       $test -d /NextApps && test -f /usr/adm/software_version && dflt="$dflt next"
-       $test -d /usr/include/minix && dflt="$dflt minix"
+       $test -f /irix && osname=irix
+       $test -f /xenix && osname=sco_xenix
+       $test -f /dynix && osname=dynix
+       $test -f /dnix && osname=dnix
+       $test -f /unicos && osname=unicos && osvers=`$uname -r`
+       $test -f /bin/mips && /bin/mips && osname=mips
+       $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
+               $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
+       $test -d /usr/apollo/bin && osname=apollo
+       $test -f /etc/saf/_sactab && osname=svr4
+       $test -d /usr/include/minix && osname=minix
        if $test -f $uname; then
                set X $myuname
                shift
 
-               $test -f $5.sh && dflt="$dflt $5"
-
                case "$5" in
-               fps*) dflt="$dflt fps";;
+               fps*) osname=fps ;;
                mips*)
                        case "$4" in
-                       umips) dflt="$dflt umips";;
-                       *) dflt="$dflt mips";;
+                       umips) osname=umips ;;
+                       *) osname=mips ;;
                        esac;;
-               [23]100) dflt="$dflt mips";;
-               next*) dflt="$dflt next" ;;
-               news*) dflt="$dflt news" ;;
-               i386*) if $test -f /etc/kconfig; then
-                               if $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
-                                       dflt="$dflt isc_3_2_3"
+               [23]100) osname=mips ;;
+               next*) osname=next ;;
+               news*) osname=news ;;
+               i386*)
+                       if $test -f /etc/kconfig; then
+                               osname=isc
+                               if test "$lns" = "ln -s"; then
+                                       osvers=4
+                               elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
+                                       osvers=3
                                elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
-                                       dflt="$dflt isc_3_2_2"
-                           fi
-                               : i386.sh hint is wrong for Interactive.
-                               dflt=`echo $dflt | $sed 's/i386//'`
-                      fi
-                      ;;
+                                       osvers=2
+                               fi
+                       fi
+                       ;;
                esac
 
                case "$1" in
-               aix) dflt="$dflt aix_rs" ;;
-               sun[Oo][Ss]) case "$3" in
-                       [34]*) vers=`echo $3 | $sed 's/\./_/g'`
-                               dflt="$dflt sunos_$vers" ;;
-                       5*) vers=`echo $3 | $sed 's/^5/2/g'`
-                               dflt="$dflt solaris_$vers" ;;
+               aix) osname=aix
+                       tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
+                       case "$tmp" in
+                       'not found') osvers="$4"."$3" ;;
+                       '<3240'|'<>3240') osvers=3.2.0 ;;
+                       '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
+                       '=3250'|'>3250') osvers=3.2.5 ;;
+                       *) osvers=$tmp;;
+                       esac
+                       ;;
+               dnix) osname=dnix
+                       osvers="$3"
+                       ;;
+               domainos) osname=apollo
+                       osvers="$3"
+                       ;;
+               dgux) osname=dgux 
+                       osvers="$3"
+                       ;;
+               freebsd) osname=freebsd 
+                       osvers="$3" ;;
+               genix) osname=genix ;;
+               hp*) osname=hpux 
+                       case "$3" in
+                       *.08.*) osvers=9 ;;
+                       *.09.*) osvers=9 ;;
+                       *.10.*) osvers=10 ;;
+                       *)      osvers="$3" ;;
+                       esac
+                       ;;
+               irix) osname=irix
+                       case "$3" in
+                       4*) osvers=4 ;;
+                       5*) osvers=5 ;;
+                       *)      osvers="$3" ;;
+                       esac
+                       ;;
+               linux) osname=linux
+                       case "$3" in
+                       1*) osvers=1 ;;
+                       *)      osvers="$3" ;;
+                       esac
+                       ;;
+               netbsd*) osname=netbsd 
+                       osvers="$3"
+                       ;;
+               bsd386) osname=bsd386
+                       osvers=`$uname -r`
+                       ;;
+               next*) osname=next ;;
+               solaris) osname=solaris
+                       case "$3" in
+                       5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
+                       *)      osvers="$3" ;;
                        esac
                        ;;
-               [sS]olaris) case "$3" in
-                       5*) vers=`echo $3 | $sed 's/^5/2/g'`
-                               dflt="$dflt solaris_$vers" ;;
+               sunos) osname=sunos
+                       case "$3" in
+                       5*) osname=solaris
+                               osvers=`echo $3 | $sed 's/^5/2/g'` ;;
+                       *)      osvers="$3" ;;
                        esac
                        ;;
-               dnix) dflt="$dflt dnix" ;;
-               dgux) dflt="$dflt dgux" ;;
-               genix) dflt="$dflt genix" ;;
-               hp*ux) dflt="$dflt hpux" ;;
-               next) dflt="$dflt next" ;;
-               irix) dflt="$dflt sgi" ;;
-               ultrix) case "$3" in
-                       3*) dflt="$dflt ultrix_3" ;;
-                       4*) dflt="$dflt ultrix_4" ;;
+               titanos) osname=titanos
+                       case "$3" in
+                       1*) osvers=1 ;;
+                       2*) osvers=2 ;;
+                       3*) osvers=3 ;;
+                       4*) osvers=4 ;;
+                       *)      osvers="$3" ;;
                        esac
                        ;;
-               uts) dflt="$dflt uts" ;;
-               $2) case "$dflt" in
+               ultrix) osname=ultrix
+                       osvers="$3"
+                       ;;
+               osf1)   case "$5" in
+                               alpha)
+                                       osname=dec_osf
+                                       osvers=`echo "$3" | sed 's/^[vt]//'`
+                                       ;;
+                       hp*)    osname=hp_osf1  ;;
+                       mips)   osname=mips_osf1 ;;
+                       esac
+                       ;;
+               uts) osname=uts 
+                       osvers="$3"
+                       ;;
+               $2) case "$osname" in
                        *isc*) ;;
+                       *freebsd*) ;;
+                       svr*)
+                               : svr4.x or possibly later
+                               case "svr$3" in 
+                               ${osname}*)
+                                       osname=svr$3
+                                       osvers=$4
+                                       ;;
+                               esac
+                               case "$osname" in
+                               svr4.0)
+                                       : Check for ESIX
+                                       if test -f /stand/boot ; then
+                                               eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
+                                               if test -n "$INITPROG" -a -f "$INITPROG"; then
+                       isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
+                                                       if test -n "$isesix"; then
+                                                               osname=esix4
+                                                       fi
+                                               fi
+                                       fi
+                                       ;;
+                               esac
+                               ;;
                        *)      if test -f /etc/systemid; then
-                               set `echo $3 | $sed 's/\./ /g'` $4
+                                       osname=sco
+                                       set `echo $3 | $sed 's/\./ /g'` $4
                                        if $test -f sco_$1_$2_$3.sh; then
-                                               dflt="$dflt sco_$1_$2_$3"
+                                               osvers=$1.$2.$3
                                        elif $test -f sco_$1_$2.sh; then
-                                               dflt="$dflt sco_$1_$2"
+                                               osvers=$1.$2
                                        elif $test -f sco_$1.sh; then
-                                               dflt="$dflt sco_$1"
+                                               osvers=$1
                                        fi
+                               else
+                                       case "$osname" in
+                                       '') : Still unknown.  Probably a generic Sys V.
+                                               osname="sysv"
+                                               osvers="$3"
+                                               ;;
+                                       esac
                                fi
                                ;;
                        esac
                        ;;
+               *)      case "$osname" in
+                       '') : Still unknown.  Probably a generic BSD.
+                               osname="$1"
+                               osvers="$3"
+                               ;;
+                       esac
+                       ;;
                esac
        else
                if test -f /vmunix -a -f news_os.sh; then
-                       (what /vmunix | tr '[A-Z]' '[a-z]') > ../UU/kernel.what 2>&1
+                       (what /vmunix | ../UU/tr '[A-Z]' '[a-z]') > ../UU/kernel.what 2>&1
                        if $contains news-os ../UU/kernel.what >/dev/null 2>&1; then
-                               dflt="$dflt news_os"
+                               osname=news_os
                        fi
                        $rm -f ../UU/kernel.what
                fi
        fi
-       set X `echo $dflt | tr ' ' '\012' | sort | uniq`
-       shift
-       dflt=''
-       for file in $*; do
-               if $test -f "$file.sh"; then
-                       dflt="$dflt $file"
-               fi
-       done
-       set X $dflt
-       shift
-       dflt=${1+"$@"}
-       case "$dflt" in
-       '') dflt=none;;
+       
+       : Now look for a hint file osname_osvers, unless one has been
+       : specified already.
+       case "$hintfile" in
+       ''|' ')
+               file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
+               : Also try without trailing minor version numbers.
+               xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
+               xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
+               xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
+               xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
+               case "$file" in
+               '') dflt=none ;;
+               *)  case "$osvers" in
+                       '') dflt=$file
+                               ;;
+                       *)  if $test -f $file.sh ; then
+                                       dflt=$file
+                               elif $test -f $xfile.sh ; then
+                                       dflt=$xfile
+                               elif $test -f $xxfile.sh ; then
+                                       dflt=$xxfile
+                               elif $test -f $xxxfile.sh ; then
+                                       dflt=$xxxfile
+                               elif $test -f $xxxxfile.sh ; then
+                                       dflt=$xxxxfile
+                               elif $test -f "${osname}.sh" ; then
+                                       dflt="${osname}"
+                               else
+                                       dflt=none
+                               fi
+                               ;;
+                       esac
+                       ;;
+               esac
+               ;;
+       *)
+               dflt=`echo $hintfile | $sed 's/\.sh$//'`
+               ;;
        esac
+
        $cat <<EOM
 
 You may give one or more space-separated answers, or "none" if appropriate.
@@ -1267,17 +1708,40 @@ If your OS version has no hints, DO NOT give a wrong version -- say "none".
 EOM
        rp="Which of these apply, if any?"
        . ../UU/myread
-       for file in $ans; do
+       tans=$ans
+       for file in $tans; do
                if $test -f $file.sh; then
                        . ./$file.sh
                        $cat $file.sh >> ../UU/config.sh
-               elif $test X$ans = X -o X$ans = Xnone ; then
+               elif $test X$tans = X -o X$tans = Xnone ; then
                        : nothing
                else
-                       echo "$file.sh does not exist -- ignored"
+                       : Give one chance to correct a possible typo.
+                       echo "$file.sh does not exist"
+                       dflt=$file
+                       rp="hint to use instead?"
+                       . ../UU/myread
+                       for file in $ans; do
+                               if $test -f "$file.sh"; then
+                                       . ./$file.sh
+                                       $cat $file.sh >> ../UU/config.sh
+                               elif $test X$ans = X -o X$ans = Xnone ; then
+                                       : nothing
+                               else
+                                       echo "$file.sh does not exist -- ignored."
+                               fi
+                       done
                fi
        done
+
        hint=recommended
+       : Remember our hint file for later.
+       if $test -f "$file.sh" ; then
+               hintfile="$file"
+       else
+               hintfile=''
+       fi
+
        cd ..
 fi
 cd UU
@@ -1285,39 +1749,67 @@ cd UU
 *)
        echo " "
        echo "Fetching default answers from $config_sh..." >&4
-       tmp="$n"
-       tans="$c"
+       tmp_n="$n"
+       tmp_c="$c"
        cd ..
        cp $config_sh config.sh 2>/dev/null
        . ./config.sh
        cd UU
        cp ../config.sh .
-       n="$tmp"
-       c="$tans"
+       n="$tmp_n"
+       c="$tmp_c"
        hint=previous
        ;;
 esac
+test "$override" && . ./optdef.sh
+myuname="$newmyuname"
 
 : Restore computed paths
 for file in $loclist $trylist; do
        eval $file="\$_$file"
 done
 
+cat << EOM
+
+Configure uses the operating system name and version to set some defaults.
+The default value is probably right if the name rings a bell. Otherwise,
+since spelling matters for me, either accept the default or answer "none"
+to leave it blank.
+
+EOM
+case "$osname" in
+       ''|' ')
+               case "$hintfile" in
+               ''|' '|none) dflt=none ;;
+               *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
+               esac
+               ;;
+       *) dflt="$osname" ;;
+esac
+rp="Operating system name?"
+. ./myread
+case "$ans" in
+none)  osname='' ;;
+*) osname=`echo "$ans" | $sed -e 's/[  ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
+esac
 : who configured the system
 cf_time=`$date 2>&1`
-cf_by=`( (logname) 2>/dev/null || whoami) 2>&1`
+(logname > .temp) >/dev/null 2>&1
+$test -s .temp || (whoami > .temp) >/dev/null 2>&1
+$test -s .temp || echo unknown > .temp
+cf_by=`$cat .temp`
+$rm -f .temp
 
 : determine where manual pages are on this system
 echo " "
 case "$sysman" in
 '') 
-       syspath='/usr/man/man1 /usr/man/man1 /usr/man/mann'
-       syspath="$syspath /usr/man/manl /usr/man/local/man1"
+       syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
        syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
        syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
        syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
-       syspath="$syspath /usr/man/man.L /local/man/man1"
-       sysman=`./loc . $syspath`
+       syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
+       sysman=`./loc . /usr/man/man1 $syspath`
        ;;
 esac
 if $test -d "$sysman"; then
@@ -1539,7 +2031,7 @@ if test -f /venix; then
        echo exit 0 >venix
 else
        echo " "
-       if xenix; then
+       if ./xenix; then
                : null
        else
                echo "Nor is it Venix..."
@@ -1551,7 +2043,7 @@ $rm -f foo
 
 : see if we need a special compiler
 echo " "
-if usg; then
+if ./usg; then
        case "$cc" in
        '') case "$Mcc" in
                /*) dflt='Mcc';;
@@ -1591,45 +2083,35 @@ else
        . ./myread
        cc="$ans"
 fi
-case "$cc" in
-gcc*)   echo "Checking out which version of gcc"
+echo " "
+echo "Checking for GNU cc in disguise and/or its version number..." >&4
 $cat >gccvers.c <<EOM
 #include <stdio.h>
-int main()
-{
-char *v;
-v = "unknown";
-#ifdef __GNUC__
-#  ifdef __VERSION__
-       v = __VERSION__;
-#  endif
-#endif
-switch((int) v[0])
-  {
-    case '1':  printf("1\n"); break;
-    case '2':  printf("2\n"); break;
-    case '3':  printf("3\n"); break;
-    default:   break;
-  }
+int main() {
 #ifdef __GNUC__
-return 0;
+#ifdef __VERSION__
+       printf("%s\n", __VERSION__);
 #else
-return 1;
+       printf("%s\n", "1");
 #endif
+#endif
+       exit(0);
 }
 EOM
-       if $cc -o gccvers $ccflags gccvers.c >/dev/null 2>&1; then
-           gccversion=`./gccvers`
-               echo "You appear to have version $gccversion."
-       else
-               echo "Doesn't appear to be GNU cc."
-       fi
-       $rm -f gccvers*
-       if $test "$gccversion" = '1'; then
-               cpp=`./loc gcc-cpp $cpp $pth`
-       fi
-       ;;
+if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
+       gccversion=`./gccvers`
+       case "$gccversion" in
+       '') echo "You are not using GNU cc." ;;
+       *)  echo "You are using GNU cc $gccversion." ;;
+       esac
+else
+       echo "I can't compile the test program -- Assuming it isn't GNU cc."
+fi
+$rm -f gccvers*
+case "$gccversion" in
+1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
 esac
+
 : decide how portable to be
 case "$d_portable" in
 "$define") dflt=y;;
@@ -1651,9 +2133,6 @@ rp="Do you expect to run these scripts and binaries on multiple machines?"
 . ./myread
 case "$ans" in
        y*) d_portable="$define"
-       for file in $loclist $trylist; do
-               eval $file="\$file"
-       done
        ;;
        *)  d_portable="$undef" ;;
 esac
@@ -1669,7 +2148,7 @@ case "\$1" in
  ~*)
        if $test -f /bin/csh; then
                /bin/csh -f -c "glob \$1"
-               failed=$?
+               failed=\$?
                echo ""
                exit \$failed
        else
@@ -1706,10 +2185,25 @@ already=''
 skip=''
 none_ok=''
 exp_file=''
+nopath_ok=''
 orig_rp="$rp"
 orig_dflt="$dflt"
 
 case "$fn" in
+*\(*)
+       expr $fn : '.*(\(.*\)).*' | tr ',' '\012' >getfile.ok
+       fn=`echo $fn | sed 's/(.*)//'`
+       ;;
+esac
+
+case "$fn" in
+*:*)
+       loc_file=`expr $fn : '.*:\(.*\)'`
+       fn=`expr $fn : '\(.*\):.*'`
+       ;;
+esac
+
+case "$fn" in
 *~*) tilde=true;;
 esac
 case "$fn" in
@@ -1724,11 +2218,14 @@ esac
 case "$fn" in
 *e*) exp_file=true;;
 esac
+case "$fn" in
+*p*) nopath_ok=true;;
+esac
 
 case "$fn" in
 *f*) type='File';;
 *d*) type='Directory';;
-*l*) type='Locate'; fn=`expr $fn : '.*:\(.*\)'`;;
+*l*) type='Locate';;
 esac
 
 what="$type"
@@ -1754,6 +2251,13 @@ while test "$type"; do
        true) rp="$rp (~name ok)";;
        esac
        . UU/myread
+       if test -f UU/getfile.ok && \
+               $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
+       then
+               value="$ans"
+               ansexp="$ans"
+               break
+       fi
        case "$ans" in
        none)
                value=''
@@ -1771,7 +2275,7 @@ while test "$type"; do
                        case $? in
                        0)
                                if test "$ans" != "$value"; then
-                                       echo "(That is $value on this particular system.)"
+                                       echo "(That expands to $value on this system.)"
                                fi
                                ;;
                        *) value="$ans";;
@@ -1824,13 +2328,23 @@ while test "$type"; do
                                fi
                                ;;
                        Locate)
-                               if test -d "$value"; then
-                                       echo "(Looking for $fn in directory $value.)"
-                                       value="$value/$fn"
+                               if test -d "$ansexp"; then
+                                       echo "(Looking for $loc_file in directory $value.)"
+                                       value="$value/$loc_file"
+                                       ansexp="$ansexp/$loc_file"
                                fi
-                               if test -f "$value"; then
+                               if test -f "$ansexp"; then
                                        type=''
                                fi
+                               case "$nopath_ok" in
+                               true)   case "$value" in
+                                       */*) ;;
+                                       *)      echo "Assuming $value will be in people's path."
+                                               type=''
+                                               ;;
+                                       esac
+                                       ;;
+                               esac
                                ;;
                        esac
 
@@ -1864,15 +2378,13 @@ cd UU
 ans="$value"
 rp="$orig_rp"
 dflt="$orig_dflt"
+rm -f getfile.ok
 EOSC
 
 : What should the include directory be ?
 echo " "
 $echo $n "Hmm...  $c"
-case "$usrinc" in
-'') dflt='/usr/include';;
-*) dflt=$usrinc;;
-esac
+dflt='/usr/include'
 incpath=''
 mips_type=''
 if $test -f /bin/mips && /bin/mips; then
@@ -1891,28 +2403,171 @@ EOCP
        fi
        $rm -f usr.c usr.out
        echo "and you're compiling with the $mips_type compiler and libraries."
+       echo "exit 0" >mips
 else
        echo "Doesn't look like a MIPS system."
        echo "exit 1" >mips
-       chmod +x mips
-       $eunicefix mips
 fi
+chmod +x mips
+$eunicefix mips
 echo " "
+case "$usrinc" in
+'') ;;
+*) dflt="$usrinc";;
+esac
 fn=d/
 rp='Where are the include files you want to use?'
 . ./getfile
 usrinc="$ans"
 
-: determine optimize, if desired, or use for debug flag also
-case "$optimize" in
-' ') dflt="none";;
-'') dflt="-g";;
-*) dflt="$optimize";;
-esac
-$cat <<EOH
+: see how we invoke the C preprocessor
+echo " "
+echo "Now, how can we feed standard input to your C preprocessor..." >&4
+cat <<'EOT' >testcpp.c
+#define ABC abc
+#define XYZ xyz
+ABC.XYZ
+EOT
+cd ..
+echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
+chmod 755 cppstdin
+wrapper=`pwd`/cppstdin
+ok='false'
+cd UU
 
-Some C compilers have problems with their optimizers, by default, $package
-compiles with the -O flag to use the optimizer.  Alternately, you might want
+if $test "X$cppstdin" != "X" && \
+       $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+then
+       echo "You used to use $cppstdin $cppminus so we'll use that again."
+       case "$cpprun" in
+       '') echo "But let's see if we can live without a wrapper..." ;;
+       *)
+               if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
+                       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+               then
+                       echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
+                       ok='true'
+               else
+                       echo "(However, $cpprun $cpplast does not work, let's see...)"
+               fi
+               ;;
+       esac
+else
+       case "$cppstdin" in
+       '') ;;
+       *)
+               echo "Good old $cppstdin $cppminus does not seem to be of any help..."
+               ;;
+       esac
+fi
+
+if $ok; then
+       : nothing
+elif echo 'Maybe "'"$cc"' -E" will work...'; \
+       $cc -E <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "Yup, it does."
+       x_cpp="$cc -E"
+       x_minus='';
+elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
+       $cc -E - <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "Yup, it does."
+       x_cpp="$cc -E"
+       x_minus='-';
+elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
+       $cc -P <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "Yipee, that works!"
+       x_cpp="$cc -P"
+       x_minus='';
+elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
+       $cc -P - <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "At long last!"
+       x_cpp="$cc -P"
+       x_minus='-';
+elif echo 'No such luck, maybe "'$cpp'" will work...'; \
+       $cpp <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "It works!"
+       x_cpp="$cpp"
+       x_minus='';
+elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
+       $cpp - <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "Hooray, it works!  I was beginning to wonder."
+       x_cpp="$cpp"
+       x_minus='-';
+elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
+       $wrapper <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       x_cpp="$wrapper"
+       x_minus=''
+       echo "Eureka!"
+else
+       dflt=''
+       rp="No dice.  I can't find a C preprocessor.  Name one:"
+       . ./myread
+       x_cpp="$ans"
+       x_minus=''
+       $x_cpp <testcpp.c >testcpp.out 2>&1
+       if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+               echo "OK, that will do." >&4
+       else
+echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
+               exit 1
+       fi
+fi
+
+case "$ok" in
+false)
+       cppstdin="$x_cpp"
+       cppminus="$x_minus"
+       cpprun="$x_cpp"
+       cpplast="$x_minus"
+       set X $x_cpp
+       shift
+       case "$1" in
+       "$cpp")
+               echo "Perhaps can we force $cc -E using a wrapper..."
+               if $wrapper <testcpp.c >testcpp.out 2>&1; \
+                       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+               then
+                       echo "Yup, we can."
+                       cppstdin="$wrapper"
+                       cppminus='';
+               else
+                       echo "Nope, we'll have to live without it..."
+               fi
+               ;;
+       esac
+       case "$cpprun" in
+       "$wrapper")
+               cpprun=''
+               cpplast=''
+               ;;
+       esac
+       ;;
+esac
+
+case "$cppstdin" in
+"$wrapper") ;;
+*) $rm -f $wrapper;;
+esac
+$rm -f testcpp.c testcpp.out
+
+: determine optimize, if desired, or use for debug flag also
+case "$optimize" in
+' ') dflt='none';;
+'') dflt='-O';;
+*) dflt="$optimize";;
+esac
+$cat <<EOH
+
+Some C compilers have problems with their optimizers, by default, $package
+compiles with the -O flag to use the optimizer.  Alternately, you might want
 to use the symbolic debugger, which uses the -g flag (on traditional Unix
 systems).  Either flag can be specified here.  To use neither flag, specify
 the word "none".
@@ -1925,26 +2580,24 @@ case "$optimize" in
 'none') optimize=" ";;
 esac
 
+dflt=''
 case "$ccflags" in
-'')    case "$cc" in
-       *gcc*) if $test "$gccversion" = "1"; then
-                       dflt='-fpcc-struct-return'
-                  fi ;;
-       *) dflt='';;
+'')    
+       case "$gccversion" in
+       1*) dflt='-fpcc-struct-return' ;;
        esac
        case "$optimize" in
        *-g*) dflt="$dflt -DDEBUGGING";;
        esac
-       case "$cc" in
-       *gcc*)  if test -d /etc/conf/kconfig.d &&
-                 $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
+       case "$gccversion" in
+       2*) if test -d /etc/conf/kconfig.d &&
+                       $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
                then
                        dflt="$dflt -posix"
                fi
                ;;
        esac
        ;;
-*) dflt="$ccflags" ;;
 esac
 
 case "$mips_type" in
@@ -1988,16 +2641,21 @@ set signal.h _NO_PROTO; eval $inctest
 case "$dflt" in
 '') dflt=none;;
 esac
+case "$ccflags" in
+'') ;;
+*) dflt="$ccflags";;
+esac
 $cat <<EOH
 
 Your C compiler may want other flags.  For this question you should include
 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
 but you should NOT include libraries or ld flags like -lwhatever.  If you
 want $package to honor its debug switch, you should include -DDEBUGGING here.
+Your C compiler might also need additional flags, such as -D_POSIX_SOURCE,
+-DHIDEMYMALLOC or -DCRIPPLED_CC.
+
 To use no flags, specify the word "none".
 
-Your C compiler might also need additional flags, such as -DJMPCLOBBER
-or -DCRIPPLED_CC.
 EOH
 set X $dflt
 shift
@@ -2011,10 +2669,8 @@ esac
 
 : the following weeds options from ccflags that are of no interest to cpp
 cppflags="$ccflags"
-case "$cc" in
-*gcc*) if $test "$gccversion" = "1"; then
-               cppflags="$cppflags -D__GNUC__"
-           fi ;;
+case "$gccversion" in
+1*) cppflags="$cppflags -D__GNUC__"
 esac
 case "$mips_type" in
 '');;
@@ -2022,27 +2678,60 @@ case "$mips_type" in
 esac
 case "$cppflags" in
 '');;
-*)  set X $cppflags
+*)
+       echo " "
+       echo "Let me guess what the preprocessor flags are..." >&4
+       set X $cppflags
+       shift
        cppflags=''
-       for flag
+       $cat >cpp.c <<'EOM'
+#define BLURFL foo
+
+BLURFL xx LFRULB
+EOM
+       previous=''
+       for flag in $*
        do
-               case $flag in
-               -D*|-I*|-traditional|-ansi|-nostdinc) cppflags="$cppflags $flag";;
+               case "$flag" in
+               -*) ftry="$flag";;
+               *) ftry="$previous $flag";;
                esac
+               if $cppstdin -DLFRULB=bar $ftry $cppminus <cpp.c \
+                       >cpp1.out 2>/dev/null && \
+                       $cpprun -DLFRULB=bar $ftry $cpplast <cpp.c \
+                       >cpp2.out 2>/dev/null && \
+                       $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
+                       $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
+               then
+                       cppflags="$cppflags $ftry"
+                       previous=''
+               else
+                       previous="$flag"
+               fi
        done
+       set X $cppflags
+       shift
+       cppflags=${1+"$@"}
        case "$cppflags" in
-       *-*)  echo "(C preprocessor flags: $cppflags)";;
+       *-*)  echo "They appear to be: $cppflags";;
        esac
+       $rm -f cpp.c cpp?.out
        ;;
 esac
 
 : flags used in final linking phase
 case "$ldflags" in
-'') if venix; then
+'') if ./venix; then
                dflt='-i -z'
        else
-               dflt='none'
+               dflt=''
        fi
+       case "$ccflags" in
+       *-posix*) dflt="$dflt -posix" ;;
+       esac
+       case "$dflt" in
+       '') dflt='none' ;;
+       esac
        ;;
 *) dflt="$ldflags";;
 esac
@@ -2055,41 +2744,74 @@ none) ldflags='';;
 esac
 rmlist="$rmlist pdp11"
 
-: Initialize h_fcntl
-h_fcntl=false
-
-: Initialize h_sysfile
-h_sysfile=false
-
 : Set private lib path
 case "$plibpth" in
-'') if mips; then
+'') if ./mips; then
                plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
        fi;;
 esac
-libpth="$plibpth $libpth"
-: Now check and see which directories actually exist.
-xxx=''
-for yyy in $libpth
+case "$libpth" in
+' ') dlist='';;
+'') dlist="$plibpth $glibpth";;
+*) dlist="$libpth";;
+esac
+
+: Now check and see which directories actually exist, avoiding duplicates
+libpth=''
+for xxx in $dlist
 do
-    if $test -d $yyy; then
-               xxx="$xxx $yyy"
+    if $test -d $xxx; then
+               case " $libpth " in
+               *" $xxx "*) ;;
+               *) libpth="$libpth $xxx";;
+               esac
     fi
 done
-libpth="$xxx"
-$cat <<EOM
-Some systems have incompatible or broken versions of libraries.  Where
-should I look for libraries?
-EOM
+$cat <<'EOM'
 
-dflt="$libpth"
-echo " "
+Some systems have incompatible or broken versions of libraries.  Among
+the directories listed in the question below, please remove any you
+know not to be holding relevant libraries, and add any that are needed.
+Say "none" for none.
+
+EOM
+case "$libpth" in
+'') dflt='none';;
+*)
+       set X $libpth
+       shift
+       dflt=${1+"$@"}
+       ;;
+esac
 rp="Directories to use for library searches?"
 . ./myread
 case "$ans" in
 none) libpth=' ';;
 *) libpth="$ans";;
 esac
+
+: compute shared library extension
+case "$so" in
+'')
+       if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
+               dflt='sl'
+       else
+               dflt='so'
+       fi
+       ;;
+*) dflt="$so";;
+esac
+$cat <<EOM
+
+On some systems, shared libraries may be available.  Answer 'none' if
+you want to suppress searching of shared libraries for the remaining
+of this configuration.
+
+EOM
+rp='What is the file extension used for shared libraries?'
+. ./myread
+so="$ans"
+
 : Looking for optional libraries
 echo " "
 echo "Checking for optional libraries..." >&4
@@ -2101,50 +2823,39 @@ case "$libswanted" in
 '') libswanted='c_s';;
 esac
 for thislib in $libswanted; do
-       case "$thislib" in
-       dbm) thatlib=ndbm;;
-       *_s) thatlib=NONE;;
-       *) thatlib="${thislib}_s";;
-       esac
-       xxx=`./loc lib$thislib.a X $libpth`
-       yyy=`./loc lib$thatlib.a X $libpth`
-       zzz=`./loc lib$thislib.so.[0-9]'*' $libpth`
-       if $test -f $xxx; then
+       
+       if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then
+               echo "Found -l$thislib (shared)."
+               case " $dflt " in
+               *"-l$thislib "*);;
+               *) dflt="$dflt -l$thislib";;
+               esac
+       elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
+               echo "Found -l$thislib (shared)."
+               case " $dflt " in
+               *"-l$thislib "*);;
+               *) dflt="$dflt -l$thislib";;
+               esac
+       elif xxx=`./loc lib$thislib.a X $libpth`; $test -f "$xxx"; then
                echo "Found -l$thislib."
-               case "$dflt" in
-               "*-l$thislib *.*"|"*-l$thatlib *.*") ;;
+               case " $dflt " in
+               *"-l$thislib "*);;
                *) dflt="$dflt -l$thislib";;
                esac
-       elif $test -f $yyy; then
-               echo "Found -l$thatlib."
-               case "$dflt" in
-               "*-l$thislib *.*"|"*-l$thatlib *.*") ;;
-               *) dflt="$dflt -l$thatlib";;
+       elif xxx=`./loc lib${thislib}_s.a X $libpth`; $test -f "$xxx"; then
+               echo "Found -l${thislib}_s."
+               case " $dflt " in
+               *"-l$thislib "*);;
+               *) dflt="$dflt -l${thislib}_s";;
                esac
-       elif $test -f $zzz; then
-               echo "Found -$thislib."
-               case "$dflt" in
-               "*-l$thislib *.*"|"*-l$thatlib *.*") ;;
+       elif xxx=`./loc Slib$thislib.a X $xlibpth`; $test -f "$xxx"; then
+               echo "Found -l$thislib."
+               case " $dflt " in
+               *"-l$thislib "*);;
                *) dflt="$dflt -l$thislib";;
                esac
        else
-               xxx=`./loc Slib$thislib.a X $xlibpth`
-               yyy=`./loc Slib$thatlib.a X $xlibpth`
-               if $test -f $xxx; then
-                       echo "Found -l$thislib."
-                       case "$dflt" in
-                       "*-l$thislib *.*"|"*-l$thatlib *.*") ;;
-                       *) dflt="$dflt -l$thislib";;
-                       esac
-               elif $test -f $yyy; then
-                       echo "Found -l$thatlib."
-                       case "$dflt" in
-                       "*-l$thislib *.*"|"*-l$thatlib *.*") ;;
-                       *) dflt="$dflt -l$thatlib";;
-                       esac
-               else
-                       echo "No -l$thislib."
-               fi
+               echo "No -l$thislib."
        fi
 done
 set X $dflt
@@ -2242,29 +2953,30 @@ case "$libc" in
        esac
        ;;
 esac
-libpth="$plibpth $libpth"
 libnames='';
 case "$libs" in
 '') ;;
 *)  for thislib in $libs; do
        case "$thislib" in
+       -lc|-lc_s)
+               : Handle C library specially below.
+               ;;
        -l*)
-               thislib=`expr X$thislib : 'X-l\(.*\)'`
-               try=`./loc lib$thislib.a blurfl/dyick $libpth`
-               if test ! -f $try; then
-                       try=`./loc lib$thislib blurfl/dyick $libpth`
-                       if test ! -f $try; then
-                               try=`./loc lib$thislib.so.'*' blurfl/dyick $libpth`
-                               if test ! -f $try; then
-                                       try=`./loc $thislib blurfl/dyick $libpth`
-                                       if test ! -f $try; then
-                                               try=`./loc Slib$thislib.a blurfl/dyick $xlibpth`
-                                               if test ! -f $try; then
-                                                       try=''
-                                               fi
-                                       fi
-                               fi
-                       fi
+               thislib=`echo $thislib | $sed -e 's/^-l//'`
+               if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
+                       :
+               elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
+                       :
+               elif try=`./loc lib$thislib.a X $libpth`; $test -f "$try"; then
+                       :
+               elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
+                       :
+               elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
+                       :
+               elif try=`./loc Slib$thislib.a X $xlibpth`; $test -f "$try"; then
+                       :
+               else
+                       try=''
                fi
                libnames="$libnames $try"
                ;;
@@ -2276,10 +2988,11 @@ esac
 xxx=normal
 case "$libc" in
 unknown)
-       set /usr/ccs/lib/libc.so
-       $test -r $1 || set /usr/lib/libc.so
-       $test -r $1 || set /usr/shlib/libc.so
-       $test -r $1 || set /usr/lib/libc.so.[0-9]*
+       set /usr/ccs/lib/libc.$so
+       $test -r $1 || set /usr/lib/libc.$so
+       $test -r $1 || set /usr/shlib/libc.$so
+       $test -r $1 || set /usr/lib/libc.$so.[0-9]*
+       $test -r $1 || set /lib/libc.$so
        $test -r $1 || set /lib/libsys_s.a
        eval set \$$#
        ;;
@@ -2371,7 +3084,7 @@ $echo $n ".$c"
 $grep fprintf libc.tmp > libc.ptf
 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
-if com="$sed -n -e 's/^.* [ADTS]  *_[_.]*//p' -e 's/^.* [ADTS] //p'";\
+if com="$sed -n -e 's/^.* [ADTSI]  *_[_.]*//p' -e 's/^.* [ADTSI] //p'";\
        eval $xscan;\
        $contains '^fprintf$' libc.list >/dev/null 2>&1; then
                eval $xrun
@@ -2408,6 +3121,10 @@ elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
        eval $xscan;\
        $contains '^fprintf$' libc.list >/dev/null 2>&1; then
                eval $xrun
+elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
+       eval $xscan;\
+       $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+               eval $xrun
 else
        nm -p $* 2>/dev/null >libc.tmp
        com="$sed -n -e 's/^.* [ADTS]  *_[_.]*//p' -e 's/^.* [ADTS] //p'";\
@@ -2516,10 +3233,10 @@ yes)
        case "$tres" in
        true)
                echo "$sym() found." >&4;
-               case "$was" in $undef) . whoa; esac; eval "$var=\$td";;
+               case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
        *)
                echo "$sym() NOT found." >&4;
-               case "$was" in $define) . whoa; esac; eval "$var=\$tu";;
+               case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
        esac;;
 *)
        case "$was" in
@@ -2528,143 +3245,67 @@ yes)
        esac;;
 esac'
 
-: see how we invoke the C preprocessor
-echo " "
-echo "Now, how can we feed standard input to your C preprocessor..." >&4
-cat <<'EOT' >testcpp.c
-#define ABC abc
-#define XYZ xyz
-ABC.XYZ
-EOT
-cd ..
-echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
-chmod 755 cppstdin
-wrapper=`pwd`/cppstdin
-ok='false'
-cd UU
+: see if gconvert exists
+set gconvert d_gconvert
+eval $inlibc
 
-if $test "X$cppstdin" != "X" && \
-       $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
-then
-       echo "You used to use $cppstdin $cppminus so we'll use that again."
-       case "$cpprun" in
-       '') echo "But let's see if we can live without a wrapper..." ;;
-       *)
-               if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
-                       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
-               then
-                       echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
-                       ok='true'
+case "$d_gconvert" in
+$define)
+       echo "We'll use it to convert floats into a string then." >&4
+       d_Gconvert="gconvert((x),(n),(t),(b))"
+       ;;
+*)
+       : Maybe we can emulate it with gcvt.
+       set gcvt d_gcvt
+       eval $inlibc
+
+       case "$d_gcvt" in
+       $define) 
+               : Test whether gcvt drops a trailing decimal point
+               $cat >try.c <<'EOP'
+main() { 
+       char buf[64]; 
+       gcvt(1.0, 8, buf); 
+       if (buf[0] != '1' || buf[1] != '\0')
+               exit(1);
+       gcvt(0.0, 8, buf); 
+       if (buf[0] != '0' || buf[1] != '\0')
+               exit(1);
+       gcvt(-1.0, 8, buf); 
+       if (buf[0] != '-' || buf[1] != '1' || buf[2] != '\0')
+               exit(1);
+       exit(0);
+}
+EOP
+               if $cc $ccflags $ldflags -o try try.c $libs > /dev/null 2>&1; then
+                       if ./try; then
+                               echo "Good, your gcvt() drops a trailing decimal point."
+                               echo "We'll use it to convert floats into a string." >&4
+                               d_Gconvert="gcvt((x),(n),(b))"
+                       else
+                               echo "But your gcvt() keeps a trailing decimal point".
+                               d_Gconvert=''
+                       fi
                else
-                       echo "(However, $cpprun $cpplast does not work, let's see...)"
+                       echo "Hmm.  I can't compile the gcvt test program."
+                       d_Gconvert=''
                fi
+               $rm -f try.c try
                ;;
        esac
-else
-       case "$cppstdin" in
-       '') ;;
-       *)
-               echo "Good old $cppstdin $cppminus does not seem to be of any help..."
-               ;;
-       esac
-fi
-
-if $ok; then
-       : nothing
-elif echo 'Maybe "'"$cc"' -E" will work...'; \
-       $cc -E <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "Yup, it does."
-       x_cpp="$cc -E"
-       x_minus='';
-elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
-       $cc -E - <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "Yup, it does."
-       x_cpp="$cc -E"
-       x_minus='-';
-elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
-       $cc -P <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "Yipee, that works!"
-       x_cpp="$cc -P"
-       x_minus='';
-elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
-       $cc -P - <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "At long last!"
-       x_cpp="$cc -P"
-       x_minus='-';
-elif echo 'No such luck, maybe "'$cpp'" will work...'; \
-       $cpp <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "It works!"
-       x_cpp="$cpp"
-       x_minus='';
-elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
-       $cpp - <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "Hooray, it works!  I was beginning to wonder."
-       x_cpp="$cpp"
-       x_minus='-';
-elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
-       $wrapper <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       x_cpp="$wrapper"
-       x_minus=''
-       echo "Eureka!"
-else
-       dflt=''
-       rp="No dice.  I can't find a C preprocessor.  Name one:"
-       . ./myread
-       x_cpp="$ans"
-       x_minus=''
-       $x_cpp <testcpp.c >testcpp.out 2>&1
-       if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-               echo "OK, that will do." >&4
-       else
-echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
-               exit 1
-       fi
-fi
-
-case "$ok" in
-false)
-       cppstdin="$x_cpp"
-       cppminus="$x_minus"
-       cpprun="$x_cpp"
-       cpplast="$x_minus"
-       set X $x_cpp
-       shift
-       case "$1" in
-       "$cpp")
-               echo "Perhaps can we force $cc -E using a wrapper..."
-               if $wrapper <testcpp.c >testcpp.out 2>&1; \
-                       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
-               then
-                       echo "Yup, we can."
-                       cppstdin="$wrapper"
-                       cppminus='';
-               else
-                       echo "Nope, we'll have to live without it..."
-               fi
-               ;;
-       esac
-       case "$cpprun" in
-       "$wrapper")
-               cpprun=''
-               cpplast=''
+       case "$d_Gconvert" in
+       '')
+               echo "I'll use sprintf instead to convert floats into a string." >&4
+               d_Gconvert='sprintf((b),"%.*g",(n),(x))'
                ;;
        esac
-       ;;
 esac
 
-case "$cppstdin" in
-"$wrapper") ;;
-*) $rm -f $wrapper;;
-esac
-$rm -f testcpp.c testcpp.out
+: Initialize h_fcntl
+h_fcntl=false
+
+: Initialize h_sysfile
+h_sysfile=false
 
 : determine filename position in cpp output
 echo " "
@@ -2672,7 +3313,7 @@ echo "Computing filename position in cpp output for #include directives..." >&4
 echo '#include <stdio.h>' > foo.c
 $cat >fieldn <<EOF
 $startsh
-$cppstdin $cppminus $cppflags <foo.c 2>/dev/null | \
+$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
 $grep '^[      ]*#.*stdio\.h' | \
 while read cline; do
        pos=1
@@ -2758,6 +3399,9 @@ EOCP
                $cc $cppflags -DI_FCNTL access.c -o access >/dev/null 2>&1 ; then
                h_fcntl=true;
                echo "<fcntl.h> defines the *_OK access constants." >&4
+       elif $test `./findhdr unistd.h` && \
+               $cc $cppflags -DI_UNISTD access.c -o access >/dev/null 2>&1 ; then
+               echo "<unistd.h> defines the *_OK access constants." >&4
        else
                echo "I can't find the four *_OK access constants--I'll use mine." >&4
        fi
@@ -2765,182 +3409,483 @@ EOCP
 esac
 $rm -f access*
 
-: see if bcmp exists
-set bcmp d_bcmp
-eval $inlibc
-
-: see if bcopy exists
-set bcopy d_bcopy
-eval $inlibc
-
-: see if bzero exists
-set bzero d_bzero
+: see if alarm exists
+set alarm d_alarm
 eval $inlibc
 
-: check for length of integer
+: determine the architecture name
 echo " "
-case "$intsize" in
-'')
-       echo "Checking to see how big your integers are..." >&4
-       $cat >try.c <<'EOCP'
-#include <stdio.h>
-main()
-{
-       printf("%d\n", sizeof(int));
-}
-EOCP
-       if $cc $ccflags try.c -o try >/dev/null 2>&1 ; then
-               dflt=`./try`
+if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
+       tarch=`arch`"-$osname"
+elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
+       if uname -m > tmparch 2>&1 ; then
+               tarch=`$sed -e 's/ /_/g' -e 's/$/'"-$osname/" tmparch`
        else
-               dflt='4'
-               echo "(I can't seem to compile the test program.  Guessing...)"
+               tarch="$osname"
        fi
-       ;;
+       $rm -f tmparch
+else
+       tarch="$osname"
+fi
+case "$myarchname" in
+''|"$tarch") ;;
 *)
-       dflt="$intsize"
+       echo "(Your architecture name used to be $myarchname.)"
+       archname=''
        ;;
 esac
-rp="What is the size of an integer (in bytes)?"
+case "$archname" in
+'') dflt="$tarch";;
+*) dflt="$archname";;
+esac
+rp='What is your architecture name'
 . ./myread
-intsize="$ans"
-$rm -f try.c try
-
-: function used to set $1 to $val
-setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
-case "$val$was" in
-$define$undef) . whoa; eval "$var=\$td";;
-$undef$define) . whoa; eval "$var=\$tu";;
-*) eval "$var=$val";;
-esac'
+archname="$ans"
+myarchname="$tarch"
 
-: check for ability to cast large floats to 32-bit ints.
+: is AFS running?
 echo " "
-echo 'Checking whether your C compiler can cast large floats to int32.' >&4
-if $test "$intsize" -ge 4; then
-    xxx=int
+if test -d /afs; then
+       echo "AFS may be running... I'll be extra cautious then..." >&4
+       afs=true
 else
-    xxx=long
+       echo "AFS does not seem to be running..." >&4
+       afs=false
 fi
 
-$cat >try.c <<EOCP
-#include <sys/types.h>
-#include <signal.h>
-blech() { exit(3); }
-main()
-{
-        $xxx i32;
-       double f;
-       int result = 0;
-       signal(SIGFPE, blech);
-
-       f = (double) 0x7fffffff;
-       f = 10 * f;
-       i32  = ( $xxx )f;
-
-       if (i32 != ( $xxx )f)
-               result |= 1;
-       exit(result);
-}
-EOCP
-if $cc -o try $ccflags try.c >/dev/null 2>&1; then
-       ./try
-       yyy=$?
-else
-       yyy=1
-fi
-case "$yyy" in
-0)     val="$define"
-       echo "Yup, it can."
+: determine root of directory hierarchy where package will be installed.
+case "$prefix" in
+'')
+       dflt=`./loc . /usr/local /usr/local /local /opt /usr`
        ;;
-*)     val="$undef"
-       echo "Nope, it can't."
+*)
+       dflt="$prefix"
        ;;
 esac
-set d_casti32
-eval $setvar
-$rm -f try.*
-: check for ability to cast negative floats to unsigned
-echo " "
-echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
-$cat >try.c <<'EOCP'
-#include <signal.h>
-blech() { exit(3); }
-main()
-{
-       double f = -123;
-       unsigned long along;
-       unsigned int aint;
-       unsigned short ashort;
-       int result = 0;
+$cat <<EOM
 
-       signal(SIGFPE, blech);
-       along = (unsigned long)f;
-       aint = (unsigned int)f;
-       ashort = (unsigned short)f;
-       if (along != (unsigned long)-123)
-               result |= 1;
-       if (aint != (unsigned int)-123)
-               result |= 1;
-       if (ashort != (unsigned short)-123)
-               result |= 1;
-       f = (double)0x40000000;
-       f = f + f;
-       along = 0;
-       along = (unsigned long)f;
-       if (along != 0x80000000)
-               result |= 2;
-       f -= 1.;
-       along = 0;
-       along = (unsigned long)f;
-       if (along != 0x7fffffff)
-               result |= 1;
-       f += 2.;
-       along = 0;
-       along = (unsigned long)f;
-       if (along != 0x80000001)
-               result |= 2;
-       exit(result);
+By default, $package will be installed in $dflt/bin, manual
+pages under $dflt/man, etc..., i.e. with $dflt as prefix for
+all installation directories. Typically set to /usr/local, but you
+may choose /usr if you wish to install $package among your system
+binaries. If you wish to have binaries under /bin but manual pages
+under /usr/local/man, that's ok: you will be prompted separately
+for each of the installation directories, the prefix being only used
+to set the defaults.
 
-}
-EOCP
-if $cc -o try $ccflags try.c >/dev/null 2>&1; then
-       ./try
-       castflags=$?
-else
-       castflags=3
-fi
-case "$castflags" in
-0)     val="$define"
-       echo "Yup, it can."
-       ;;
-*)     val="$undef"
-       echo "Nope, it can't."
+EOM
+fn=d~
+rp='Installation prefix to use?'
+. ./getfile
+oldprefix=''
+case "$prefix" in
+'') ;;
+*)
+       case "$ans" in
+       "$prefix") ;;
+       *) oldprefix="$prefix";;
+       esac
        ;;
 esac
-set d_castneg
-eval $setvar
-$rm -f try.*
+prefix="$ans"
+prefixexp="$ansexp"
+
+: set the prefixit variable, to compute a suitable default value
+prefixit='case "$3" in
+""|none)
+       case "$oldprefix" in
+       "") eval "$1=\"\$$2\"";;
+       *)
+               case "$3" in
+               "") eval "$1=";;
+               none)
+                       eval "tp=\"\$$2\"";
+                       case "$tp" in
+                       ""|" ") eval "$1=\"\$$2\"";;
+                       *) eval "$1=";;
+                       esac;;
+               esac;;
+       esac;;
+*)
+       eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
+       case "$tp" in
+       --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
+       /*-$oldprefix/*|\~*-$oldprefix/*)
+               eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
+       *) eval "$1=\"\$$2\"";;
+       esac;;
+esac'
 
-: see if sprintf is declared as int or pointer to char
-echo " "
-$cat >ucbsprf.c <<'EOF'
-main()
-{
-       int sprintf();
-       char buf[10];
-       exit((unsigned long)sprintf(buf,"%s","foo") > 10L);
-}
-EOF
-if $cc ucbsprf.c -o ucbsprf >/dev/null 2>&1 && ./ucbsprf; then
-       echo "Your sprintf() returns (int)." >&4
-       val="$undef"
+: determine where private executables go
+set dflt privlib lib/$package
+eval $prefixit
+$cat <<EOM
+
+There are some auxiliary files for $package that need to be put into a
+private library directory that is accessible by everyone.
+
+EOM
+fn=d~+
+rp='Pathname where the private library files will reside?'
+. ./getfile
+if $test "X$privlibexp" != "X$ansexp"; then
+       installprivlib=''
+fi
+privlib="$ans"
+privlibexp="$ansexp"
+if $afs; then
+       $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+private files reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+       case "$installprivlib" in
+       '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
+       *) dflt="$installprivlib";;
+       esac
+       fn=de~
+       rp='Where will private files be installed?'
+       . ./getfile
+       installprivlib="$ans"
+else
+       installprivlib="$privlibexp"
+fi
+
+: set the prefixup variable, to restore leading tilda escape
+prefixup='case "$prefixexp" in
+"$prefix") ;;
+*) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
+esac'
+
+: determine where public architecture dependent libraries go
+set archlib archlib
+eval $prefixit
+case "$archlib" in
+'')
+       case "$privlib" in
+       '')
+               dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib`
+               set dflt
+               eval $prefixup
+               ;;
+       *)  dflt="$privlib/$archname";;
+       esac
+       ;;
+*) dflt="$archlib";;
+esac
+cat <<EOM
+
+$spackage contains architecture-dependent library files.  If you are
+sharing libraries in a heterogeneous environment, you might store
+these files in a separate location.  Otherwise, you can just include
+them with the rest of the public library files.
+
+EOM
+fn=d~
+rp='Where do you want to put the public architecture-dependent libraries?'
+. ./getfile
+archlib="$ans"
+archlibexp="$ansexp"
+
+if $afs; then
+       $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+private files reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+       case "$installarchlib" in
+       '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
+       *) dflt="$installarchlib";;
+       esac
+       fn=de~
+       rp='Where will architecture-dependent library files be installed?'
+       . ./getfile
+       installarchlib="$ans"
+else
+       installarchlib="$archlibexp"
+fi
+if $test X"$archlib" = X"$privlib"; then
+       d_archlib="$undef"
 else
-       echo "Your sprintf() returns (char*)." >&4
+       d_archlib="$define"
+fi
+
+: function used to set $1 to $val
+setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
+case "$val$was" in
+$define$undef) . ./whoa; eval "$var=\$td";;
+$undef$define) . ./whoa; eval "$var=\$tu";;
+*) eval "$var=$val";;
+esac'
+
+: Look for GNU-cc style attribute checking
+echo " "
+echo "Checking whether your compiler can handle __attribute__ ..." >&4
+$cat >attrib.c <<'EOCP'
+#include <stdio.h>
+void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
+EOCP
+if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
+       if $contains 'warning' attrib.out >/dev/null 2>&1; then
+               echo "Your C compiler doesn't fully support __attribute__."
+               val="$undef"
+       else
+               echo "Your C compiler supports __attribute__."
+               val="$define"
+       fi
+else
+       echo "Your C compiler doesn't seem to understand __attribute__ at all."
+       val="$undef"
+fi
+set d_attribut
+eval $setvar
+$rm -f attrib*
+
+: see if bcmp exists
+set bcmp d_bcmp
+eval $inlibc
+
+: see if bcopy exists
+set bcopy d_bcopy
+eval $inlibc
+
+: see if setpgrp exists
+set setpgrp d_setpgrp
+eval $inlibc
+
+: see which flavor of setpgrp is in use
+case "$d_setpgrp" in
+"$define")
+       echo " "
+       $cat >set.c <<EOP
+main()
+{
+       if (getuid() == 0) {
+               printf("(I see you are running Configure as super-user...)\n");
+               setuid(1);
+       }
+       if (-1 == setpgrp(1, 1))
+               exit(1);
+       exit(0);
+}
+EOP
+       if $cc $ccflags -o set set.c $ldflags $libs >/dev/null 2>&1; then
+               ./set 2>/dev/null
+               case $? in
+               0) echo "You have to use setpgrp() instead of setpgrp(pid, pgrp)." >&4
+                       val="$undef";;
+               *) echo "You have to use setpgrp(pid, pgrp) instead of setpgrp()." >&4
+                       val="$define";;
+               esac
+       else
+               if ./usg; then
+                       xxx="USG one, i.e. you use setpgrp()."
+                       val="$undef"
+               else
+                       xxx="BSD one, i.e. you use setpgrp(pid, pgrp)."
+                       val="$define"
+               fi
+               echo "Assuming your setpgrp is a $xxx" >&4
+       fi
+       ;;
+*) val="$undef";;
+esac
+set d_bsdpgrp
+eval $setvar
+$rm -f set set.c
+
+: Check if we really have byacc
+case "$byacc" in
+''|'byacc') val="$undef" ;;
+*) val="$define" ;;
+esac
+set d_byacc
+eval $setvar
+
+: see if bzero exists
+set bzero d_bzero
+eval $inlibc
+
+: check for length of integer
+echo " "
+case "$intsize" in
+'')
+       echo "Checking to see how big your integers are..." >&4
+       $cat >try.c <<'EOCP'
+#include <stdio.h>
+main()
+{
+       printf("%d\n", sizeof(int));
+}
+EOCP
+       if $cc $ccflags try.c -o try >/dev/null 2>&1 ; then
+               dflt=`./try`
+       else
+               dflt='4'
+               echo "(I can't seem to compile the test program.  Guessing...)"
+       fi
+       ;;
+*)
+       dflt="$intsize"
+       ;;
+esac
+rp="What is the size of an integer (in bytes)?"
+. ./myread
+intsize="$ans"
+$rm -f try.c try
+
+: see if signal is declared as pointer to function returning int or void
+echo " "
+xxx=`./findhdr signal.h`
+$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
+if $contains 'int.*\*[         ]*signal' $$.tmp >/dev/null 2>&1 ; then
+       echo "You have int (*signal())() instead of void." >&4
+       val="$undef"
+elif $contains 'void.*\*[      ]*signal' $$.tmp >/dev/null 2>&1 ; then
+       echo "You have void (*signal())() instead of int." >&4
        val="$define"
+elif $contains 'extern[        ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
+       echo "You have int (*signal())() instead of void." >&4
+       val="$undef"
+else
+       case "$d_voidsig" in
+       '')
+       echo "I can't determine whether signal handler returns void or int..." >&4
+               dflt=void
+               rp="What type does your signal handler return?"
+               . ./myread
+               case "$ans" in
+               v*) val="$define";;
+               *) val="$undef";;
+               esac;;
+       "$define")
+               echo "As you already told me, signal handler returns void." >&4;;
+       *)
+               echo "As you already told me, signal handler returns int." >&4;;
+       esac
+fi
+set d_voidsig
+eval $setvar
+case "$d_voidsig" in
+"$define") signal_t="void";;
+*) signal_t="int";;
+esac
+$rm -f $$.tmp
+
+: check for ability to cast large floats to 32-bit ints.
+echo " "
+echo 'Checking whether your C compiler can cast large floats to int32.' >&4
+if $test "$intsize" -eq 4; then
+       xxx=int
+else
+       xxx=long
+fi
+$cat >try.c <<EOCP
+#include <sys/types.h>
+#include <signal.h>
+$signal_t blech() { exit(3); }
+main()
+{
+       $xxx i32;
+       double f;
+       int result = 0;
+       signal(SIGFPE, blech);
+
+       f = (double) 0x7fffffff;
+       f = 10 * f;
+       i32  = ($xxx) f;
+
+       if (i32 != ($xxx) f)
+               result |= 1;
+       exit(result);
+}
+EOCP
+if $cc -o try $ccflags try.c >/dev/null 2>&1; then
+       ./try
+       yyy=$?
+else
+       echo "(I can't seem to compile the test program--assuming it can't)"
+       yyy=1
+fi
+case "$yyy" in
+0)     val="$define"
+       echo "Yup, it can."
+       ;;
+*)     val="$undef"
+       echo "Nope, it can't."
+       ;;
+esac
+set d_casti32
+eval $setvar
+$rm -f try try.*
+
+: check for ability to cast negative floats to unsigned
+echo " "
+echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
+$cat >try.c <<EOCP
+#include <sys/types.h>
+#include <signal.h>
+$signal_t blech() { exit(3); }
+main()
+{
+       double f = -123;
+       unsigned long along;
+       unsigned int aint;
+       unsigned short ashort;
+       int result = 0;
+
+       signal(SIGFPE, blech);
+       along = (unsigned long)f;
+       aint = (unsigned int)f;
+       ashort = (unsigned short)f;
+       if (along != (unsigned long)-123)
+               result |= 1;
+       if (aint != (unsigned int)-123)
+               result |= 1;
+       if (ashort != (unsigned short)-123)
+               result |= 1;
+       f = (double)0x40000000;
+       f = f + f;
+       along = 0;
+       along = (unsigned long)f;
+       if (along != 0x80000000)
+               result |= 2;
+       f -= 1.;
+       along = 0;
+       along = (unsigned long)f;
+       if (along != 0x7fffffff)
+               result |= 1;
+       f += 2.;
+       along = 0;
+       along = (unsigned long)f;
+       if (along != 0x80000001)
+               result |= 2;
+       exit(result);
+
+}
+EOCP
+if $cc -o try $ccflags try.c >/dev/null 2>&1; then
+       ./try
+       castflags=$?
+else
+       echo "(I can't seem to compile the test program--assuming it can't)"
+       castflags=3
 fi
-set d_charsprf
+case "$castflags" in
+0)     val="$define"
+       echo "Yup, it can."
+       ;;
+*)     val="$undef"
+       echo "Nope, it can't."
+       ;;
+esac
+set d_castneg
 eval $setvar
-$rm -f ucbsprf*
+$rm -f try.*
 
 : see if vprintf exists
 echo " "
@@ -2980,6 +3925,14 @@ val=$val2
 set d_charvspr
 eval $setvar
 
+: see if chown exists
+set chown d_chown
+eval $inlibc
+
+: see if chroot exists
+set chroot d_chroot
+eval $inlibc
+
 : see if chsize exists
 set chsize d_chsize
 eval $inlibc
@@ -3045,6 +3998,80 @@ case "$csh" in
 esac
 set d_csh
 eval $setvar
+full_csh=$csh
+
+: see if cuserid exists
+set cuserid d_cuserid
+eval $inlibc
+
+: define an alternate in-header-list? function
+inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
+cont=true; xxf="echo \"<\$1> found.\" >&4";
+case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
+*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
+esac;
+case $# in 4) instead=instead;; *) instead="at last";; esac;
+while $test "$cont"; do
+       xxx=`./findhdr $1`
+       var=$2; eval "was=\$$2";
+       if $test "$xxx" && $test -r "$xxx";
+       then eval $xxf;
+               eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
+               cont="";
+       else eval $xxnf;
+               eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
+       set $yyy; shift; shift; yyy=$@;
+       case $# in 0) cont="";;
+       2) xxf="echo \"but I found <\$1> $instead.\" >&4";
+               xxnf="echo \"and I did not find <\$1> either.\" >&4";;
+       *) xxf="echo \"but I found <\$1\> instead.\" >&4";
+               xxnf="echo \"there is no <\$1>, ...\" >&4";;
+       esac;
+done;
+while $test "$yyy";
+do set $yyy; var=$2; eval "was=\$$2";
+       eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
+       set $yyy; shift; shift; yyy=$@;
+done'
+
+: see if this is a limits.h system
+set limits.h i_limits
+eval $inhdr
+
+: see if this is a float.h system
+set float.h i_float
+eval $inhdr
+
+: See if number of significant digits in a double precision number is known
+echo " "
+$cat >dbl_dig.c <<EOM
+#$i_limits I_LIMITS
+#$i_float I_FLOAT
+#ifdef I_LIMITS
+#include <limits.h>
+#endif
+#ifdef I_FLOAT
+#include <float.h>
+#endif
+#ifdef DBL_DIG
+printf("Contains DBL_DIG");
+#endif
+EOM
+$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
+if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
+       echo "DBL_DIG found." >&4
+       val="$define"
+else
+       echo "DBL_DIG NOT found." >&4
+       val="$undef"
+fi
+$rm -f dbl_dig.?
+set d_dbl_dig
+eval $setvar
+
+: see if difftime exists
+set difftime d_difftime
+eval $inlibc
 
 : see if this is a dirent system
 echo " "
 set i_dirent
 eval $setvar
 
-: see if the directory entry stores field length
-echo " "
-if $contains 'd_namlen' $xinc >/dev/null 2>&1; then
-       echo "Good, your directory entry keeps length information in d_namlen." >&4
-       val="$define"
+: Look for type of directory structure.
+echo " "
+$cppstdin $cppflags $cppminus < "$xinc" > try.c
+
+case "$direntrytype" in
+''|' ')
+       case "$i_dirent" in
+       $define) guess1='struct dirent' ;;
+       *) guess1='struct direct'  ;;
+       esac
+       ;;
+*)     guess1="$direntrytype"
+       ;;
+esac
+
+case "$guess1" in
+'struct dirent') guess2='struct direct' ;;
+*) guess2='struct dirent' ;;
+esac
+               
+if $contains "$guess1" try.c >/dev/null 2>&1; then
+       direntrytype="$guess1"
+       echo "Your directory entries are $direntrytype." >&4
+elif $contains "$guess2" try.c >/dev/null 2>&1; then
+       direntrytype="$guess2"
+       echo "Your directory entries seem to be $direntrytype." >&4
+else
+       echo "I don't recognize your system's directory entries." >&4
+       rp="What type is used for directory entries on this system?"
+       dflt="$guess1"
+       . ./myread
+       direntrytype="$ans"
+fi
+$rm -f try.c
+
+
+: see if the directory entry stores field length
+echo " "
+$cppstdin $cppflags $cppminus < "$xinc" > try.c
+if $contains 'd_namlen' try.c >/dev/null 2>&1; then
+       echo "Good, your directory entry keeps length information in d_namlen." >&4
+       val="$define"
+else
+       echo "Your directory entry does not know about the d_namlen field." >&4
+       val="$undef"
+fi
+set d_dirnamlen
+eval $setvar
+$rm -f try.c
+
+: see if dlerror exists
+set dlerror d_dlerror
+eval $inlibc
+
+: see if dld is available
+set dld.h i_dld
+eval $inhdr
+
+: see if dlopen exists
+set dlopen d_dlopen
+eval $inlibc
+
+: determine which dynamic loading, if any, to compile in
+echo " "
+dldir="ext/DynaLoader"
+case "$usedl" in
+$define|y|true)
+       dflt='y'
+       usedl="$define"
+       ;;
+$undef|n|false)
+       dflt='n'
+       usedl="$undef"
+       ;;
+*) 
+       dflt='n'
+       case "$d_dlopen" in
+           $define) dflt='y' ;;
+       esac
+       case "$i_dld" in
+           $define) dflt='y' ;;
+       esac
+       : Does a dl_xxx.xs file exist for this operating system
+       $test -f ../$dldir/dl_${osname}.xs && dflt='y'
+       ;;
+esac
+rp="Do you wish to use dynamic loading?"
+. ./myread
+usedl="$ans"
+case "$ans" in
+y*) usedl="$define"
+       case "$dlsrc" in
+       '')
+               if $test -f ../$dldir/dl_${osname}.xs ; then
+                       dflt="$dldir/dl_${osname}.xs"
+               elif $test "$d_dlopen" = "$define" ; then
+                       dflt="$dldir/dl_dlopen.xs"
+               elif $test "$i_dld" = "$define" ; then
+                       dflt="$dldir/dl_dld.xs"
+               else
+                       dflt=''
+               fi
+               ;;
+       *)      dflt="$dldir/$dlsrc"
+               ;;
+       esac
+    echo "The following dynamic loading files are available:"
+       : Can not go over to $dldir because getfile has path hard-coded in.
+    cd ..; ls -C $dldir/dl*.xs; cd UU
+    rp="Source file to use for dynamic loading"
+    fn="fne"
+    . ./getfile
+       usedl="$define"
+       : emulate basename
+       dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
+    $cat << EOM
+
+Some systems may require passing special flags to $cc -c to
+compile modules that will be used to create a shared library.
+To use no flags, say "none".
+
+EOM
+    case "$cccdlflags" in
+    ''|' ') case "$cc" in
+               *gcc*)  dflt='-fpic' ;;
+               *)  case "$osname" in
+                       hpux)   dflt='+z' ;;
+                       next)   dflt='none' ;;
+                       solaris) dflt='-K pic' ;;
+                       sunos)  dflt='-pic' ;;
+                       svr4*|esix*) dflt='-Kpic' ;;
+                       *)      dflt='none' ;;
+                   esac ;;
+           esac ;;
+    *) dflt="$cccdlflags" ;;
+    esac
+    rp="Any special flags to pass to $cc -c to compile shared library modules?"
+    . ./myread
+    case "$ans" in
+    none) cccdlflags='' ;;
+    *) cccdlflags="$ans" ;;
+    esac
+
+    cat << 'EOM'
+
+Some systems may require passing special flags to ld to create a
+library that can be dynamically loaded.  If your ld flags include
+-L/other/path options to locate libraries outside your loader's normal
+search path, you may need to specify those -L options here as well.  To
+use no flags, say "none".
+
+EOM
+    case "$lddlflags" in
+    ''|' ') case "$osname" in
+                       hpux)  dflt='-b' ;;
+                       next)  dflt='none' ;;
+                       solaris) dflt='-G' ;;
+                       sunos) dflt='-assert nodefinitions' ;;
+                       svr4*|esix*) dflt="-G $ldflags" ;;
+               *)     dflt='none' ;;
+                       esac
+                       ;;
+    *) dflt="$lddlflags" ;;
+    esac
+    rp="Any special flags to pass to ld to create a dynamically loaded library?"
+    . ./myread
+    case "$ans" in
+    none) lddlflags='' ;;
+    *) lddlflags="$ans" ;;
+    esac
+
+       cat <<EOM
+
+Some systems may require passing special flags to $cc to indicate that
+the resulting executable will use dynamic linking.  To use no flags,
+say "none".
+
+EOM
+    case "$ccdlflags" in
+    ''|' ') case "$osname" in
+               hpux)   dflt='none' ;;
+               next)   dflt='none' ;;
+               sunos)  dflt='none' ;;
+               *)      dflt='none' ;;
+           esac ;;
+    *)  dflt="$ccdlflags" ;;
+    esac
+    rp="Any special flags to pass to $cc to use dynamic loading?"
+    . ./myread
+    case "$ans" in
+    none) ccdlflags='' ;;
+    *) ccdlflags="$ans" ;;
+    esac
+    ;;
+*)  usedl="$undef"
+    dlsrc='dl_none.xs'
+    lddlflags=''
+    ccdlflags=''
+    ;;
+esac
+
+val="$undef"
+case "$osname" in
+esix*|svr4*)
+    case "$usedl" in
+    $define)
+       $cat <<EOM
+
+System V Release 4 systems can support dynamic loading
+only if libperl is created as a shared library.
+
+EOM
+       val="$define"
+       ;;
+    esac ;;
+esac
+set d_shrplib; eval $setvar
+case "$d_shrplib" in
+$define)
+    cat <<EOM >&4
+
+Be sure to add the perl source directory to the LD_LIBRARY_PATH
+environment variable before running make:
+    LD_LIBRARY_PATH=`cd ..;pwd`; export LD_LIBRARY_PATH
+or
+    setenv LD_LIBRARY_PATH `cd ..;pwd`
+
+EOM
+;;
+esac
+case "$d_shrplib" in
+$define)
+       case "$shrpdir" in
+       "")     dflt="$archlib/CORE";;
+       *)      dflt="$shrpdir";;
+       esac
+       rp="What directory should we install the shared libperl into?"
+       fn="d~"
+       . ./getfile
+       shrpdir="$ans"
+       ;;
+*)     shrpdir='none'
+       ;;
+esac
+
+: see if dlfcn is available
+set dlfcn.h i_dlfcn
+eval $inhdr
+
+case "$usedl" in
+$define|y|true)
+       $cat << EOM
+
+On a few systems, the dynamically loaded modules that perl generates and uses
+will need a different extension then shared libs. The default will probably
+be appropriate.
+
+EOM
+       case "$dlext" in
+       '')     dflt="$so" ;;
+       *)      dflt="$dlext" ;;
+       esac
+       rp='What is the extension of dynamically loaded modules'
+       . ./myread
+       dlext="$ans"
+       ;;
+*)
+       dlext="none"
+       ;;
+esac
+
+: Check if dlsym need a leading underscore
+echo " "
+val="$undef"
+
+case "$dlsrc" in
+dl_dlopen.xs)
+       echo "Checking whether your dlsym() needs a leading underscore ..." >&4
+       $cat >dyna.c <<'EOM'
+fred () { }
+EOM
+
+$cat >fred.c<<EOM
+
+#include <stdio.h>
+#$i_dlfcn I_DLFCN
+#ifdef I_DLFCN
+#include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
+#else
+#include <sys/types.h>
+#include <nlist.h>
+#include <link.h>
+#endif
+
+extern int fred() ;
+
+main()
+{
+    void * handle ;
+    void * symbol ;
+#ifndef RTLD_LAZY
+    int mode = 1 ;
+#else
+    int mode = RTLD_LAZY ;
+#endif
+    handle = dlopen("./dyna.$dlext", mode) ;
+    if (handle == NULL) {
+        printf ("1\n") ;
+           exit(0);
+    }
+    symbol = dlsym(handle, "fred") ;
+    if (symbol == NULL) {
+               /* try putting a leading underscore */
+        symbol = dlsym(handle, "_fred") ;
+        if (symbol == NULL) {
+            printf ("2\n") ;
+               exit(0);
+               }
+        printf ("3\n") ;
+    }
+    else
+        printf ("4\n") ;
+       exit(0);
+}
+EOM
+       if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
+               ld $lddlflags -o dyna.$dlext dyna.o > /dev/null 2>&1 && 
+               $cc $ccflags $ldflags $cccdlflags $ccdlflags fred.c -o fred $libs > /dev/null 2>&1; then
+               xxx=`./fred`
+               case $xxx in
+               1)      echo "Test program failed using dlopen." >&4
+                       echo "Perhaps you should not use dynamic loading." >&4;;
+               2)      echo "Test program failed using dlsym." >&4
+                       echo "Perhaps you should not use dynamic loading." >&4;;
+               3)      echo "dlsym needs a leading underscore" >&4
+                       val="$define" ;;
+               4)      echo "dlsym doesn't need a leading underscore." >&4;;
+               esac
+       else
+               echo "I can't compile and run the test program." >&4
+       fi
+       ;;
+esac
+               
+$rm -f fred fred.? dyna.$dlext dyna.?
+
+set d_dlsymun
+eval $setvar
+
+: see if setuid scripts can be secure
+$cat <<EOM
+
+Some kernels have a bug that prevents setuid #! scripts from being
+secure.  Some sites have disabled setuid #! scripts because of this.
+
+First let's decide if your kernel supports secure setuid #! scripts.
+(If setuid #! scripts would be secure but have been disabled anyway,
+don't say that they are secure if asked.)
+
+EOM
+
+val="$undef"
+if $test -d /dev/fd; then
+       echo "#!$ls" >reflect
+       chmod +x,u+s reflect
+       ./reflect >flect 2>&1
+       if $contains "/dev/fd" flect >/dev/null; then
+               echo "Congratulations, your kernel has secure setuid scripts!" >&4
+               val="$define"
+       else
+               $cat <<EOM
+If you are not sure if they are secure, I can check but I'll need a
+username and password different from the one you are using right now.
+If you don't have such a username or don't want me to test, simply
+enter 'none'.
+
+EOM
+               rp='Other username to test security of setuid scripts with?'
+               dflt='none'
+               . ./myread
+               case "$ans" in
+               n|none)
+                       case "$d_suidsafe" in
+                       '')     echo "I'll assume setuid scripts are *not* secure." >&4
+                               dflt=n;;
+                       "$undef")
+                               echo "Well, the $hint value is *not* secure." >&4
+                               dflt=n;;
+                       *)      echo "Well, the $hint value *is* secure." >&4
+                               dflt=y;;
+                       esac
+                       ;;
+               *)
+                       $rm -f reflect flect
+                       echo "#!$ls" >reflect
+                       chmod +x,u+s reflect
+                       echo >flect
+                       chmod a+w flect
+                       echo '"su" will (probably) prompt you for '"$ans's password."
+                       su $ans -c './reflect >flect'
+                       if $contains "/dev/fd" flect >/dev/null; then
+                               echo "Okay, it looks like setuid scripts are secure." >&4
+                               dflt=y
+                       else
+                               echo "I don't think setuid scripts are secure." >&4
+                               dflt=n
+                       fi
+                       ;;
+               esac
+               rp='Does your kernel have *secure* setuid scripts?'
+               . ./myread
+               case "$ans" in
+               [yY]*)  val="$define";;
+               *)      val="$undef";;
+               esac
+       fi
 else
-       echo "Your directory entry does not know about the d_namlen field." >&4
+       echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
        val="$undef"
 fi
-set d_dirnamlen
+set d_suidsafe
 eval $setvar
 
+$rm -f reflect flect
+
 : now see if they want to do setuid emulation
-case "$d_dosuid" in
-'') dflt=n;;
-"$undef") dflt=n;;
-*) dflt=y;;
-esac
-cat <<EOM
-Some sites have disabled setuid #! scripts because of a bug in the kernel
-that prevents them from being secure.  If you are on such a system, the
-setuid/setgid bits on scripts are currently useless.  It is possible for
-$package to detect those bits and emulate setuid/setgid in a secure fashion
-until a better solution is devised for the kernel problem.
+echo " "
+val="$undef"
+case "$d_suidsafe" in
+"$define")
+       val="$undef"
+       echo "No need to emulate SUID scripts since they are secure here." >& 4
+       ;;
+*)
+       $cat <<EOM
+Some systems have disabled setuid scripts, especially systems where
+setuid scripts cannot be secure.  On systems where setuid scripts have
+been disabled, the setuid/setgid bits on scripts are currently
+useless.  It is possible for $package to detect those bits and emulate
+setuid/setgid in a secure fashion.  This emulation will only work if
+setuid scripts have been disabled in your kernel.
 
 EOM
-rp="Do you want to do setuid/setgid emulation?"
-. ./myread
-case "$ans" in
-y*)  d_dosuid="$define";;
-*) d_dosuid="$undef";;
+       case "$d_dosuid" in
+       "$define") dflt=y ;;
+       *) dflt=n ;;
+       esac
+       rp="Do you want to do setuid/setgid emulation?"
+       . ./myread
+       case "$ans" in
+       [yY]*)  val="$define";;
+       *)      val="$undef";;
+       esac
+       ;;
 esac
+set d_dosuid
+eval $setvar
+
+: see if drem exists
+set drem d_drem
+eval $inlibc
 
 : see if dup2 exists
 set dup2 d_dup2
@@ -3114,6 +4569,10 @@ eval $inlibc
 set fcntl d_fcntl
 eval $inlibc
 
+: see if fgetpos exists
+set fgetpos d_fgetpos
+eval $inlibc
+
 : see if we can have long filenames
 echo " "
 rmlist="$rmlist /tmp/cf$$"
@@ -3161,10 +4620,34 @@ $rm -rf /tmp/cf$$ 123456789abcde*
 set flock d_flock
 eval $inlibc
 
+: see if fmod exists
+set fmod d_fmod
+eval $inlibc
+
+: see if fork exists
+set fork d_fork
+eval $inlibc
+
+: see if pathconf exists
+set pathconf d_pathconf
+eval $inlibc
+
+: see if fpathconf exists
+set fpathconf d_fpathconf
+eval $inlibc
+
+: see if fsetpos exists
+set fsetpos d_fsetpos
+eval $inlibc
+
 : see if gethostent exists
 set gethostent d_gethent
 eval $inlibc
 
+: see if getlogin exists
+set getlogin d_getlogin
+eval $inlibc
+
 : see if getpgrp exists
 set getpgrp d_getpgrp
 eval $inlibc
@@ -3173,37 +4656,131 @@ eval $inlibc
 set getpgrp2 d_getpgrp2
 eval $inlibc
 
+: see if getppid exists
+set getppid d_getppid
+eval $inlibc
+
 : see if getpriority exists
 set getpriority d_getprior
 eval $inlibc
 
+: see if this is a netinet/in.h or sys/in.h system
+set netinet/in.h i_niin sys/in.h i_sysin
+eval $inhdr
+
 : see if htonl --and friends-- exists
-set htonl d_htonl
+val=''
+set htonl val
 eval $inlibc
 
+: Maybe they are macros.
+case "$val" in
+$undef)
+       $cat >htonl.c <<EOM
+#include <stdio.h>
+#include <sys/types.h>
+#$i_niin I_NETINET_IN
+#$i_sysin I_SYS_IN
+#ifdef I_NETINET_IN
+#include <netinet/in.h>
+#endif
+#ifdef I_SYS_IN
+#include <sys/in.h>
+#endif
+#ifdef htonl
+printf("Defined as a macro.");
+#endif
+EOM
+       $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
+       if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
+               val="$define"
+               echo "But it seems to be defined as a macro." >&4
+       fi
+       $rm -f htonl.?
+       ;;
+esac
+set d_htonl
+eval $setvar
+
+: see which of string.h or strings.h is needed
+echo " "
+strings=`./findhdr string.h`
+if $test "$strings" && $test -r "$strings"; then
+       echo "Using <string.h> instead of <strings.h>." >&4
+       val="$define"
+else
+       val="$undef"
+       strings=`./findhdr strings.h`
+       if $test "$strings" && $test -r "$strings"; then
+               echo "Using <strings.h> instead of <string.h>." >&4
+       else
+               echo "No string header found -- You'll surely have problems." >&4
+       fi
+fi
+set i_string
+eval $setvar
+case "$i_string" in
+"$undef") strings=`./findhdr strings.h`;;
+*)       strings=`./findhdr string.h`;;
+esac
+
+: index or strchr
+echo " "
+if set index val -f; eval $csym; $val; then
+       if set strchr val -f d_strchr; eval $csym; $val; then
+               if $contains strchr "$strings" >/dev/null 2>&1 ; then
+                       val="$define"
+                       vali="$undef"
+                       echo "strchr() found." >&4
+               else
+                       val="$undef"
+                       vali="$define"
+                       echo "index() found." >&4
+               fi
+       else
+               val="$undef"
+               vali="$define"
+               echo "index() found." >&4
+       fi
+else
+       if set strchr val -f d_strchr; eval $csym; $val; then
+               val="$define"
+               vali="$undef"
+               echo "strchr() found." >&4
+       else
+               echo "No index() or strchr() found!" >&4
+               val="$undef"
+               vali="$undef"
+       fi
+fi
+set d_strchr; eval $setvar
+val="$vali"
+set d_index; eval $setvar
+
 : Look for isascii
 echo " "
 $cat >isascii.c <<'EOCP'
 #include <stdio.h>
 #include <ctype.h>
 main() {
-        int c = 'A';
+       int c = 'A';
        if (isascii(c))
-           exit(0);
+               exit(0);
        else
-           exit(1);
+               exit(1);
 }
 EOCP
-if $cc $cppflags -o isascii isascii.c >/dev/null 2>&1 ; then
-    echo "isascii() found."
-    val="$define"
+if $cc $ccflags $ldflags -o isascii isascii.c $libs >/dev/null 2>&1 ; then
+       echo "isascii() found." >&4
+       val="$define"
 else
-    echo "isascii() NOT found."
-    val="$undef"
+       echo "isascii() NOT found." >&4
+       val="$undef"
 fi
 set d_isascii
 eval $setvar
 $rm -f isascii*
+
 : see if killpg exists
 set killpg d_killpg
 eval $inlibc
@@ -3212,10 +4789,71 @@ eval $inlibc
 set link d_link
 eval $inlibc
 
+: see if stdio is really std
+echo " "
+xxx=`./findhdr stdio.h`
+if $contains 'char.*_ptr;' "$xxx" >/dev/null 2>&1 ; then
+       if $contains '_cnt;' "$xxx" >/dev/null 2>&1 ; then
+               echo "Your stdio is pretty std." >&4
+               val="$define"
+       else
+               echo "Your stdio isn't very std." >&4
+               val="$undef"
+       fi
+else
+       echo "Your stdio isn't very std." >&4
+       val="$undef"
+fi
+set d_stdstdio
+eval $setvar
+
+: see if stdio is like that in linux
+case "$d_stdstdio" in
+"$undef")
+       echo " "
+       xxx=`./findhdr stdio.h`
+       $cppstdin $cppflags $cppminus < "$xxx" > stdio.E
+       if $contains 'char.*_IO_read_base' stdio.E >/dev/null 2>&1 && \
+               $contains '_IO_read_ptr' stdio.E >/dev/null 2>&1 && \
+               $contains '_IO_read_end' stdio.E >/dev/null 2>&1 ; then
+                       echo "Your stdio looks like linux." >&4
+                       val="$define"
+       else
+               echo "You don't have linux stdio, either." >&4
+               val="$undef"
+       fi
+       $rm -f stdio.E
+       ;;
+*)     val="$undef" ;;
+esac
+
+set d_linuxstd
+eval $setvar
+
+: see if localeconv exists
+set localeconv d_locconv
+eval $inlibc
+
+: see if lockf exists
+set lockf d_lockf
+eval $inlibc
+
 : see if lstat exists
 set lstat d_lstat
 eval $inlibc
 
+: see if mblen exists
+set mblen d_mblen
+eval $inlibc
+
+: see if mbstowcs exists
+set mbstowcs d_mbstowcs
+eval $inlibc
+
+: see if mbtowc exists
+set mbtowc d_mbtowc
+eval $inlibc
+
 : see if memcmp exists
 set memcmp d_memcmp
 eval $inlibc
@@ -3236,6 +4874,14 @@ eval $inlibc
 set mkdir d_mkdir
 eval $inlibc
 
+: see if mkfifo exists
+set mkfifo d_mkfifo
+eval $inlibc
+
+: see if mktime exists
+set mktime d_mktime
+eval $inlibc
+
 : see if msgctl exists
 set msgctl d_msgctl
 eval $inlibc
@@ -3269,57 +4915,93 @@ fi
 set d_msg
 eval $setvar
 
-socketlib=''
-sockethdr=''
-: see whether socket exists
+: see if this is a malloc.h system
+set malloc.h i_malloc
+eval $inhdr
+
+: see if stdlib is available
+set stdlib.h i_stdlib
+eval $inhdr
+
+: determine which malloc to compile in
 echo " "
-$echo $n "Hmm... $c" >&4
-if set socket val -f d_socket; eval $csym; $val; then
-       echo "Looks like you have Berkeley networking support." >&4
-       d_socket="$define"
-       if set setsockopt val -f; eval $csym; $val; then
-               d_oldsock="$undef"
-       else
-               echo "...but it uses the old 4.1c interface, rather than 4.2" >&4
-               d_oldsock="$define"
-       fi
-else
-       if $contains socklib libc.list >/dev/null 2>&1; then
-               echo "Looks like you have Berkeley networking support." >&4
-               d_socket="$define"
-               : we will have to assume that it supports the 4.2 BSD interface
-               d_oldsock="$undef"
-       else
-               echo "You don't have Berkeley networking in libc.a..." >&4
-               if test -f /usr/lib/libnet.a; then
-                       ( (nm $nm_opt /usr/lib/libnet.a | eval $nm_extract) ||  \
-                       ar t /usr/lib/libnet.a) 2>/dev/null >> libc.list
-                       if $contains socket libc.list >/dev/null 2>&1; then
-                       echo "...but the Wollongong group seems to have hacked it in." >&4
-                               socketlib="-lnet"
-                               sockethdr="-I/usr/netinclude"
-                               d_socket="$define"
-                               if $contains setsockopt libc.list >/dev/null 2>&1; then
-                                       d_oldsock="$undef"
-                               else
-                                       echo "...using the old 4.1c interface, rather than 4.2" >&4
-                                       d_oldsock="$define"
-                               fi
-                       else
-                               echo "or even in libnet.a, which is peculiar." >&4
-                               d_socket="$undef"
-                               d_oldsock="$undef"
-                       fi
-               else
-                       echo "or anywhere else I see." >&4
-                       d_socket="$undef"
-                       d_oldsock="$undef"
-               fi
+case "$usemymalloc" in
+''|y*|true)    dflt='y' ;;
+n*|false)      dflt='n' ;;
+*)     dflt="$usemymalloc" ;;
+esac
+rp="Do you wish to attempt to use the malloc that comes with $package?"
+. ./myread
+usemymalloc="$ans"
+case "$ans" in
+y*|true)
+       usemymalloc='y'
+       mallocsrc='malloc.c'
+       mallocobj='malloc.o'
+       d_mymalloc="$define"
+       case "$libs" in
+       *-lmalloc*)
+               : Remove malloc from list of libraries to use
+               echo "Removing unneeded -lmalloc from library list" >&4
+               set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
+               shift
+               libs="$*"
+               echo "libs = $libs" >&4
+               ;;
+       esac
+       ;;
+*)
+       usemymalloc='n'
+       mallocsrc=''
+       mallocobj=''
+       d_mymalloc="$undef"
+       ;;
+esac
+
+: compute the return types of malloc and free
+echo " "
+$cat >malloc.c <<END
+#$i_malloc I_MALLOC
+#$i_stdlib I_STDLIB
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef I_MALLOC
+#include <malloc.h>
+#endif
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+#ifdef TRY_MALLOC
+void *malloc();
+#endif
+#ifdef TRY_FREE
+void free();
+#endif
+END
+case "$malloctype" in
+'')
+       if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
+               malloctype='void *'
+       else
+               malloctype='char *'
        fi
-fi
+       ;;
+esac
+echo "Your system wants malloc to return '$malloctype', it would seem." >&4
 
-: see if socketpair exists
-set socketpair d_sockpair
+case "$freetype" in
+'')
+       if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
+               freetype='void'
+       else
+               freetype='int'
+       fi
+       ;;
+esac
+echo "Your system uses $freetype free(), it would seem." >&4
+$rm -f malloc.[co]
+: see if nice exists
+set nice d_nice
 eval $inlibc
 
 : Locate the flags for 'open()'
@@ -3372,13 +5054,21 @@ set d_open3
 eval $setvar
 $rm -f open3*
 
+: see if pause exists
+set pause d_pause
+eval $inlibc
+
+: see if pipe exists
+set pipe d_pipe
+eval $inlibc
+
 : see if this is a pwd system
 echo " "
 xxx=`./findhdr pwd.h`
 if $test "$xxx"; then
        i_pwd="$define"
        echo "<pwd.h> found." >&4
-       $cppstdin $cppflags < $xxx >$$.h
+       $cppstdin $cppflags $cppminus < $xxx >$$.h
        if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
                d_pwquota="$define"
        else
@@ -3421,9 +5111,19 @@ else
        echo "<pwd.h> NOT found." >&4
 fi
 
-: see if readdir exists
+: see if readdir and friends exist
 set readdir d_readdir
 eval $inlibc
+set seekdir d_seekdir
+eval $inlibc
+set telldir d_telldir
+eval $inlibc
+set rewinddir d_rewinddir
+eval $inlibc
+
+: see if readlink exists
+set readlink d_readlink
+eval $inlibc
 
 : see if rename exists
 set rename d_rename
@@ -3442,20 +5142,22 @@ case "$d_bcopy" in
        $cat >foo.c <<'EOCP'
 main()
 {
-char buf[128];
-register char *b;
-register int len;
-register int off;
-register int align;
+char buf[128], abc[128];
+char *b;
+int len;
+int off;
+int align;
+
+bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
 
 for (align = 7; align >= 0; align--) {
        for (len = 36; len; len--) {
                b = buf+align;
-               bcopy("abcdefghijklmnopqrstuvwxyz0123456789", b, len);
+               bcopy(abc, b, len);
                for (off = 1; off <= len; off++) {
                        bcopy(b, b+off, len);
                        bcopy(b+off, b, len);
-                       if (bcmp(b, "abcdefghijklmnopqrstuvwxyz0123456789", len))
+                       if (bcmp(b, abc, len))
                                exit(1);
                }
        }
@@ -3463,7 +5165,7 @@ for (align = 7; align >= 0; align--) {
 exit(0);
 }
 EOCP
-       if $cc foo.c -o safebcpy $ccflags $libs >/dev/null 2>&1 ; then
+       if $cc foo.c -o safebcpy $ccflags $ldflags $libs >/dev/null 2>&1 ; then
                if ./safebcpy 2>/dev/null; then
                        echo "Yes, it can."
                        val="$define"
@@ -3488,20 +5190,22 @@ case "$d_memcpy" in
        $cat >foo.c <<'EOCP'
 main()
 {
-char buf[128];
-register char *b;
-register int len;
-register int off;
-register int align;
+char buf[128], abc[128];
+char *b;
+int len;
+int off;
+int align;
+
+memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
 
 for (align = 7; align >= 0; align--) {
        for (len = 36; len; len--) {
                b = buf+align;
-               memcpy("abcdefghijklmnopqrstuvwxyz0123456789", b, len);
+               memcpy(abc, b, len);
                for (off = 1; off <= len; off++) {
                        memcpy(b, b+off, len);
                        memcpy(b+off, b, len);
-                       if (memcmp(b, "abcdefghijklmnopqrstuvwxyz0123456789", len))
+                       if (memcmp(b, abc, len))
                                exit(1);
                }
        }
@@ -3509,7 +5213,7 @@ for (align = 7; align >= 0; align--) {
 exit(0);
 }
 EOCP
-       if $cc foo.c -o safemcpy $ccflags $libs >/dev/null 2>&1 ; then
+       if $cc foo.c -o safemcpy $ccflags $ldflags $libs >/dev/null 2>&1 ; then
                if ./safemcpy 2>/dev/null; then
                        echo "Yes, it can."
                        val="$define"
@@ -3566,17 +5270,18 @@ eval $inlibc
 set seteuid d_seteuid
 eval $inlibc
 
+: see if setlinebuf exists
+set setlinebuf d_setlinebuf
+eval $inlibc
+
 : see if setlocale exists
 set setlocale d_setlocale
 eval $inlibc
+
 : see if setpgid exists
 set setpgid d_setpgid
 eval $inlibc
 
-: see if setpgrp exists
-set setpgrp d_setpgrp
-eval $inlibc
-
 : see if setpgrp2 exists
 set setpgrp2 d_setpgrp2
 eval $inlibc
@@ -3620,6 +5325,34 @@ eval $inlibc
 : see if shmat exists
 set shmat d_shmat
 eval $inlibc
+: see what shmat returns
+case "$d_shmat" in
+"$define")
+       $cat >shmat.c <<'END'
+#include <sys/shm.h>
+void *shmat();
+END
+       if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
+               shmattype='void *'
+       else
+               shmattype='char *'
+       fi
+       echo "and it returns ($shmattype)." >&4
+       : see if a prototype for shmat is available
+       $cppstdin $cppflags $cppminus < $usrinc/sys/shm.h > shmat.c 2>/dev/null
+       if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
+               val="$define"
+       else
+               val="$undef"
+       fi
+       $rm -f shmat.[co]
+       ;;
+*)
+       val="$undef"
+       ;;
+esac
+set d_shmatprototype
+eval $setvar
 
 : see if shmdt exists
 set shmdt d_shmdt
@@ -3642,6 +5375,59 @@ fi
 set d_shm
 eval $setvar
 
+socketlib=''
+sockethdr=''
+: see whether socket exists
+echo " "
+$echo $n "Hmm... $c" >&4
+if set socket val -f d_socket; eval $csym; $val; then
+       echo "Looks like you have Berkeley networking support." >&4
+       d_socket="$define"
+       if set setsockopt val -f; eval $csym; $val; then
+               d_oldsock="$undef"
+       else
+               echo "...but it uses the old 4.1c interface, rather than 4.2" >&4
+               d_oldsock="$define"
+       fi
+else
+       if $contains socklib libc.list >/dev/null 2>&1; then
+               echo "Looks like you have Berkeley networking support." >&4
+               d_socket="$define"
+               : we will have to assume that it supports the 4.2 BSD interface
+               d_oldsock="$undef"
+       else
+               echo "You don't have Berkeley networking in libc.a..." >&4
+               if test -f /usr/lib/libnet.a; then
+                       ( (nm $nm_opt /usr/lib/libnet.a | eval $nm_extract) ||  \
+                       ar t /usr/lib/libnet.a) 2>/dev/null >> libc.list
+                       if $contains socket libc.list >/dev/null 2>&1; then
+                       echo "...but the Wollongong group seems to have hacked it in." >&4
+                               socketlib="-lnet"
+                               sockethdr="-I/usr/netinclude"
+                               d_socket="$define"
+                               if $contains setsockopt libc.list >/dev/null 2>&1; then
+                                       d_oldsock="$undef"
+                               else
+                                       echo "...using the old 4.1c interface, rather than 4.2" >&4
+                                       d_oldsock="$define"
+                               fi
+                       else
+                               echo "or even in libnet.a, which is peculiar." >&4
+                               d_socket="$undef"
+                               d_oldsock="$undef"
+                       fi
+               else
+                       echo "or anywhere else I see." >&4
+                       d_socket="$undef"
+                       d_oldsock="$undef"
+               fi
+       fi
+fi
+
+: see if socketpair exists
+set socketpair d_sockpair
+eval $inlibc
+
 : see if stat knows about block sizes
 echo " "
 xxx=`./findhdr sys/stat.h`
@@ -3660,78 +5446,9 @@ fi
 set d_statblks
 eval $setvar
 
-: see if stdio is really std
-echo " "
-xxx=`./findhdr stdio.h`
-if $contains 'char.*_ptr;' "$xxx" >/dev/null 2>&1 ; then
-       if $contains '_cnt;' "$xxx" >/dev/null 2>&1 ; then
-               echo "Your stdio is pretty std." >&4
-               val="$define"
-       else
-               echo "Your stdio isn't very std." >&4
-               val="$undef"
-       fi
-else
-       echo "Your stdio isn't very std." >&4
-       val="$undef"
-fi
-set d_stdstdio
-eval $setvar
-
-: see which of string.h or strings.h is needed
-echo " "
-strings=`./findhdr string.h`
-if $test "$strings" && $test -r "$strings"; then
-       echo "Using <string.h> instead of <strings.h>." >&4
-       val="$define"
-else
-       val="$undef"
-       strings=`./findhdr strings.h`
-       if $test "$strings" && $test -r "$strings"; then
-               echo "Using <strings.h> instead of <string.h>." >&4
-       else
-               echo "No string header found -- You'll surely have problems." >&4
-       fi
-fi
-set i_string
-eval $setvar
-case "$i_string" in
-"$undef") strings=`./findhdr strings.h`;;
-*)       strings=`./findhdr string.h`;;
-esac
-
-: index or strchr
-echo " "
-if set index val -f; eval $csym; $val; then
-       if set strchr val -f d_strchr; eval $csym; $val; then
-               if $contains strchr "$strings" >/dev/null 2>&1 ; then
-                       val="$define"
-                       vali="$undef"
-                       echo "strchr() found." >&4
-               else
-                       val="$undef"
-                       vali="$define"
-                       echo "index() found." >&4
-               fi
-       else
-               val="$undef"
-               vali="$define"
-               echo "index() found." >&4
-       fi
-else
-       if set strchr val -f d_strchr; eval $csym; $val; then
-               val="$define"
-               vali="$undef"
-               echo "strchr() found." >&4
-       else
-               echo "No index() or strchr() found!" >&4
-               val="$undef"
-               vali="$undef"
-       fi
-fi
-set d_strchr; eval $setvar
-val="$vali"
-set d_index; eval $setvar
+: see if strcoll exists
+set strcoll d_strcoll
+eval $inlibc
 
 : check for structure copying
 echo " "
@@ -3762,7 +5479,7 @@ echo " "
 if set strerror val -f d_strerror; eval $csym; $val; then
        echo 'strerror() found.' >&4
        d_strerror="$define"
-       d_strerrm="$undef"
+       d_strerrm='strerror(e)'
        if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
                echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
                d_syserrlst="$define"
@@ -3774,7 +5491,7 @@ elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
        $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
        echo 'strerror() found in string header.' >&4
        d_strerror="$define"
-       d_strerrm="$undef"
+       d_strerrm='strerror(e)'
        if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
                echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
                d_syserrlst="$define"
@@ -3786,14 +5503,18 @@ elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
        d_strerror="$undef"
        d_syserrlst="$define"
-       d_strerrm="$define"
+       d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
 else
        echo 'strerror() and sys_errlist[] NOT found.' >&4
        d_strerror="$undef"
        d_syserrlst="$undef"
-       d_strerrm="$undef"
+       d_strerrm='"unknown"'
 fi
 
+: see if strxfrm exists
+set strxfrm d_strxfrm
+eval $inlibc
+
 : see if symlink exists
 set symlink d_symlink
 eval $inlibc
@@ -3802,34 +5523,66 @@ eval $inlibc
 set syscall d_syscall
 eval $inlibc
 
+: see if sysconf exists
+set sysconf d_sysconf
+eval $inlibc
+
 : see if system exists
 set system d_system
 eval $inlibc
 
+: see if tcgetpgrp exists
+set tcgetpgrp d_tcgetpgrp
+eval $inlibc
+
+: see if tcsetpgrp exists
+set tcsetpgrp d_tcsetpgrp
+eval $inlibc
+
+: define an is-a-typedef? function
+typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
+case "$inclist" in
+"") inclist="sys/types.h";;
+esac;
+eval "varval=\$$var";
+case "$varval" in
+"")
+       $rm -f temp.c;
+       for inc in $inclist; do
+               echo "#include <$inc>" >>temp.c;
+       done;
+       $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
+       if $contains $type temp.E >/dev/null 2>&1; then
+               eval "$var=$type";
+       else
+               eval "$var=$def";
+       fi;
+       $rm -f temp.?;;
+*) eval "$var=$varval";;
+esac'
+
+: see if this is a sys/times.h system
+set sys/times.h i_systimes
+eval $inhdr
+
 : see if times exists
 echo " "
 if set times val -f d_times; eval $csym; $val; then
        echo 'times() found.' >&4
        d_times="$define"
-       case "$clocktype" in
-       '')
-               if $contains 'clock_t;' `./findhdr sys/types.h` >/dev/null 2>&1 ; then
-                       dflt='clock_t';
-               elif $contains 'clock_t;' `./findhdr sys/times.h` >/dev/null 2>&1; then
-                       dflt='clock_t';
-               else
-                       dflt='long';
-               fi
-               ;;
-       *)  dflt="$clocktype"
-               ;;
+       inc=''
+       case "$i_systimes" in
+       "$define") inc='sys/times.h';;
        esac
+       set clock_t clocktype long stdio.h sys/types.h $inc
+       eval $typedef
+       dflt="$clocktype"
        echo " "
        rp="What type is returned by times() on this sytem?"
        . ./myread
        clocktype="$ans"
 else
-       echo 'times() not found, hope that will do.' >&4
+       echo 'times() NOT found, hope that will do.' >&4
        d_times="$undef"
        clocktype='int'
 fi
@@ -3838,6 +5591,22 @@ fi
 set truncate d_truncate
 eval $inlibc
 
+: see if tzname[] exists
+echo " "
+if set tzname val -a d_tzname; eval $csym; $val; then
+       val="$define"
+       echo 'tzname[] found.' >&4
+else
+       val="$undef"
+       echo 'tzname[] NOT found.' >&4
+fi
+set d_tzname
+eval $setvar
+
+: see if umask exists
+set umask d_umask
+eval $inlibc
+
 : see if we have to deal with yellow pages, now NIS.
 if $test -d /usr/etc/yp || $test -d /etc/yp; then
        if $test -f /usr/etc/nibindd; then
@@ -3854,7 +5623,7 @@ if $test -d /usr/etc/yp || $test -d /etc/yp; then
                . ./myread
                case "$ans" in
                y*) hostcat='nidump hosts .';;
-               *) hostcat='cat /etc/hosts';;
+               *) ;;
                esac
        fi
        case "$hostcat" in
@@ -3895,7 +5664,7 @@ case "$myhostname" in
 *) cont='';;
 esac
 if $test "$cont"; then
-       if xenix; then
+       if ./xenix; then
                echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
                if tans=`cat /etc/systemid 2>&1` ; then
                        myhostname=$tans
@@ -3938,14 +5707,6 @@ fi
 set $myhostname
 myhostname=$1
 
-: translate upper to lower if necessary
-case "$myhostname" in
-*[A-Z]*)
-       myhostname=`echo $myhostname | tr '[A-Z]' '[a-z]'`
-       echo "(Normalizing case in your host name)"
-       ;;
-esac
-
 : verify guess
 if $test "$myhostname" ; then
        dflt=y
@@ -3965,11 +5726,19 @@ while $test "X$myhostname" = X ; do
        myhostname="$ans"
 done
 
+: translate upper to lower if necessary
+case "$myhostname" in
+*[A-Z]*)
+       echo "(Normalizing case in your host name)"
+       myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
+       ;;
+esac
+
 : a little sanity check here
 case "$phostname" in
 '') ;;
 *)
-       case `$phostname` in
+       case `$phostname | ./tr '[A-Z]' '[a-z]'` in
        $myhostname$mydomain|$myhostname) ;;
        *)
                case "$phostname" in
@@ -3990,7 +5759,7 @@ echo " "
 if false; then
        : dummy stub to allow use of elif
 elif set uname val -f d_uname; eval $csym; $val; then
-       if xenix; then
+       if ./xenix; then
                $cat <<'EOM'
 uname() was found, but you're running xenix, and older versions of xenix
 have a broken uname(). If you don't really know whether your xenix is old
@@ -4028,43 +5797,98 @@ if test X$d_hvfork != X; then
        d_hvfork=''
 fi
 : see if there is a vfork
-set vfork d_vfork
-eval $inlibc
-
-: see if signal is declared as pointer to function returning int or void
-echo " "
-xxx=`./findhdr signal.h`
-$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
-if $contains 'int.*\*[         ]*signal' $$.tmp >/dev/null 2>&1 ; then
-       echo "You have int (*signal())() instead of void." >&4
-       val="$undef"
-       signal_t="int"
-elif $contains 'void.*\*[      ]*signal' $$.tmp >/dev/null 2>&1 ; then
-       echo "You have void (*signal())() instead of int." >&4
-       val="$define"
-       signal_t="void"
-elif $contains 'extern[        ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
-       echo "You have int (*signal())() instead of void." >&4
-       val="$undef"
-       signal_t="int"
-else
-       case "$d_voidsig" in
-       '')
-       echo "I can't determine whether signal handler returns void or int..." >&4
-               dflt=void
-               rp="What type does your signal handler returns?"
-               . ./myread
-               case "$ans" in
-               void) val="$define"; signal_t="void";;
-               *) val="$undef"; signal_t="int";;
-               esac;;
-       *) echo "As you already told me, signal handler returns $signal_t." >&4;;
+val=''
+set vfork val
+eval $inlibc
+
+: Ok, but do we want to use it. vfork is reportedly unreliable in 
+: perl on Solaris 2.x, and probably elsewhere.
+case "$val" in
+$define)
+       echo " "
+       case "$usevfork" in
+       false) dflt='n';;
+       *) dflt='y';;
        esac
-fi
-set d_voidsig
+       rp="Some systems have problems with vfork().  Do you want to use it?"
+       . ./myread
+       case "$ans" in
+       y|Y) ;;
+       *)
+               echo "Ok, we won't use vfork()."
+               val="$undef"
+               ;;
+       esac
+       ;;
+esac
+set d_vfork
 eval $setvar
-$rm -f $$.tmp
+case "$d_vfork" in
+$define) usevfork='true';;
+*) usevfork='false';;
+esac
 
+: see if this is an sysdir system
+set sys/dir.h i_sysdir
+eval $inhdr
+
+: see if this is an sysndir system
+set sys/ndir.h i_sysndir
+eval $inhdr
+
+: see if closedir exists
+set closedir d_closedir
+eval $inlibc
+
+case "$d_closedir" in
+"$define")
+       echo " "
+       echo "Checking whether closedir() returns a status..." >&4
+       cat > closedir.c <<EOM
+#$i_dirent I_DIRENT            /**/
+#$i_sysdir I_SYS_DIR           /**/
+#$i_sysndir I_SYS_NDIR         /**/
+
+#if defined(I_DIRENT)
+#include <dirent.h>
+#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
+#include <sys/dir.h>
+#endif
+#else
+#ifdef I_SYS_NDIR
+#include <sys/ndir.h>
+#else
+#ifdef I_SYS_DIR
+#ifdef hp9000s500
+#include <ndir.h>      /* may be wrong in the future */
+#else
+#include <sys/dir.h>
+#endif
+#endif
+#endif
+#endif 
+int main() { return closedir(opendir(".")); }
+EOM
+       if $cc $ccflags $ldflags -o closedir closedir.c $libs > /dev/null 2>&1; then
+               if ./closedir > /dev/null 2>&1 ; then
+                       echo "Yes, it does."
+                       val="$undef"
+               else
+                       echo "No, it doesn't."
+                       val="$define"
+               fi
+       else
+               echo "(I can't seem to compile the test program--assuming it doesn't)"
+               val="$define"
+       fi
+       ;;
+*)
+       val="$undef";
+       ;;
+esac
+set d_void_closedir
+eval $setvar
+$rm -f closedir*
 : check for volatile keyword
 echo " "
 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
@@ -4104,6 +5928,14 @@ eval $inlibc
 set waitpid d_waitpid
 eval $inlibc
 
+: see if wcstombs exists
+set wcstombs d_wcstombs
+eval $inlibc
+
+: see if wctomb exists
+set wctomb d_wctomb
+eval $inlibc
+
 : preserve RCS keywords in files with variable substitution, grrr
 Date='$Date'
 Id='$Id'
@@ -4131,332 +5963,555 @@ EOCP
                dflt='8'
                echo"(I can't seem to compile the test program...)"
        fi
-       ;;
-*) dflt="$alignbytes"
-       ;;
+       ;;
+*) dflt="$alignbytes"
+       ;;
+esac
+rp="Doubles must be aligned on a how-many-byte boundary?"
+. ./myread
+alignbytes="$ans"
+$rm -f try.c try
+
+: determine where public executables go
+echo " "
+set dflt bin bin
+eval $prefixit
+fn=d~
+rp='Pathname where the public executables will reside?'
+. ./getfile
+if $test "X$ansexp" != "X$binexp"; then
+       installbin=''
+fi
+bin="$ans"
+binexp="$ansexp"
+if $afs; then
+       $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+executables reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+       case "$installbin" in
+       '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
+       *) dflt="$installbin";;
+       esac
+       fn=de~
+       rp='Where will public executables be installed?'
+       . ./getfile
+       installbin="$ans"
+else
+       installbin="$binexp"
+fi
+
+: check for ordering of bytes in a long
+case "$byteorder" in
+'')
+       $cat <<'EOM'
+  
+In the following, larger digits indicate more significance.  A big-endian
+machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
+little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
+machines may have weird orders like 3412.  A Cray will report 87654321. If
+the test program works the default is probably right.
+I'm now running the test program...
+EOM
+       $cat >try.c <<'EOCP'
+#include <stdio.h>
+main()
+{
+       int i;
+       union {
+               unsigned long l;
+               char c[sizeof(long)];
+       } u;
+
+       if (sizeof(long) > 4)
+               u.l = (0x08070605L << 32) | 0x04030201L;
+       else
+               u.l = 0x04030201L;
+       for (i = 0; i < sizeof(long); i++)
+               printf("%c", u.c[i]+'0');
+       printf("\n");
+}
+EOCP
+       if $cc $ccflags try.c -o try >/dev/null 2>&1 ; then
+               dflt=`./try`
+               case "$dflt" in
+               ????|????????) echo "(The test program ran ok.)";;
+               *) echo "(The test program didn't run right for some reason.)";;
+               esac
+       else
+               dflt='4321'
+               cat <<'EOM'
+(I can't seem to compile the test program.  Guessing big-endian...)
+EOM
+       fi
+       ;;
+*)
+       echo " "
+       dflt="$byteorder"
+       ;;
+esac
+rp="What is the order of bytes in a long?"
+. ./myread
+byteorder="$ans"
+$rm -f try.c try
+
+: how do we catenate cpp tokens here?
+echo " "
+echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
+$cat >cpp_stuff.c <<'EOCP'
+#define RCAT(a,b)a/**/b
+#define ACAT(a,b)a ## b
+RCAT(Rei,ser)
+ACAT(Cir,cus)
+EOCP
+$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
+if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
+       echo "Oh!  Smells like ANSI's been here."
+       echo "We can catify or stringify, separately or together!"
+       cpp_stuff=42
+elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
+       echo "Ah, yes!  The good old days!"
+       echo "However, in the good old days we don't know how to stringify and"
+       echo "catify at the same time."
+       cpp_stuff=1
+else
+       $cat >&4 <<EOM
+Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
+to have to edit the values of CAT[2-5] in config.h...
+EOM
+       cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
+fi
+$rm -f cpp_stuff.*
+
+: see if this is a db.h system
+set db.h i_db
+eval $inhdr
+
+case "$i_db" in
+define)
+       : Check the return type needed for hash 
+       echo "Checking return type needed for hash for Berkeley DB ..." >&4
+       cat >try.c <<'EOCP'
+#include <sys/types.h>
+#include <db.h>
+u_int32_t 
+hash_cb (ptr, size)
+const void * ptr ;
+size_t size ;
+{
+}
+HASHINFO info ;
+main()
+{
+    info.hash = hash_cb ;
+}
+EOCP
+       if $cc $ccflags -c try.c >try.out 2>&1 ; then
+               if $contains warning try.out >>/dev/null 2>&1 ; then
+                       db_hashtype='int'
+               else
+                       db_hashtype='u_int32_t'
+               fi
+       else
+               echo "I can't seem to compile the test program." >&4
+               db_hashtype=int
+       fi
+       $rm -f try.[co]
+       echo "Your version of Berkeley DB uses $db_hashtype for hash."
+       ;;
+*)     db_hashtype=int
+       ;;
+esac
+
+case "$i_db" in
+define)
+       : Check the return type needed for prefix 
+       echo "Checking return type needed for prefix for Berkeley DB ..." >&4
+       cat >try.c <<'EOCP'
+#include <sys/types.h>
+#include <db.h>
+size_t 
+prefix_cb (key1, key2)
+const DBT * key1 ;
+const DBT * key2 ;
+{
+}
+BTREEINFO info ;
+main()
+{
+    info.prefix = prefix_cb ;
+}
+EOCP
+       if $cc $ccflags -c try.c  >try.out 2>&1 ; then
+               if $contains warning try.out >>/dev/null 2>&1 ; then
+                       db_prefixtype='int'
+               else
+                       db_prefixtype='size_t'
+               fi
+       else
+               echo "I can't seem to compile the test program." >&4
+               db_prefixtype='int'
+       fi
+       $rm -f try.[co]
+       echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
+       ;;
+*)     db_prefixtype='int'
+       ;;
+esac
+
+: check for void type
+echo " "
+echo "Checking to see how well your C compiler groks the void type..." >&4
+echo " "
+$cat >&4 <<EOM
+  Support flag bits are:
+    1: basic void declarations.
+    2: arrays of pointers to functions returning void.
+    4: operations between pointers to and addresses of void functions.
+    8: generic void pointers.
+EOM
+echo " "
+case "$voidflags" in
+'')
+       $cat >try.c <<'EOCP'
+#if TRY & 1
+void main() {
+#else
+main() {
+#endif
+       extern void moo();      /* function returning void */
+       void (*goo)();          /* ptr to func returning void */
+#if TRY & 8
+       void *hue;              /* generic ptr */
+#endif
+#if TRY & 2
+       void (*foo[10])();
+#endif
+
+#if TRY & 4
+       if(goo == moo) {
+               exit(0);
+       }
+#endif
+       exit(0);
+}
+EOCP
+       if $cc -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
+               voidflags=$defvoidused
+       echo "It appears to support void to the level $package wants ($defvoidused)."
+               if $contains warning .out >/dev/null 2>&1; then
+                       echo "However, you might get some warnings that look like this:"
+                       $cat .out
+               fi
+       else
+echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
+               if $cc -c -DTRY=1 try.c >/dev/null 2>&1 ; then
+                       echo "It supports 1..."
+                       if $cc -c -DTRY=3 try.c >/dev/null 2>&1 ; then
+                               echo "It also supports 2..."
+                               if $cc -c -DTRY=7 try.c >/dev/null 2>&1 ; then
+                                       voidflags=7
+                                       echo "And it supports 4 but not 8 definitely."
+                               else
+                                       echo "It doesn't support 4..."
+                                       if $cc -c -DTRY=11 try.c >/dev/null 2>&1 ; then
+                                               voidflags=11
+                                               echo "But it supports 8."
+                                       else
+                                               voidflags=3
+                                               echo "Neither does it support 8."
+                                       fi
+                               fi
+                       else
+                               echo "It does not support 2..."
+                               if $cc -c -DTRY=13 try.c >/dev/null 2>&1 ; then
+                                       voidflags=13
+                                       echo "But it supports 4 and 8."
+                               else
+                                       if $cc -c -DTRY=5 try.c >/dev/null 2>&1 ; then
+                                               voidflags=5
+                                               echo "And it supports 4 but has not heard about 8."
+                                       else
+                                               echo "However it supports 8 but not 4."
+                                       fi
+                               fi
+                       fi
+               else
+                       echo "There is no support at all for void."
+                       voidflags=0
+               fi
+       fi
 esac
-rp="Doubles must be aligned on a how-many-byte boundary?"
+dflt="$voidflags";
+rp="Your void support flags add up to what?"
 . ./myread
-alignbytes="$ans"
-$rm -f try.c try
+voidflags="$ans"
+$rm -f try.* .out
 
-: is AFS running?
-echo " "
-if test -d /afs; then
-       echo "AFS may be running... I'll be extra cautious then..." >&4
-       afs=true
-else
-       echo "AFS does not seem to be running..." >&4
-       afs=false
-fi
+: see if dbm.h is available
+set dbm.h t_dbm
+eval $inhdr
+case "$t_dbm" in
+$define)
+       : see if dbmclose exists
+       set dbmclose d_dbmclose
+       eval $inlibc
+       case "$d_dbmclose" in
+       $undef)
+               t_dbm="$undef"
+               echo "We won't be including <dbm.h>"
+               ;;
+       esac
+       ;;
+esac
+val="$t_dbm"
+set i_dbm
+eval $setvar
 
-: determine where public executables go
-echo " "
-case "$bin" in
-'')
-       dflt=`./loc . /bin /usr/local/bin /usr/lbin /usr/local /usr/bin`
+: see if ndbm.h is available
+set ndbm.h t_ndbm
+eval $inhdr
+case "$t_ndbm" in
+$define)
+       : see if dbm_open exists
+       set dbm_open d_dbm_open
+       eval $inlibc
+       case "$d_dbm_open" in
+       $undef)
+               t_ndbm="$undef"
+               echo "We won't be including <ndbm.h>"
+               ;;
+       esac
        ;;
-*)
-       dflt="$bin"
+esac
+val="$t_ndbm"
+set i_ndbm
+eval $setvar
+
+: see if gdbm.h is available
+set gdbm.h t_gdbm
+eval $inhdr
+case "$t_gdbm" in
+$define)
+       : see if gdbm_open exists
+       set gdbm_open d_gdbm_open
+       eval $inlibc
+       case "$d_gdbm_open" in
+       $undef)
+               t_gdbm="$undef"
+               echo "We won't be including <gdbm.h>"
+               ;;
+       esac
        ;;
 esac
-fn=d~
-rp='Pathname where the public executables will reside?'
-. ./getfile
-bin="$ans"
-binexp="$ansexp"
-if $afs; then
-       $cat <<EOM
+val="$t_gdbm"
+set i_gdbm
+eval $setvar
 
-Since you are running AFS, I need to distinguish the directory in which
-executables reside from the directory in which they are installed (and from
-which they are presumably copied to the former directory by occult means).
+echo " "
+echo "Looking for extensions..." >&4
+cd ../ext
+known_extensions=''
+for xxx in * ; do
+       if $test -f $xxx/$xxx.xs; then
+               known_extensions="$known_extensions $xxx"
+       fi
+done
+set X $known_extensions
+shift
+known_extensions="$*"
+cd ../UU
+
+: Now see which are supported on this system.
+avail_ext=''
+for xxx in $known_extensions ; do
+    case "$xxx" in
+    DB_File) case "$i_db" in 
+           $define) avail_ext="$avail_ext $xxx" ;;
+           esac
+           ;;
+    GDBM_File) case "$i_gdbm" in 
+           $define) avail_ext="$avail_ext $xxx" ;;
+           esac
+           ;;
+    NDBM_File) case "$i_ndbm" in 
+           $define) avail_ext="$avail_ext $xxx" ;;
+           esac
+           ;;
+    ODBM_File) case "$i_dbm" in 
+           $define) avail_ext="$avail_ext $xxx" ;;
+           esac
+           ;;
+    POSIX) case "$useposix" in 
+           true|define|y) avail_ext="$avail_ext $xxx" ;;
+           esac
+           ;;
+    Socket) case "$d_socket" in 
+           $define) avail_ext="$avail_ext $xxx" ;;
+           esac
+           ;;
+    *)      avail_ext="$avail_ext $xxx"
+           ;;
+    esac
+done
+
+set X $avail_ext
+shift
+avail_ext="$*"
+
+case $usedl in
+$define)
+       $cat <<EOM
+A number of extensions are supplied with $package.  You may choose to
+compile these extensions for dynamic loading (the default), compile
+them into the $package executable (static loading), or not include
+them at all.  Answer "none" to include no extensions.
 
 EOM
-       case "$installbin" in
-       '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
-       *) dflt="$installbin";;
+       case "$dynamic_ext" in
+       ''|' ') dflt="$avail_ext" ;;
+       *)      dflt="$dynamic_ext" ;;
+       esac
+       case "$dflt" in
+       '')     dflt=none;;
+       esac
+       rp="What extensions do you wish to load dynamically?"
+       . ./myread
+       case "$ans" in
+       none) dynamic_ext='' ;;
+       *) dynamic_ext="$ans" ;;
        esac
-       fn=de~
-       rp='Where will public executables be installed?'
-       . ./getfile
-       installbin="$ans"
-else
-       installbin="$binexp"
-fi
 
-: check for ordering of bytes in a long
-case "$byteorder" in
-'')
-       $cat <<'EOM'
-  
-In the following, larger digits indicate more significance.  A big-endian
-machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
-little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
-machines may have weird orders like 3412.  A Cray will report 87654321. If
-the test program works the default is probably right.
-I'm now running the test program...
-EOM
-       $cat >try.c <<'EOCP'
-#include <stdio.h>
-main()
-{
-       int i;
-       union {
-               unsigned long l;
-               char c[sizeof(long)];
-       } u;
+       case "$static_ext" in
+       ''|' ')
+               : Exclude those already listed in dynamic linking
+               dflt=''
+               for xxx in $avail_ext; do
+                       case " $dynamic_ext " in
+                       *" $xxx "*) ;;
+                       *) dflt="$dflt $xxx" ;;
+                       esac
+               done
+               set X $dflt
+               shift
+               dflt="$*"
+               ;;
+       *)  dflt="$static_ext" 
+               ;;
+       esac
 
-       if (sizeof(long) > 4)
-               u.l = (0x08070605L << 32) | 0x04030201L;
-       else
-               u.l = 0x04030201L;
-       for (i = 0; i < sizeof(long); i++)
-               printf("%c", u.c[i]+'0');
-       printf("\n");
-}
-EOCP
-       if $cc $ccflags try.c -o try >/dev/null 2>&1 ; then
-               dflt=`./try`
-               case "$dflt" in
-               ????|????????) echo "(The test program ran ok.)";;
-               *) echo "(The test program didn't run right for some reason.)";;
-               esac
-       else
-               dflt='4321'
-               cat <<'EOM'
-(I can't seem to compile the test program.  Guessing big-endian...)
-EOM
-       fi
+       case "$dflt" in
+       '')     dflt=none;;
+       esac
+       rp="What extensions do you wish to load statically?"
+       . ./myread
+       case "$ans" in
+       none) static_ext='' ;;
+       *) static_ext="$ans" ;;
+       esac
        ;;
 *)
-       echo " "
-       dflt="$byteorder"
-       ;;
-esac
-rp="What is the order of bytes in a long?"
-. ./myread
-byteorder="$ans"
-$rm -f try.c try
-
-: define an alternate in-header-list? function
-inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
-cont=true; xxf="echo \"<\$1> found.\" >&4";
-case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
-*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
-esac;
-case $# in 4) instead=instead;; *) instead="at last";; esac;
-while $test "$cont"; do
-       xxx=`./findhdr $1`
-       var=$2; eval "was=\$$2";
-       if $test "$xxx" && $test -r "$xxx";
-       then eval $xxf;
-               eval "case \"\$$var\" in $undef) . whoa; esac"; eval "$var=\$td";
-               cont="";
-       else eval $xxnf;
-               eval "case \"\$$var\" in $define) . whoa; esac"; eval "$var=\$tu"; fi;
-       set $yyy; shift; shift; yyy=$@;
-       case $# in 0) cont="";;
-       2) xxf="echo \"but I found <\$1> $instead.\" >&4";
-               xxnf="echo \"and I did not find <\$1> either.\" >&4";;
-       *) xxf="echo \"but I found <\$1\> instead.\" >&4";
-               xxnf="echo \"there is no <\$1>, ...\" >&4";;
-       esac;
-done;
-while $test "$yyy";
-do set $yyy; var=$2; eval "was=\$$2";
-       eval "case \"\$$var\" in $define) . whoa; esac"; eval "$var=\$tu";
-       set $yyy; shift; shift; yyy=$@;
-done'
+       $cat <<EOM
+A number of extensions are supplied with $package.  Answer "none" 
+to include no extensions. 
 
-: see if dlfcn is available
-set dlfcn.h i_dlfcn
-eval $inhdr
+EOM
+       case "$static_ext" in
+       ''|' ') dflt="$avail_ext" ;;
+       *)      dflt="$static_ext" ;;
+       esac
 
-: determine which dynamic loading, if any, to compile in
-echo " "
-case "$usedl" in
-'')
-       case "$i_dlfcn" in
-       'define') dflt='y' ;;
-       *)        dflt='n' ;;
+       case "$dflt" in
+       '')     dflt=none;;
        esac
-       ;;
-'define') dflt='y' ;;
-'y') dflt='y'
-     usedl='define' ;;
-*)  dflt='n' ;;
-esac
-rp="Do you wish to attempt to use dynamic loading?"
-. ./myread
-usedl="$ans"
-case "$ans" in
-y*) usedl='define'; dlsrc='dl.c'; dlobj='dl.o';;
-*) usedl='undef'; dlsrc=''; dlobj='';;
-esac
-echo " "
-case "$extensions" in
-' '|'') echo "Looking for extensions..."
-       case "$find" in
-               *find*) 
-               cd ..
-               dflt="`$find ext -type f -name \*.xs -print`"
-               cd UU
-               ;;
-       *)      dflt='ext/dbm/NDBM_File.xs ext/dbm/ODBM_File.xs ext/dbm/GDBM_File.xs ext/dbm/SDBM_File.xs ext/posix/POSIX.xs'
-               ;;
+       rp="What extensions do you wish to include?"
+       . ./myread
+       case "$ans" in
+       none) static_ext='' ;;
+       *) static_ext="$ans" ;;
        esac
        ;;
-none)  dflt='' ;;
-*)     dflt="$extensions" ;;
 esac
-rp="What extensions do you wish to include?"
+
+set X $dynamic_ext $static_ext
+shift
+extensions="$*"
+
+: see what type file positions are declared as in the library
+set fpos_t fpostype long stdio.h sys/types.h
+eval $typedef
+echo " "
+dflt="$fpostype"
+rp="What is the type for file position used by fsetpos()?"
 . ./myread
-extensions="$ans"
+fpostype="$ans"
+
+: Store the full pathname to the sed program for use in the C program
+full_sed=$sed
 
 : see what type gids are declared as in the kernel
+set gid_t gidtype xxx stdio.h sys/types.h
+eval $typedef
 case "$gidtype" in
-'')
-       if $contains 'gid_t;' `./findhdr sys/types.h` >/dev/null 2>&1 ; then
-               dflt='gid_t';
-       else
-               xxx=`./findhdr sys/user.h`
-               set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
-               case $1 in
-               unsigned) dflt="$1 $2" ;;
-               *) dflt="$1" ;;
-               esac
-       fi
+xxx)
+       xxx=`./findhdr sys/user.h`
+       set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
+       case $1 in
+       unsigned) dflt="$1 $2" ;;
+       *) dflt="$1" ;;
+       esac
        ;;
-*)  dflt="$gidtype";;
+*) dflt="$gidtype";;
 esac
 echo " "
 rp="What is the type for group ids returned by getgid()?"
 . ./myread
 gidtype="$ans"
+
 : see if getgroups exists
 set getgroups d_getgrps
 eval $inlibc
 
+: Find type of 2nd arg to getgroups
+echo " "
 case "$d_getgrps" in
 'define')
-    case "$groupstype" in
+       case "$groupstype" in
        '') dflt="$gidtype" ;;
        *)  dflt="$groupstype" ;;
-    esac
-    echo " "
-    $cat <<EOM
-What is the type of the second argument to getgroups()?  Usually this
-is the same as group ids, "$gidtype", but not always.
-EOM
-    rp="What type is the second arguement to getgroups()?"
-    . ./myread
-    groupstype="$ans"
-    ;;
-*)  groupstype="$gidtype";;
-esac
-: determine where private executables go
-case "$privlib" in
-'')
-       dflt=/usr/lib/$package
-       $test -d /usr/local/lib && dflt=/usr/local/lib/$package
-       $test -d /local/lib && dflt=/local/lib/$package
-       ;;
-*)  dflt="$privlib"
-       ;;
-esac
-$cat <<EOM
-
-There are some auxiliary files for $package that need to be put into a
-private library directory that is accessible by everyone.
-
-EOM
-fn=d~+
-rp='Pathname where private library files will reside?'
-. ./getfile
-privlib="$ans"
-privlibexp="$ansexp"
-if $afs; then
-       $cat <<EOM
-
-Since you are running AFS, I need to distinguish the directory in which
-private files reside from the directory in which they are installed (and from
-which they are presumably copied to the former directory by occult means).
-
-EOM
-       case "$installprivlib" in
-       '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
-       *) dflt="$installprivlib";;
        esac
-       fn=de~
-       rp='Where will private files be installed?'
-       . ./getfile
-       installprivlib="$ans"
-else
-       installprivlib="$privlibexp"
-fi
-
-: determine where public libraries go
-case "$lib" in
-'') dflt=`./loc . "." /usr/local/lib /usr/lib /lib`;;
-*)  dflt="$lib";;
-esac
-echo " "
-fn=d~
-rp='Where do you want to put the public libraries?'
-. ./getfile
-lib="$ans"
-libexp="$ansexp"
+       $cat <<EOM
+What is the type of the second argument to getgroups()?  Usually this
+is the same as group ids, $gidtype, but not always.
 
-: determine which malloc to compile in
-:  Old versions had dflt='y' only for bsd or v7.
-echo " "
-case "$usemymalloc" in
-'')
-       if bsd || v7; then
-               dflt='y'
-       else
-               dflt='y'
-       fi
-       ;;
-*)  dflt="$usemymalloc"
+EOM
+       rp='What type is the second argument to getgroups()?'
+       . ./myread
+       groupstype="$ans"
        ;;
-esac
-rp="Do you wish to attempt to use the malloc that comes with $package?"
-. ./myread
-usemymalloc="$ans"
-case "$ans" in
-y*) mallocsrc='malloc.c'; mallocobj='malloc.o';;
-*) mallocsrc=''; mallocobj='';;
+*)  groupstype="$gidtype";;
 esac
 
-: compute the type returned by malloc
+: see what type lseek is declared as in the kernel
+set off_t lseektype long stdio.h sys/types.h
+eval $typedef
 echo " "
-case "$malloctype" in
-'')
-       if $test `./findhdr malloc.h`; then
-               echo "#include <malloc.h>" > malloc.c
-       fi
-#include <malloc.h>
-       $cat >>malloc.c <<'END'
-void *malloc();
-END
-       if $cc $ccflags -c malloc.c >/dev/null 2>&1; then
-               malloctype='void *'
-       else
-               malloctype='char *'
-       fi
-       $rm -f malloc.[co]
-       ;;
-esac
-echo "Your system wants malloc to return '$malloctype', it would seem." >&4
+dflt="$lseektype"
+rp="What type is lseek's offset on this system declared as?"
+. ./myread
+lseektype="$ans"
 
 : determine where manual pages go
+set mansrc mansrc none
+eval $prefixit
 $cat <<EOM
 
-$package has manual pages available in source form.
+$spackage has manual pages available in source form.
 EOM
-case "$_nroff" in
+case "$nroff" in
 nroff)
        echo "However, you don't have nroff, so they're probably useless to you."
        case "$mansrc" in
@@ -4466,17 +6521,22 @@ esac
 echo "If you don't want the manual sources installed, answer 'none'."
 case "$mansrc" in
 '')
-       lookpath='/usr/local/man/man1 /usr/local/man/man1 /usr/man/manl'
+       lookpath="$prefixexp/man/man1 $prefixexp/man/u_man/man1"
+       lookpath="$lookpath $prefixexp/man/l_man/man1"
+       lookpath="$lookpath /usr/local/man/man1 /opt/man/man1 /usr/man/manl"
        lookpath="$lookpath /usr/man/local/man1 /usr/man/l_man/man1"
        lookpath="$lookpath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
        lookpath="$lookpath /usr/man/man.L"
-       mansrc=`./loc . $lookpath`
+       mansrc=`./loc . $prefixexp/man/man1 $lookpath`
        if $test -d "$mansrc"; then
                dflt="$mansrc"
        else
                dflt="$sysman"
        fi
+       set dflt
+       eval $prefixup
        ;;
+' ') dflt=none;;
 *)  dflt="$mansrc"
        ;;
 esac
@@ -4484,8 +6544,15 @@ echo " "
 fn=dn~
 rp='Where do the manual pages (source) go?'
 . ./getfile
+if test "X$mansrcexp" != "X$ansexp"; then
+       installmansrc=''
+fi
 mansrc="$ans"
 mansrcexp="$ansexp"
+case "$mansrc" in
+'') mansrc=' '
+       installmansrc='';;
+esac
 if $afs; then
        $cat <<EOM
 
@@ -4506,9 +6573,8 @@ else
        installmansrc="$mansrcexp"
 fi
 
-
 case "$mansrc" in
-'') manext='0';;
+' ') manext='0';;
 *l) manext=l;;
 *n) manext=n;;
 *o) manext=l;;
@@ -4519,6 +6585,28 @@ case "$mansrc" in
 *) manext=1;;
 esac
 
+: see what type is used for mode_t
+set mode_t modetype int stdio.h sys/types.h
+eval $typedef
+dflt="$modetype"
+echo " "
+rp="What type is used for file modes?"
+. ./myread
+modetype="$ans"
+
+: set the base revision
+baserev=5.0
+
+: get the patchlevel
+echo " "
+echo "Getting the current patchlevel..." >&4
+if $test -r ../patchlevel.h;then
+       patchlevel=`awk '/PATCHLEVEL/ {print $3}' < ../patchlevel.h`
+else
+       patchlevel=0
+fi
+echo "(You have $package $baserev PL$patchlevel.)"
+
 : Cruising for prototypes
 echo " "
 echo "Checking out function prototypes..." >&4
@@ -4526,7 +6614,7 @@ $cat >prototype.c <<'EOCP'
 main(int argc, char *argv[]) {
        exit(0);}
 EOCP
-if $cc -c prototype.c >prototype.out 2>&1 ; then
+if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
        echo "Your C compiler appears to support function prototypes."
        val="$define"
 else
@@ -4546,86 +6634,367 @@ case "$randbits" in
 #include <stdio.h>
 main()
 {
-       register int i;
-       register unsigned long tmp;
-       register unsigned long max = 0L;
-
-       for (i = 1000; i; i--) {
-               tmp = (unsigned long)rand();
-               if (tmp > max) max = tmp;
-       }
-       for (i = 0; max; i++)
-               max /= 2;
-       printf("%d\n",i);
+       register int i;
+       register unsigned long tmp;
+       register unsigned long max = 0L;
+
+       for (i = 1000; i; i--) {
+               tmp = (unsigned long)rand();
+               if (tmp > max) max = tmp;
+       }
+       for (i = 0; max; i++)
+               max /= 2;
+       printf("%d\n",i);
+}
+EOCP
+       if $cc try.c -o try >/dev/null 2>&1 ; then
+               dflt=`try`
+       else
+               dflt='?'
+               echo "(I can't seem to compile the test program...)"
+       fi
+       ;;
+*)
+       dflt="$randbits"
+       ;;
+esac
+rp='How many bits does your rand() function produce?'
+. ./myread
+randbits="$ans"
+$rm -f try.c try
+
+: see if ar generates random libraries by itself
+echo " "
+echo "Checking how to generate random libraries on your machine..." >&4
+echo 'int bar1() { return bar2(); }' > bar1.c
+echo 'int bar2() { return 2; }' > bar2.c
+$cat > foo.c <<'EOP'
+main() { printf("%d\n", bar1()); exit(0); }
+EOP
+$cc $ccflags -c bar1.c >/dev/null 2>&1
+$cc $ccflags -c bar2.c >/dev/null 2>&1
+$cc $ccflags -c foo.c >/dev/null 2>&1
+ar rc bar.a bar2.o bar1.o >/dev/null 2>&1
+if $cc $ccflags $ldflags -o foobar foo.o bar.a $libs > /dev/null 2>&1 &&
+       ./foobar >/dev/null 2>&1; then
+       echo "ar appears to generate random libraries itself."
+       orderlib=false
+       ranlib=":"
+elif ar ts bar.a >/dev/null 2>&1 &&
+       $cc $ccflags $ldflags -o foobar foo.o bar.a $libs > /dev/null 2>&1 &&
+       ./foobar >/dev/null 2>&1; then
+               echo "a table of contents needs to be added with 'ar ts'."
+               orderlib=false
+               ranlib="ar ts"
+else
+       case "$ranlib" in
+       :) ranlib='';;
+       '')
+               ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
+               $test -f $ranlib || ranlib=''
+               ;;
+       esac
+       if $test -n "$ranlib"; then
+               echo "your system has '$ranlib'; we'll use that."
+               orderlib=false
+       else
+               echo "your system doesn't seem to support random libraries"
+               echo "so we'll use lorder and tsort to order the libraries."
+               orderlib=true
+               ranlib=":"
+       fi
+fi
+$rm -f foo* bar* 
+
+: determine where public executable scripts go
+set scriptdir scriptdir
+eval $prefixit
+case "$scriptdir" in
+'')
+       dflt="$bin"
+       : guess some guesses
+       $test -d /usr/share/scripts && dflt=/usr/share/scripts
+       $test -d /usr/share/bin && dflt=/usr/share/bin
+       $test -d /usr/local/script && dflt=/usr/local/script
+       $test -d $prefixexp/script && dflt=$prefixexp/script
+       set dflt
+       eval $prefixup
+       ;;
+*)  dflt="$scriptdir"
+       ;;
+esac
+$cat <<EOM
+Some installations have a separate directory just for executable scripts so
+that they can mount it across multiple architectures but keep the scripts in
+one spot.  You might, for example, have a subdirectory of /usr/share for this.
+Or you might just lump your scripts in with all your other executables.
+EOM
+fn=d~
+rp='Where do you keep publicly executable scripts?'
+. ./getfile
+if $test "X$ansexp" != "X$scriptdirexp"; then
+       installscript=''
+fi
+scriptdir="$ans"
+scriptdirexp="$ansexp"
+if $afs; then
+       $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+scripts reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+       case "$installscript" in
+       '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
+       *) dflt="$installscript";;
+       esac
+       fn=de~
+       rp='Where will public scripts be installed?'
+       . ./getfile
+       installscript="$ans"
+else
+       installscript="$scriptdirexp"
+fi
+
+: see if sys/select.h has to be included
+set sys/select.h i_sysselct
+eval $inhdr
+
+: see if we should include time.h, sys/time.h, or both
+echo " "
+echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
+$echo $n "I'm now running the test program...$c"
+$cat >try.c <<'EOCP'
+#include <sys/types.h>
+#ifdef I_TIME
+#include <time.h>
+#endif
+#ifdef I_SYSTIME
+#ifdef SYSTIMEKERNEL
+#define KERNEL
+#endif
+#include <sys/time.h>
+#endif
+#ifdef I_SYSSELECT
+#include <sys/select.h>
+#endif
+main()
+{
+       struct tm foo;
+#ifdef S_TIMEVAL
+       struct timeval bar;
+#endif
+#ifdef S_TIMEZONE
+       struct timezone tzp;
+#endif
+       if (foo.tm_sec == foo.tm_sec)
+               exit(0);
+#ifdef S_TIMEVAL
+       if (bar.tv_sec == bar.tv_sec)
+               exit(0);
+#endif
+       exit(1);
+}
+EOCP
+flags=''
+s_timezone=''
+sysselect=''
+for s_timeval in '-DS_TIMEVAL' ''; do
+for i_systimek in '' '-DSYSTIMEKERNEL'; do
+for i_time in '' '-DI_TIME'; do
+for i_systime in '-DI_SYSTIME' ''; do
+       case "$flags" in
+       '') $echo $n ".$c"
+               if $cc $ccflags \
+               $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone \
+               try.c -o try >/dev/null 2>&1 ; then
+                       set X $i_time $i_systime $i_systimek $sysselect $s_timeval
+                       shift
+                       flags="$*"
+                       echo " "
+                       $echo $n "Succeeded with $flags$c"
+               fi
+               ;;
+       esac
+done
+done
+done
+done
+timeincl=''
+echo " "
+case "$flags" in
+*SYSTIMEKERNEL*) i_systimek="$define"
+       timeincl=`./findhdr sys/time.h`
+       echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
+*) i_systimek="$undef";;
+esac
+case "$flags" in
+*I_TIME*) i_time="$define"
+       timeincl=`./findhdr time.h`" $timeincl"
+       echo "We'll include <time.h>." >&4;;
+*) i_time="$undef";;
+esac
+case "$flags" in
+*I_SYSTIME*) i_systime="$define"
+       timeincl=`./findhdr sys/time.h`" $timeincl"
+       echo "We'll include <sys/time.h>." >&4;;
+*) i_systime="$undef";;
+esac
+$rm -f try.c try
+
+: check for fd_set items
+$cat <<EOM
+
+Checking to see how well your C compiler handles fd_set and friends ...
+EOM
+$cat >fd_set.c <<EOCP
+#$i_systime I_SYS_TIME
+#$i_sysselct I_SYS_SELECT
+#$d_socket HAS_SOCKET
+#include <sys/types.h>
+#ifdef HAS_SOCKET
+#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
+#endif
+#ifdef I_SYS_TIME
+#include <sys/time.h>
+#else
+#ifdef I_SYS_SELECT
+#include <sys/select.h>
+#endif
+#endif
+main() {
+       fd_set fds;
+
+#ifdef TRYBITS
+       if(fds.fds_bits);
+#endif
+
+#if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
+       exit(0);
+#else
+       exit(1);
+#endif
+}
+EOCP
+if $cc $ccflags -DTRYBITS fd_set.c -o fd_set >fd_set.out 2>&1 ; then
+       d_fds_bits="$define"
+       d_fd_set="$define"
+       echo "Well, your system knows about the normal fd_set typedef..." >&4
+       if ./fd_set; then
+               echo "and you have the normal fd_set macros (just as I'd expect)." >&4
+               d_fd_macros="$define"
+       else
+               $cat >&4 <<'EOM'
+but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
+EOM
+               d_fd_macros="$undef"
+       fi
+else
+       $cat <<'EOM'
+Hmm, your compiler has some difficulty with fd_set.  Checking further...
+EOM
+       if $cc $ccflags fd_set.c -o fd_set >fd_set.out 2>&1 ; then
+               d_fds_bits="$undef"
+               d_fd_set="$define"
+               echo "Well, your system has some sort of fd_set available..." >&4
+               if ./fd_set; then
+                       echo "and you have the normal fd_set macros." >&4
+                       d_fd_macros="$define"
+               else
+                       $cat <<'EOM'
+but not the normal fd_set macros!  Gross!  More work for me...
+EOM
+                       d_fd_macros="$undef"
+               fi
+       else
+       echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
+               d_fd_set="$undef"
+               d_fds_bits="$undef"
+               d_fd_macros="$undef"
+       fi
+fi
+$rm -f fd_set*
+
+
+: check for type of arguments to select.  This will only really
+: work if the system supports prototypes and provides one for
+: select.
+case "$d_select" in
+$define)
+       : Make initial guess
+       case "$selecttype" in
+       ''|' ')
+               case "$d_fd_set" in
+               $define) xxx='fd_set *' ;;
+               *) xxx='int *' ;;
+               esac
+               ;;
+       *)      xxx="$selecttype" 
+               ;;
+       esac
+       : backup guess
+       case "$xxx" in
+       'fd_set *') yyy='int *' ;;
+       'int *') yyy='fd_set *' ;;
+       esac
+
+       $cat <<EOM
+
+Checking to see what type of arguments are expected by select().
+EOM
+       $cat >try.c <<EOCP
+#$i_systime I_SYS_TIME
+#$i_sysselct I_SYS_SELECT
+#$d_socket HAS_SOCKET
+#include <sys/types.h>
+#ifdef HAS_SOCKET
+#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
+#endif
+#ifdef I_SYS_TIME
+#include <sys/time.h>
+#else
+#ifdef I_SYS_SELECT
+#include <sys/select.h>
+#endif
+#endif
+main()
+{
+       int width;
+       Select_fd_set_t readfds;
+       Select_fd_set_t writefds;
+       Select_fd_set_t exceptfds;
+       struct timeval timeout;
+       select(width, readfds, writefds, exceptfds, &timeout);
+       exit(0);
 }
 EOCP
-       if $cc try.c -o try >/dev/null 2>&1 ; then
-               dflt=`try`
+       if $cc $ccflags -c -DSelect_fd_set_t="$xxx" try.c >/dev/null 2>&1 ; then
+               selecttype="$xxx"
+               echo "Your system uses $xxx for the arguments to select." >&4
+       elif $cc $ccflags -c -DSelect_fd_set_t="$yyy" try.c >/dev/null 2>&1 ; then
+               selecttype="$yyy"
+               echo "Your system uses $yyy for the arguments to select." >&4
        else
-               dflt='?'
-               echo "(I can't seem to compile the test program...)"
+               rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
+               dflt="$xxx"
+               . ./myread
+               selecttype="$ans"
        fi
+       $rm -f try.[co]
        ;;
-*)
-       dflt="$randbits"
-       ;;
-esac
-rp='How many bits does your rand() function produce?'
-. ./myread
-randbits="$ans"
-$rm -f try.c try
-
-: determine where public executables go
-case "$scriptdir" in
-'')
-       dflt="$bin"
-       : guess some guesses
-       $test -d /usr/share/scripts && dflt=/usr/share/scripts
-       $test -d /usr/share/bin && dflt=/usr/share/bin
-       $test -d /usr/local/script && dflt=/usr/local/script
-       ;;
-*)  dflt="$scriptdir"
+*)     selecttype = 'int *' 
        ;;
 esac
-$cat <<EOM
-Some installations have a separate directory just for executable scripts so
-that they can mount it across multiple architectures but keep the scripts in
-one spot.  You might, for example, have a subdirectory of /usr/share for this.
-Or you might just lump your scripts in with all your other executables.
-EOM
-fn=d~
-rp='Where do you keep publicly executable scripts?'
-. ./getfile
-scriptdir="$ans"
-scriptdirexp="$ansexp"
-if $afs; then
-       $cat <<EOM
-
-Since you are running AFS, I need to distinguish the directory in which
-scripts reside from the directory in which they are installed (and from
-which they are presumably copied to the former directory by occult means).
-
-EOM
-       case "$installscript" in
-       '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
-       *) dflt="$installscript";;
-       esac
-       fn=de~
-       rp='Where will public scripts be installed?'
-       . ./getfile
-       installscript="$ans"
-else
-       installscript="$scriptdirexp"
-fi
 
 : generate list of signal names
 echo " "
 case "$sig_name" in
 '')
        echo "Generating a list of signal names..." >&4
-       xxx=`./findhdr signal.h`" "`./findhdr sys/signal.h`
+       xxx=`./findhdr signal.h`" "`./findhdr sys/signal.h`" "`./findhdr linux/signal.h`
        set X `cat $xxx 2>&1 | $awk '
 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $3 ~ /^[1-9][0-9]*$/ {
        sig[$3] = substr($2,4,20)
@@ -4663,7 +7032,67 @@ END {
        ;;
 esac
 echo "The following signals are available:"
-echo $sig_name | tr ' ' '\012' | $sed 's/^/    SIG/'
+echo " "
+echo $sig_name | $awk \
+'BEGIN { linelen = 0 }
+{
+       for (i = 1; i < NF; i++) {
+               name = "SIG" $i " "
+               linelen = linelen + length(name)
+               if (linelen > 70) {
+                       printf "\n"
+                       linelen = length(name)
+               }
+               printf "%s", name
+       }
+}'
+echo " "
+
+: see what type is used for size_t
+set size_t sizetype 'unsigned int' stdio.h sys/types.h
+eval $typedef
+dflt="$sizetype"
+echo " "
+rp="What type is used for the length parameter for string functions?"
+. ./myread
+sizetype="$ans"
+
+: see what type is used for signed size_t
+set ssize_t ssizetype int stdio.h sys/types.h
+eval $typedef
+dflt="$ssizetype"
+$cat > ssize.c <<EOM
+#include <stdio.h>
+#include <sys/types.h>
+#define Size_t $sizetype
+#define SSize_t $dflt
+main()
+{
+       if (sizeof(Size_t) == sizeof(SSize_t))
+               printf("$dflt\n");
+       else if (sizeof(Size_t) == sizeof(int))
+               printf("int\n");
+       else 
+               printf("long\n");
+}
+EOM
+echo " "
+if $cc $ccflags $ldflags -o ssize ssize.c $libs > /dev/null 2>&1 ; then
+       ssizetype=`./ssize`
+       echo "I'll be using $ssizetype for functions returning a byte count." >&4
+else
+       echo "(I can't compile the test program--please enlighten me!)"
+       $cat <<EOM
+
+I need a type that is the same size as $sizetype, but is guaranteed to
+be signed.  Common values are int and long.
+
+EOM
+       rp="What signed type is the same size as $sizetype?"
+       . ./myread
+       ssizetype="$ans"
+fi
+$rm -f ssize ssize.[co]
 
 : see what type of char stdio uses.
 echo " "
@@ -4675,155 +7104,45 @@ else
        stdchar="char"
 fi
 
+: see if time exists
+echo " "
+if set time val -f d_time; eval $csym; $val; then
+       echo 'time() found.' >&4
+       val="$define"
+       set time_t timetype long stdio.h sys/types.h
+       eval $typedef
+       dflt="$timetype"
+       echo " "
+       rp="What type is returned by time() on this sytem?"
+       . ./myread
+       timetype="$ans"
+else
+       echo 'time() not found, hope that will do.' >&4
+       val="$undef"
+       timetype='int';
+fi
+set d_time
+eval $setvar
+
 : see what type uids are declared as in the kernel
+set uid_t uidtype xxx stdio.h sys/types.h
+eval $typedef
 case "$uidtype" in
-'')
-       if $contains 'uid_t;' `./findhdr sys/types.h` >/dev/null 2>&1 ; then
-               dflt='uid_t';
-       else
-               xxx=`./findhdr sys/user.h`
-               set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
-               case $1 in
-               unsigned) dflt="$1 $2" ;;
-               *) dflt="$1" ;;
-               esac
-       fi
+xxx)
+       xxx=`./findhdr sys/user.h`
+       set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
+       case $1 in
+       unsigned) dflt="$1 $2" ;;
+       *) dflt="$1" ;;
+       esac
        ;;
-*)  dflt="$uidtype";;
+*) dflt="$uidtype";;
 esac
 echo " "
-rp="What type are user ids on this system declared as?"
+rp="What is the type for user ids returned by getuid()?"
 . ./myread
 uidtype="$ans"
 
-: check for void type
-echo " "
-$cat >&4 <<EOM
-Checking to see how well your C compiler groks the void type...
-
-  Support flag bits are:
-    1: basic void declarations.
-    2: arrays of pointers to functions returning void.
-    4: operations between pointers to and addresses of void functions.
-    8: generic void pointers.
-
-EOM
-case "$voidflags" in
-'')
-       $cat >try.c <<'EOCP'
-#if TRY & 1
-void main() {
-#else
-main() {
-#endif
-       extern void moo();      /* function returning void */
-       void (*goo)();          /* ptr to func returning void */
-#if TRY & 8
-       void *hue;              /* generic ptr */
-#endif
-#if TRY & 2
-       void (*foo[10])();
-#endif
-
-#if TRY & 4
-       if(goo == moo) {
-               exit(0);
-       }
-#endif
-       exit(0);
-}
-EOCP
-       if $cc -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
-               voidflags=$defvoidused
-       echo "It appears to support void to the level $package wants ($defvoidused)."
-               if $contains warning .out >/dev/null 2>&1; then
-                       echo "However, you might get some warnings that look like this:"
-                       $cat .out
-               fi
-       else
-echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
-               if $cc -c -DTRY=1 try.c >/dev/null 2>&1 ; then
-                       echo "It supports 1..."
-                       if $cc -c -DTRY=3 try.c >/dev/null 2>&1 ; then
-                               echo "It also supports 2..."
-                               if $cc -c -DTRY=7 try.c >/dev/null 2>&1 ; then
-                                       voidflags=7
-                                       echo "And it supports 4 but not 8 definitely."
-                               else
-                                       echo "It doesn't support 4..."
-                                       if $cc -c -DTRY=11 try.c >/dev/null 2>&1 ; then
-                                               voidflags=11
-                                               echo "But it supports 8."
-                                       else
-                                               voidflags=3
-                                               echo "Neither does it support 8."
-                                       fi
-                               fi
-                       else
-                               echo "It does not support 2..."
-                               if $cc -c -DTRY=13 try.c >/dev/null 2>&1 ; then
-                                       voidflags=13
-                                       echo "But it supports 4 and 8."
-                               else
-                                       if $cc -c -DTRY=5 try.c >/dev/null 2>&1 ; then
-                                               voidflags=5
-                                               echo "And it supports 4 but has not heard about 8."
-                                       else
-                                               echo "However it supports 8 but not 4."
-                                       fi
-                               fi
-                       fi
-               else
-                       echo "There is no support at all for void."
-                       voidflags=0
-               fi
-       fi
-esac
-dflt="$voidflags";
-rp="Your void support flags add up to what?"
-. ./myread
-voidflags="$ans"
-$rm -f try.* .out
-
-: determine compiler compiler
-case "$yacc" in
-'')
-       dflt=yacc;;
-*)
-       dflt="$yacc";;
-esac
-echo " "
-rp="yacc"
-if $test -f "$byacc"; then
-       dflt="$byacc"
-       rp="byacc or $rp"
-fi
-if $test -f "$bison"; then
-       rp="$rp or bison -y"
-fi
-$cat <<EOM
-$package no longer requires a compiler compiler, so the following is
-optional.
-EOM
-rp="Which compiler compiler ($rp) shall I use?"
-. ./myread
-yacc="$ans"
-case "$yacc" in
-*bis*)
-       case "$yacc" in
-       *-y*) ;;
-       *)
-               yacc="$yacc -y"
-               echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
-               ;;
-       esac
-       ;;
-esac
-
-: see if we have the old dbm
-set dbm.h i_dbm
-eval $inhdr
-
 : see if this is a sys/file.h system
 val=''
 set sys/file.h val
@@ -4877,67 +7196,71 @@ esac
 set i_fcntl
 eval $setvar
 
-: see if gdbm.h is available
-set gdbm.h i_gdbm
-eval $inhdr
-
 : see if this is an grp system
 set grp.h i_grp
 eval $inhdr
 
-: see if ndbm.h is available
-set ndbm.h i_ndbm
+: see if this is a math.h system
+set math.h i_math
 eval $inhdr
 
-: see if there are directory access routines out there
-echo " "
-if $test `./findhdr ndir.h` && \
-         ( $test -r /usr/lib/libndir.a || $test -r /usr/local/lib/libndir.a ); then
-       echo "Ndir library found." >&4
-       if $test -r /usr/lib/libndir.a; then
-               ndirlib='-lndir'
-       else
-               ndirlib="/usr/local/lib/libndir.a"
-       fi
-       i_ndir="$define"
-       d_usendir="$undef"
-       ndirc=''
-       ndiro=''
-else
-       ndirlib=''
-       i_ndir="$undef"
-       if set readdir val -f; eval $csym; $val; then
-       echo "No ndir library found, but you have readdir() so we'll use that." >&4
-               d_usendir="$undef"
-               ndirc=''
-               ndiro=''
-       else
-               echo "No ndir library found--using ./ndir.c." >&4
-               d_usendir="$define"
-               ndirc='ndir.c'
-               ndiro='ndir.o'
-       fi
-fi
-
-: see if this is a netinet/in.h or sys/in.h system
-set netinet/in.h i_niin sys/in.h i_sysin
+: see if memory.h is available.
+val=''
+set memory.h val
 eval $inhdr
 
-: see if stdarg is available
-set stdarg.h i_stdarg
-eval $inhdr
+: See if it conflicts with string.h
+case "$val" in
+$define)
+       case "$strings" in
+       '') ;;
+       *)
+               $cppstdin $cppflags $cppminus < $strings > mem.h
+               if $contains 'memcpy' mem.h >/dev/null 2>&1; then
+                       echo " "
+                       echo "We won't be including <memory.h>."
+                       val="$undef"
+               fi
+               $rm -f mem.h
+               ;;
+       esac
+esac
+set i_memory
+eval $setvar
 
-: see if stddef is available
-set stddef.h i_stddef
+: see if net/errno.h is available
+val=''
+set net/errno.h val
 eval $inhdr
 
-: see if this is an sysdir system
-set sys/dir.h i_sysdir
-eval $inhdr
+: Unfortunately, it causes problems on some systems.  Arrgh.
+case "$val" in
+$define)
+       cat > try.c <<'EOM'
+#include <stdio.h>
+#include <errno.h>
+#include <net/errno.h>
+int func()
+{
+       return ENOTSOCK;
+}
+EOM
+       if $cc $ccflags -c try.c >/dev/null 2>&1; then
+               echo "We'll be including <net/errno.h>." >&4
+       else
+               echo "We won't be including <net/errno.h>." >&4
+               val="$undef"
+       fi
+       $rm -f try.* try
+       ;;
+esac
+set i_neterrno
+eval $setvar
 
 : get C preprocessor symbols handy
 echo " "
-echo $attrlist | $tr ' ' '\012' >Cppsym.know
+$echo $n "Hmm... $c"
+echo $al | $tr ' ' '\012' >Cppsym.know
 $cat <<EOSS >Cppsym
 $startsh
 case "\$1" in
@@ -4983,9 +7306,62 @@ exit \$status
 EOSS
 chmod +x Cppsym
 $eunicefix Cppsym
-echo "Your C preprocessor defines the following symbols:"
-Cppsym -l $attrlist >Cppsym.true
-$cat Cppsym.true
+./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
+
+: now check the C compiler for additional symbols
+$cat >ccsym <<EOS
+$startsh
+$cat >tmp.c <<EOF
+extern int foo;
+EOF
+for i in \`$cc -v -c tmp.c 2>&1\`
+do
+       case "\$i" in
+       -D*) echo "\$i" | $sed 's/^-D//';;
+       -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
+       esac
+done
+$rm -f try.c
+EOS
+chmod +x ccsym
+$eunicefix ccsym
+./ccsym | $sort | $uniq >ccsym.raw
+$awk '/\=/ { print $0; next } { print $0"=1" }' ccsym.raw >ccsym.list
+$awk '{ print $0"=1" }' Cppsym.true >ccsym.true
+$comm -13 ccsym.true ccsym.list >ccsym.own
+$comm -12 ccsym.true ccsym.list >ccsym.com
+$comm -23 ccsym.true ccsym.list >ccsym.cpp
+also=''
+symbols='symbols'
+if $test -z ccsym.raw; then
+       echo "Your C compiler doesn't seem to define any symbol!" >&4
+       echo " "
+       echo "However, your C preprocessor defines the following ones:"
+       $cat Cppsym.true
+else
+       if $test -s ccsym.com; then
+               echo "Your C compiler and pre-processor define these symbols:"
+               $sed -e 's/\(.*\)=.*/\1/' ccsym.com
+               also='also '
+               symbols='ones'
+               $test "$silent" || sleep 1
+       fi
+       if $test -s ccsym.cpp; then
+               $test "$also" && echo " "
+               echo "Your C pre-processor ${also}defines the following $symbols:"
+               $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
+               also='further '
+               $test "$silent" || sleep 1
+       fi
+       if $test -s ccsym.own; then
+               $test "$also" && echo " "
+               echo "Your C compiler ${also}defines the following cpp variables:"
+               $sed -e 's/\(.*\)=1/\1/' ccsym.own
+               $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
+               $test "$silent" || sleep 1
+       fi
+fi
+$rm -f ccsym*
 
 : see if this is a termio system
 val="$undef"
@@ -4999,7 +7375,7 @@ fi
 echo " "
 case "$val3" in
 "$define") echo "You have POSIX termios.h... good!" >&4;;
-*) if Cppsym pyr; then
+*) if ./Cppsym pyr; then
                case "`/bin/universe`" in
                ucb) if $test `./findhdr sgtty.h`; then
                                val2="$define"
@@ -5016,7 +7392,7 @@ case "$val3" in
                                echo "<termio.h> not found--you could have problems." >&4
                        fi;;
                esac
-       elif usg; then
+       elif ./usg; then
                if $test `./findhdr termio.h`; then
                        echo "<termio.h> found." >&4
                        val="$define"
@@ -5042,126 +7418,23 @@ set i_termio; eval $setvar
 val=$val2; set i_sgtty; eval $setvar
 val=$val3; set i_termios; eval $setvar
 
-: see if ioctl defs are in sgtty/termio or sys/ioctl
+: see if stdarg is available
 echo " "
-if $test `./findhdr sys/ioctl.h`; then
-       val="$define"
-       echo "<sys/ioctl.h> found." >&4
+if $test `./findhdr stdarg.h`; then
+       echo "<stdarg.h> found." >&4
+       valstd="$define"
 else
-       val="$undef"
-       $test $i_termio = "$define" && xxx="termio.h"
-       $test $i_termios = "$define" && xxx="termios.h"
-       $test $i_sgtty = "$define" && xxx="sgtty.h"
-echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
+       echo "<stdarg.h> NOT found." >&4
+       valstd="$undef"
 fi
-set i_sysioctl
-eval $setvar
-
-: see if this is an sysndir system
-set sys/ndir.h i_sysndir
-eval $inhdr
-
-: see if sys/select.h has to be included
-set sys/select.h i_sysselct
-eval $inhdr
-
-: see if we should include time.h, sys/time.h, or both
-echo " "
-echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
-$echo $n "I'm now running the test program...$c"
-$cat >try.c <<'EOCP'
-#include <sys/types.h>
-#ifdef I_TIME
-#include <time.h>
-#endif
-#ifdef I_SYSTIME
-#ifdef SYSTIMEKERNEL
-#define KERNEL
-#endif
-#include <sys/time.h>
-#endif
-#ifdef I_SYSSELECT
-#include <sys/select.h>
-#endif
-main()
-{
-       struct tm foo;
-#ifdef S_TIMEVAL
-       struct timeval bar;
-#endif
-#ifdef S_TIMEZONE
-       struct timezone tzp;
-#endif
-       if (foo.tm_sec == foo.tm_sec)
-               exit(0);
-#ifdef S_TIMEVAL
-       if (bar.tv_sec == bar.tv_sec)
-               exit(0);
-#endif
-       exit(1);
-}
-EOCP
-flags=''
-s_timezone=''
-sysselect=''
-for s_timeval in '-DS_TIMEVAL' ''; do
-for i_systimek in '' '-DSYSTIMEKERNEL'; do
-for i_time in '' '-DI_TIME'; do
-for i_systime in '-DI_SYSTIME' ''; do
-       case "$flags" in
-       '') $echo $n ".$c"
-               if $cc $ccflags \
-               $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone \
-               try.c -o try >/dev/null 2>&1 ; then
-                       set X $i_time $i_systime $i_systimek $sysselect $s_timeval
-                       shift
-                       flags="$*"
-                       echo " "
-                       $echo $n "Succeeded with $flags$c"
-               fi
-               ;;
-       esac
-done
-done
-done
-done
-timeincl=''
-echo " "
-case "$flags" in
-*SYSTIMEKERNEL*) i_systimek="$define"
-       timeincl=`./findhdr sys/time.h`
-       echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
-*) i_systimek="$undef";;
-esac
-case "$flags" in
-*I_TIME*) i_time="$define"
-       timeincl=`./findhdr time.h`" $timeincl"
-       echo "We'll include <time.h>." >&4;;
-*) i_time="$undef";;
-esac
-case "$flags" in
-*I_SYSTIME*) i_systime="$define"
-       timeincl=`./findhdr sys/time.h`" $timeincl"
-       echo "We'll include <sys/time.h>." >&4;;
-*) i_systime="$undef";;
-esac
-$rm -f try.c try
-
-: see if this is an utime system
-set utime.h i_utime
-eval $inhdr
 
-: see if this is a varargs system
+: see if varags is available
 echo " "
 if $test `./findhdr varargs.h`; then
-       val="$define"
        echo "<varargs.h> found." >&4
 else
-       val="$undef"
        echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
 fi
-set i_varargs
-eval $setvar
 
 : set up the varargs testing programs
 $cat > varargs.c <<EOP
@@ -5205,227 +7478,302 @@ chmod +x varargs
 : now check which varargs header should be included
 echo " "
 i_varhdr=''
-case "$i_stdarg" in
+case "$valstd" in
 "$define")
        if `./varargs I_STDARG`; then
-               i_varhdr='stdarg.h'
-               i_varargs="$undef"
+               val='stdarg.h'
        elif `./varargs I_VARARGS`; then
-               i_varhdr='varargs.h'
-               i_stdarg="$undef"
+               val='varargs.h'
        fi
        ;;
 *)
        if `./varargs I_VARARGS`; then
-               i_varhdr='varargs.h'
+               val='varargs.h'
        fi
        ;;
 esac
-case "$i_varhdr" in
+case "$val" in
 '')
 echo "I could not find the definition for va_dcl... You have problems..." >&4
+       val="$undef"; set i_stdarg; eval $setvar
+       val="$undef"; set i_varargs; eval $setvar
        ;;
-*) echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
+*) 
+       set i_varhdr
+       eval $setvar
+       case "$i_varhdr" in
+       stdarg.h)
+               val="$define"; set i_stdarg; eval $setvar
+               val="$undef"; set i_varargs; eval $setvar
+               ;;
+       varargs.h)
+               val="$undef"; set i_stdarg; eval $setvar
+               val="$define"; set i_varargs; eval $setvar
+               ;;
+       esac
+       echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
 esac
 $rm -f varargs*
 
-: see if this is a vfork system
-set vfork.h i_vfork
+: see if stddef is available
+set stddef.h i_stddef
 eval $inhdr
 
-: end of configuration questions
-echo " "
-echo "End of configuration questions."
+: see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
+set sys/filio.h i_sysfilio
+eval $inhdr
 echo " "
-
-: back to where it started
-if test -d ../UU; then
-       cd ..
+if $test `./findhdr sys/ioctl.h`; then
+       val="$define"
+       echo '<sys/ioctl.h> found.' >&4
+else
+       val="$undef"
+       if $test $i_sysfilio = "$define"; then
+           echo '<sys/ioctl.h> NOT found.' >&4
+       else
+               $test $i_sgtty = "$define" && xxx="sgtty.h"
+               $test $i_termio = "$define" && xxx="termio.h"
+               $test $i_termios = "$define" && xxx="termios.h"
+echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
+       fi
 fi
+set i_sysioctl
+eval $setvar
 
-: configuration may be patched via a 'config.over' file
-if $test -f config.over; then
-       echo " "
-       dflt=y
-       rp='I see a config.over file.  Do you wish to load it?'
-       . UU/myread
-       case "$ans" in
-       n*) echo "OK, I'll ignore it.";;
-       *)      . ./config.over
-               echo "Configuration override changes have been loaded."
-               ;;
-       esac
-fi
+: see if this is a sys/param system
+set sys/param.h i_sysparam
+eval $inhdr
 
-: create config.sh file
-echo " "
-echo "Creating config.sh..." >&4
-$spitshell <<EOT >config.sh
-$startsh
-#
-# This file was produced by running the Configure script. It holds all the
-# definitions figured out by Configure. Should you modify one of these values,
-# do not forget to propagate your changes by running "Configure -der". You may
-# instead choose to run each of the .SH files by yourself, or "Configure -S".
-#
+: see if sys/stat.h is available
+set sys/stat.h i_sysstat
+eval $inhdr
 
-# Configuration time: $cf_time
-# Configured by: $cf_by
-# Target system: $myuname
+: see if sys/types.h has to be included
+set sys/types.h i_systypes
+eval $inhdr
+
+: see if this is a unistd.h system
+set unistd.h i_unistd
+eval $inhdr
+
+: see if this is an utime system
+set utime.h i_utime
+eval $inhdr
+
+: see if this is a vfork system
+case "$d_vfork" in
+"$define")
+       set vfork.h i_vfork
+       eval $inhdr
+       ;;
+*)
+       i_vfork="$undef"
+       ;;
+esac
+
+: end of configuration questions
+echo " "
+echo "End of configuration questions."
+echo " "
+
+: back to where it started
+if test -d ../UU; then
+       cd ..
+fi
+
+: configuration may be patched via a 'config.over' file
+if $test -f config.over; then
+       echo " "
+       dflt=y
+       rp='I see a config.over file.  Do you wish to load it?'
+       . UU/myread
+       case "$ans" in
+       n*) echo "OK, I'll ignore it.";;
+       *)      . ./config.over
+               echo "Configuration override changes have been loaded."
+               ;;
+       esac
+fi
+
+: in case they want portability, strip down executable paths
+case "$d_portable" in
+"$define")
+       echo " "
+       echo "Stripping down executable paths..." >&4
+       for file in $loclist $trylist; do
+               eval $file="\$file"
+       done
+       ;;
+esac
+
+: create config.sh file
+echo " "
+echo "Creating config.sh..." >&4
+$spitshell <<EOT >config.sh
+$startsh
+#
+# This file was produced by running the Configure script. It holds all the
+# definitions figured out by Configure. Should you modify one of these values,
+# do not forget to propagate your changes by running "Configure -der". You may
+# instead choose to run each of the .SH files by yourself, or "Configure -S".
+#
+
+# Configuration time: $cf_time
+# Configured by: $cf_by
+# Target system: $myuname
 
-extensions='$extensions'
-d_bsd='$d_bsd'
-d_eunice='$d_eunice'
-d_xenix='$d_xenix'
-eunicefix='$eunicefix'
-Mcc='$Mcc'
-awk='$awk'
-bash='$bash'
-bison='$bison'
-byacc='$byacc'
-cat='$cat'
-chgrp='$chgrp'
-chmod='$chmod'
-chown='$chown'
-compress='$compress'
-cp='$cp'
-cpio='$cpio'
-cpp='$cpp'
-csh='$csh'
-date='$date'
-echo='$echo'
-egrep='$egrep'
-emacs='$emacs'
-expr='$expr'
-find='$find'
-flex='$flex'
-gcc='$gcc'
-grep='$grep'
-inews='$inews'
-ksh='$ksh'
-less='$less'
-line='$line'
-lint='$lint'
-ln='$ln'
-lp='$lp'
-lpr='$lpr'
-ls='$ls'
-mail='$mail'
-mailx='$mailx'
-make='$make'
-mkdir='$mkdir'
-more='$more'
-mv='$mv'
-nroff='$nroff'
-perl='$perl'
-pg='$pg'
-pmake='$pmake'
-pr='$pr'
-rm='$rm'
-rmail='$rmail'
-sed='$sed'
-sendmail='$sendmail'
-sh='$sh'
-shar='$shar'
-sleep='$sleep'
-smail='$smail'
-sort='$sort'
-submit='$submit'
-tail='$tail'
-tar='$tar'
-tbl='$tbl'
-test='$test'
-touch='$touch'
-tr='$tr'
-troff='$troff'
-uname='$uname'
-uniq='$uniq'
-uuname='$uuname'
-vi='$vi'
-zcat='$zcat'
-hint='$hint'
-myuname='$myuname'
 Author='$Author'
 Date='$Date'
 Header='$Header'
 Id='$Id'
 Locker='$Locker'
 Log='$Log'
+Mcc='$Mcc'
 RCSfile='$RCSfile'
 Revision='$Revision'
 Source='$Source'
 State='$State'
 afs='$afs'
 alignbytes='$alignbytes'
+aphostname='$aphostname'
+archlib='$archlib'
+archlibexp='$archlibexp'
+archname='$archname'
+awk='$awk'
+baserev='$baserev'
+bash='$bash'
 bin='$bin'
 binexp='$binexp'
-installbin='$installbin'
+bison='$bison'
+byacc='$byacc'
 byteorder='$byteorder'
+c='$c'
+castflags='$castflags'
+cat='$cat'
 cc='$cc'
-gccversion='$gccversion'
+cccdlflags='$cccdlflags'
+ccdlflags='$ccdlflags'
 ccflags='$ccflags'
-cppflags='$cppflags'
-ldflags='$ldflags'
-lkflags='$lkflags'
-optimize='$optimize'
 cf_by='$cf_by'
 cf_time='$cf_time'
+chgrp='$chgrp'
+chmod='$chmod'
+chown='$chown'
+clocktype='$clocktype'
+comm='$comm'
+compress='$compress'
 contains='$contains'
+cp='$cp'
+cpio='$cpio'
+cpp='$cpp'
+cpp_stuff='$cpp_stuff'
+cppflags='$cppflags'
 cpplast='$cpplast'
 cppminus='$cppminus'
 cpprun='$cpprun'
 cppstdin='$cppstdin'
+cryptlib='$cryptlib'
+csh='$csh'
+d_Gconvert='$d_Gconvert'
 d_access='$d_access'
+d_alarm='$d_alarm'
+d_archlib='$d_archlib'
+d_attribut='$d_attribut'
 d_bcmp='$d_bcmp'
 d_bcopy='$d_bcopy'
+d_bsd='$d_bsd'
+d_bsdpgrp='$d_bsdpgrp'
+d_byacc='$d_byacc'
 d_bzero='$d_bzero'
 d_casti32='$d_casti32'
-castflags='$castflags'
 d_castneg='$d_castneg'
-d_charsprf='$d_charsprf'
+d_charvspr='$d_charvspr'
+d_chown='$d_chown'
+d_chroot='$d_chroot'
 d_chsize='$d_chsize'
+d_closedir='$d_closedir'
 d_const='$d_const'
-cryptlib='$cryptlib'
 d_crypt='$d_crypt'
 d_csh='$d_csh'
+d_cuserid='$d_cuserid'
+d_dbl_dig='$d_dbl_dig'
+d_difftime='$d_difftime'
+d_dirnamlen='$d_dirnamlen'
+d_dlerror='$d_dlerror'
+d_dlopen='$d_dlopen'
+d_dlsymun='$d_dlsymun'
 d_dosuid='$d_dosuid'
+d_drem='$d_drem'
 d_dup2='$d_dup2'
+d_eunice='$d_eunice'
 d_fchmod='$d_fchmod'
 d_fchown='$d_fchown'
 d_fcntl='$d_fcntl'
+d_fd_macros='$d_fd_macros'
+d_fd_set='$d_fd_set'
+d_fds_bits='$d_fds_bits'
+d_fgetpos='$d_fgetpos'
 d_flexfnam='$d_flexfnam'
 d_flock='$d_flock'
+d_fmod='$d_fmod'
+d_fork='$d_fork'
+d_fpathconf='$d_fpathconf'
+d_fsetpos='$d_fsetpos'
 d_getgrps='$d_getgrps'
 d_gethent='$d_gethent'
-aphostname='$aphostname'
 d_gethname='$d_gethname'
-d_phostname='$d_phostname'
-d_uname='$d_uname'
+d_getlogin='$d_getlogin'
 d_getpgrp2='$d_getpgrp2'
 d_getpgrp='$d_getpgrp'
+d_getppid='$d_getppid'
 d_getprior='$d_getprior'
 d_htonl='$d_htonl'
+d_index='$d_index'
 d_isascii='$d_isascii'
 d_killpg='$d_killpg'
 d_link='$d_link'
+d_linuxstd='$d_linuxstd'
+d_locconv='$d_locconv'
+d_lockf='$d_lockf'
 d_lstat='$d_lstat'
+d_mblen='$d_mblen'
+d_mbstowcs='$d_mbstowcs'
+d_mbtowc='$d_mbtowc'
 d_memcmp='$d_memcmp'
 d_memcpy='$d_memcpy'
 d_memmove='$d_memmove'
 d_memset='$d_memset'
 d_mkdir='$d_mkdir'
+d_mkfifo='$d_mkfifo'
+d_mktime='$d_mktime'
 d_msg='$d_msg'
 d_msgctl='$d_msgctl'
 d_msgget='$d_msgget'
 d_msgrcv='$d_msgrcv'
 d_msgsnd='$d_msgsnd'
+d_mymalloc='$d_mymalloc'
+d_nice='$d_nice'
+d_oldsock='$d_oldsock'
 d_open3='$d_open3'
+d_pathconf='$d_pathconf'
+d_pause='$d_pause'
+d_phostname='$d_phostname'
+d_pipe='$d_pipe'
 d_portable='$d_portable'
+d_pwage='$d_pwage'
+d_pwchange='$d_pwchange'
+d_pwclass='$d_pwclass'
+d_pwcomment='$d_pwcomment'
+d_pwexpire='$d_pwexpire'
+d_pwquota='$d_pwquota'
 d_readdir='$d_readdir'
+d_readlink='$d_readlink'
 d_rename='$d_rename'
+d_rewinddir='$d_rewinddir'
 d_rmdir='$d_rmdir'
 d_safebcpy='$d_safebcpy'
 d_safemcpy='$d_safemcpy'
+d_seekdir='$d_seekdir'
 d_select='$d_select'
 d_sem='$d_sem'
 d_semctl='$d_semctl'
@@ -5433,10 +7781,10 @@ d_semget='$d_semget'
 d_semop='$d_semop'
 d_setegid='$d_setegid'
 d_seteuid='$d_seteuid'
+d_setlinebuf='$d_setlinebuf'
 d_setlocale='$d_setlocale'
 d_setpgid='$d_setpgid'
 d_setpgrp2='$d_setpgrp2'
-d_bsdpgrp='$d_bsdpgrp'
 d_setpgrp='$d_setpgrp'
 d_setprior='$d_setprior'
 d_setregid='$d_setregid'
@@ -5448,148 +7796,253 @@ d_setruid='$d_setruid'
 d_setsid='$d_setsid'
 d_shm='$d_shm'
 d_shmat='$d_shmat'
+d_shmatprototype='$d_shmatprototype'
 d_shmctl='$d_shmctl'
 d_shmdt='$d_shmdt'
 d_shmget='$d_shmget'
-d_oldsock='$d_oldsock'
+d_shrplib='$d_shrplib'
 d_socket='$d_socket'
 d_sockpair='$d_sockpair'
-sockethdr='$sockethdr'
-socketlib='$socketlib'
 d_statblks='$d_statblks'
 d_stdstdio='$d_stdstdio'
-d_index='$d_index'
 d_strchr='$d_strchr'
+d_strcoll='$d_strcoll'
 d_strctcpy='$d_strctcpy'
 d_strerrm='$d_strerrm'
 d_strerror='$d_strerror'
-d_sysernlst='$d_sysernlst'
-d_syserrlst='$d_syserrlst'
+d_strxfrm='$d_strxfrm'
+d_suidsafe='$d_suidsafe'
 d_symlink='$d_symlink'
 d_syscall='$d_syscall'
+d_sysconf='$d_sysconf'
+d_sysernlst='$d_sysernlst'
+d_syserrlst='$d_syserrlst'
 d_system='$d_system'
-clocktype='$clocktype'
+d_tcgetpgrp='$d_tcgetpgrp'
+d_tcsetpgrp='$d_tcsetpgrp'
+d_telldir='$d_telldir'
+d_time='$d_time'
 d_times='$d_times'
 d_truncate='$d_truncate'
-d_usendir='$d_usendir'
-i_ndir='$i_ndir'
-ndirc='$ndirc'
-ndirlib='$ndirlib'
-ndiro='$ndiro'
+d_tzname='$d_tzname'
+d_umask='$d_umask'
+d_uname='$d_uname'
 d_vfork='$d_vfork'
+d_void_closedir='$d_void_closedir'
 d_voidsig='$d_voidsig'
-signal_t='$signal_t'
+d_voidtty='$d_voidtty'
 d_volatile='$d_volatile'
-d_charvspr='$d_charvspr'
 d_vprintf='$d_vprintf'
 d_wait4='$d_wait4'
 d_waitpid='$d_waitpid'
-dlobj='$dlobj'
+d_wcstombs='$d_wcstombs'
+d_wctomb='$d_wctomb'
+d_xenix='$d_xenix'
+date='$date'
+db_hashtype='$db_hashtype'
+db_prefixtype='$db_prefixtype'
+defvoidused='$defvoidused'
+direntrytype='$direntrytype'
+dlext='$dlext'
 dlsrc='$dlsrc'
-usedl='$usedl'
+dynamic_ext='$dynamic_ext'
+echo='$echo'
+egrep='$egrep'
+emacs='$emacs'
+eunicefix='$eunicefix'
+expr='$expr'
+extensions='$extensions'
+find='$find'
+flex='$flex'
+fpostype='$fpostype'
+freetype='$freetype'
+full_csh='$full_csh'
+full_sed='$full_sed'
+gcc='$gcc'
+gccversion='$gccversion'
 gidtype='$gidtype'
+glibpth='$glibpth'
+grep='$grep'
+groupcat='$groupcat'
 groupstype='$groupstype'
 h_fcntl='$h_fcntl'
 h_sysfile='$h_sysfile'
+hint='$hint'
+hostcat='$hostcat'
+huge='$huge'
+i_bsdioctl='$i_bsdioctl'
+i_db='$i_db'
 i_dbm='$i_dbm'
-d_dirnamlen='$d_dirnamlen'
 i_dirent='$i_dirent'
+i_dld='$i_dld'
 i_dlfcn='$i_dlfcn'
 i_fcntl='$i_fcntl'
+i_float='$i_float'
 i_gdbm='$i_gdbm'
 i_grp='$i_grp'
+i_limits='$i_limits'
+i_malloc='$i_malloc'
+i_math='$i_math'
+i_memory='$i_memory'
 i_ndbm='$i_ndbm'
+i_neterrno='$i_neterrno'
 i_niin='$i_niin'
-i_sysin='$i_sysin'
-d_pwage='$d_pwage'
-d_pwchange='$d_pwchange'
-d_pwclass='$d_pwclass'
-d_pwcomment='$d_pwcomment'
-d_pwexpire='$d_pwexpire'
-d_pwquota='$d_pwquota'
 i_pwd='$i_pwd'
+i_sgtty='$i_sgtty'
 i_stdarg='$i_stdarg'
 i_stddef='$i_stddef'
+i_stdlib='$i_stdlib'
 i_string='$i_string'
-strings='$strings'
 i_sysdir='$i_sysdir'
 i_sysfile='$i_sysfile'
-d_voidtty='$d_voidtty'
-i_bsdioctl='$i_bsdioctl'
+i_sysfilio='$i_sysfilio'
+i_sysin='$i_sysin'
 i_sysioctl='$i_sysioctl'
-i_syssockio='$i_syssockio'
 i_sysndir='$i_sysndir'
+i_sysparam='$i_sysparam'
 i_sysselct='$i_sysselct'
-i_sgtty='$i_sgtty'
-i_termio='$i_termio'
-i_termios='$i_termios'
+i_syssockio='$i_syssockio'
+i_sysstat='$i_sysstat'
 i_systime='$i_systime'
 i_systimek='$i_systimek'
+i_systimes='$i_systimes'
+i_systypes='$i_systypes'
+i_termio='$i_termio'
+i_termios='$i_termios'
 i_time='$i_time'
-timeincl='$timeincl'
+i_unistd='$i_unistd'
 i_utime='$i_utime'
 i_varargs='$i_varargs'
 i_varhdr='$i_varhdr'
 i_vfork='$i_vfork'
+incpath='$incpath'
+inews='$inews'
+installarchlib='$installarchlib'
+installbin='$installbin'
+installmansrc='$installmansrc'
+installprivlib='$installprivlib'
+installscript='$installscript'
 intsize='$intsize'
-lib='$lib'
-libexp='$libexp'
+known_extensions='$known_extensions'
+ksh='$ksh'
+large='$large'
+lddlflags='$lddlflags'
+ldflags='$ldflags'
+less='$less'
 libc='$libc'
 libpth='$libpth'
-plibpth='$plibpth'
-xlibpth='$xlibpth'
 libs='$libs'
+libswanted='$libswanted'
+line='$line'
+lint='$lint'
+lkflags='$lkflags'
+ln='$ln'
+lns='$lns'
+lp='$lp'
+lpr='$lpr'
+ls='$ls'
+lseektype='$lseektype'
+mail='$mail'
+mailx='$mailx'
+make='$make'
 mallocobj='$mallocobj'
 mallocsrc='$mallocsrc'
 malloctype='$malloctype'
-usemymalloc='$usemymalloc'
-installmansrc='$installmansrc'
 manext='$manext'
 mansrc='$mansrc'
 mansrcexp='$mansrcexp'
-huge='$huge'
-large='$large'
 medium='$medium'
+mips='$mips'
+mips_type='$mips_type'
+mkdir='$mkdir'
 models='$models'
-small='$small'
-split='$split'
+modetype='$modetype'
+more='$more'
+mv='$mv'
+myarchname='$myarchname'
 mydomain='$mydomain'
 myhostname='$myhostname'
-phostname='$phostname'
-c='$c'
+myuname='$myuname'
 n='$n'
-groupcat='$groupcat'
-hostcat='$hostcat'
-passcat='$passcat'
+nm_opt='$nm_opt'
+nroff='$nroff'
+optimize='$optimize'
+orderlib='$orderlib'
+osname='$osname'
+osvers='$osvers'
 package='$package'
-spackage='$spackage'
-installprivlib='$installprivlib'
+passcat='$passcat'
+patchlevel='$patchlevel'
+perl='$perl'
+pg='$pg'
+phostname='$phostname'
+plibpth='$plibpth'
+pmake='$pmake'
+pr='$pr'
+prefix='$prefix'
+prefixexp='$prefixexp'
 privlib='$privlib'
 privlibexp='$privlibexp'
 prototype='$prototype'
 randbits='$randbits'
-installscript='$installscript'
+ranlib='$ranlib'
+rm='$rm'
+rmail='$rmail'
+runnm='$runnm'
 scriptdir='$scriptdir'
 scriptdirexp='$scriptdirexp'
-sig_name='$sig_name'
+sed='$sed'
+selecttype='$selecttype'
+sendmail='$sendmail'
+sh='$sh'
+shar='$shar'
 sharpbang='$sharpbang'
+shmattype='$shmattype'
+shrpdir='$shrpdir'
 shsharp='$shsharp'
+sig_name='$sig_name'
+signal_t='$signal_t'
+sizetype='$sizetype'
+sleep='$sleep'
+smail='$smail'
+small='$small'
+so='$so'
+sockethdr='$sockethdr'
+socketlib='$socketlib'
+sort='$sort'
+spackage='$spackage'
 spitshell='$spitshell'
+split='$split'
+ssizetype='$ssizetype'
 startsh='$startsh'
+static_ext='$static_ext'
 stdchar='$stdchar'
+strings='$strings'
+submit='$submit'
 sysman='$sysman'
+tail='$tail'
+tar='$tar'
+tbl='$tbl'
+test='$test'
+timeincl='$timeincl'
+timetype='$timetype'
+touch='$touch'
+tr='$tr'
+troff='$troff'
 uidtype='$uidtype'
-nm_opt='$nm_opt'
-runnm='$runnm'
+uname='$uname'
+uniq='$uniq'
+usedl='$usedl'
+usemymalloc='$usemymalloc'
 usenm='$usenm'
-incpath='$incpath'
-mips='$mips'
-mips_type='$mips_type'
+useposix='$useposix'
+usevfork='$usevfork'
 usrinc='$usrinc'
-defvoidused='$defvoidused'
+uuname='$uuname'
+vi='$vi'
 voidflags='$voidflags'
-yacc='$yacc'
-yaccflags='$yaccflags'
+xlibpth='$xlibpth'
+zcat='$zcat'
 EOT
 
 : add special variables
@@ -5631,11 +8084,15 @@ exit)
 cont)
        ;;
 '')
-       echo " "
        dflt=''
        nostick=true
-echo "If you didn't make any mistakes, then just type a carriage return here."
-       rp="If you need to edit config.sh, do it as a shell escape here:"
+       $cat <<EOM
+
+If you'd like to make any changes to the config.sh file before I begin
+to configure things, do it as a shell escape now (e.g. !vi config.sh).
+
+EOM
+       rp="Press return or use a shell escape to edit config.sh:"
        . UU/myread
        nostick=''
        case "$ans" in
@@ -5686,4 +8143,6 @@ fi
 
 $rm -f kit*isdone ark*isdone
 $rm -rf UU
+
 : End of Configure
+