Re: [ID 19991001.005] [_61] [PATCH] tarball fine on win32, zip isn't
[p5sagit/p5-mst-13.2.git] / Configure
index 1452c03..54636fe 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -20,8 +20,8 @@
 
 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
 #
-# Generated on Tue Oct 20 11:18:44 EET DST 1998 [metaconfig 3.0 PL70]
-# (with additional metaconfig patches by jhi@iki.fi)
+# Generated on Sun Oct  3 02:41:02 EET DST 1999 [metaconfig 3.0 PL70]
+# (with additional metaconfig patches by perlbug@perl.com)
 
 cat >/tmp/c1$$ <<EOF
 ARGGGHHHH!!!!!
@@ -108,6 +108,13 @@ if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
                newsh=/usr/bin/bsh
        fi
 fi
+if test -f /osf_boot -a -f /usr/sbin/setld; then
+       if test X`/usr/bin/uname -s` = XOSF1; then
+               avoidksh="to avoid Digital UNIX' ksh"
+               newsh=/bin/sh
+               unset BIN_SH # if this is 'xpg4' sh will start up ksh
+       fi
+fi
 case "$inksh/$needksh" in
 /[a-z]*)
                ENV=''
@@ -153,6 +160,9 @@ esac
 test -d UU || mkdir UU
 cd UU && rm -f ./*
 
+ccsymbols=''
+cppccsymbols=''
+cppsymbols=''
 dynamic_ext=''
 extensions=''
 known_extensions=''
@@ -233,6 +243,7 @@ uuname=''
 vi=''
 zcat=''
 zip=''
+full_ar=''
 full_sed=''
 libswanted=''
 hint=''
@@ -267,10 +278,14 @@ d_archlib=''
 installarchlib=''
 archname=''
 myarchname=''
+d_atolf=''
+d_atoll=''
 baserev=''
 bin=''
 binexp=''
 installbin=''
+bincompat5005=''
+d_bincompat5005=''
 byteorder=''
 cc=''
 gccversion=''
@@ -289,6 +304,7 @@ cpplast=''
 cppminus=''
 cpprun=''
 cppstdin=''
+crosscompile=''
 d_access=''
 d_accessx=''
 d_alarm=''
@@ -326,6 +342,7 @@ d_endnent=''
 d_endpent=''
 d_endpwent=''
 d_endsent=''
+d_endspent=''
 d_fchmod=''
 d_fchown=''
 d_fcntl=''
@@ -353,6 +370,7 @@ d_phostname=''
 d_uname=''
 d_gethostprotos=''
 d_getlogin=''
+d_getmntent=''
 d_getnbyaddr=''
 d_getnbyname=''
 d_getnent=''
@@ -370,14 +388,18 @@ d_getprotoprotos=''
 d_getpwent=''
 d_getsent=''
 d_getservprotos=''
+d_getspent=''
+d_getspnam=''
 d_getsbyname=''
 d_getsbyport=''
 d_gnulibc=''
+d_hasmntopt=''
 d_htonl=''
 d_inetaton=''
 d_isascii=''
 d_killpg=''
 d_lchown=''
+d_ldbl_dig=''
 d_link=''
 d_locconv=''
 d_lockf=''
@@ -386,9 +408,11 @@ longdblsize=''
 d_longlong=''
 longlongsize=''
 d_lstat=''
+d_madvise=''
 d_mblen=''
 d_mbstowcs=''
 d_mbtowc=''
+d_memchr=''
 d_memcmp=''
 d_memcpy=''
 d_memmove=''
@@ -396,11 +420,16 @@ d_memset=''
 d_mkdir=''
 d_mkfifo=''
 d_mktime=''
+d_mmap=''
+mmaptype=''
+d_mprotect=''
 d_msg=''
 d_msgctl=''
 d_msgget=''
 d_msgrcv=''
 d_msgsnd=''
+d_msync=''
+d_munmap=''
 d_nice=''
 d_open3=''
 d_fpathconf=''
@@ -409,15 +438,17 @@ d_pause=''
 d_pipe=''
 d_poll=''
 d_portable=''
+d_old_pthread_create_joinable=''
+old_pthread_create_joinable=''
 d_pthread_yield=''
 d_sched_yield=''
 sched_yield=''
-d_pthreads_created_joinable=''
 d_readdir=''
 d_rewinddir=''
 d_seekdir=''
 d_telldir=''
 d_readlink=''
+d_readv=''
 d_rename=''
 d_rmdir=''
 d_safebcpy=''
@@ -451,6 +482,7 @@ d_setrgid=''
 d_setruid=''
 d_setsent=''
 d_setsid=''
+d_setspent=''
 d_setvbuf=''
 d_sfio=''
 usesfio=''
@@ -463,12 +495,27 @@ d_shmdt=''
 d_shmget=''
 d_sigaction=''
 d_sigsetjmp=''
+d_cmsghdr_s=''
+d_msg_ctrunc=''
+d_msg_dontroute=''
+d_msg_oob=''
+d_msg_peek=''
+d_msg_proxy=''
+d_msghdr_s=''
 d_oldsock=''
+d_recvmsg=''
+d_scm_rights=''
+d_sendmsg=''
 d_socket=''
 d_sockpair=''
 sockethdr=''
 socketlib=''
 d_statblks=''
+d_fstatfs=''
+d_statfs=''
+d_statfsflags=''
+d_fstatvfs=''
+d_statvfs=''
 d_stdio_cnt_lval=''
 d_stdio_ptr_lval=''
 d_stdiobase=''
@@ -496,6 +543,7 @@ d_sysconf=''
 d_system=''
 d_tcgetpgrp=''
 d_tcsetpgrp=''
+d_telldirproto=''
 d_time=''
 timetype=''
 clocktype=''
@@ -517,13 +565,7 @@ d_wait4=''
 d_waitpid=''
 d_wcstombs=''
 d_wctomb=''
-d_dbmclose64=''
-d_dbminit64=''
-d_delete64=''
-d_fetch64=''
-d_firstkey64=''
-d_nextkey64=''
-d_store64=''
+d_writev=''
 dlext=''
 cccdlflags=''
 ccdlflags=''
@@ -533,6 +575,8 @@ lddlflags=''
 usedl=''
 doublesize=''
 ebcdic=''
+fflushNULL=''
+fflushall=''
 fpostype=''
 gidtype=''
 groupstype=''
@@ -558,14 +602,19 @@ d_int64t=''
 i_inttypes=''
 i_limits=''
 i_locale=''
+i_machcthr=''
 i_malloc=''
 i_math=''
 i_memory=''
+i_mntent=''
 i_ndbm=''
 i_netdb=''
 i_neterrno=''
+i_netinettcp=''
 i_niin=''
 i_sysin=''
+i_poll=''
+i_pthread=''
 d_pwage=''
 d_pwchange=''
 d_pwclass=''
@@ -576,6 +625,8 @@ d_pwpasswd=''
 d_pwquota=''
 i_pwd=''
 i_sfio=''
+i_shadow=''
+i_socks=''
 i_stddef=''
 i_stdlib=''
 i_string=''
@@ -588,14 +639,19 @@ i_bsdioctl=''
 i_sysfilio=''
 i_sysioctl=''
 i_syssockio=''
+i_sysmman=''
+i_sysmount=''
 i_sysndir=''
 i_sysparam=''
 i_sysresrc=''
 i_syssecrt=''
 i_sysselct=''
 i_sysstat=''
+i_sysstatvfs=''
 i_systimes=''
 i_systypes=''
+d_iovec_s=''
+i_sysuio=''
 i_sysun=''
 i_syswait=''
 i_sgtty=''
@@ -612,26 +668,18 @@ i_stdarg=''
 i_varargs=''
 i_varhdr=''
 i_vfork=''
+installprefix=''
+installprefixexp=''
+installstyle=''
+installusrbinperl=''
 intsize=''
 longsize=''
 shortsize=''
-d_dirent64s=''
-d_flock64s=''
-d_fstat64=''
-d_ftruncate64=''
-d_ino64t=''
-d_lockf64=''
-d_lseek64=''
-d_lstat64=''
-d_off64t=''
-d_open64=''
-d_opendir64=''
-d_readdir64=''
-d_seekdir64=''
-d_stat64=''
-d_telldir64=''
-d_truncate64=''
+d_fpos64_t=''
+d_llseek=''
+d_off64_t=''
 libc=''
+ldlibpthname=''
 libperl=''
 shrpenv=''
 useshrplib=''
@@ -643,6 +691,18 @@ xlibpth=''
 ignore_versioned_solibs=''
 libs=''
 lns=''
+d_PRIEldbl=''
+d_PRIFldbl=''
+d_PRIGldbl=''
+d_PRIeldbl=''
+d_PRIfldbl=''
+d_PRIgldbl=''
+sPRIEldbl=''
+sPRIFldbl=''
+sPRIGldbl=''
+sPRIeldbl=''
+sPRIfldbl=''
+sPRIgldbl=''
 lseeksize=''
 lseektype=''
 make_set_make=''
@@ -667,6 +727,7 @@ models=''
 small=''
 split=''
 modetype=''
+multiarch=''
 mydomain=''
 myhostname=''
 phostname=''
@@ -701,8 +762,19 @@ installprivlib=''
 privlib=''
 privlibexp=''
 prototype=''
-pthread_setdetachstate_pointer=''
 ptrsize=''
+d_PRIX64=''
+d_PRId64=''
+d_PRIi64=''
+d_PRIo64=''
+d_PRIu64=''
+d_PRIx64=''
+sPRIX64=''
+sPRId64=''
+sPRIi64=''
+sPRIo64=''
+sPRIu64=''
+sPRIx64=''
 drand01=''
 randbits=''
 randfunc=''
@@ -714,15 +786,19 @@ scriptdirexp=''
 selectminbits=''
 selecttype=''
 sh=''
+sig_count=''
 sig_name=''
 sig_name_init=''
 sig_num=''
+sig_num_init=''
 installsitearch=''
 sitearch=''
 sitearchexp=''
 installsitelib=''
 sitelib=''
 sitelibexp=''
+siteprefix=''
+siteprefixexp=''
 sizetype=''
 so=''
 sharpbang=''
@@ -733,34 +809,42 @@ ssizetype=''
 startperl=''
 startsh=''
 stdchar=''
-d_fgetpos64=''
-d_fopen64=''
-d_freopen64=''
-d_fseek64=''
-d_fseeko64=''
-d_fsetpos64=''
-d_ftell64=''
-d_ftello64=''
-d_tmpfile64=''
+d_stdio_stream_array=''
+stdio_stream_array=''
+d_strtoull=''
 sysman=''
 trnl=''
+uidsign=''
 uidtype=''
 archname64=''
 use64bits=''
+uselargefiles=''
+uselongdouble=''
+usemorebits=''
 usemultiplicity=''
 nm_opt=''
 nm_so_opt=''
 runnm=''
 usenm=''
 useperlio=''
+usesocks=''
 d_oldpthreads=''
 usethreads=''
 incpath=''
 mips=''
 mips_type=''
 usrinc=''
+d_vendorlib=''
+installvendorlib=''
+vendorlib=''
+vendorlibexp=''
+usevendorprefix=''
+vendorprefix=''
+vendorprefixexp=''
 defvoidused=''
 voidflags=''
+pm_apiversion=''
+xs_apiversion=''
 CONFIG=''
 
 define='define'
@@ -778,24 +862,6 @@ if test -f /etc/unixtovms.exe; then
 fi
 
 i_whoami=''
-: change the next line if compiling for Xenix/286 on Xenix/386
-xlibpth='/usr/lib/386 /lib/386'
-
-: Possible local library directories to search.
-loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
-loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
-
-: general looking path for locating libraries
-glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
-glibpth="$glibpth /lib /usr/lib $xlibpth"
-glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
-glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
-
-: 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=''
-
 : Possible local include directories to search.
 : Set locincpth to "" in a hint file to defeat local include searches.
 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
@@ -811,7 +877,7 @@ 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 PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4 SVR5"
 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"
@@ -874,8 +940,27 @@ _exe=''
 : Extra object files, if any, needed on this platform.
 archobjs=''
 groupstype=''
+: change the next line if compiling for Xenix/286 on Xenix/386
+xlibpth='/usr/lib/386 /lib/386'
+
+: Possible local library directories to search.
+loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
+loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
+
+: general looking path for locating libraries
+glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
+glibpth="$glibpth /lib /usr/lib $xlibpth"
+glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
+glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
+
+: 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=''
+: some systems want to use only the non-versioned libso:s
 ignore_versioned_solibs=''
 : full support for void wanted by default
 defvoidused=15
@@ -885,11 +970,13 @@ useposix=true
 : set useopcode=false in your hint file to disable the Opcode extension.
 useopcode=true
 : set usemultiplicity on the Configure command line to enable multiplicity.
+: set usesocks on the Configure command line to enable socks.
 : set usethreads on the Configure command line to enable threads.
 : List of libraries we want.
 : If anyone needs -lnet, put it in a hint file.
 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
-libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt"
+libswanted="$libswanted dld ld sun m c cposix posix"
+libswanted="$libswanted ndir dir crypt sec"
 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.
@@ -933,7 +1020,7 @@ case "$sh" in
 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
 
 Usually it's in /bin/sh.  How did you even get this far?
-Please contact me (Jarkko Hietaniemi) at jhi@iki.fi and 
+Please contact me (Perl Maintainers) at perlbug@perl.com and 
 we'll try to straighten this all out.
 EOM
        exit 1
@@ -1019,7 +1106,7 @@ done
 : produce awk script to parse command line options
 cat >options.awk <<'EOF'
 BEGIN {
-       optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
+       optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
 
        len = length(optstr);
        for (i = 1; i <= len; i++) {
@@ -1079,7 +1166,7 @@ silent=''
 extractsh=''
 override=''
 knowitall=''
-rm -f optdef.sh
+rm -f optdef.sh posthint.sh
 cat >optdef.sh <<EOS
 $startsh
 EOS
@@ -1133,8 +1220,57 @@ while test $# -gt 0; do
                esac
                shift
                ;;
+       -A)
+           shift
+           xxx=''
+           yyy="$1"
+           zzz=''
+           uuu=undef
+           case "$yyy" in
+            *=*) zzz=`echo $yyy|sed 's!=.*!!'`
+                 case "$zzz" in
+                 *:*) zzz='' ;;
+                 *)   xxx=append
+                      zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
+                      yyy=`echo $yyy|sed 's!=.*!!'` ;;
+                 esac
+                 ;;
+            esac
+            case "$xxx" in
+            '')  case "$yyy" in
+                 *:*) xxx=`echo $yyy|sed 's!:.*!!'`
+                      yyy=`echo $yyy|sed 's!^[^:]*:!!'`
+                      zzz=`echo $yyy|sed 's!^[^=]*=!!'`
+                      yyy=`echo $yyy|sed 's!=.*!!'` ;;
+                 *)   xxx=`echo $yyy|sed 's!:.*!!'`
+                      yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
+                 esac
+                 ;;       
+            esac
+           case "$xxx" in
+           append)
+               echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
+           clear)
+               echo "$yyy=''"                  >> posthint.sh ;;
+           define)
+               case "$zzz" in
+               '') zzz=define ;;
+               esac
+               echo "$yyy='$zzz'"              >> posthint.sh ;;
+           eval)
+               echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
+           prepend)
+               echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
+           undef)
+               case "$zzz" in
+               '') zzz="$uuu" ;;
+               esac
+               echo "$yyy=$zzz"                >> posthint.sh ;;
+            *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
+           esac
+           ;;
        -V) echo "$me generated by metaconfig 3.0 PL70." >&2
-               exit 0;;
+           exit 0;;
        --) break;;
        -*) echo "$me: unknown option $1" >&2; shift; error=true;;
        *) break;;
@@ -1145,7 +1281,7 @@ case "$error" in
 true)
        cat >&2 <<EOM
 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
-                 [-U symbol] [-U symbol=]
+                 [-U symbol] [-U symbol=] [-A command: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.
@@ -1162,6 +1298,16 @@ Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
   -U : undefine symbol:
          -U symbol    symbol gets the value 'undef'
          -U symbol=   symbol gets completely empty
+  -A : manipulate symbol after the platform specific hints have been applied:
+        -A symbol=value                append " "value to symbol
+        -A append:symbol=value         append value to symbol
+        -A define:symbol=value         define symbol to have value
+         -A clear:symbol               define symbol to be ''
+        -A define:symbol               define symbol to be 'define'
+        -A eval:symbol=value           define symbol to be eval of value
+        -A prepend:symbol=value        prepend value to symbol
+        -A undef:symbol                define symbol to be 'undef'
+        -A undef:symbol=               define symbol to be ''
   -V : print version number and exit (with a zero status).
 EOM
        exit 1
@@ -1187,6 +1333,8 @@ esac
 : run the defines and the undefines, if any, but leave the file out there...
 touch optdef.sh
 . ./optdef.sh
+: create the posthint manipulation script and leave the file out there...
+touch posthint.sh
 
 : set package name
 package=perl5
@@ -1221,7 +1369,12 @@ esac
 : Find the path to the source tree
 case "$src" in
 '') case "$0" in
-    */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
+    */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
+         case "$src" in
+        /*)    ;;
+         *)    src=`cd ../$src && pwd` ;;
+        esac
+         ;;
     *)   src='.';;
     esac;;
 esac
@@ -1266,7 +1419,7 @@ esac
 
 : script used to extract .SH files with variable substitutions
 cat >extract <<'EOS'
-CONFIG=true
+CONFIGDOTSH=true
 echo "Doing variable substitutions on .SH files..."
 if test -f $src/MANIFEST; then
        set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
@@ -1402,7 +1555,7 @@ THIS PACKAGE SEEMS TO BE INCOMPLETE.
 You have the option of continuing the configuration process, despite the
 distinct possibility that your kit is damaged, by typing 'y'es.  If you
 do, don't blame me if something goes wrong.  I advise you to type 'n'o
-and contact the author (jhi@iki.fi).
+and contact the author (perlbug@perl.com).
 
 EOM
                echo $n "Continue? [n] $c" >&4
@@ -1627,7 +1780,7 @@ 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.  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 (jhi@iki.fi) know how I blew it.
+have, let me (perlbug@perl.com) know how I blew it.
 
 This installation script affects things in two ways:
 
@@ -1725,7 +1878,6 @@ more
 nm
 nroff
 pg
-tee
 test
 uname
 zip
@@ -1990,7 +2142,7 @@ EOM
        (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
        dflt=''
        : Half the following guesses are probably wrong... If you have better
-       : tests or hints, please send them to jhi@iki.fi
+       : tests or hints, please send them to perlbug@perl.com
        : The metaconfig authors would also appreciate a copy...
        $test -f /irix && osname=irix
        $test -f /xenix && osname=sco_xenix
@@ -2037,9 +2189,13 @@ EOM
                [23]100) osname=mips ;;
                next*) osname=next ;;
                i386*)
-                       if $test -f /etc/kconfig; then
+                       tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
+                       if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
+                               osname='sco'
+                               osvers=$tmp
+                       elif $test -f /etc/kconfig; then
                                osname=isc
-                               if test "$lns" = "ln -s"; then
+                               if test "$lns" = "$ln -s"; then
                                        osvers=4
                                elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
                                        osvers=3
@@ -2047,6 +2203,7 @@ EOM
                                        osvers=2
                                fi
                        fi
+                       tmp=''
                        ;;
                pc*)
                        if test -n "$DJGPP"; then
@@ -2080,7 +2237,7 @@ EOM
                        osvers="$3"
                        ;;
                dynixptx*) osname=dynixptx
-                       osvers="$3"
+                       osvers=`echo "$4"|sed 's/^v//'`
                        ;;
                freebsd) osname=freebsd 
                        osvers="$3" ;;
@@ -2156,7 +2313,10 @@ EOM
                        mips)   osname=mips_osf1 ;;
                        esac
                        ;;
-               uts) osname=uts 
+               unixware) osname=svr5
+                       osvers="$4"
+                       ;;
+               uts) osname=uts
                        osvers="$3"
                        ;;
                qnx) osname=qnx
@@ -2291,7 +2451,7 @@ EOM
 
 You may give one or more space-separated answers, or "none" if appropriate.
 A well-behaved OS will have no hints, so answering "none" or just "Policy"
-is a good thing.  DO NOT give a wrong version.
+is a good thing.  DO NOT give a wrong version or a wrong OS.
 
 EOM
 
@@ -2405,8 +2565,11 @@ none)  osvers='' ;;
 *) osvers="$ans" ;;
 esac
 
+
+. ./posthint.sh
+
 : who configured the system
-cf_time=`LC_ALL=C; export LC_ALL; $date 2>&1`
+cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
 cf_by=`(logname) 2>/dev/null`
 case "$cf_by" in
 "")
@@ -2444,26 +2607,26 @@ cat <<EOM
 
 Perl can be built to take advantage of threads, on some systems.
 To do so, Configure must be run with -Dusethreads.
-(See README.threads for details.)
+
+Note that threading is a highly experimental feature, and
+some known race conditions still remain.  If you choose to try
+it, be very sure to not actually deploy it for production
+purposes.  README.threads has more details, and is required
+reading if you enable threads.
 EOM
 case "$usethreads" in
-$define|true|[yY]*)    dflt='y';;
+$define|true|[yY]*)     dflt='y';;
 *) dflt='n';;
 esac
 rp='Build a threading Perl?'
 . ./myread
 case "$ans" in
-y|Y)   val="$define" ;;     
+y|Y)    val="$define" ;;     
 *)      val="$undef" ;;
 esac
 set usethreads
 eval $setvar 
-: Look for a hint-file generated 'call-back-unit'.  Now that the
-: user has specified if a threading perl is to be built, we may need 
-: to set or change some other defaults.
-if $test -f usethreads.cbu; then
-    . ./usethreads.cbu
-fi
+
 case "$d_oldpthreads" in
 '')    : Configure tests would be welcome here.  For now, assume undef.
        val="$undef" ;;
@@ -2472,6 +2635,24 @@ esac
 set d_oldpthreads
 eval $setvar
 
+
+case "$usethreads" in
+"$define"|true|[yY]*)
+: Look for a hint-file generated 'call-back-unit'.  If the
+: user has specified that a threading perl is to be built,
+: we may need to set or change some other defaults.
+       if $test -f usethreads.cbu; then
+               echo "Your platform has some specific hints for threaded builds, using them..."
+               . ./usethreads.cbu
+       else
+               $cat <<EOM
+(Your platform doesn't have any specific hints for threaded builds.
+ Assuming POSIX threads, then.)
+EOM
+       fi
+    ;;
+esac
+
 cat <<EOM
 
 Perl can be built so that multiple Perl interpreters can coexist
 set usemultiplicity
 eval $setvar 
 
-cat <<EOM
-
-Perl can be built to take advantage of explicit 64-bit interfaces,
-on some systems.  To do so, Configure must be run with -Duse64bits.
-
-If this doesn't make any sense to you, just accept the default 'n'.
-EOM
-case "$use64bits" in
-$define|true|[yY]*)    dflt='y';;
-*) dflt='n';;
-esac
-rp='Try to use explicit 64-bit interfaces, if available?'
-. ./myread
-case "$ans" in
-y|Y) 
-       val="$define"
-       ;;     
-*)      
-       val="$undef"
+: determine where manual pages are on this system
+echo " "
+case "$sysman" in
+'') 
+       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 /usr/local/man/man1"
+       sysman=`./loc . /usr/man/man1 $syspath`
        ;;
 esac
-set use64bits
-eval $setvar
-
-archname64=''
-
-: determine the architecture name
-echo " "
-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/ *$//' -e 's/ /_/g' \
-                       -e 's/$/'"-$osname/" tmparch`
-       else
-               tarch="$osname"
-       fi
-       $rm -f tmparch
+if $test -d "$sysman"; then
+       echo "System manual is in $sysman." >&4
 else
-       tarch="$osname"
+       echo "Could not find manual pages in source form." >&4
 fi
-case "$myarchname" in
-''|"$tarch") ;;
-*)
-       echo "(Your architecture name used to be $myarchname.)"
-       archname=''
-       ;;
-esac
-myarchname="$tarch"
-case "$archname" in
-'') dflt="$tarch";;
-*) dflt="$archname";;
-esac
-rp='What is your architecture name'
-. ./myread
-archname="$ans"
-case "$usethreads" in
-$define)
-       echo "Threads selected." >&4
-       case "$archname" in
-        *-thread*) echo "...and architecture name already has -thread." >&4
-                ;;
-        *)      archname="$archname-thread"
-                echo "...setting architecture name to $archname." >&4
-                ;;
-        esac
-       ;;
-esac
-case "$usemultiplicity" in
-$define)
-       echo "Multiplicity selected." >&4
-       case "$archname" in
-        *-multi*) echo "...and architecture name already has -multi." >&4
-                ;;
-        *)      archname="$archname-multi"
-                echo "...setting architecture name to $archname." >&4
-                ;;
-        esac
-       ;;
-esac
-case "$use64bits" in
-$define)
-       echo "Explicit 64-bitness selected." >&4
-       case "$archname64" in
-       '')
-               ;;
-       *)
-               case "$archname" in
-               *-$archname64*) echo "...and architecture name already has $archname64." >&4
-                       ;;
-               *)      archname="$archname-$archname64"
-                       echo "...setting architecture name to $archname." >&4
-                       ;;
-               esac
-               ;;
-       esac
-esac
 
-: is AFS running?
-echo " "
-case "$afs" in
-$define|true)  afs=true ;;
-$undef|false)  afs=false ;;
-*)     if test -d /afs; then
-               afs=true
+: see what memory models we can support
+case "$models" in
+'')
+       $cat >pdp11.c <<'EOP'
+int main() {
+#ifdef pdp11
+       exit(0);
+#else
+       exit(1);
+#endif
+}
+EOP
+       ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
+       if $test -f pdp11 && ./pdp11 2>/dev/null; then
+               dflt='unsplit split'
        else
-               afs=false
-       fi
-       ;;
+               tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
+               case "$tans" in
+               X) dflt='none';;
+               *) if $test -d /lib/small || $test -d /usr/lib/small; then
+                               dflt='small'
+                       else
+                               dflt=''
+                       fi
+                       if $test -d /lib/medium || $test -d /usr/lib/medium; then
+                               dflt="$dflt medium"
+                       fi
+                       if $test -d /lib/large || $test -d /usr/lib/large; then
+                               dflt="$dflt large"
+                       fi
+                       if $test -d /lib/huge || $test -d /usr/lib/huge; then
+                               dflt="$dflt huge"
+                       fi
+               esac
+       fi;;
+*) dflt="$models";;
 esac
-if $afs; then
-       echo "AFS may be running... I'll be extra cautious then..." >&4
-else
-       echo "AFS does not seem to be running..." >&4
-fi
+$cat <<EOM
+Some systems have different model sizes.  On most systems they are called
+small, medium, large, and huge.  On the PDP11 they are called unsplit and
+split.  If your system doesn't support different memory models, say "none".
+If you wish to force everything to one memory model, say "none" here and
+put the appropriate flags later when it asks you for other cc and ld flags.
+Venix systems may wish to put "none" and let the compiler figure things out.
+(In the following question multiple model names should be space separated.)
 
-: decide how portable to be.  Allow command line overrides.
-case "$d_portable" in
-"$undef") ;;
-*)     d_portable="$define" ;;
-esac
+The default for most systems is "none".
 
-: set up shell script to do ~ expansion
-cat >filexp <<EOSS
-$startsh
-: expand filename
-case "\$1" in
- ~/*|~)
-       echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
+EOM
+rp="Which memory models are supported?"
+. ./myread
+models="$ans"
+
+case "$models" in
+none)
+       small=''
+       medium=''
+       large=''
+       huge=''
+       unsplit=''
+       split=''
        ;;
- ~*)
-       if $test -f /bin/csh; then
-               /bin/csh -f -c "glob \$1"
-               failed=\$?
-               echo ""
-               exit \$failed
-       else
-               name=\`$expr x\$1 : '..\([^/]*\)'\`
-               dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
-               if $test ! -d "\$dir"; then
-                       me=\`basename \$0\`
-                       echo "\$me: can't locate home directory for: \$name" >&2
-                       exit 1
-               fi
-               case "\$1" in
-               */*)
-                       echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
-                       ;;
-               *)
-                       echo \$dir
-                       ;;
+*split)
+       case "$split" in
+       '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
+                        $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
+                       dflt='-i'
+               else
+                       dflt='none'
+               fi;;
+       *) dflt="$split";;
+       esac
+       rp="What flag indicates separate I and D space?"
+       . ./myread
+       tans="$ans"
+       case "$tans" in
+       none) tans='';;
+       esac
+       split="$tans"
+       unsplit='';;
+*large*|*small*|*medium*|*huge*)
+       case "$models" in
+       *large*)
+               case "$large" in
+               '') dflt='-Ml';;
+               *) dflt="$large";;
                esac
-       fi
+       rp="What flag indicates large model?"
+       . ./myread
+       tans="$ans"
+       case "$tans" in
+       none) tans='';
+       esac
+       large="$tans";;
+       *) large='';;
+       esac
+       case "$models" in
+       *huge*) case "$huge" in
+               '') dflt='-Mh';;
+               *) dflt="$huge";;
+               esac
+               rp="What flag indicates huge model?"
+               . ./myread
+               tans="$ans"
+               case "$tans" in
+               none) tans='';
+               esac
+               huge="$tans";;
+       *) huge="$large";;
+       esac
+       case "$models" in
+       *medium*) case "$medium" in
+               '') dflt='-Mm';;
+               *) dflt="$medium";;
+               esac
+               rp="What flag indicates medium model?"
+               . ./myread
+               tans="$ans"
+               case "$tans" in
+               none) tans='';
+               esac
+               medium="$tans";;
+       *) medium="$large";;
+       esac
+       case "$models" in
+       *small*) case "$small" in
+               '') dflt='none';;
+               *) dflt="$small";;
+               esac
+               rp="What flag indicates small model?"
+               . ./myread
+               tans="$ans"
+               case "$tans" in
+               none) tans='';
+               esac
+               small="$tans";;
+       *) small='';;
+       esac
        ;;
 *)
-       echo \$1
+       echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
        ;;
 esac
-EOSS
-chmod +x filexp
-$eunicefix filexp
-
-: now set up to get a file name
-cat <<EOS >getfile
-$startsh
-EOS
-cat <<'EOSC' >>getfile
-tilde=''
-fullpath=''
-already=''
-skip=''
-none_ok=''
-exp_file=''
-nopath_ok=''
-orig_rp="$rp"
-orig_dflt="$dflt"
+$rm -f pdp11.* pdp11
 
-case "$fn" in
-*\(*)
-       expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
-       fn=`echo $fn | sed 's/(.*)//'`
+: make some quick guesses about what we are up against
+echo " "
+$echo $n "Hmm...  $c"
+echo exit 1 >bsd
+echo exit 1 >usg
+echo exit 1 >v7
+echo exit 1 >osf1
+echo exit 1 >eunice
+echo exit 1 >xenix
+echo exit 1 >venix
+echo exit 1 >os2
+d_bsd="$undef"
+$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
+if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
+then
+       echo "Looks kind of like an OSF/1 system, but we'll see..."
+       echo exit 0 >osf1
+elif test `echo abc | tr a-z A-Z` = Abc ; then
+       xxx=`./loc addbib blurfl $pth`
+       if $test -f $xxx; then
+       echo "Looks kind of like a USG system with BSD features, but we'll see..."
+               echo exit 0 >bsd
+               echo exit 0 >usg
+       else
+               if $contains SIGTSTP foo >/dev/null 2>&1 ; then
+                       echo "Looks kind of like an extended USG system, but we'll see..."
+               else
+                       echo "Looks kind of like a USG system, but we'll see..."
+               fi
+               echo exit 0 >usg
+       fi
+elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
+       echo "Looks kind of like a BSD system, but we'll see..."
+       d_bsd="$define"
+       echo exit 0 >bsd
+else
+       echo "Looks kind of like a Version 7 system, but we'll see..."
+       echo exit 0 >v7
+fi
+case "$eunicefix" in
+*unixtovms*)
+       $cat <<'EOI'
+There is, however, a strange, musty smell in the air that reminds me of
+something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
+EOI
+       echo exit 0 >eunice
+       d_eunice="$define"
+: it so happens the Eunice I know will not run shell scripts in Unix format
        ;;
-esac
-
-case "$fn" in
-*:*)
-       loc_file=`expr $fn : '.*:\(.*\)'`
-       fn=`expr $fn : '\(.*\):.*'`
+*)
+       echo " "
+       echo "Congratulations.  You aren't running Eunice."
+       d_eunice="$undef"
        ;;
 esac
-
-case "$fn" in
-*~*) tilde=true;;
-esac
-case "$fn" in
-*/*) fullpath=true;;
-esac
-case "$fn" in
-*+*) skip=true;;
-esac
-case "$fn" in
-*n*) none_ok=true;;
-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';;
-esac
-
-what="$type"
-case "$what" in
-Locate) what='File';;
-esac
-
-case "$exp_file" in
-'')
-       case "$d_portable" in
-       "$define") ;;
-       *) exp_file=true;;
-       esac
+: Detect OS2.  The p_ variable is set above in the Head.U unit.
+case "$p_" in
+:) ;;
+*)
+       $cat <<'EOI'
+I have the feeling something is not exactly right, however...don't tell me...
+lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
+EOI
+       echo exit 0 >os2
        ;;
 esac
+if test -f /xenix; then
+       echo "Actually, this looks more like a XENIX system..."
+       echo exit 0 >xenix
+       d_xenix="$define"
+else
+       echo " "
+       echo "It's not Xenix..."
+       d_xenix="$undef"
+fi
+chmod +x xenix
+$eunicefix xenix
+if test -f /venix; then
+       echo "Actually, this looks more like a VENIX system..."
+       echo exit 0 >venix
+else
+       echo " "
+       if ./xenix; then
+               : null
+       else
+               echo "Nor is it Venix..."
+       fi
+fi
+chmod +x bsd usg v7 osf1 eunice xenix venix os2
+$eunicefix bsd usg v7 osf1 eunice xenix venix os2
+$rm -f foo
 
-cd ..
-while test "$type"; do
-       redo=''
-       rp="$orig_rp"
-       dflt="$orig_dflt"
-       case "$tilde" in
-       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=''
-               ansexp=''
-               case "$none_ok" in
-               true) type='';;
-               esac
-               ;;
-       *)
-               case "$tilde" in
-               '') value="$ans"
-                       ansexp="$ans";;
-               *)
-                       value=`UU/filexp $ans`
-                       case $? in
-                       0)
-                               if test "$ans" != "$value"; then
-                                       echo "(That expands to $value on this system.)"
-                               fi
-                               ;;
-                       *) value="$ans";;
-                       esac
-                       ansexp="$value"
-                       case "$exp_file" in
-                       '') value="$ans";;
-                       esac
-                       ;;
-               esac
-               case "$fullpath" in
-               true)
-                       case "$ansexp" in
-                       /*) value="$ansexp" ;;
-                       *)
-                               redo=true
-                               case "$already" in
-                               true)
-                               echo "I shall only accept a full path name, as in /bin/ls." >&4
-                               echo "Use a ! shell escape if you wish to check pathnames." >&4
-                                       ;;
-                               *)
-                               echo "Please give a full path name, starting with slash." >&4
-                                       case "$tilde" in
-                                       true)
-                               echo "Note that using ~name is ok provided it expands well." >&4
-                                               already=true
-                                               ;;
-                                       esac
-                               esac
-                               ;;
-                       esac
-                       ;;
-               esac
-               case "$redo" in
-               '')
-                       case "$type" in
-                       File)
-                               if test -f "$ansexp"; then
-                                       type=''
-                               elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
-                               then
-                                       echo "($value is not a plain file, but that's ok.)"
-                                       type=''
-                               fi
-                               ;;
-                       Directory)
-                               if test -d "$ansexp"; then
-                                       type=''
-                               fi
-                               ;;
-                       Locate)
-                               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 "$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
-
-                       case "$skip" in
-                       true) type='';
-                       esac
-
-                       case "$type" in
-                       '') ;;
-                       *)
-                               if test "$fastread" = yes; then
-                                       dflt=y
+: see if we need a special compiler
+echo " "
+if ./usg; then
+       case "$cc" in
+       '') case "$Mcc" in
+               /*) dflt='Mcc';;
+               *) case "$large" in
+                       -M*) dflt='cc';;
+                       *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
+                                       if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
+                                               dflt='cc'
+                                       else
+                                               dflt='cc -M'
+                                       fi
                                else
-                                       dflt=n
-                               fi
-                               rp="$what $value doesn't exist.  Use that name anyway?"
-                               . UU/myread
-                               dflt=''
-                               case "$ans" in
-                               y*) type='';;
-                               *) echo " ";;
-                               esac
-                               ;;
-                       esac
-                       ;;
-               esac
-               ;;
+                                       dflt='cc'
+                               fi;;
+                       esac;;
+               esac;;
+       *)  dflt="$cc";;
        esac
-done
-cd UU
-ans="$value"
-rp="$orig_rp"
-dflt="$orig_dflt"
-rm -f getfile.ok
-EOSC
+       case "$dflt" in
+       *M*)    $cat <<'EOM'
+On some older systems the default C compiler will not resolve multiple global
+references that happen to have the same name.  On some such systems the "Mcc"
+command may be used to force these to be resolved.  On other systems a "cc -M"
+command is required.  (Note that the -M flag on other systems indicates a
+memory model to use!) If you have the Gnu C compiler, you might wish to use
+that instead.
 
-: determine root of directory hierarchy where package will be installed.
-case "$prefix" in
-'')
-       dflt=`./loc . /usr/local /usr/local /local /opt /usr`
-       ;;
-*)
-       dflt="$prefix"
+EOM
        ;;
+       esac
+       rp="Use which C compiler?"
+       . ./myread
+       cc="$ans"
+else
+       case "$cc" in
+       '') dflt=cc;;
+       *) dflt="$cc";;
+       esac
+       rp="Use which C compiler?"
+       . ./myread
+       cc="$ans"
+fi
+: Look for a hint-file generated 'call-back-unit'.  Now that the
+: user has specified the compiler, we may need to set or change some
+: other defaults.
+if $test -f cc.cbu; then
+    . ./cc.cbu
+fi
+echo " "
+echo "Checking for GNU cc in disguise and/or its version number..." >&4
+$cat >gccvers.c <<EOM
+#include <stdio.h>
+int main() {
+#ifdef __GNUC__
+#ifdef __VERSION__
+       printf("%s\n", __VERSION__);
+#else
+       printf("%s\n", "1");
+#endif
+#endif
+       exit(0);
+}
+EOM
+if $cc -o gccvers gccvers.c; then
+       gccversion=`./gccvers`
+       case "$gccversion" in
+       '') echo "You are not using GNU cc." ;;
+       *)  echo "You are using GNU cc $gccversion." ;;
+       esac
+else
+       echo " "
+       echo "*** WHOA THERE!!! ***" >&4
+       echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
+       case "$knowitall" in
+       '')
+       echo "    You'd better start hunting for one and let me know about it." >&4
+               exit 1
+               ;;
+       esac
+fi
+$rm -f gccvers*
+case "$gccversion" in
+1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
 esac
-$cat <<EOM
 
-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.
 
-EOM
-fn=d~
-rp='Installation prefix to use?'
-. ./getfile
-oldprefix=''
-case "$prefix" in
-'') ;;
-*)
-       case "$ans" in
-       "$prefix") ;;
-       *) oldprefix="$prefix";;
-       esac
+case "$usemorebits" in
+"$define"|true|[yY]*)
+       use64bits="$define"
+       uselongdouble="$define"
+       usemorebits="$define"
+       ;;
+*)     usemorebits="$undef"
        ;;
 esac
-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'
 
-: set the base revision
-baserev=5.0
+cat <<EOM
 
-: get the patchlevel
-echo " "
-echo "Getting the current patchlevel..." >&4
-if $test -r $rsrc/patchlevel.h;then
-       patchlevel=`awk '/define[       ]+PATCHLEVEL/ {print $3}' $rsrc/patchlevel.h`
-       subversion=`awk '/define[       ]+SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
-else
-       patchlevel=0
-       subversion=0
-fi
-$echo $n "(You have $package" $c
-case "$package" in
-"*$baserev")   ;;
-*)             $echo $n " $baserev" $c ;;
-esac
-$echo $n " patchlevel $patchlevel" $c
-test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
-echo ".)"
+Perl can be built to understand large files (files larger than 2 gigabytes)
+on some systems.  To do so, Configure must be run with -Duselargefiles.
 
-if test 0 -eq "$subversion"; then
-       version=`LC_ALL=C; export LC_ALL; \
-                echo $baserev $patchlevel | \
-                $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
-else
-       version=`LC_ALL=C; export LC_ALL; \
-                echo $baserev $patchlevel $subversion | \
-                $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
-fi
-: Figure out perl API version.  Perhaps this should be in patchlevel.h
-if test "$subversion" -lt 50; then
-       apiversion=`LC_ALL=C; export LC_ALL; \
-                echo $baserev $patchlevel | \
-                $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
-else
-       apiversion="$version"
-fi
-
-: determine where private library files go
-: Usual default is /usr/local/lib/perl5/$version.
-: Also allow things like /opt/perl/lib/$version, since 
-: /opt/perl/lib/perl5... would be redundant.
-case "$prefix" in
-*perl*) set dflt privlib lib/$version ;;
-*)      set dflt privlib lib/$package/$version ;;
+If this doesn't make any sense to you, just accept the default.
+EOM
+case "$uselargefiles" in
+"$define"|true|[yY]*) dflt='y' ;;
+*)     dflt='n' ;;
+esac
+rp='Try to understand large files?'
+. ./myread
+case "$ans" in
+y|Y)   val="$define" ;;
+*)     val="$undef"  ;;
+esac
+set uselargefiles
+eval $setvar
+case "$uselargefiles" in
+"$define") use64bits="$define" ;;
 esac
-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
+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).
+Perl can be built to take advantage of explicit 64-bit interfaces,
+on some systems.  To do so, Configure must be run with -Duse64bits.
 
+If this doesn't make any sense to you, just accept the default.
 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
-: privlib default is /usr/local/lib/$package/$version
-: archlib default is /usr/local/lib/$package/$version/$archname
-: privlib may have an optional trailing /share.
-tdflt=`echo $privlib | $sed 's,/share$,,'`
-tdflt=$tdflt/$archname
-case "$archlib" in
-'')    dflt=$tdflt
+case "$use64bits" in
+$define|true|[yY]*)    dflt='y';;
+*) dflt='n';;
+esac
+rp='Try to use explicit 64-bit interfaces, if available?'
+. ./myread
+case "$ans" in
+y|Y) 
+       val="$define"
+       ;;     
+*)      
+       val="$undef"
        ;;
-*)     dflt="$archlib"
-    ;;
 esac
-cat <<EOM
+set use64bits
+eval $setvar
 
-$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.
+case "$archname64" in
+'') archname64='' ;;   # not a typo
+esac
 
+case "$use64bits" in
+"$define"|true|[yY]*)
+: Look for a hint-file generated 'call-back-unit'.  If the
+: user has specified that a 64 bit perl is to be built,
+: we may need to set or change some other defaults.
+       if $test -f use64bits.cbu; then
+               echo "Your platform has some specific hints for 64-bit builds, using them..."
+               . ./use64bits.cbu
+       else
+               $cat <<EOM
+(Your platform doesn't have any specific hints for 64-bit builds.
+ This is probably okay, especially if your system is a true 64-bit system.)
 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 architecture-dependent library files reside from the directory
-in which they are installed (and from which they are presumably copied
-to the former directory by occult means).
-
+               case "$gccversion" in
+               '')     ;;
+               *)      $cat <<EOM
+But since you seem to be using gcc,
+I will now add -DUSE_LONG_LONG to the compilation flags.
 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
-       d_archlib="$define"
-fi
+                       ccflags="$ccflags -DUSE_LONG_LONG"
+                       ;;
+               esac
+       fi
+       ;;
+esac
 
-: make some quick guesses about what we are up against
+: determine the architecture name
 echo " "
-$echo $n "Hmm...  $c"
-echo exit 1 >bsd
-echo exit 1 >usg
-echo exit 1 >v7
-echo exit 1 >osf1
-echo exit 1 >eunice
-echo exit 1 >xenix
-echo exit 1 >venix
-echo exit 1 >os2
-d_bsd="$undef"
-$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
-if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
-then
-       echo "Looks kind of like an OSF/1 system, but we'll see..."
-       echo exit 0 >osf1
-elif test `echo abc | tr a-z A-Z` = Abc ; then
-       xxx=`./loc addbib blurfl $pth`
-       if $test -f $xxx; then
-       echo "Looks kind of like a USG system with BSD features, but we'll see..."
-               echo exit 0 >bsd
-               echo exit 0 >usg
+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/ *$//' -e 's/ /_/g' \
+                       -e 's/$/'"-$osname/" tmparch`
        else
-               if $contains SIGTSTP foo >/dev/null 2>&1 ; then
-                       echo "Looks kind of like an extended USG system, but we'll see..."
-               else
-                       echo "Looks kind of like a USG system, but we'll see..."
-               fi
-               echo exit 0 >usg
+               tarch="$osname"
        fi
-elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
-       echo "Looks kind of like a BSD system, but we'll see..."
-       d_bsd="$define"
-       echo exit 0 >bsd
+       $rm -f tmparch
 else
-       echo "Looks kind of like a Version 7 system, but we'll see..."
-       echo exit 0 >v7
+       tarch="$osname"
 fi
-case "$eunicefix" in
-*unixtovms*)
-       $cat <<'EOI'
-There is, however, a strange, musty smell in the air that reminds me of
-something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
-EOI
-       echo exit 0 >eunice
-       d_eunice="$define"
-: it so happens the Eunice I know will not run shell scripts in Unix format
-       ;;
+case "$myarchname" in
+''|"$tarch") ;;
 *)
-       echo " "
-       echo "Congratulations.  You aren't running Eunice."
-       d_eunice="$undef"
+       echo "(Your architecture name used to be $myarchname.)"
+       archname=''
        ;;
 esac
-: Detect OS2.  The p_ variable is set above in the Head.U unit.
-case "$p_" in
-:) ;;
-*)
-       $cat <<'EOI'
-I have the feeling something is not exactly right, however...don't tell me...
-lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
-EOI
-       echo exit 0 >os2
+myarchname="$tarch"
+case "$archname" in
+'') dflt="$tarch";;
+*) dflt="$archname";;
+esac
+rp='What is your architecture name'
+. ./myread
+archname="$ans"
+case "$usethreads" in
+$define)
+       echo "Threads selected." >&4
+       case "$archname" in
+        *-thread*) echo "...and architecture name already has -thread." >&4
+                ;;
+        *)      archname="$archname-thread"
+                echo "...setting architecture name to $archname." >&4
+                ;;
+        esac
        ;;
 esac
-if test -f /xenix; then
-       echo "Actually, this looks more like a XENIX system..."
-       echo exit 0 >xenix
-       d_xenix="$define"
-else
-       echo " "
-       echo "It's not Xenix..."
-       d_xenix="$undef"
-fi
-chmod +x xenix
-$eunicefix xenix
-if test -f /venix; then
-       echo "Actually, this looks more like a VENIX system..."
-       echo exit 0 >venix
-else
-       echo " "
-       if ./xenix; then
-               : null
-       else
-               echo "Nor is it Venix..."
-       fi
-fi
-chmod +x bsd usg v7 osf1 eunice xenix venix os2
-$eunicefix bsd usg v7 osf1 eunice xenix venix os2
-$rm -f foo
-
-: 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.)
+case "$usemultiplicity" in
+$define)
+       echo "Multiplicity selected." >&4
+       case "$archname" in
+        *-multi*) echo "...and architecture name already has -multi." >&4
+                ;;
+        *)      archname="$archname-multi"
+                echo "...setting architecture name to $archname." >&4
+                ;;
+        esac
+       ;;
+esac
+case "$use64bits" in
+$define)
+       echo "Explicit 64-bitness selected." >&4
+       case "$archname64" in
+       '')
+               ;;
+       *)
+               case "$archname" in
+               *-$archname64*) echo "...and architecture name already has $archname64." >&4
+                       ;;
+               *)      archname="$archname-$archname64"
+                       echo "...setting architecture name to $archname." >&4
+                       ;;
+               esac
+               ;;
+       esac
+esac
 
-EOM
+: decide how portable to be.  Allow command line overrides.
+case "$d_portable" in
+"$undef") ;;
+*)     d_portable="$define" ;;
+esac
 
-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"
+: set up shell script to do ~ expansion
+cat >filexp <<EOSS
+$startsh
+: expand filename
+case "\$1" in
+ ~/*|~)
+       echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
+       ;;
+ ~*)
+       if $test -f /bin/csh; then
+               /bin/csh -f -c "glob \$1"
+               failed=\$?
+               echo ""
+               exit \$failed
        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
+               name=\`$expr x\$1 : '..\([^/]*\)'\`
+               dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
+               if $test ! -d "\$dir"; then
+                       me=\`basename \$0\`
+                       echo "\$me: can't locate home directory for: \$name" >&2
+                       exit 1
+               fi
+               case "\$1" in
+               */*)
+                       echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
                        ;;
                *)
-                       $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
+                       echo \$dir
                        ;;
                esac
-               rp='Does your kernel have *secure* setuid scripts?'
-               . ./myread
-               case "$ans" in
-               [yY]*)  val="$define";;
-               *)      val="$undef";;
-               esac
        fi
-else
-       echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
-       echo "(That's for file descriptors, not floppy disks.)"
-       val="$undef"
-fi
-set d_suidsafe
-eval $setvar
-
-$rm -f reflect flect
-
-: now see if they want to do setuid emulation
-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
-       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
+       echo \$1
        ;;
 esac
-set d_dosuid
-eval $setvar
+EOSS
+chmod +x filexp
+$eunicefix filexp
 
-: determine where manual pages are on this system
-echo " "
-case "$sysman" in
-'') 
-       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 /usr/local/man/man1"
-       sysman=`./loc . /usr/man/man1 $syspath`
+: now set up to get a file name
+cat <<EOS >getfile
+$startsh
+EOS
+cat <<'EOSC' >>getfile
+tilde=''
+fullpath=''
+already=''
+skip=''
+none_ok=''
+exp_file=''
+nopath_ok=''
+orig_rp="$rp"
+orig_dflt="$dflt"
+case "$gfpth" in
+'') gfpth='.' ;;
+esac
+
+case "$fn" in
+*\(*)
+       expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
+       fn=`echo $fn | sed 's/(.*)//'`
        ;;
 esac
-if $test -d "$sysman"; then
-       echo "System manual is in $sysman." >&4
-else
-       echo "Could not find manual pages in source form." >&4
-fi
 
-: see what memory models we can support
-case "$models" in
-'')
-       $cat >pdp11.c <<'EOP'
-main() {
-#ifdef pdp11
-       exit(0);
-#else
-       exit(1);
-#endif
-}
-EOP
-       ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
-       if $test -f pdp11 && ./pdp11 2>/dev/null; then
-               dflt='unsplit split'
-       else
-               tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
-               case "$tans" in
-               X) dflt='none';;
-               *) if $test -d /lib/small || $test -d /usr/lib/small; then
-                               dflt='small'
-                       else
-                               dflt=''
-                       fi
-                       if $test -d /lib/medium || $test -d /usr/lib/medium; then
-                               dflt="$dflt medium"
-                       fi
-                       if $test -d /lib/large || $test -d /usr/lib/large; then
-                               dflt="$dflt large"
-                       fi
-                       if $test -d /lib/huge || $test -d /usr/lib/huge; then
-                               dflt="$dflt huge"
-                       fi
-               esac
-       fi;;
-*) dflt="$models";;
+case "$fn" in
+*:*)
+       loc_file=`expr $fn : '.*:\(.*\)'`
+       fn=`expr $fn : '\(.*\):.*'`
+       ;;
 esac
-$cat <<EOM
-Some systems have different model sizes.  On most systems they are called
-small, medium, large, and huge.  On the PDP11 they are called unsplit and
-split.  If your system doesn't support different memory models, say "none".
-If you wish to force everything to one memory model, say "none" here and
-put the appropriate flags later when it asks you for other cc and ld flags.
-Venix systems may wish to put "none" and let the compiler figure things out.
-(In the following question multiple model names should be space separated.)
 
-The default for most systems is "none".
+case "$fn" in
+*~*) tilde=true;;
+esac
+case "$fn" in
+*/*) fullpath=true;;
+esac
+case "$fn" in
+*+*) skip=true;;
+esac
+case "$fn" in
+*n*) none_ok=true;;
+esac
+case "$fn" in
+*e*) exp_file=true;;
+esac
+case "$fn" in
+*p*) nopath_ok=true;;
+esac
 
-EOM
-rp="Which memory models are supported?"
-. ./myread
-models="$ans"
+case "$fn" in
+*f*) type='File';;
+*d*) type='Directory';;
+*l*) type='Locate';;
+esac
 
-case "$models" in
-none)
-       small=''
-       medium=''
-       large=''
-       huge=''
-       unsplit=''
-       split=''
-       ;;
-*split)
-       case "$split" in
-       '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
-                        $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
-                       dflt='-i'
-               else
-                       dflt='none'
-               fi;;
-       *) dflt="$split";;
-       esac
-       rp="What flag indicates separate I and D space?"
-       . ./myread
-       tans="$ans"
-       case "$tans" in
-       none) tans='';;
-       esac
-       split="$tans"
-       unsplit='';;
-*large*|*small*|*medium*|*huge*)
-       case "$models" in
-       *large*)
-               case "$large" in
-               '') dflt='-Ml';;
-               *) dflt="$large";;
-               esac
-       rp="What flag indicates large model?"
-       . ./myread
-       tans="$ans"
-       case "$tans" in
-       none) tans='';
-       esac
-       large="$tans";;
-       *) large='';;
+what="$type"
+case "$what" in
+Locate) what='File';;
+esac
+
+case "$exp_file" in
+'')
+       case "$d_portable" in
+       "$define") ;;
+       *) exp_file=true;;
        esac
-       case "$models" in
-       *huge*) case "$huge" in
-               '') dflt='-Mh';;
-               *) dflt="$huge";;
-               esac
-               rp="What flag indicates huge model?"
-               . ./myread
-               tans="$ans"
-               case "$tans" in
-               none) tans='';
-               esac
-               huge="$tans";;
-       *) huge="$large";;
+       ;;
+esac
+
+cd ..
+while test "$type"; do
+       redo=''
+       rp="$orig_rp"
+       dflt="$orig_dflt"
+       case "$tilde" in
+       true) rp="$rp (~name ok)";;
        esac
-       case "$models" in
-       *medium*) case "$medium" in
-               '') dflt='-Mm';;
-               *) dflt="$medium";;
+       . 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=''
+               ansexp=''
+               case "$none_ok" in
+               true) type='';;
                esac
-               rp="What flag indicates medium model?"
-               . ./myread
-               tans="$ans"
-               case "$tans" in
-               none) tans='';
+               ;;
+       *)
+               case "$tilde" in
+               '') value="$ans"
+                       ansexp="$ans";;
+               *)
+                       value=`UU/filexp $ans`
+                       case $? in
+                       0)
+                               if test "$ans" != "$value"; then
+                                       echo "(That expands to $value on this system.)"
+                               fi
+                               ;;
+                       *) value="$ans";;
+                       esac
+                       ansexp="$value"
+                       case "$exp_file" in
+                       '') value="$ans";;
+                       esac
+                       ;;
                esac
-               medium="$tans";;
-       *) medium="$large";;
-       esac
-       case "$models" in
-       *small*) case "$small" in
-               '') dflt='none';;
-               *) dflt="$small";;
+               case "$fullpath" in
+               true)
+                       case "$ansexp" in
+                       /*) value="$ansexp" ;;
+                       *)
+                               redo=true
+                               case "$already" in
+                               true)
+                               echo "I shall only accept a full path name, as in /bin/ls." >&4
+                               echo "Use a ! shell escape if you wish to check pathnames." >&4
+                                       ;;
+                               *)
+                               echo "Please give a full path name, starting with slash." >&4
+                                       case "$tilde" in
+                                       true)
+                               echo "Note that using ~name is ok provided it expands well." >&4
+                                               already=true
+                                               ;;
+                                       esac
+                               esac
+                               ;;
+                       esac
+                       ;;
                esac
-               rp="What flag indicates small model?"
-               . ./myread
-               tans="$ans"
-               case "$tans" in
-               none) tans='';
+               case "$redo" in
+               '')
+                       case "$type" in
+                       File)
+                               for fp in $gfpth; do
+                                       if test "X$fp" = X.; then
+                                           pf="$ansexp"
+                                       else    
+                                           pf="$fp/$ansexp"
+                                       fi
+                                       if test -f "$pf"; then
+                                               type=''
+                                       elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
+                                       then
+                                               echo "($value is not a plain file, but that's ok.)"
+                                               type=''
+                                       fi
+                                       if test X"$type" = X; then
+                                           value="$pf"
+                                           break
+                                       fi
+                               done
+                               ;;
+                       Directory)
+                               for fp in $gfpth; do
+                                       if test "X$fp" = X.; then
+                                           pf="$ansexp"
+                                       else    
+                                           pf="$fp/$ansexp"
+                                       fi
+                                       if test -d "$pf"; then
+                                               type=''
+                                               value="$pf"
+                                               break
+                                       fi
+                               done
+                               ;;
+                       Locate)
+                               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 "$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
+
+                       case "$skip" in
+                       true) type='';
+                       esac
+
+                       case "$type" in
+                       '') ;;
+                       *)
+                               if test "$fastread" = yes; then
+                                       dflt=y
+                               else
+                                       dflt=n
+                               fi
+                               rp="$what $value doesn't exist.  Use that name anyway?"
+                               . UU/myread
+                               dflt=''
+                               case "$ans" in
+                               y*) type='';;
+                               *) echo " ";;
+                               esac
+                               ;;
+                       esac
+                       ;;
                esac
-               small="$tans";;
-       *) small='';;
+               ;;
        esac
+done
+cd UU
+ans="$value"
+rp="$orig_rp"
+dflt="$orig_dflt"
+rm -f getfile.ok
+test "X$gfpthkeep" != Xy && gfpth=""
+EOSC
+
+: determine root of directory hierarchy where package will be installed.
+case "$prefix" in
+'')
+       dflt=`./loc . /usr/local /usr/local /local /opt /usr`
        ;;
 *)
-       echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
+       dflt="$prefix"
        ;;
 esac
-$rm -f pdp11.* pdp11
+$cat <<EOM
 
-: see if we need a special compiler
-echo " "
-if ./usg; then
-       case "$cc" in
-       '') case "$Mcc" in
-               /*) dflt='Mcc';;
-               *) case "$large" in
-                       -M*) dflt='cc';;
-                       *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
-                                       if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
-                                               dflt='cc'
-                                       else
-                                               dflt='cc -M'
-                                       fi
-                               else
-                                       dflt='cc'
-                               fi;;
-                       esac;;
-               esac;;
-       *)  dflt="$cc";;
-       esac
-       case "$dflt" in
-       *M*)    $cat <<'EOM'
-On some older systems the default C compiler will not resolve multiple global
-references that happen to have the same name.  On some such systems the "Mcc"
-command may be used to force these to be resolved.  On other systems a "cc -M"
-command is required.  (Note that the -M flag on other systems indicates a
-memory model to use!) If you have the Gnu C compiler, you might wish to use
-that instead.
+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 this is something like /usr/local.
+If you wish to have binaries under /usr/bin but other parts of the
+installation under /usr/local, that's ok: you will be prompted
+separately for each of the installation directories, the prefix being
+only used to set the defaults.
 
 EOM
-       ;;
+fn=d~
+rp='Installation prefix to use?'
+. ./getfile
+oldprefix=''
+case "$prefix" in
+'') ;;
+*)
+       case "$ans" in
+       "$prefix") ;;
+       *) oldprefix="$prefix";;
        esac
-       rp="Use which C compiler?"
-       . ./myread
-       cc="$ans"
+       ;;
+esac
+prefix="$ans"
+prefixexp="$ansexp"
+
+: is AFS running?
+echo " "
+case "$afs" in
+$define|true)  afs=true ;;
+$undef|false)  afs=false ;;
+*)     if test -d /afs; then
+               afs=true
+       else
+               afs=false
+       fi
+       ;;
+esac
+if $afs; then
+       echo "AFS may be running... I'll be extra cautious then..." >&4
 else
-       case "$cc" in
-       '') dflt=cc;;
-       *) dflt="$cc";;
-       esac
-       rp="Use which C compiler?"
-       . ./myread
-       cc="$ans"
-fi
-: Look for a hint-file generated 'call-back-unit'.  Now that the
-: user has specified the compiler, we may need to set or change some
-: other defaults.
-if $test -f cc.cbu; then
-    . ./cc.cbu
+       echo "AFS does not seem to be running..." >&4
 fi
-echo " "
-echo "Checking for GNU cc in disguise and/or its version number..." >&4
-$cat >gccvers.c <<EOM
-#include <stdio.h>
-int main() {
-#ifdef __GNUC__
-#ifdef __VERSION__
-       printf("%s\n", __VERSION__);
-#else
-       printf("%s\n", "1");
-#endif
-#endif
-       exit(0);
-}
+
+: determine installation prefix for where package is to be installed.
+if $afs; then 
+$cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+files will reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
 EOM
-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." ;;
+       case "$installprefix" in
+       '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
+       *) dflt="$installprefix";;
        esac
 else
-       echo " "
-       echo "*** WHOA THERE!!! ***" >&4
-       echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
-       case "$knowitall" in
-       '')
-       echo "    You'd better start hunting for one and let me know about it." >&4
-               exit 1
-               ;;
+$cat <<EOM
+
+In some special cases, particularly when building $package for distribution,
+it is convenient to distinguish between the directory in which files should 
+be installed from the directory ($prefix) in which they 
+will eventually reside.  For most users, these two directories are the same.
+
+EOM
+       case "$installprefix" in
+       '') dflt=$prefix ;;
+       *) dflt=$installprefix;;
        esac
 fi
-$rm -f gccvers*
-case "$gccversion" in
-1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
-esac
+fn=d~
+rp='What installation prefix should I use for installing files?'
+. ./getfile
+installprefix="$ans"
+installprefixexp="$ansexp"
 
-: What should the include directory be ?
+: 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'
+
+: set the base revision
+baserev=5.0
+
+: get the patchlevel
 echo " "
-$echo $n "Hmm...  $c"
-dflt='/usr/include'
-incpath=''
-mips_type=''
-if $test -f /bin/mips && /bin/mips; then
-       echo "Looks like a MIPS system..."
-       $cat >usr.c <<'EOCP'
-#ifdef SYSTYPE_BSD43
-/bsd43
-#endif
-EOCP
-       if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
-               dflt='/bsd43/usr/include'
-               incpath='/bsd43'
-               mips_type='BSD 4.3'
-       else
-               mips_type='System V'
-       fi
-       $rm -f usr.c usr.out
-       echo "and you're compiling with the $mips_type compiler and libraries."
-       xxx_prompt=y
-       echo "exit 0" >mips
+echo "Getting the current patchlevel..." >&4
+if $test -r $rsrc/patchlevel.h;then
+       patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
+       subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
+       apiversion=`awk '/define[       ]+PERL_APIVERSION/ {print $3}' $rsrc/patchlevel.h`
 else
-       echo "Doesn't look like a MIPS system."
-       xxx_prompt=n
-       echo "exit 1" >mips
+       patchlevel=0
+       subversion=0
+       apiversion=0
 fi
-chmod +x mips
-$eunicefix mips
-case "$usrinc" in
-'') ;;
-*) dflt="$usrinc";;
-esac
-case "$xxx_prompt" in
-y)     fn=d/
-       echo " "
-       rp='Where are the include files you want to use?'
-       . ./getfile
-       usrinc="$ans"
-       ;;
-*)     usrinc="$dflt"
-       ;;
+$echo $n "(You have $package" $c
+case "$package" in
+"*$baserev")   ;;
+*)             $echo $n " $baserev" $c ;;
 esac
+$echo $n " patchlevel $patchlevel" $c
+test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
+echo ".)"
 
-: 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 ..
-if test ! -f cppstdin; then
-       echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
+if test 0 -eq "$subversion"; then
+       version=`LC_ALL=C; export LC_ALL; \
+                echo $baserev $patchlevel | \
+                $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
 else
-       echo "Keeping your $hint cppstdin wrapper."
+       version=`LC_ALL=C; export LC_ALL; \
+                echo $baserev $patchlevel $subversion | \
+                $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
 fi
-chmod 755 cppstdin
-wrapper=`pwd`/cppstdin
-ok='false'
-cd UU
 
-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
-               ;;
+: determine installation style
+: For now, try to deduce it from prefix unless it is already set.
+: Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
+case "$installstyle" in
+'')    case "$prefix" in
+               *perl*) dflt='lib';;
+               *) dflt='lib/perl5' ;;
        esac
+       ;;
+*)     dflt='lib/perl5' ;;
+esac
+: Probably not worth prompting for this since we prompt for all
+: the directories individually, and the prompt would be too long and
+: confusing anyway.
+installstyle=$dflt
+
+: determine where private library files go
+: Usual default is /usr/local/lib/perl5/$version.
+: Also allow things like /opt/perl/lib/$version, since 
+: /opt/perl/lib/perl5... would be redundant.
+: The default "style" setting is made in installstyle.U
+case "$installstyle" in
+*lib/perl5*) set dflt privlib lib/$package/$version ;;
+*)      set dflt privlib lib/$version ;;
+esac
+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
+privlib="$ans"
+privlibexp="$ansexp"
+: Change installation prefix, if necessary.
+if $test X"$prefix" != X"$installprefix"; then
+       installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
 else
-       case "$cppstdin" in
-       '') ;;
-       *)
-               echo "Good old $cppstdin $cppminus does not seem to be of any help..."
-               ;;
-       esac
+       installprivlib="$privlibexp"
 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!"
+: 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
+: privlib default is /usr/local/lib/$package/$version
+: archlib default is /usr/local/lib/$package/$version/$archname
+: privlib may have an optional trailing /share.
+tdflt=`echo $privlib | $sed 's,/share$,,'`
+tdflt=$tdflt/$archname
+case "$archlib" in
+'')    dflt=$tdflt
+       ;;
+*)     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 $test X"$archlib" = X"$privlib"; then
+       d_archlib="$undef"
 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
+       d_archlib="$define"
+fi
+: Change installation prefix, if necessary.
+if $test X"$prefix" != X"$installprefix"; then
+       installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
+else
+       installarchlib="$archlibexp"
 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
-               ;;
+
+: Binary compatibility with 5.005 is not possible for builds
+: with advanced features
+case "$usethreads$usemultiplicity" in
+*define*)
+       bincompat5005="$undef"
+       d_bincompat5005="$undef"
+       ;;
+*)     $cat <<EOM
+
+Perl 5.006 can be compiled for binary compatibility with 5.005.
+If you decide to do so, you will be able to continue using most
+of the extensions that were compiled for Perl 5.005.
+
+EOM
+       case "$bincompat5005$d_bincompat5005" in
+       *"$undef"*) dflt=n ;;
+       *) dflt=y ;;
        esac
-       case "$cpprun" in
-       "$wrapper")
-               cpprun=''
-               cpplast=''
+       rp='Binary compatibility with Perl 5.005?'
+       . ./myread
+       case "$ans" in
+       y*) val="$define" ;;
+       *)  val="$undef" ;;
+       esac
+       set d_bincompat5005
+       eval $setvar
+       case "$d_bincompat5005" in
+       "$define")
+               bincompat5005="$define"
+               ;;
+       *)      bincompat5005="$undef"
+               d_bincompat5005="$undef"
                ;;
        esac
        ;;
 esac
 
-case "$cppstdin" in
-"$wrapper") ;;
-*) $rm -f $wrapper;;
-esac
-$rm -f testcpp.c testcpp.out
 
-: Set private lib path
-case "$plibpth" in
-'') if ./mips; then
-               plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
-       fi;;
-esac
-case "$libpth" in
-' ') dlist='';;
-'') dlist="$loclibpth $plibpth $glibpth";;
-*) dlist="$libpth";;
-esac
+: see if setuid scripts can be secure
+$cat <<EOM
 
-: Now check and see which directories actually exist, avoiding duplicates
-libpth=''
-for xxx in $dlist
-do
-    if $test -d $xxx; then
-               case " $libpth " in
-               *" $xxx "*) ;;
-               *) libpth="$libpth $xxx";;
-               esac
-    fi
-done
-$cat <<'EOM'
+Some kernels have a bug that prevents setuid #! scripts from being
+secure.  Some sites have disabled setuid #! scripts because of this.
 
-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.
+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
-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'
+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
-               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.
+               $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='What is the file extension used for shared libraries?'
-. ./myread
-so="$ans"
+               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 "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
+       echo "(That's for file descriptors, not floppy disks.)"
+       val="$undef"
+fi
+set d_suidsafe
+eval $setvar
 
-: Define several unixisms.
-: Hints files or command line option can be used to override them.
-: The convoluted testing is in case hints files set either the old
-: or the new name.
-case "$_exe" in
-'')    case "$exe_ext" in
-    '')        ;;
-       *)      _exe="$exe_ext" ;;
-       esac
-       ;;
-esac
-case "$_a" in
-'')    case "$lib_ext" in
-    '')        _a='.a';;
-       *)      _a="$lib_ext" ;;
-       esac
+$rm -f reflect flect
+
+: now see if they want to do setuid emulation
+echo " "
+val="$undef"
+case "$d_suidsafe" in
+"$define")
+       val="$undef"
+       echo "No need to emulate SUID scripts since they are secure here." >& 4
        ;;
-esac
-case "$_o" in
-'') case "$obj_ext" in
-       '')     _o='.o';;
-       *)      _o="$obj_ext";;
+*)
+       $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
+       case "$d_dosuid" in
+       "$define") dflt=y ;;
+       *) dflt=n ;;
        esac
-       ;;
-esac
-case "$p_" in
-'') case "$path_sep" in
-       '')     p_=':';;
-       *)      p_="$path_sep";;
+       rp="Do you want to do setuid/setgid emulation?"
+       . ./myread
+       case "$ans" in
+       [yY]*)  val="$define";;
+       *)      val="$undef";;
        esac
        ;;
 esac
-exe_ext=$_exe
-lib_ext=$_a
-obj_ext=$_o
-path_sep=$p_
-
-: Which makefile gets called first.  This is used by make depend.
-case "$firstmakefile" in
-'') firstmakefile='makefile';;
-esac
+set d_dosuid
+eval $setvar
 
-: Looking for optional libraries
+: What should the include directory be ?
 echo " "
-echo "Checking for optional libraries..." >&4
-case "$libs" in
-' '|'') dflt='';;
-*) dflt="$libs";;
-esac
-case "$libswanted" in
-'') libswanted='c_s';;
-esac
-for thislib in $libswanted; do
-       
-       if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
-               $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; 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 "*);;
-               *) dflt="$dflt -l$thislib";;
-               esac
-       elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
-               echo "Found -l$thislib."
-               case " $dflt " in
-               *"-l$thislib "*);;
-               *) dflt="$dflt -l$thislib";;
-               esac
-       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 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
+$echo $n "Hmm...  $c"
+dflt='/usr/include'
+incpath=''
+mips_type=''
+if $test -f /bin/mips && /bin/mips; then
+       echo "Looks like a MIPS system..."
+       $cat >usr.c <<'EOCP'
+#ifdef SYSTYPE_BSD43
+/bsd43
+#endif
+EOCP
+       if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
+               dflt='/bsd43/usr/include'
+               incpath='/bsd43'
+               mips_type='BSD 4.3'
        else
-               echo "No -l$thislib."
+               mips_type='System V'
        fi
-done
-set X $dflt
-shift
-dflt="$*"
-case "$libs" in
-'') dflt="$dflt";;
-*) dflt="$libs";;
+       $rm -f usr.c usr.out
+       echo "and you're compiling with the $mips_type compiler and libraries."
+       xxx_prompt=y
+       echo "exit 0" >mips
+else
+       echo "Doesn't look like a MIPS system."
+       xxx_prompt=n
+       echo "exit 1" >mips
+fi
+chmod +x mips
+$eunicefix mips
+case "$usrinc" in
+'') ;;
+*) dflt="$usrinc";;
 esac
-case "$dflt" in
-' '|'') dflt='none';;
+case "$xxx_prompt" in
+y)     fn=d/
+       echo " "
+       rp='Where are the include files you want to use?'
+       . ./getfile
+       usrinc="$ans"
+       ;;
+*)     usrinc="$dflt"
+       ;;
 esac
 
-$cat <<EOM
-Some versions of Unix support shared libraries, which make executables smaller
-but make load time slightly longer.
-
-On some systems, mostly System V Release 3's, the shared library is included
-by putting the option "-lc_s" as the last thing on the cc command line when
-linking.  Other systems use shared libraries by default.  There may be other
-libraries needed to compile $package on your machine as well.  If your system
-needs the "-lc_s" option, include it here.  Include any other special libraries
-here as well.  Say "none" for none.
-EOM
-
+: see how we invoke the C preprocessor
 echo " "
-rp="Any additional libraries?"
-. ./myread
-case "$ans" in
-none) libs=' ';;
-*) libs="$ans";;
-esac
-
-: determine optimize, if desired, or use for debug flag also
-case "$optimize" in
-' '|$undef) 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".
-
-EOH
-rp="What optimizer/debugger flag should be used?"
-. ./myread
-optimize="$ans"
-case "$optimize" in
-'none') optimize=" ";;
-esac
+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 ..
+if test ! -f cppstdin; then
+       if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
+               # AIX cc -E doesn't show the absolute headerfile
+               # locations but we'll cheat by using the -M flag.
+               echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; test -s .$$.u && awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
+       else
+               echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
+       fi
+else
+       echo "Keeping your $hint cppstdin wrapper."
+fi
+chmod 755 cppstdin
+wrapper=`pwd`/cppstdin
+ok='false'
+cd UU
 
-dflt=''
-: We will not override a previous value, but we might want to
-: augment a hint file
-case "$hint" in
-none|recommended)
-       case "$gccversion" in
-       1*) dflt='-fpcc-struct-return' ;;
-       esac
-       case "$optimize" in
-       *-g*) dflt="$dflt -DDEBUGGING";;
-       esac
-       case "$gccversion" in
-       2*) if test -d /etc/conf/kconfig.d &&
-                       $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
+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
-                       dflt="$dflt -posix"
+                       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
-       ;;
-esac
-
-case "$mips_type" in
-*BSD*|'') inclwanted="$locincpth $usrinc";;
-*) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
-esac
-for thisincl in $inclwanted; do
-       if $test -d $thisincl; then
-               if $test x$thisincl != x$usrinc; then
-                       case "$dflt" in
-                       *$thisincl*);;
-                       *) dflt="$dflt -I$thisincl";;
-                       esac
-               fi
-       fi
-done
-
-inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
-       xxx=true;
-elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
-       xxx=true;
 else
-       xxx=false;
-fi;
-if $xxx; then
-       case "$dflt" in
-       *$2*);;
-       *) dflt="$dflt -D$2";;
-       esac;
-fi'
+       case "$cppstdin" in
+       '') ;;
+       *)
+               echo "Good old $cppstdin $cppminus does not seem to be of any help..."
+               ;;
+       esac
+fi
 
-if ./osf1; then
-       set signal.h __LANGUAGE_C__; eval $inctest
+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
-       set signal.h LANGUAGE_C; eval $inctest
+       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 "$hint" in
-none|recommended) dflt="$ccflags $dflt" ;;
-*) dflt="$ccflags";;
-esac
-
-case "$dflt" in
-''|' ') dflt=none;;
+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
-$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.
 
-To use no flags, specify the word "none".
-
-EOH
-set X $dflt
-shift
-dflt=${1+"$@"}
-rp="Any additional cc flags?"
-. ./myread
-case "$ans" in
-none) ccflags='';;
-*) ccflags="$ans";;
+case "$cppstdin" in
+"$wrapper"|'cppstdin') ;;
+*) $rm -f $wrapper;;
 esac
+$rm -f testcpp.c testcpp.out
 
-: the following weeds options from ccflags that are of no interest to cpp
-cppflags="$ccflags"
-case "$gccversion" in
-1*) cppflags="$cppflags -D__GNUC__"
+: Set private lib path
+case "$plibpth" in
+'') if ./mips; then
+               plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
+       fi;;
 esac
-case "$mips_type" in
-'');;
-*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
+case "$libpth" in
+' ') dlist='';;
+'') dlist="$loclibpth $plibpth $glibpth";;
+*) dlist="$libpth";;
 esac
-case "$cppflags" in
-'');;
-*)
-       echo " "
-       echo "Let me guess what the preprocessor flags are..." >&4
-       set X $cppflags
-       shift
-       cppflags=''
-       $cat >cpp.c <<'EOM'
-#define BLURFL foo
 
-BLURFL xx LFRULB
-EOM
-       previous=''
-       for flag in $*
-       do
-               case "$flag" in
-               -*) ftry="$flag";;
-               *) ftry="$previous $flag";;
+: Now check and see which directories actually exist, avoiding duplicates
+libpth=''
+for xxx in $dlist
+do
+    if $test -d $xxx; then
+               case " $libpth " in
+               *" $xxx "*) ;;
+               *) libpth="$libpth $xxx";;
                esac
-               if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
-                       >cpp1.out 2>/dev/null && \
-                       $cpprun -DLFRULB=bar $cppflags $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
+    fi
+done
+$cat <<'EOM'
+
+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
-       cppflags=${1+"$@"}
-       case "$cppflags" in
-       *-*)  echo "They appear to be: $cppflags";;
-       esac
-       $rm -f cpp.c cpp?.out
+       dflt=${1+"$@"}
        ;;
 esac
+rp="Directories to use for library searches?"
+. ./myread
+case "$ans" in
+none) libpth=' ';;
+*) libpth="$ans";;
+esac
 
-: flags used in final linking phase
-case "$ldflags" in
-'') if ./venix; then
-               dflt='-i -z'
+: compute shared library extension
+case "$so" in
+'')
+       if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
+               dflt='sl'
        else
-               dflt=''
+               dflt='so'
        fi
-       case "$ccflags" in
-       *-posix*) dflt="$dflt -posix" ;;
-       esac
        ;;
-*) dflt="$ldflags";;
-esac
-
-: Try to guess additional flags to pick up local libraries.
-for thislibdir in $libpth; do
-       case " $loclibpth " in
-       *" $thislibdir "*)
-               case "$dflt " in 
-               *"-L$thislibdir "*) ;;
-               *)  dflt="$dflt -L$thislibdir" ;;
-               esac
-               ;;
-       esac
-done
-
-case "$dflt" in
-'') dflt='none' ;;
+*) dflt="$so";;
 esac
+$cat <<EOM
 
-$cat <<EOH
+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.
 
-Your C linker may need flags.  For this question you should
-include -L/whatever and any other flags used by the C linker, but you
-should NOT include libraries like -lwhatever.
+EOM
+rp='What is the file extension used for shared libraries?'
+. ./myread
+so="$ans"
 
-Make sure you include the appropriate -L/path flags if your C linker
-does not normally search all of the directories you specified above,
-namely
-       $libpth
-To use no flags, specify the word "none".
+: Define several unixisms.
+: Hints files or command line option can be used to override them.
+: The convoluted testing is in case hints files set either the old
+: or the new name.
+case "$_exe" in
+'')    case "$exe_ext" in
+    '')        ;;
+       *)      _exe="$exe_ext" ;;
+       esac
+       ;;
+esac
+case "$_a" in
+'')    case "$lib_ext" in
+    '')        _a='.a';;
+       *)      _a="$lib_ext" ;;
+       esac
+       ;;
+esac
+case "$_o" in
+'') case "$obj_ext" in
+       '')     _o='.o';;
+       *)      _o="$obj_ext";;
+       esac
+       ;;
+esac
+case "$p_" in
+'') case "$path_sep" in
+       '')     p_=':';;
+       *)      p_="$path_sep";;
+       esac
+       ;;
+esac
+exe_ext=$_exe
+lib_ext=$_a
+obj_ext=$_o
+path_sep=$p_
 
-EOH
+: Which makefile gets called first.  This is used by make depend.
+case "$firstmakefile" in
+'') firstmakefile='makefile';;
+esac
 
-rp="Any additional ld flags (NOT including libraries)?"
+cat <<EOM
+
+Perl can be built to use the SOCKS proxy protocol library.  To do so,
+Configure must be run with -Dusesocks.
+
+Normally you do not need this and you should answer no.
+
+EOM
+case "$usesocks" in
+$define|true|[yY]*)    dflt='y';;
+*) dflt='n';;
+esac
+rp='Build Perl for SOCKS?'
 . ./myread
 case "$ans" in
-none) ldflags='';;
-*) ldflags="$ans";;
+y|Y)   val="$define" ;;     
+*)      val="$undef" ;;
 esac
-rmlist="$rmlist pdp11"
+set usesocks
+eval $setvar
 
-: coherency check
+: Looking for optional libraries
 echo " "
-echo "Checking your choice of C compiler and flags for coherency..." >&4
-$cat > try.c <<'EOF'
-#include <stdio.h>
-main() { printf("Ok\n"); exit(0); }
-EOF
-set X $cc $optimize $ccflags -o try $ldflags try.c $libs
+echo "Checking for optional libraries..." >&4
+case "$libs" in
+' '|'') dflt='';;
+*) dflt="$libs";;
+esac
+case "$libswanted" in
+'') libswanted='c_s';;
+esac
+case "$usesocks" in
+$define)
+       libswanted="$libswanted socks5 socks5_sh"
+       ;;
+esac
+for thislib in $libswanted; do
+       
+       if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
+               $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; 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 "*);;
+               *) dflt="$dflt -l$thislib";;
+               esac
+       elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
+               echo "Found -l$thislib."
+               case " $dflt " in
+               *"-l$thislib "*);;
+               *) dflt="$dflt -l$thislib";;
+               esac
+       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 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
+               echo "No -l$thislib."
+       fi
+done
+set X $dflt
 shift
-$cat >try.msg <<'EOM'
-I've tried to compile and run the following simple program:
+dflt="$*"
+case "$libs" in
+'') dflt="$dflt";;
+*) dflt="$libs";;
+esac
+case "$dflt" in
+' '|'') dflt='none';;
+esac
 
-EOM
-$cat try.c
+$cat <<EOM
 
-$cat >> try.msg <<EOM
+In order to compile $package on your machine, a number of libraries
+are usually needed.  Include any other special libraries here as well.
+Say "none" for none.  The default list is almost always right.
+EOM
 
-I used the command:
+echo " "
+rp="What libraries to use?"
+. ./myread
+case "$ans" in
+none) libs=' ';;
+*) libs="$ans";;
+esac
 
-       $*
-       ./try
+: determine optimization, if desired, or use for debug flag also
+case "$optimize" in
+' '|$undef) dflt='none';;
+'') dflt='-O';;
+*) dflt="$optimize";;
+esac
+$cat <<EOH
 
-and I got the following output:
+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".
 
-EOM
-dflt=y
-if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
-       if sh -c './try' >>try.msg 2>&1; then
-               xxx=`./try`
-               case "$xxx" in
-               "Ok") dflt=n ;;
-               *)      echo 'The program compiled OK, but produced no output.' >> try.msg
-                       case " $libs " in
-                       *" -lsfio "*)
-                               cat >> try.msg <<'EOQS'
-If $libs contains -lsfio, and sfio is mis-configured, then it
-sometimes (apparently) runs and exits with a 0 status, but with no
-output!  It may have to do with sfio's use of _exit vs. exit.
+EOH
+rp="What optimizer/debugger flag should be used?"
+. ./myread
+optimize="$ans"
+case "$optimize" in
+'none') optimize=" ";;
+esac
 
-EOQS
-                               rp="You have a big problem.  Shall I abort Configure"
-                               dflt=y
-                               ;;
-                       esac
-                       ;;
-               esac
-       else
-               echo "The program compiled OK, but exited with status $?." >>try.msg
-               rp="You have a problem.  Shall I abort Configure"
-               dflt=y
-       fi
-else
-       echo "I can't compile the test program." >>try.msg
-       rp="You have a BIG problem.  Shall I abort Configure"
-       dflt=y
-fi
-case "$dflt" in
-y)
-       $cat try.msg >&4
-       case "$knowitall" in
-       '')
-               echo "(The supplied flags or libraries might be incorrect.)"
+dflt=''
+: We will not override a previous value, but we might want to
+: augment a hint file
+case "$hint" in
+default|recommended)
+       case "$gccversion" in
+       1*) dflt='-fpcc-struct-return' ;;
+       esac
+       case "$optimize" in
+       *-g*) dflt="$dflt -DDEBUGGING";;
+       esac
+       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
                ;;
-       *) dflt=n;;
        esac
-       echo " "
-       . ./myread
-       case "$ans" in
-       n*|N*) ;;
-       *)      echo "Ok.  Stopping Configure." >&4
-               exit 1
+       case "$gccversion" in
+       1*) ;;
+       2.[0-8]*) ;;
+       ?*)     echo " "
+               echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
+               echo 'int main(void) { return 0; }' > gcctest.c
+               if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
+                       echo "Yes, it does." 2>&1
+                       case "$ccflags" in
+                       *strict-aliasing*) 
+                               echo "Leaving current flags $ccflags alone." 2>&1
+                               ;;
+                       *) dflt="$dflt -fno-strict-aliasing" ;;
+                       esac
+               else
+                       echo "Nope, it doesn't, but that's ok." 2>&1
+               fi
                ;;
        esac
        ;;
-n) echo "OK, that should do.";;
 esac
-$rm -f try try.* core
 
-: determine filename position in cpp output
-echo " "
-echo "Computing filename position in cpp output for #include directives..." >&4
-echo '#include <stdio.h>' > foo.c
-$cat >fieldn <<EOF
-$startsh
-$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
-$grep '^[      ]*#.*stdio\.h' | \
-while read cline; do
-       pos=1
-       set \$cline
-       while $test \$# -gt 0; do
-               if $test -r \`echo \$1 | $tr -d '"'\`; then
-                       echo "\$pos"
-                       exit 0
+case "$mips_type" in
+*BSD*|'') inclwanted="$locincpth $usrinc";;
+*) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
+esac
+for thisincl in $inclwanted; do
+       if $test -d $thisincl; then
+               if $test x$thisincl != x$usrinc; then
+                       case "$dflt" in
+                       *$thisincl*);;
+                       *) dflt="$dflt -I$thisincl";;
+                       esac
                fi
-               shift
-               pos=\`expr \$pos + 1\`
-       done
+       fi
 done
-EOF
-chmod +x fieldn
+
+inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
+       xxx=true;
+elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
+       xxx=true;
+else
+       xxx=false;
+fi;
+if $xxx; then
+       case "$dflt" in
+       *$2*);;
+       *) dflt="$dflt -D$2";;
+       esac;
+fi'
+
+set signal.h LANGUAGE_C; eval $inctest
+
+case "$usesocks" in
+$define)
+       ccflags="$ccflags -DSOCKS"
+       ;;
+esac
+
+case "$hint" in
+default|recommended) dflt="$ccflags $dflt" ;;
+*) dflt="$ccflags";;
+esac
+
+case "$dflt" in
+''|' ') dflt=none;;
+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.
+
+To use no flags, specify the word "none".
+
+EOH
+set X $dflt
+shift
+dflt=${1+"$@"}
+rp="Any additional cc flags?"
+. ./myread
+case "$ans" in
+none) ccflags='';;
+*) ccflags="$ans";;
+esac
+
+: the following weeds options from ccflags that are of no interest to cpp
+cppflags="$ccflags"
+case "$gccversion" in
+1*) cppflags="$cppflags -D__GNUC__"
+esac
+case "$mips_type" in
+'');;
+*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
+esac
+case "$cppflags" in
+'');;
+*)
+       echo " "
+       echo "Let me guess what the preprocessor flags are..." >&4
+       set X $cppflags
+       shift
+       cppflags=''
+       $cat >cpp.c <<'EOM'
+#define BLURFL foo
+
+BLURFL xx LFRULB
+EOM
+       previous=''
+       for flag in $*
+       do
+               case "$flag" in
+               -*) ftry="$flag";;
+               *) ftry="$previous $flag";;
+               esac
+               if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
+                       >cpp1.out 2>/dev/null && \
+                       $cpprun -DLFRULB=bar $cppflags $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 "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
+               dflt='-i -z'
+       else
+               dflt=''
+       fi
+       case "$ccflags" in
+       *-posix*) dflt="$dflt -posix" ;;
+       esac
+       ;;
+*) dflt="$ldflags";;
+esac
+
+: Try to guess additional flags to pick up local libraries.
+for thislibdir in $libpth; do
+       case " $loclibpth " in
+       *" $thislibdir "*)
+               case "$dflt " in 
+               *"-L$thislibdir "*) ;;
+               *)  dflt="$dflt -L$thislibdir" ;;
+               esac
+               ;;
+       esac
+done
+
+case "$dflt" in
+'') dflt='none' ;;
+esac
+
+$cat <<EOH
+
+Your C linker may need flags.  For this question you should
+include -L/whatever and any other flags used by the C linker, but you
+should NOT include libraries like -lwhatever.
+
+Make sure you include the appropriate -L/path flags if your C linker
+does not normally search all of the directories you specified above,
+namely
+       $libpth
+To use no flags, specify the word "none".
+
+EOH
+
+rp="Any additional ld flags (NOT including libraries)?"
+. ./myread
+case "$ans" in
+none) ldflags='';;
+*) ldflags="$ans";;
+esac
+rmlist="$rmlist pdp11"
+
+: coherency check
+echo " "
+echo "Checking your choice of C compiler and flags for coherency..." >&4
+$cat > try.c <<'EOF'
+#include <stdio.h>
+int main() { printf("Ok\n"); exit(0); }
+EOF
+set X $cc $optimize $ccflags -o try $ldflags try.c $libs
+shift
+$cat >try.msg <<'EOM'
+I've tried to compile and run the following simple program:
+
+EOM
+$cat try.c >> try.msg
+
+$cat >> try.msg <<EOM
+
+I used the command:
+
+       $*
+       ./try
+
+and I got the following output:
+
+EOM
+dflt=y
+if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
+       if sh -c './try' >>try.msg 2>&1; then
+               xxx=`./try`
+               case "$xxx" in
+               "Ok") dflt=n ;;
+               *)      echo 'The program compiled OK, but produced no output.' >> try.msg
+                       case " $libs " in
+                       *" -lsfio "*)
+                               cat >> try.msg <<'EOQS'
+If $libs contains -lsfio, and sfio is mis-configured, then it
+sometimes (apparently) runs and exits with a 0 status, but with no
+output!  It may have to do with sfio's use of _exit vs. exit.
+
+EOQS
+                               rp="You have a big problem.  Shall I abort Configure"
+                               dflt=y
+                               ;;
+                       esac
+                       ;;
+               esac
+       else
+               echo "The program compiled OK, but exited with status $?." >>try.msg
+               rp="You have a problem.  Shall I abort Configure"
+               dflt=y
+       fi
+else
+       echo "I can't compile the test program." >>try.msg
+       rp="You have a BIG problem.  Shall I abort Configure"
+       dflt=y
+fi
+case "$dflt" in
+y)
+       $cat try.msg >&4
+       case "$knowitall" in
+       '')
+               echo "(The supplied flags or libraries might be incorrect.)"
+               ;;
+       *) dflt=n;;
+       esac
+       echo " "
+       . ./myread
+       case "$ans" in
+       n*|N*) ;;
+       *)      echo "Ok.  Stopping Configure." >&4
+               exit 1
+               ;;
+       esac
+       ;;
+n) echo "OK, that should do.";;
+esac
+$rm -f try try.* core
+
+: determine filename position in cpp output
+echo " "
+echo "Computing filename position in cpp output for #include directives..." >&4
+echo '#include <stdio.h>' > foo.c
+$cat >fieldn <<EOF
+$startsh
+$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
+$grep '^[      ]*#.*stdio\.h' | \
+while read cline; do
+       pos=1
+       set \$cline
+       while $test \$# -gt 0; do
+               if $test -r \`echo \$1 | $tr -d '"'\`; then
+                       echo "\$pos"
+                       exit 0
+               fi
+               shift
+               pos=\`expr \$pos + 1\`
+       done
+done
+EOF
+chmod +x fieldn
 fieldn=`./fieldn`
 $rm -f foo.c fieldn
 case $fieldn in
@@ -4234,10 +4599,13 @@ $cat >findhdr <<EOF
 $startsh
 wanted=\$1
 name=''
-if test -f $usrinc/\$wanted; then
-       echo "$usrinc/\$wanted"
-       exit 0
-fi
+for usrincdir in $usrinc
+do
+       if test -f \$usrincdir/\$wanted; then
+               echo "\$usrincdir/\$wanted"
+               exit 0
+       fi
+done
 awkprg='{ print \$$fieldn }'
 echo "#include <\$wanted>" > foo\$\$.c
 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
@@ -4245,14 +4613,22 @@ $grep "^[       ]*#.*\$wanted" | \
 while read cline; do
        name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
        case "\$name" in
-       */\$wanted) echo "\$name"; exit 0;;
-       *) name='';;
+       *[/\\\\]\$wanted) echo "\$name"; exit 1;;
+       *[\\\\/]\$wanted) echo "\$name"; exit 1;;
+       *) exit 2;;
        esac;
 done;
+#
+# status = 0: grep returned 0 lines, case statement not executed
+# status = 1: headerfile found
+# status = 2: while loop executed, no headerfile found
+#
+status=\$?
 $rm -f foo\$\$.c;
-case "\$name" in
-'') exit 1;;
-esac
+if test \$status -eq 1; then
+       exit 0;
+fi
+exit 1
 EOF
 chmod +x findhdr
 
@@ -4370,11 +4746,88 @@ case "$freetype" in
 esac
 echo "Your system uses $freetype free(), it would seem." >&4
 $rm -f malloc.[co]
+$cat <<EOM
+
+The installation process will also create a directory for
+vendor-supplied add-ons.  Vendors who supply perl with their system
+may find it convenient to place all vendor-supplied files in this
+directory rather than in the main distribution directory.  This will
+ease upgrades between binary-compatible maintenance versions of perl.
+
+Of course you may also use these directories in whatever way you see
+fit.  For example, you might use them to access modules shared over a
+company-wide network.
+
+The default answer should be fine for most people.
+This causes further questions about vendor add-ons to be skipped
+and no vendor-specific directories will be configured for perl.
+
+EOM
+rp='Do you want to configure vendor-specific add-on directories?'
+case "$usevendorprefix" in
+define|true|[yY]*) dflt=y ;;
+*) dflt=n ;;
+esac
+. ./myread
+case "$ans" in
+[yY]*) fn=d~+
+       rp='Installation prefix to use for vendor-supplied add-ons?'
+       case "$vendorprefix" in
+       '') dflt='' ;;
+       *)  dflt=$vendorprefix ;;
+       esac
+       . ./getfile
+       oldvendorprefix=''
+       case "$vendorprefix" in
+       '') ;;
+       *)      case "$ans" in
+               "$prefix") ;;
+               *) oldvendorprefix="$prefix";;
+               esac
+               ;;
+       esac
+       usevendorprefix="$define"
+       vendorprefix="$ans"
+       vendorprefixexp="$ansexp"
+       ;;
+*)     usevendorprefix="$undef"
+       vendorprefix=''
+       vendorprefixexp=''
+       ;;
+esac
+
+case "$vendorprefix" in
+'')    d_vendorlib="$undef"
+       vendorlib=''
+       vendorlibexp=''
+       ;;
+*)     d_vendorlib="$define"
+       : determine where vendor-supplied modules go.
+       : Usual default is /usr/local/lib/perl5/vendor_perl
+       prog=`echo $package | $sed 's/-*[0-9.]*$//'`
+       case "$installstyle" in
+       *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog ;;
+       *)           dflt=$vendorprefix/lib/vendor_$prog ;;
+       esac
+       fn=d~+
+       rp='Pathname for the vendor-supplied library files?'
+       . ./getfile
+       vendorlib="$ans"
+       vendorlibexp="$ansexp"
+       : Change installation prefix, if necessary.
+       if $test X"$prefix" != X"$installprefix"; then
+               installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
+       else
+               installvendorlib="$vendorlibexp"
+       fi
+       ;;
+esac
+
 : Cruising for prototypes
 echo " "
 echo "Checking out function prototypes..." >&4
 $cat >prototype.c <<'EOCP'
-main(int argc, char *argv[]) {
+int main(int argc, char *argv[]) {
        exit(0);}
 EOCP
 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
@@ -4423,25 +4876,38 @@ if $test "X$ansexp" != "X$binexp"; then
 fi
 bin="$ans"
 binexp="$ansexp"
-if $afs; then
-       $cat <<EOM
+: Change installation prefix, if necessary.
+: XXX Bug? -- ignores Configure -Dinstallprefix setting.
+if $test X"$prefix" != X"$installprefix"; then
+       installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
+else
+       installbin="$binexp"
+fi
 
-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).
+: determine whether to install perl also as /usr/bin/perl
 
+echo " "
+if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
+       $cat <<EOM
+Many scripts expect to perl to be installed as /usr/bin/perl.
+I can install the perl you are about to compile also as /usr/bin/perl
+(in addition to $installbin/perl).
 EOM
-       case "$installbin" in
-       '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
-       *) dflt="$installbin";;
+       case "$installusrbinperl" in
+       "$undef"|[nN]*) dflt='n';;
+       *)              dflt='y';;
+       esac
+       rp="Do you want to install perl as /usr/bin/perl?"
+       . ./myread
+       case "$ans" in
+       [yY]*)  val="$define";;
+       *)      val="$undef" ;;
        esac
-       fn=de~
-       rp='Where will public executables be installed?'
-       . ./getfile
-       installbin="$ans"
 else
-       installbin="$binexp"
+       val="$undef"
 fi
+set installusrbinperl
+eval $setvar
 
 : define a shorthand compile call
 compile='
@@ -4458,8 +4924,7 @@ echo " "
 echo "Checking for GNU C Library..." >&4
 cat >gnulibc.c <<EOM
 #include <stdio.h>
-int
-main()
+int main()
 {
 #ifdef __GLIBC__
     exit(0);
@@ -4785,6 +5250,10 @@ elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
        eval $xscan;\
        $contains '^fprintf$' libc.list >/dev/null 2>&1; then
                eval $xrun
+elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
+       eval $xscan;\
+       $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+               eval $xrun
 else
        $nm -p $* 2>/dev/null >libc.tmp
        $grep fprintf libc.tmp > libc.ptf
@@ -4840,7 +5309,7 @@ nm_extract="$com"
 if $test -f /lib/syscalls.exp; then
        echo " "
        echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
-       $sed -n 's/^\([^        ]*\)[   ]*syscall$/\1/p' /lib/syscalls.exp >>libc.list
+       $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
 fi
 ;;
 esac
@@ -4871,7 +5340,7 @@ yes)
                else tval=false;
                fi;;
        *)
-               echo "main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
+               echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
                if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
                then tval=true;
                else tval=false;
@@ -4969,8 +5438,7 @@ y*) usedl="$define"
        tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
        rp="Source file to use for dynamic loading"
        fn="fne"
-       # XXX This getfile call will fail the existence check if you try 
-       # building away from $src (this is not supported yet).
+       gfpth="$src"
        . ./getfile
        usedl="$define"
        : emulate basename
@@ -5020,7 +5488,7 @@ EOM
 /* Test for whether ELF binaries are produced */
 #include <fcntl.h>
 #include <stdlib.h>
-main() {
+int main() {
        char b[4];
        int i = open("a.out",O_RDONLY);
        if(i == -1) 
@@ -5061,6 +5529,7 @@ use no flags, say "none".
 EOM
     case "$lddlflags" in
     '') case "$osname" in
+                       beos) dflt='-nostart' ;;
                        hpux)  dflt='-b' ;;
                        linux|irix*)    dflt='-shared' ;;
                        next)  dflt='none' ;;
@@ -5074,6 +5543,10 @@ EOM
     esac
 
        : Try to guess additional flags to pick up local libraries.
+       : Be careful not to append to a plain 'none'
+       case "$dflt" in
+       none) dflt='' ;;
+       esac
        for thisflag in $ldflags; do
                case "$thisflag" in
                -L*)
@@ -5137,7 +5610,7 @@ $undef)
        ;;
 *)     case "$useshrplib" in
        '')     case "$osname" in
-               svr4*|dgux|dynixptx|esix|powerux)
+               svr4*|dgux|dynixptx|esix|powerux|beos)
                        dflt=y
                        also='Building a shared libperl is required for dynamic loading to work on your system.'
                        ;;
@@ -5177,27 +5650,7 @@ EOM
        . ./myread
        case "$ans" in
        true|$define|[Yy]*)
-               useshrplib='true'
-               # Why does next4 have to be so different?
-               case "${osname}${osvers}" in
-               next4*) xxx='DYLD_LIBRARY_PATH' ;;
-               os2*)   xxx='' ;; # Nothing special needed.
-               *)              xxx='LD_LIBRARY_PATH' ;;
-               esac
-               if test X"$xxx" != "X"; then
-                       $cat <<EOM  | $tee -a ../config.msg >&4
-
-To build perl, you must add the current working directory to your
-$xxx environment variable before running make.  You can do
-this with
-   $xxx=\`pwd\`; export $xxx
-for Bourne-style shells, or
-   setenv $xxx \`pwd\`
-for Csh-style shells.  You *MUST* do this before running make.
-
-EOM
-               fi
-               ;;
+               useshrplib='true'  ;;
        *)      useshrplib='false' ;;
        esac
        ;;
@@ -5268,7 +5721,7 @@ case "$shrpdir" in
 *)     $cat >&4 <<EOM
 WARNING:  Use of the shrpdir variable for the installation location of
 the shared $libperl is not supported.  It was never documented and
-will not work in this version.  Let me (jhi@iki.fi)
+will not work in this version.  Let me (perlbug@perl.com)
 know of any problems this may cause.
 
 EOM
@@ -5314,6 +5767,13 @@ if "$useshrplib"; then
        next)
                # next doesn't like the default...
                ;;
+       beos)
+               # beos doesn't like the default, either.
+               ;;
+       hpux*)
+               # hpux doesn't like the default, either.
+               tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
+               ;;
        *)
                tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
                ;;
@@ -5337,10 +5797,20 @@ EOM
                ;;
        esac
 fi
+# Fix ccdlflags in AIX for building external extensions.
+# (For building Perl itself bare -bE:perl.exp is needed,
+#  Makefile.SH takes care of this.)
+case "$osname" in
+aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
+esac
 # Respect a hint or command-line value.
 case "$shrpenv" in
 '') shrpenv="$tmp_shrpenv" ;;
 esac
+case "$ldlibpthname" in
+'')    ldlibpthname=LD_LIBRARY_PATH ;;
+none)  ldlibpthname='' ;;
+esac
 
 : determine where manual pages go
 set man1dir man1dir none
@@ -5385,25 +5855,13 @@ fi
 man1dir="$ans"
 man1direxp="$ansexp"
 case "$man1dir" in
-'') man1dir=' '
+'')    man1dir=' '
        installman1dir='';;
 esac
-if $afs; then
-       $cat <<EOM
 
-Since you are running AFS, I need to distinguish the directory in which
-manual pages 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 "$installman1dir" in
-       '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
-       *) dflt="$installman1dir";;
-       esac
-       fn=de~
-       rp='Where will man pages be installed?'
-       . ./getfile
-       installman1dir="$ans"
+: Change installation prefix, if necessary.
+if $test X"$prefix" != X"$installprefix"; then
+       installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
 else
        installman1dir="$man1direxp"
 fi
@@ -5512,52 +5970,46 @@ esac
 echo "If you don't want the manual sources installed, answer 'none'."
 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
 case "$man3dir" in
-'')    case "$prefix" in 
-       *$prog*) dflt=`echo $man1dir | 
-                       $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
-       *)      dflt="$privlib/man/man3" ;;
-       esac
+'')    dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
+       if $test -d "$privlib/man/man3"; then
+               cat <<EOM >&4
+
+WARNING:  Previous versions of perl installed man3 pages into
+$privlib/man/man3.  This version will suggest a 
+new default of $dflt.  
+EOM
+               tdflt=$dflt
+               dflt='n'
+               rp='Do you wish to preserve the old behavior?(y/n)'
+               . ./myread
+               case "$ans" in
+               y*) dflt="$privlib/man/man3" ;;
+               *)  dflt=$tdflt ;;
+               esac
+    fi
        ;;
 ' ') dflt=none;;
 *)     dflt="$man3dir" ;;
 esac
 echo " "
-
 fn=dn+~
 rp="Where do the $package library man pages (source) go?"
 . ./getfile
-if test "X$man3direxp" != "X$ansexp"; then
-       installman3dir=''
-fi
-
 man3dir="$ans"
 man3direxp="$ansexp"
-case "$man3dir" in
-'') man3dir=' '
+case "$man1dir" in
+'')    man3dir=' '
        installman3dir='';;
 esac
-if $afs; then
-       $cat <<EOM
 
-Since you are running AFS, I need to distinguish the directory in which
-manual pages 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 "$installman3dir" in
-       '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
-       *) dflt="$installman3dir";;
-       esac
-       fn=de~
-       rp='Where will man pages be installed?'
-       . ./getfile
-       installman3dir="$ans"
+: Change installation prefix, if necessary.
+if $test X"$prefix" != X"$installprefix"; then
+       installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
 else
        installman3dir="$man3direxp"
 fi
 
 : What suffix to use on installed man pages
-
 case "$man3dir" in
 ' ')
        man3ext='0'
@@ -5956,9 +6408,10 @@ 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
+       $test -d /usr/share/bin     && dflt=/usr/share/bin
+       $test -d /usr/local/script  && dflt=/usr/local/script
+       $test -d /usr/local/scripts && dflt=/usr/local/scripts
+       $test -d $prefixexp/script  && dflt=$prefixexp/script
        set dflt
        eval $prefixup
        ;;
@@ -5981,77 +6434,84 @@ if $test "X$ansexp" != "X$scriptdirexp"; then
 fi
 scriptdir="$ans"
 scriptdirexp="$ansexp"
-if $afs; then
-       $cat <<EOM
+: Change installation prefix, if necessary.
+if $test X"$prefix" != X"$installprefix"; then
+       installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
+else
+       installscript="$scriptdirexp"
+fi
 
-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).
+$cat <<EOM
+
+After $package is installed, you may wish to install various
+add-on modules and utilities.  Typically, these add-ons will
+be installed under $prefix with the rest
+of this package.  However, you may wish to install such add-ons
+elsewhere under a different prefix.
+
+If you do not wish to put everything under a single prefix, that's
+ok.  You will be prompted for the individual locations; this siteprefix
+is only used to suggest the defaults.
+
+The default should be fine for most people.
 
 EOM
-       case "$installscript" in
-       '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
-       *) dflt="$installscript";;
+fn=d~+
+rp='Installation prefix to use for add-on modules and utilities?'
+: XXX Here might be another good place for an installstyle setting.
+case "$siteprefix" in
+'') dflt=$prefix ;;
+*)  dflt=$siteprefix ;;
+esac
+. ./getfile
+oldsiteprefix=''
+case "$siteprefix" in
+'') ;;
+*)
+       case "$ans" in
+       "$prefix") ;;
+       *) oldsiteprefix="$prefix";;
        esac
-       fn=de~
-       rp='Where will public scripts be installed?'
-       . ./getfile
-       installscript="$ans"
-else
-       installscript="$scriptdirexp"
-fi
+       ;;
+esac
+siteprefix="$ans"
+siteprefixexp="$ansexp"
 
 : determine where site specific libraries go.
-: Usual default is /usr/local/lib/perl5/site_perl/$apiversion
+: Usual default is /usr/local/lib/perl5/site_perl
+: The default "style" setting is made in installstyle.U
+: XXX No longer works with Prefixit stuff.
 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
-case "$prefix" in
-*perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
-*)      set dflt sitelib lib/$package/site_$prog/$apiversion ;;
+case "$installstyle" in
+*lib/perl5*) dflt=$siteprefix/lib/site_$prog ;;
+*)      dflt=$siteprefix/lib/site_$prog ;;
 esac
-eval $prefixit
 $cat <<EOM
 
-The installation process will also create a directory for
-site-specific extensions and modules.  Some users find it convenient
-to place all local files in this directory rather than in the main
-distribution directory.
+The installation process will create a directory for
+site-specific extensions and modules.  Most users find it convenient
+to place all site-specific files in this directory rather than in the
+main distribution directory.
 
 EOM
 fn=d~+
 rp='Pathname for the site-specific library files?'
 . ./getfile
-if $test "X$sitelibexp" != "X$ansexp"; then
-       installsitelib=''
-fi
 sitelib="$ans"
 sitelibexp="$ansexp"
-if $afs; then
-       $cat <<EOM
-
-Since you are running AFS, I need to distinguish the directory in
-which site-specific 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 "$installsitelib" in
-       '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
-       *) dflt="$installsitelib";;
-       esac
-       fn=de~
-       rp='Where will site-specific files be installed?'
-       . ./getfile
-       installsitelib="$ans"
+: Change installation prefix, if necessary.
+if $test X"$prefix" != X"$installprefix"; then
+       installsitelib=`echo $sitelibexp | sed "s#^$prefix#$installprefix#"`
 else
        installsitelib="$sitelibexp"
 fi
 
 : determine where site specific architecture-dependent libraries go.
-: sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
+: sitelib  default is /usr/local/lib/perl5/site_perl/
 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
 : sitelib may have an optional trailing /share.
 tdflt=`echo $sitelib | $sed 's,/share$,,'`
-tdflt="$tdflt/$archname"
+tdflt="$tdflt/$apiversion/$archname"
 set sitearch sitearch none
 eval $prefixit
 case "$sitearch" in
@@ -6067,34 +6527,54 @@ EOM
 fn=nd~+
 rp='Pathname for the site-specific architecture-dependent library files?'
 . ./getfile
-if $test "X$sitearchexp" != "X$ansexp"; then
-       installsitearch=''
-fi
 sitearch="$ans"
 sitearchexp="$ansexp"
-if $afs; then
-       $cat <<EOM
-
-Since you are running AFS, I need to distinguish the directory in
-which site-specific architecture-dependent library 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 "$installsitearch" in
-       '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
-       *) dflt="$installsitearch";;
-       esac
-       fn=de~
-       rp='Where will site-specific architecture-dependent files be installed?'
-       . ./getfile
-       installsitearch="$ans"
+: Change installation prefix, if necessary.
+if $test X"$prefix" != X"$installprefix"; then
+       installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
 else
        installsitearch="$sitearchexp"
 fi
 
 cat <<EOM
 
+Perl can be built to take advantage of long doubles which
+(if available) may give more accuracy and range for floating point
+numbers.  To do so, Configure must be run with -Duselongdouble.
+
+If this doesn't make any sense to you, just accept the default 'n'.
+EOM
+case "$uselongdouble" in
+$define|true|[yY]*)    dflt='y';;
+*) dflt='n';;
+esac
+rp='Try to use long doubles if available?'
+. ./myread
+case "$ans" in
+y|Y)   val="$define"   ;;
+*)      val="$undef"   ;;
+esac
+set uselongdouble
+eval $setvar
+
+case "$uselongdouble" in
+"$define"|true|[yY]*)
+: Look for a hint-file generated 'call-back-unit'.  If the
+: user has specified that long doubles should be used,
+: we may need to set or change some other defaults.
+       if $test -f uselongdouble.cbu; then
+               echo "Your platform has some specific hints for long doubles, using them..."
+               . ./uselongdouble.cbu
+       else
+               $cat <<EOM
+(Your platform doesn't have any specific hints for long doubles.)
+EOM
+       fi
+       ;;
+esac
+
+cat <<EOM
+
 Previous version of $package used the standard IO mechanisms as defined
 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
@@ -6155,8 +6635,7 @@ char *got;
        }
 }
 
-int
-main()
+int main()
 { 
        char buf[64]; 
        buf[63] = '\0';
@@ -6217,232 +6696,65 @@ EOP
        esac
 fi
 
-: Initialize h_fcntl
-h_fcntl=false
-
-: Initialize h_sysfile
-h_sysfile=false
-
-: access call always available on UNIX
-set access d_access
-eval $inlibc
+: see if inttypes.h is available
+: we want a real compile instead of Inhdr because some systems
+: have an inttypes.h which includes non-existent headers
+echo " "
+$cat >try.c <<EOCP
+#include <inttypes.h>
+int main() {
+       static int32_t foo32 = 0x12345678;
+}
+EOCP
+set try
+if eval $compile; then
+       echo "<inttypes.h> found." >&4
+       val="$define"
+else
+       echo "<inttypes.h> NOT found." >&4
+       val="$undef"
+fi
+$rm -f try.c try
+set i_inttypes
+eval $setvar
 
-: locate the flags for 'access()'
-case "$d_access" in
-"$define")
+: check for int64_t
+case "$use64bits" in
+"$define" )
        echo " "
-       $cat >access.c <<'EOCP'
+       $echo $n "Checking to see if your system supports int64_t...$c" >&4
+       $cat >try.c <<EOCP
 #include <sys/types.h>
-#ifdef I_FCNTL
-#include <fcntl.h>
-#endif
-#ifdef I_SYS_FILE
-#include <sys/file.h>
-#endif
-#ifdef I_UNISTD
-#include <unistd.h>
+#$i_inttypes I_INTTYPES
+#ifdef I_INTTYPES
+#include <inttypes.h>
 #endif
-main() {
-       exit(R_OK);
-}
+int64_t foo() { int64_t x; x = 7; return x; }
 EOCP
-       : check sys/file.h first, no particular reason here
-       if $test `./findhdr sys/file.h` && \
-               $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
-               h_sysfile=true;
-               echo "<sys/file.h> defines the *_OK access constants." >&4
-       elif $test `./findhdr fcntl.h` && \
-               $cc $cppflags -DI_FCNTL -o access access.c >/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 -o access access.c >/dev/null 2>&1 ; then
-               echo "<unistd.h> defines the *_OK access constants." >&4
+       if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
+               val="$define"
+               echo " Yup, it does." >&4
        else
-               echo "I can't find the four *_OK access constants--I'll use mine." >&4
+               val="$undef"
+               echo " Nope, it doesn't." >&4
        fi
+       $rm -f try.*
+       ;;
+*)     val="$undef"
        ;;
 esac
-$rm -f access*
-
-: see if accessx exists
-set accessx d_accessx
-eval $inlibc
+set d_int64t
+eval $setvar
 
-: see if alarm exists
-set alarm d_alarm
-eval $inlibc
 
-: Look for GNU-cc style attribute checking
+: check for lengths of integral types
 echo " "
-echo "Checking whether your compiler can handle __attribute__ ..." >&4
-$cat >attrib.c <<'EOCP'
+case "$intsize" in
+'')
+       echo "Checking to see how big your integers are..." >&4
+       $cat >intsize.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 this is a unistd.h system
-set unistd.h i_unistd
-eval $inhdr
-
-: see if getpgrp exists
-set getpgrp d_getpgrp
-eval $inlibc
-
-case "$d_getpgrp" in
-"$define")
-       echo " "
-       echo "Checking to see which flavor of getpgrp is in use..."
-       $cat >set.c <<EOP
-#$i_unistd I_UNISTD
-#include <sys/types.h>
-#ifdef I_UNISTD
-#  include <unistd.h>
-#endif
-main()
-{
-       if (getuid() == 0) {
-               printf("(I see you are running Configure as super-user...)\n");
-               setuid(1);
-       }
-#ifdef TRY_BSD_PGRP
-       if (getpgrp(1) == 0)
-               exit(0);
-#else
-       if (getpgrp() > 0)
-               exit(0);
-#endif
-       exit(1);
-}
-EOP
-       if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
-               echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
-               val="$define"
-       elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
-               echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
-               val="$undef"
-       else
-               echo "I can't seem to compile and run the test program."
-               if ./usg; then
-                       xxx="a USG one, i.e. you use getpgrp()."
-               else
-                       # SVR4 systems can appear rather BSD-ish.
-                       case "$i_unistd" in
-                       $undef)
-                               xxx="a BSD one, i.e. you use getpgrp(pid)."
-                               val="$define"
-                               ;;
-                       $define)
-                               xxx="probably a USG one, i.e. you use getpgrp()."
-                               val="$undef"
-                               ;;
-                       esac
-               fi
-               echo "Assuming your getpgrp is $xxx" >&4
-       fi
-       ;;
-*) val="$undef";;
-esac
-set d_bsdgetpgrp
-eval $setvar
-$rm -f set set.c
-
-: see if setpgrp exists
-set setpgrp d_setpgrp
-eval $inlibc
-
-case "$d_setpgrp" in
-"$define")
-       echo " "
-       echo "Checking to see which flavor of setpgrp is in use..."
-       $cat >set.c <<EOP
-#$i_unistd I_UNISTD
-#include <sys/types.h>
-#ifdef I_UNISTD
-#  include <unistd.h>
-#endif
-main()
-{
-       if (getuid() == 0) {
-               printf("(I see you are running Configure as super-user...)\n");
-               setuid(1);
-       }
-#ifdef TRY_BSD_PGRP
-       if (-1 == setpgrp(1, 1))
-               exit(0);
-#else
-       if (setpgrp() != -1)
-               exit(0);
-#endif
-       exit(1);
-}
-EOP
-       if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
-               echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
-               val="$define"
-       elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
-               echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
-               val="$undef"
-       else
-               echo "(I can't seem to compile and run the test program.)"
-               if ./usg; then
-                       xxx="a USG one, i.e. you use setpgrp()."
-               else
-                       # SVR4 systems can appear rather BSD-ish.
-                       case "$i_unistd" in
-                       $undef)
-                               xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
-                               val="$define"
-                               ;;
-                       $define)
-                               xxx="probably a USG one, i.e. you use setpgrp()."
-                               val="$undef"
-                               ;;
-                       esac
-               fi
-               echo "Assuming your setpgrp is $xxx" >&4
-       fi
-       ;;
-*) val="$undef";;
-esac
-set d_bsdsetpgrp
-eval $setvar
-$rm -f set set.c
-: see if bzero exists
-set bzero d_bzero
-eval $inlibc
-
-: check for lengths of integral types
-echo " "
-case "$intsize" in
-'')
-       echo "Checking to see how big your integers are..." >&4
-       $cat >intsize.c <<'EOCP'
-#include <stdio.h>
-main()
+int main()
 {
        printf("intsize=%d;\n", sizeof(int));
        printf("longsize=%d;\n", sizeof(long));
 esac
 $rm -f intsize intsize.*
 
-: see if signal is declared as pointer to function returning int or void
+: check for long long
 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())()." >&4
-       val="$define"
-elif $contains 'extern[        ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
-       echo "You have int (*signal())() instead of void." >&4
-       val="$undef"
-elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
-       echo "You have void (*signal())()." >&4
+$echo $n "Checking to see if your system supports long long...$c" >&4
+echo 'long long foo() { long long x; x = 7; return x; }' > try.c
+if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
        val="$define"
+       echo " Yup, it does." >&4
 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
-               val="$define"
-               ;;
-       *)      echo "As you already told me, signal handler returns int." >&4
-               val="$undef"
-               ;;
-       esac
+       val="$undef"
+       echo " Nope, it doesn't." >&4
 fi
-set d_voidsig
+$rm try.*
+set d_longlong
 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" -ge 4; then
-       xxx=int
-else
-       xxx=long
-fi
-$cat >try.c <<EOCP
+: check for length of long long
+case "${d_longlong}${longlongsize}" in
+$define)
+       echo " "
+       $echo $n "Checking to see how big your long longs are...$c" >&4
+       $cat >try.c <<'EOCP'
 #include <stdio.h>
-#include <sys/types.h>
-#include <signal.h>
-$signal_t blech(s) int s; { exit(3); }
-main()
+int main()
 {
-       $xxx i32;
-       double f, g;
-       int result = 0;
-       char str[16];
-       signal(SIGFPE, blech);
-
-       /* Don't let compiler optimize the test away.  Store the number 
-          in a writable string for gcc to pass to sscanf under HP/UX.
-       */
-       sprintf(str, "2147483647");
-       sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
-       g = 10 * f;
-       i32  = ($xxx) g;
-
-       /* x86 processors will probably give 0x8000 0000, which is a
-       sign change.  We don't want that.  We want to mimic SPARC
-          behavior here, which is to preserve the sign and give
-          back 0x7fff ffff.
-       */
-       if (i32 != ($xxx) f)
-               result |= 1;
-       exit(result);
+       printf("%d\n", sizeof(long long));
 }
 EOCP
-set try
-if eval $compile_ok; 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."
+       set try
+       if eval $compile_ok; then
+               longlongsize=`./try`
+               $echo " $longlongsize bytes." >&4
+       else
+               dflt='8'
+               echo " "
+               echo "(I can't seem to compile the test program.  Guessing...)"
+               rp="What is the size of a long long (in bytes)?"
+               . ./myread
+               longlongsize="$ans"
+       fi
+       if $test "X$longsize" = "X$longlongsize"; then
+               echo "(That isn't any different from an ordinary long.)"
+       fi      
        ;;
 esac
-set d_casti32
-eval $setvar
-$rm -f try try.*
+$rm -f try.c 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 <stdio.h>
-#include <sys/types.h>
-#include <signal.h>
-$signal_t blech(s) int s; { exit(7); }
-$signal_t blech_in_list(s) int s; { exit(4); }
-unsigned long dummy_long(p) unsigned long p; { return p; }
-unsigned int dummy_int(p) unsigned int p; { return p; }
-unsigned short dummy_short(p) unsigned short p; { return p; }
-main()
-{
-       double f;
-       unsigned long along;
-       unsigned int aint;
-       unsigned short ashort;
-       int result = 0;
-       char str[16];
-       
-       /* Frustrate gcc-2.7.2's optimizer which failed this test with
-          a direct f = -123. assignment.  gcc-2.8.0 reportedly
-          optimized the whole file away
-       */
-       /* Store the number in a writable string for gcc to pass to 
-          sscanf under HP/UX.
-       */
-       sprintf(str, "-123");
-       sscanf(str, "%lf", &f);  /* f = -123.; */
 
-       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;
-       sprintf(str, "1073741824.");
-       sscanf(str, "%lf", &f); /* 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;
-       if (result)
-               exit(result);
-       signal(SIGFPE, blech_in_list);
-       sprintf(str, "123.");
-       sscanf(str, "%lf", &f);  /* f = 123.; */
-       along = dummy_long((unsigned long)f);
-       aint = dummy_int((unsigned int)f);
-       ashort = dummy_short((unsigned short)f);
-       if (along != (unsigned long)123)
-               result |= 4;
-       if (aint != (unsigned int)123)
-               result |= 4;
-       if (ashort != (unsigned short)123)
-               result |= 4;
-       exit(result);
+if $test X"$intsize" = X8 -o X"$longsize" = X8 -o X"$d_int64t" = X"$define" -o X"$d_longlong" = X"$define"; then
+
+echo "Checking how to print 64-bit integers..." >&4
 
+if $test X"$sPRId64" = X -a X"$intsize" = X8; then
+        quad=int
+       $cat >try.c <<'EOCP'
+#include <sys/types.h>
+#include <stdio.h>
+int main() {
+  int q = 12345678901;
+  printf("%ld\n", q);
 }
 EOCP
-set try
-if eval $compile_ok; then
-       ./try
-       castflags=$?
-else
-       echo "(I can't seem to compile the test program--assuming it can't)"
-       castflags=7
+       set try
+       if eval $compile; then
+               yyy=`./try$exe_ext`
+               case "$yyy" in
+               12345678901)
+                       sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
+                       sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
+                       echo "We will use %d."
+                       ;;
+               esac
+       fi
 fi
-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 try.*
 
-: see if vprintf exists
-echo " "
-if set vprintf val -f d_vprintf; eval $csym; $val; then
-       echo 'vprintf() found.' >&4
-       val="$define"
-       $cat >vprintf.c <<'EOF'
-#include <varargs.h>
+if $test X"$sPRId64" = X -a X"$longsize" = X8; then
+        quad=long
+       $cat >try.c <<'EOCP'
+#include <sys/types.h>
+#include <stdio.h>
+int main() {
+  long q = 12345678901;
+  printf("%ld\n", q);
+}
+EOCP
+       set try
+       if eval $compile; then
+               yyy=`./try$exe_ext`
+               case "$yyy" in
+               12345678901)
+                       sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
+                       sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
+                       echo "We will use %ld."
+                       ;;
+               esac
+       fi
+fi
 
-main() { xxx("foo"); }
+if $test X"$sPRId64" = X -a X"$i_inttypes.h" = X"$define" -a X"$d_int64t" = X"$define"; then
+        quad=int64_t
+       $cat >try.c <<'EOCP'
+#include <sys/types.h>
+#include <inttypes.h>
+#include <stdio.h>
+int main() {
+  int64_t q = 12345678901;
+  printf("%" PRId64 "\n", q);
+}
+EOCP
+       set try
+       if eval $compile; then
+               yyy=`./try$exe_ext`
+               case "$yyy" in
+               12345678901)
+                       sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
+                       sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
+                       echo "We will use the C9X style."
+                       ;;
+               esac
+       fi
+fi
 
-xxx(va_alist)
-va_dcl
-{
-       va_list args;
-       char buf[10];
+if $test X"$sPRId64" = X -a X"$d_longlong" = X"$define" -a X"$longlongsize" = X8; then
+        quad="long long"
+       $cat >try.c <<'EOCP'
+#include <sys/types.h>
+#include <stdio.h>
+int main() {
+  long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
+  printf("%lld\n", q);
+}
+EOCP
+       set try
+       if eval $compile; then
+               yyy=`./try$exe_ext`
+               case "$yyy" in
+               12345678901)
+                       sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
+                       sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
+                       echo "We will use the %lld style."
+                       ;;
+               esac
+       fi
+fi
 
-       va_start(args);
-       exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
+if $test X"$sPRId64" = X -a X"$quad" != X; then
+       $cat >try.c <<EOCP
+#include <sys/types.h>
+#include <stdio.h>
+int main() {
+  $quad q = 12345678901;
+  printf("%Ld\n", q);
 }
-EOF
-       set vprintf
-       if eval $compile && ./vprintf; then
-               echo "Your vsprintf() returns (int)." >&4
-               val2="$undef"
-       else
-               echo "Your vsprintf() returns (char*)." >&4
-               val2="$define"
+EOCP
+       set try
+       if eval $compile; then
+               yyy=`./try$exe_ext`
+               case "$yyy" in
+               12345678901)
+                       sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
+                       sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
+                       echo "We will use %lld."
+                       ;;
+               esac
        fi
-else
-       echo 'vprintf() NOT found.' >&4
-               val="$undef"
-               val2="$undef"
 fi
-set d_vprintf
-eval $setvar
-val=$val2
-set d_charvspr
-eval $setvar
 
-: see if chown exists
-set chown d_chown
-eval $inlibc
+if $test X"$sPRId64" = X -a X"$quad" != X; then
+       $cat >try.c <<EOCP
+#include <sys/types.h>
+#include <stdio.h>
+int main() {
+  $quad q = 12345678901;
+  printf("%qd\n", q);
+}
+EOCP
+       set try
+       if eval $compile; then
+               yyy=`./try$exe_ext`
+               case "$yyy" in
+               12345678901)
+                       sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
+                       sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
+                       echo "We will use %qd."
+                       ;;
+               esac
+       fi
+fi
 
-: see if chroot exists
-set chroot d_chroot
-eval $inlibc
+if $test X"$sPRId64" = X; then
+       echo "Cannot figure out how to print 64-bit integers." >&4
+fi
 
-: see if chsize exists
-set chsize d_chsize
-eval $inlibc
+$rm -f try try.*
 
-: check for const keyword
+fi # intsize -o longsize -o d_int64t -o d_longlong
+
+case "$sPRId64" in
+'')    d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
+       d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
+       ;;
+*)     d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
+       d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
+       ;;
+esac
+
+: check for length of double
 echo " "
-echo 'Checking to see if your C compiler knows about "const"...' >&4
-$cat >const.c <<'EOCP'
-typedef struct spug { int drokk; } spug;
-main()
+case "$doublesize" in
+'')
+       $echo $n "Checking to see how big your double precision numbers are...$c" >&4
+       $cat >try.c <<'EOCP'
+#include <stdio.h>
+int main()
 {
-       const char *foo;
-       const spug y;
+       printf("%d\n", sizeof(double));
 }
 EOCP
-if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
-       val="$define"
-       echo "Yup, it does."
-else
-       val="$undef"
-       echo "Nope, it doesn't."
-fi
-set d_const
-eval $setvar
-
-: see if crypt exists
-echo " "
-if set crypt val -f d_crypt; eval $csym; $val; then
-       echo 'crypt() found.' >&4
-       val="$define"
-       cryptlib=''
-else
-       cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
-       if $test -z "$cryptlib"; then
-               cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
-       else
-               cryptlib=-lcrypt
-       fi
-       if $test -z "$cryptlib"; then
-               cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
-       else
-               cryptlib=-lcrypt
-       fi
-       if $test -z "$cryptlib"; then
-               cryptlib=`./loc libcrypt$_a "" $libpth`
-       else
-               cryptlib=-lcrypt
-       fi
-       if $test -z "$cryptlib"; then
-               echo 'crypt() NOT found.' >&4
-               val="$undef"
+       set try
+       if eval $compile_ok; then
+               doublesize=`./try`
+               $echo " $doublesize bytes." >&4
        else
-               val="$define"
+               dflt='8'
+               echo "(I can't seem to compile the test program.  Guessing...)"
+               rp="What is the size of a double precision number (in bytes)?"
+               . ./myread
+               doublesize="$ans"
        fi
-fi
-set d_crypt
-eval $setvar
-
-: see if cuserid exists
-set cuserid d_cuserid
-eval $inlibc
-
-: 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
+       ;;
+esac
+$rm -f try.c try
 
-: See if number of significant digits in a double precision number is known
+: check for long doubles
 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
+$echo $n "Checking to see if your system supports long double...$c" >&4
+echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
+if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
        val="$define"
+       echo " Yup, it does." >&4
 else
-       echo "DBL_DIG NOT found." >&4
        val="$undef"
+       echo " Nope, it doesn't." >&4
 fi
-$rm -f dbl_dig.?
-set d_dbl_dig
+$rm try.*
+set d_longdbl
 eval $setvar
 
+: check for length of long double
+case "${d_longdbl}${longdblsize}" in
+$define)
+       echo " "
+       $echo $n "Checking to see how big your long doubles are...$c" >&4
+       $cat >try.c <<'EOCP'
+#include <stdio.h>
+int main()
+{
+       printf("%d\n", sizeof(long double));
+}
+EOCP
+       set try
+       if eval $compile; then
+               longdblsize=`./try`
+               $echo " $longdblsize bytes." >&4
+       else
+               dflt='8'
+               echo " "
+               echo "(I can't seem to compile the test program.  Guessing...)" >&4
+               rp="What is the size of a long double (in bytes)?"
+               . ./myread
+               longdblsize="$ans"
+       fi
+       if $test "X$doublesize" = "X$longdblsize"; then
+               echo "(That isn't any different from an ordinary double.)"
+       fi      
+       ;;
+esac
+$rm -f try.c try
 
-if $test X"$use64bits" = X"$define"; then
-       : see if dbminit64 exists
-       set dbminit64 d_dbminit64
-       eval $inlibc
-
-       : see if dbmclose64 exists
-       set dbmclose64 d_dbmclose64
-       eval $inlibc
-
-       : see if fetch64 exists
-       set fetch64 d_fetch64
-       eval $inlibc
-
-       : see if store64 exists
-       set store64 d_store64
-       eval $inlibc
+echo " "
 
-       : see if delete64 exists
-       set delete64 d_delete64
-       eval $inlibc
+if $test X"$d_longdbl" = X"$define"; then
 
-       : see if firstkey64 exists
-       set firstkey64 d_firstkey64
-       eval $inlibc
+echo "Checking how to print long doubles..." >&4
 
-       : see if nextkey64 exists
-       set nextkey64 d_nextkey64
-       eval $inlibc
-else
-       val="$undef"
-       for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
-       do
-               set $xxx
-               eval $setvar
-       done
+if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
+       $cat >try.c <<'EOCP'
+#include <sys/types.h>
+#include <stdio.h>
+int main() {
+  double d = 123.456;
+  printf("%.3f\n", d);
+}
+EOCP
+       set try
+       if eval $compile; then
+               yyy=`./try$exe_ext`
+               case "$yyy" in
+               123.456)
+                       sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
+                       sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
+                       echo "We will use %f."
+                       ;;
+               esac
+       fi
 fi
 
-: see if difftime exists
-set difftime d_difftime
-eval $inlibc
+if $test X"$sPRIfldbl" = X; then
+       $cat >try.c <<'EOCP'
+#include <sys/types.h>
+#include <stdio.h>
+int main() {
+  long double d = 123.456;
+  printf("%.3llf\n", d);
+}
+EOCP
+       set try
+       if eval $compile; then
+               yyy=`./try$exe_ext`
+               case "$yyy" in
+               123.456)
+                       sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
+                       sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
+                       echo "We will use %llf."
+                       ;;
+               esac
+       fi
+fi
 
-: see if sys/stat.h is available
-set sys/stat.h i_sysstat
-eval $inhdr
+if $test X"$sPRIfldbl" = X; then
+       $cat >try.c <<'EOCP'
+#include <sys/types.h>
+#include <stdio.h>
+int main() {
+  long double d = 123.456;
+  printf("%.3Lf\n", d);
+}
+EOCP
+       set try
+       if eval $compile; then
+               yyy=`./try$exe_ext`
+               case "$yyy" in
+               123.456)
+                       sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
+                       sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
+                       echo "We will use %Lf."
+                       ;;
+               esac
+       fi
+fi
 
-: see if this is a dirent system
-echo " "
-if xinc=`./findhdr dirent.h`; $test "$xinc"; then
-       val="$define"
-       echo "<dirent.h> found." >&4
-else
-       val="$undef"
-       if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
-               echo "<sys/dir.h> found." >&4
-               echo " "
-       else
-               xinc=`./findhdr sys/ndir.h`
+if $test X"$sPRIfldbl" = X; then
+       $cat >try.c <<'EOCP'
+#include <sys/types.h>
+#include <stdio.h>
+int main() {
+  long double d = 123.456;
+  printf("%.3lf\n", d);
+}
+EOCP
+       set try
+       if eval $compile; then
+               yyy=`./try$exe_ext`
+               case "$yyy" in
+               123.456)
+                       sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
+                       sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
+                       echo "We will use %lf."
+                       ;;
+               esac
        fi
-       echo "<dirent.h> NOT found." >&4
 fi
-set i_dirent
-eval $setvar
 
-: Look for type of directory structure.
-echo " "
-$cppstdin $cppflags $cppminus < "$xinc" > try.c
+if $test X"$sPRIfldbl" = X; then
+       echo "Cannot figure out how to print long doubles." >&4
+fi
 
-case "$direntrytype" in
-''|' ')
-       case "$i_dirent" in
-       $define) guess1='struct dirent' ;;
-       *) guess1='struct direct'  ;;
-       esac
+$rm -f try try.*
+
+fi # d_longdbl
+
+case "$sPRIfldbl" in
+'')    d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
+       d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef"; 
        ;;
-*)     guess1="$direntrytype"
+*)     d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
+       d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define"; 
        ;;
 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
+: Initialize h_fcntl
+h_fcntl=false
 
+: Initialize h_sysfile
+h_sysfile=false
 
-: 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
+: access call always available on UNIX
+set access d_access
+eval $inlibc
 
-hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
-while $test $# -ge 2; do
-       case "$1" in
-       $define) echo "#include <$2>";;
-       esac ;
-    shift 2;
-done > try.c;
-echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
-if eval $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
-       val="$define";
-else
-       val="$undef";
-fi;
-set $varname;
-eval $setvar;
-$rm -f try.c try.o'
-
-
-if $test X"$use64bits" = X"$define"; then
-       : see if fstat64 exists
-       set fstat64 d_fstat64
-       eval $inlibc
-
-       : see if ftruncate64 exists
-       set ftruncate64 d_ftruncate64
-       eval $inlibc
-
-       : see if lockf64 exists
-       set lockf64 d_lockf64
-       eval $inlibc
-
-       : see if lseek64 exists
-       set lseek64 d_lseek64
-       eval $inlibc
-
-       : see if lstat64 exists
-       set lstat64 d_lstat64
-       eval $inlibc
-
-       : see if open64 exists
-       set open64 d_open64
-       eval $inlibc
-
-       : see if opendir64 exists
-       set opendir64 d_opendir64
-       eval $inlibc
-
-       : see if readdir64 exists
-       set readdir64 d_readdir64
-       eval $inlibc
-
-       : see if seekdir64 exists
-       set seekdir64 d_seekdir64
-       eval $inlibc
-
-       : see if stat64 exists
-       set stat64 d_stat64
-       eval $inlibc
-
-       : see if telldir64 exists
-       set telldir64 d_telldir64
-       eval $inlibc
-
-       : see if truncate64 exists
-       set truncate64 d_truncate64
-       eval $inlibc
-
-       : check for off64_t
+: locate the flags for 'access()'
+case "$d_access" in
+"$define")
        echo " "
-       echo $n "Checking to see if your system supports off64_t...$c" >&4
-       $cat >try.c <<EOCP
+       $cat >access.c <<'EOCP'
 #include <sys/types.h>
-off64_t foo() { off64_t x; x = 7; return x; }'
+#ifdef I_FCNTL
+#include <fcntl.h>
+#endif
+#ifdef I_SYS_FILE
+#include <sys/file.h>
+#endif
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main() {
+       exit(R_OK);
+}
 EOCP
-       if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
-               val="$define"
-               echo " Yup, it does." >&4
+       : check sys/file.h first, no particular reason here
+       if $test `./findhdr sys/file.h` && \
+               $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
+               h_sysfile=true;
+               echo "<sys/file.h> defines the *_OK access constants." >&4
+       elif $test `./findhdr fcntl.h` && \
+               $cc $cppflags -DI_FCNTL -o access access.c >/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 -o access access.c >/dev/null 2>&1 ; then
+               echo "<unistd.h> defines the *_OK access constants." >&4
        else
-               val="$undef"
-               echo " Nope, it doesn't." >&4
+               echo "I can't find the four *_OK access constants--I'll use mine." >&4
        fi
-       $rm -f try.*
-       set d_off64t
-       eval $setvar
+       ;;
+esac
+$rm -f access*
 
-       : check for ino64_t
-       echo " "
-       echo $n "Checking to see if your system supports ino64_t...$c" >&4
-       val="$undef"
-       case "$i_sysstat" in
-       "$define" )
-               $cat >try.c <<EOCP
-#include <sys/types.h>
-#include <sys/stat.h>
-ino64_t foo() { ino64_t x; x = 7; return x; }'
-EOCP
-               if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
-                       val="$define"
-               fi
-               $rm -f try.*
-               ;;
-       esac
-       if $test "X$val" = X"$define"; then
-               echo " Yup, it does." >&4
-       else
-               echo " Nope, it doesn't." >&4
-       fi
-       set d_ino64t
-       eval $setvar
+: see if accessx exists
+set accessx d_accessx
+eval $inlibc
 
-       : check for struct flock64
-       echo " "
-       echo "Checking to see if your system supports struct flock64..." >&4
-       if $h_fcntl; then
-               set d_flock64s flock64 l_len define fcntl.h
-               eval $hasfield
-       else
-               val="$undef"
-               set d_flock64s
-               eval $setvar
-       fi
-       case "$d_flock64s" in
-       "$define")      echo "Yup, it does." >&4
-                       ;;
-       *)              echo "Nope, it doesn't." >&4
-                       ;;
-       esac
+: see if alarm exists
+set alarm d_alarm
+eval $inlibc
 
-       : check for struct dirent64
-       echo " "
-       echo "Checking to see if your system supports struct dirent64..." >&4
-       set d_dirent64s dirent64 d_off $i_dirent dirent.h
-       eval $hasfield
-       case "$d_flock64s" in
-       "$define")      echo "Yup, it does." >&4
-                       ;;
-       *)              echo "Nope, it doesn't." >&4
-                       ;;
-       esac
+: see if atolf exists
+set atolf d_atolf
+eval $inlibc
+
+: see if atoll exists
+set atoll d_atoll
+eval $inlibc
 
+: 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"
-       for xxx in d_fstat64 d_ftruncate64 d_lockf64 d_lseek64 d_lstat64 d_open64 d_opendir64 d_readdir64 d_seekdir64 d_stat64 d_telldir64 d_truncate64 d_off64t d_ino64t d_flock64s d_dirent64s
-       do
-               set $xxx
-               eval $setvar
-       done
 fi
+set d_attribut
+eval $setvar
+$rm -f attrib*
 
-: see if dlerror exists
-xxx_runnm="$runnm"
-runnm=false
-set dlerror d_dlerror
+: see if bcmp exists
+set bcmp d_bcmp
 eval $inlibc
-runnm="$xxx_runnm"
-
-: 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 than 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"
+: see if bcopy exists
+set bcopy d_bcopy
+eval $inlibc
 
-case "$dlsrc" in
-dl_dlopen.xs)
-       echo "Checking whether your dlsym() needs a leading underscore ..." >&4
-       $cat >dyna.c <<'EOM'
-fred () { }
-EOM
+: see if this is a unistd.h system
+set unistd.h i_unistd
+eval $inhdr
 
-$cat >fred.c<<EOM
+: see if getpgrp exists
+set getpgrp d_getpgrp
+eval $inlibc
 
-#include <stdio.h>
-#$i_dlfcn I_DLFCN
-#ifdef I_DLFCN
-#include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
-#else
+case "$d_getpgrp" in
+"$define")
+       echo " "
+       echo "Checking to see which flavor of getpgrp is in use..."
+       $cat >set.c <<EOP
+#$i_unistd I_UNISTD
 #include <sys/types.h>
-#include <nlist.h>
-#include <link.h>
+#ifdef I_UNISTD
+#  include <unistd.h>
 #endif
-
-extern int fred() ;
-
-main()
+int main()
 {
-    void * handle ;
-    void * symbol ;
-#ifndef RTLD_LAZY
-    int mode = 1 ;
+       if (getuid() == 0) {
+               printf("(I see you are running Configure as super-user...)\n");
+               setuid(1);
+       }
+#ifdef TRY_BSD_PGRP
+       if (getpgrp(1) == 0)
+               exit(0);
 #else
-    int mode = RTLD_LAZY ;
+       if (getpgrp() > 0)
+               exit(0);
 #endif
-    handle = dlopen("./dyna.$dlext", mode) ;
-    if (handle == NULL) {
-       printf ("1\n") ;
-       fflush (stdout) ;
-       exit(0);
-    }
-    symbol = dlsym(handle, "fred") ;
-    if (symbol == NULL) {
-       /* try putting a leading underscore */
-       symbol = dlsym(handle, "_fred") ;
-       if (symbol == NULL) {
-           printf ("2\n") ;
-           fflush (stdout) ;
-           exit(0);
-       }
-       printf ("3\n") ;
-    }
-    else
-       printf ("4\n") ;
-    fflush (stdout) ;
-    exit(0);
+       exit(1);
 }
-EOM
-       : Call the object file tmp-dyna.o in case dlext=o.
-       if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
-               mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
-               $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
-               $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $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
+EOP
+       if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
+               echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
+               val="$define"
+       elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
+               echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
+               val="$undef"
        else
-               echo "I can't compile and run the test program." >&4
+               echo "I can't seem to compile and run the test program."
+               if ./usg; then
+                       xxx="a USG one, i.e. you use getpgrp()."
+               else
+                       # SVR4 systems can appear rather BSD-ish.
+                       case "$i_unistd" in
+                       $undef)
+                               xxx="a BSD one, i.e. you use getpgrp(pid)."
+                               val="$define"
+                               ;;
+                       $define)
+                               xxx="probably a USG one, i.e. you use getpgrp()."
+                               val="$undef"
+                               ;;
+                       esac
+               fi
+               echo "Assuming your getpgrp is $xxx" >&4
        fi
        ;;
+*) val="$undef";;
 esac
-               
-$rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
-
-set d_dlsymun
+set d_bsdgetpgrp
 eval $setvar
+$rm -f set set.c
 
-hasproto='varname=$1; func=$2; shift; shift;
-while $test $# -ge 2; do
-       case "$1" in
-       $define) echo "#include <$2>";;
-       esac ;
-    shift 2;
-done > try.c;
-$cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
-if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
-       echo "$func() prototype found.";
-       val="$define";
-else
-       echo "$func() prototype NOT found.";
-       val="$undef";
-fi;
-set $varname;
-eval $setvar;
-$rm -f try.c tryout.c'
-
-: see if prototype for drand48 is available
-echo " "
-set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
-eval $hasproto
-
-: see if dup2 exists
-set dup2 d_dup2
-eval $inlibc
-
-: see if eaccess exists
-set eaccess d_eaccess
-eval $inlibc
-
-: see if endgrent exists
-set endgrent d_endgrent
-eval $inlibc
-
-: see if endhostent exists
-set endhostent d_endhent
-eval $inlibc
-
-: see if endnetent exists
-set endnetent d_endnent
-eval $inlibc
-
-: see if endprotoent exists
-set endprotoent d_endpent
-eval $inlibc
-
-: see if endpwent exists
-set endpwent d_endpwent
-eval $inlibc
-
-: see if endservent exists
-set endservent d_endsent
+: see if setpgrp exists
+set setpgrp d_setpgrp
 eval $inlibc
 
-: Locate the flags for 'open()'
-echo " "
-$cat >open3.c <<'EOCP'
+case "$d_setpgrp" in
+"$define")
+       echo " "
+       echo "Checking to see which flavor of setpgrp is in use..."
+       $cat >set.c <<EOP
+#$i_unistd I_UNISTD
 #include <sys/types.h>
-#ifdef I_FCNTL
-#include <fcntl.h>
-#endif
-#ifdef I_SYS_FILE
-#include <sys/file.h>
+#ifdef I_UNISTD
+#  include <unistd.h>
 #endif
-main() {
-       if(O_RDONLY);
-#ifdef O_TRUNC
-       exit(0);
+int main()
+{
+       if (getuid() == 0) {
+               printf("(I see you are running Configure as super-user...)\n");
+               setuid(1);
+       }
+#ifdef TRY_BSD_PGRP
+       if (-1 == setpgrp(1, 1))
+               exit(0);
 #else
-       exit(1);
+       if (setpgrp() != -1)
+               exit(0);
 #endif
+       exit(1);
 }
-EOCP
-: check sys/file.h first to get FREAD on Sun
-if $test `./findhdr sys/file.h` && \
-               set open3 -DI_SYS_FILE && eval $compile; then
-       h_sysfile=true;
-       echo "<sys/file.h> defines the O_* constants..." >&4
-       if ./open3; then
-               echo "and you have the 3 argument form of open()." >&4
+EOP
+       if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
+               echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
                val="$define"
-       else
-               echo "but not the 3 argument form of open().  Oh, well." >&4
+       elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
+               echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
                val="$undef"
-       fi
-elif $test `./findhdr fcntl.h` && \
-               set open3 -DI_FCNTL && eval $compile; then
-       h_fcntl=true;
-       echo "<fcntl.h> defines the O_* constants..." >&4
-       if ./open3; then
-               echo "and you have the 3 argument form of open()." >&4
-               val="$define"
        else
-               echo "but not the 3 argument form of open().  Oh, well." >&4
-               val="$undef"
+               echo "(I can't seem to compile and run the test program.)"
+               if ./usg; then
+                       xxx="a USG one, i.e. you use setpgrp()."
+               else
+                       # SVR4 systems can appear rather BSD-ish.
+                       case "$i_unistd" in
+                       $undef)
+                               xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
+                               val="$define"
+                               ;;
+                       $define)
+                               xxx="probably a USG one, i.e. you use setpgrp()."
+                               val="$undef"
+                               ;;
+                       esac
+               fi
+               echo "Assuming your setpgrp is $xxx" >&4
        fi
-else
-       val="$undef"
-       echo "I can't find the O_* constant definitions!  You got problems." >&4
-fi
-set d_open3
+       ;;
+*) val="$undef";;
+esac
+set d_bsdsetpgrp
 eval $setvar
-$rm -f open3*
+$rm -f set set.c
+: see if bzero exists
+set bzero d_bzero
+eval $inlibc
 
-: check for non-blocking I/O stuff
-case "$h_sysfile" in
-true) echo "#include <sys/file.h>" > head.c;;
-*)
-       case "$h_fcntl" in
-       true) echo "#include <fcntl.h>" > head.c;;
-       *) echo "#include <sys/fcntl.h>" > head.c;;
+: 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())()." >&4
+       val="$define"
+elif $contains 'extern[        ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
+       echo "You have int (*signal())() instead of void." >&4
+       val="$undef"
+elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
+       echo "You have void (*signal())()." >&4
+       val="$define"
+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
+               val="$define"
+               ;;
+       *)      echo "As you already told me, signal handler returns int." >&4
+               val="$undef"
+               ;;
        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 "Figuring out the flag used by open() for non-blocking I/O..." >&4
-case "$o_nonblock" in
-'')
-       $cat head.c > try.c
-       $cat >>try.c <<'EOCP'
-main() {
-#ifdef O_NONBLOCK
-       printf("O_NONBLOCK\n");
-       exit(0);
-#endif
-#ifdef O_NDELAY
-       printf("O_NDELAY\n");
-       exit(0);
-#endif
-#ifdef FNDELAY
-       printf("FNDELAY\n");
-       exit(0);
-#endif
-       exit(0);
-}
-EOCP
-       set try
-       if eval $compile_ok; then
-               o_nonblock=`./try`
-               case "$o_nonblock" in
-               '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
-               *) echo "Seems like we can use $o_nonblock.";;
-               esac
-       else
-               echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
-       fi
+echo 'Checking whether your C compiler can cast large floats to int32.' >&4
+if $test "$intsize" -ge 4; then
+       xxx=int
+else
+       xxx=long
+fi
+$cat >try.c <<EOCP
+#include <stdio.h>
+#include <sys/types.h>
+#include <signal.h>
+$signal_t blech(s) int s; { exit(3); }
+int main()
+{
+       $xxx i32;
+       double f, g;
+       int result = 0;
+       char str[16];
+       signal(SIGFPE, blech);
+
+       /* Don't let compiler optimize the test away.  Store the number 
+          in a writable string for gcc to pass to sscanf under HP/UX.
+       */
+       sprintf(str, "2147483647");
+       sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
+       g = 10 * f;
+       i32  = ($xxx) g;
+
+       /* x86 processors will probably give 0x8000 0000, which is a
+       sign change.  We don't want that.  We want to mimic SPARC
+          behavior here, which is to preserve the sign and give
+          back 0x7fff ffff.
+       */
+       if (i32 != ($xxx) f)
+               result |= 1;
+       exit(result);
+}
+EOCP
+set try
+if eval $compile_ok; 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."
        ;;
-*) echo "Using $hint value $o_nonblock.";;
 esac
-$rm -f try try.* .out core
+set d_casti32
+eval $setvar
+$rm -f try try.*
 
+: check for ability to cast negative floats to unsigned
 echo " "
-echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
-case "$eagain" in
-'')
-       $cat head.c > try.c
-       $cat >>try.c <<EOCP
-#include <errno.h>
+echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
+$cat >try.c <<EOCP
+#include <stdio.h>
 #include <sys/types.h>
 #include <signal.h>
-#define MY_O_NONBLOCK $o_nonblock
-#ifndef errno  /* XXX need better Configure test */
-extern int errno;
-#endif
-$signal_t blech(x) int x; { exit(3); }
-EOCP
-       $cat >> try.c <<'EOCP'
-main()
+$signal_t blech(s) int s; { exit(7); }
+$signal_t blech_in_list(s) int s; { exit(4); }
+unsigned long dummy_long(p) unsigned long p; { return p; }
+unsigned int dummy_int(p) unsigned int p; { return p; }
+unsigned short dummy_short(p) unsigned short p; { return p; }
+int main()
 {
-       int pd[2];
-       int pu[2];
-       char buf[1];
-       char string[100];
+       double f;
+       unsigned long along;
+       unsigned int aint;
+       unsigned short ashort;
+       int result = 0;
+       char str[16];
+       
+       /* Frustrate gcc-2.7.2's optimizer which failed this test with
+          a direct f = -123. assignment.  gcc-2.8.0 reportedly
+          optimized the whole file away
+       */
+       /* Store the number in a writable string for gcc to pass to 
+          sscanf under HP/UX.
+       */
+       sprintf(str, "-123");
+       sscanf(str, "%lf", &f);  /* f = -123.; */
 
-       pipe(pd);       /* Down: child -> parent */
-       pipe(pu);       /* Up: parent -> child */
-       if (0 != fork()) {
-               int ret;
-               close(pd[1]);   /* Parent reads from pd[0] */
-               close(pu[0]);   /* Parent writes (blocking) to pu[1] */
-               if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
-                       exit(1);
-               signal(SIGALRM, blech);
-               alarm(5);
-               if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
-                       exit(2);
-               sprintf(string, "%d\n", ret);
-               write(2, string, strlen(string));
-               alarm(0);
-#ifdef EAGAIN
-               if (errno == EAGAIN) {
-                       printf("EAGAIN\n");
-                       goto ok;
-               }
-#endif
-#ifdef EWOULDBLOCK
-               if (errno == EWOULDBLOCK)
-                       printf("EWOULDBLOCK\n");
-#endif
-       ok:
-               write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
-               sleep(2);                               /* Give it time to close our pipe */
-               alarm(5);
-               ret = read(pd[0], buf, 1);      /* Should read EOF */
-               alarm(0);
-               sprintf(string, "%d\n", ret);
-               write(3, string, strlen(string));
-               exit(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;
+       sprintf(str, "1073741824.");
+       sscanf(str, "%lf", &f); /* 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;
+       if (result)
+               exit(result);
+       signal(SIGFPE, blech_in_list);
+       sprintf(str, "123.");
+       sscanf(str, "%lf", &f);  /* f = 123.; */
+       along = dummy_long((unsigned long)f);
+       aint = dummy_int((unsigned int)f);
+       ashort = dummy_short((unsigned short)f);
+       if (along != (unsigned long)123)
+               result |= 4;
+       if (aint != (unsigned int)123)
+               result |= 4;
+       if (ashort != (unsigned short)123)
+               result |= 4;
+       exit(result);
 
-       close(pd[0]);                   /* We write to pd[1] */
-       close(pu[1]);                   /* We read from pu[0] */
-       read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
-       close(pd[1]);                   /* Pipe pd is now fully closed! */
-       exit(0);                                /* Bye bye, thank you for playing! */
 }
 EOCP
-       set try
-       if eval $compile_ok; then
-               echo "$startsh" >mtry
-               echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
-               chmod +x mtry
-               ./mtry >/dev/null 2>&1
-               case $? in
-               0) eagain=`$cat try.out`;;
-               1) echo "Could not perform non-blocking setting!";;
-               2) echo "I did a successful read() for something that was not there!";;
-               3) echo "Hmm... non-blocking I/O does not seem to be working!";;
-               *) echo "Something terribly wrong happened during testing.";;
-               esac
-               rd_nodata=`$cat try.ret`
-               echo "A read() system call with no data present returns $rd_nodata."
-               case "$rd_nodata" in
-               0|-1) ;;
-               *)
-                       echo "(That's peculiar, fixing that to be -1.)"
-                       rd_nodata=-1
-                       ;;
-               esac
-               case "$eagain" in
-               '')
-                       echo "Forcing errno EAGAIN on read() with no data available."
-                       eagain=EAGAIN
-                       ;;
-               *)
-                       echo "Your read() sets errno to $eagain when no data is available."
-                       ;;
-               esac
-               status=`$cat try.err`
-               case "$status" in
-               0) echo "And it correctly returns 0 to signal EOF.";;
-               -1) echo "But it also returns -1 to signal EOF, so be careful!";;
-               *) echo "However, your read() returns '$status' on EOF??";;
-               esac
-               val="$define"
-               if test "$status" = "$rd_nodata"; then
-                       echo "WARNING: you can't distinguish between EOF and no data!"
-                       val="$undef"
-               fi
-       else
-               echo "I can't compile the test program--assuming errno EAGAIN will do."
-               eagain=EAGAIN
-       fi
-       set d_eofnblk
-       eval $setvar
+set try
+if eval $compile_ok; then
+       ./try
+       castflags=$?
+else
+       echo "(I can't seem to compile the test program--assuming it can't)"
+       castflags=7
+fi
+case "$castflags" in
+0)     val="$define"
+       echo "Yup, it can."
        ;;
-*)
-       echo "Using $hint value $eagain."
-       echo "Your read() returns $rd_nodata when no data is present."
-       case "$d_eofnblk" in
-       "$define") echo "And you can see EOF because read() returns 0.";;
-       "$undef") echo "But you can't see EOF status from read() returned value.";;
-       *)
-               echo "(Assuming you can't see EOF status from read anyway.)"
-               d_eofnblk=$undef
-               ;;
-       esac
+*)     val="$undef"
+       echo "Nope, it can't."
        ;;
 esac
-$rm -f try try.* .out core head.c mtry
-
-: see if fchmod exists
-set fchmod d_fchmod
-eval $inlibc
-
-: see if fchown exists
-set fchown d_fchown
-eval $inlibc
-
-: see if this is an fcntl system
-set fcntl d_fcntl
-eval $inlibc
+set d_castneg
+eval $setvar
+$rm -f try.*
 
-: see if fgetpos exists
-set fgetpos d_fgetpos
-eval $inlibc
+: see if vprintf exists
+echo " "
+if set vprintf val -f d_vprintf; eval $csym; $val; then
+       echo 'vprintf() found.' >&4
+       val="$define"
+       $cat >vprintf.c <<'EOF'
+#include <varargs.h>
 
+int main() { xxx("foo"); }
 
-if $test X"$use64bits" = X"$define"; then
-       : see if fgetpos64 exists
-       set fgetpos64 d_fgetpos64
-       eval $inlibc
+xxx(va_alist)
+va_dcl
+{
+       va_list args;
+       char buf[10];
 
-       : see if fopen64 exists
-       set freopen64 d_fopen64
-       eval $inlibc
+       va_start(args);
+       exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
+}
+EOF
+       set vprintf
+       if eval $compile && ./vprintf; then
+               echo "Your vsprintf() returns (int)." >&4
+               val2="$undef"
+       else
+               echo "Your vsprintf() returns (char*)." >&4
+               val2="$define"
+       fi
+else
+       echo 'vprintf() NOT found.' >&4
+               val="$undef"
+               val2="$undef"
+fi
+set d_vprintf
+eval $setvar
+val=$val2
+set d_charvspr
+eval $setvar
 
-       : see if freopen64 exists
-       set freopen64 d_freopen64
-       eval $inlibc
+: see if chown exists
+set chown d_chown
+eval $inlibc
 
-       : see if fseek64 exists
-       set fseek64 d_fseek64
-       eval $inlibc
+: see if chroot exists
+set chroot d_chroot
+eval $inlibc
 
-       : see if fseeko64 exists
-       set fseeko64 d_fseeko64
-       eval $inlibc
+: see if chsize exists
+set chsize d_chsize
+eval $inlibc
 
-       : see if fsetpos64 exists
-       set fsetpos64 d_fsetpos64
-       eval $inlibc
+hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
+while $test $# -ge 2; do
+       case "$1" in
+       $define) echo "#include <$2>";;
+       esac ;
+    shift 2;
+done > try.c;
+echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
+if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
+       val="$define";
+else
+       val="$undef";
+fi;
+set $varname;
+eval $setvar;
+$rm -f try.c try.o'
 
-       : see if ftell64 exists
-       set ftell64 d_ftell64
-       eval $inlibc
+: see if this is a sys/uio.h system
+set sys/uio.h i_sysuio
+eval $inhdr
 
-       : see if ftello64 exists
-       set ftello64 d_ftello64
-       eval $inlibc
+echo "Checking to see if your system supports struct iovec..." >&4
+set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
+eval $hasfield
+case "$d_iovec_s" in
+"$define")      echo "Yup, it does." >&4
+                ;;
+*)              echo "Nope, it doesn't." >&4
+                ;;
+esac
 
-       : see if tmpfile64 exists
-       set tmpfile64 d_tmpfile64
-       eval $inlibc
+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 BSD 4.1c interface, rather than 4.2." >&4
+               d_oldsock="$define"
+       fi
 else
-       val="$undef"
-       for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
-       do
-               set $xxx
-               eval $setvar
-       done
+       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 "X$d_socket" = "X$define"; then
+                  echo "...but you seem to believe that you have sockets." >&4
+               else
+                       for net in net socket
+                       do
+                               if test -f /usr/lib/lib$net$_a; then
+                                       ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
+                                       $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
+                                       if $contains socket libc.list >/dev/null 2>&1; then
+                                               d_socket="$define"
+                                               socketlib="-l$net"
+                                               case "$net" in
+                                               net)
+                                                       echo "...but the Wollongong group seems to have hacked it in." >&4
+                                                       sockethdr="-I/usr/netinclude"
+                                                       ;;
+                                               esac
+                                               echo "Found Berkeley sockets interface in lib$net." >& 4 
+                                               if $contains setsockopt libc.list >/dev/null 2>&1; then
+                                                       d_oldsock="$undef"
+                                               else
+                                                       echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
+                                                       d_oldsock="$define"
+                                               fi
+                                               break
+                                       fi
+                               fi
+                       done
+                       if test "X$d_socket" != "X$define"; then
+                          echo "or anywhere else I see." >&4
+                          d_socket="$undef"
+                          d_oldsock="$undef"
+                       fi
+               fi
+       fi
 fi
 
-: see if flock exists
-set flock d_flock
+: see if socketpair exists
+set socketpair d_sockpair
 eval $inlibc
 
-: see if fork exists
-set fork d_fork
-eval $inlibc
 
-: see if pathconf exists
-set pathconf d_pathconf
-eval $inlibc
+echo " "
+echo "Checking the availability of certain socket constants..." >& 4
+for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
+       enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
+       $cat >try.c <<EOF
+#include <sys/types.h>
+#include <sys/socket.h>
+int main() {
+    int i = $ENUM;
+}
+EOF
+       val="$undef"
+       set try; if eval $compile; then
+               val="$define"
+       fi
+       set d_${enum}; eval $setvar
+       $rm -f try.c try
+done
 
-: see if fpathconf exists
-set fpathconf d_fpathconf
+set sendmsg d_sendmsg
 eval $inlibc
 
-: see if fseeko exists
-set fseeko d_fseeko
+set recvmsg d_recvmsg
 eval $inlibc
 
-: see if fsetpos exists
-set fsetpos d_fsetpos
-eval $inlibc
+echo " "
+$echo $n "Checking to see if your system supports struct msghdr...$c" >&4
+set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
+eval $hasfield
+case "$d_msghdr_s" in
+"$define")      echo "Yup, it does." >&4
+                ;;
+*)              echo "Nope, it doesn't." >&4
+                ;;
+esac
 
-: see if ftello exists
-set ftello d_ftello
-eval $inlibc
+$echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
+set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
+eval $hasfield
+case "$d_cmsghdr_s" in
+"$define")      echo "Yup, it does." >&4
+                ;;
+*)              echo "Nope, it doesn't." >&4
+                ;;
+esac
 
-: see if getgrent exists
-set getgrent d_getgrent
-eval $inlibc
+: check for const keyword
+echo " "
+echo 'Checking to see if your C compiler knows about "const"...' >&4
+$cat >const.c <<'EOCP'
+typedef struct spug { int drokk; } spug;
+int main()
+{
+       const char *foo;
+       const spug y;
+}
+EOCP
+if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
+       val="$define"
+       echo "Yup, it does."
+else
+       val="$undef"
+       echo "Nope, it doesn't."
+fi
+set d_const
+eval $setvar
 
-: see if gethostbyaddr exists
-set gethostbyaddr d_gethbyaddr
-eval $inlibc
+: see if crypt exists
+echo " "
+if set crypt val -f d_crypt; eval $csym; $val; then
+       echo 'crypt() found.' >&4
+       val="$define"
+       cryptlib=''
+else
+       cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
+       if $test -z "$cryptlib"; then
+               cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
+       else
+               cryptlib=-lcrypt
+       fi
+       if $test -z "$cryptlib"; then
+               cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
+       else
+               cryptlib=-lcrypt
+       fi
+       if $test -z "$cryptlib"; then
+               cryptlib=`./loc libcrypt$_a "" $libpth`
+       else
+               cryptlib=-lcrypt
+       fi
+       if $test -z "$cryptlib"; then
+               echo 'crypt() NOT found.' >&4
+               val="$undef"
+       else
+               val="$define"
+       fi
+fi
+set d_crypt
+eval $setvar
 
-: see if gethostbyname exists
-set gethostbyname d_gethbyname
-eval $inlibc
+: get csh whereabouts
+case "$csh" in
+'csh') val="$undef" ;;
+*) val="$define" ;;
+esac
+set d_csh
+eval $setvar
+: Respect a hint or command line value for full_csh.
+case "$full_csh" in
+'') full_csh=$csh ;;
+esac
 
-: see if gethostent exists
-set gethostent d_gethent
+: see if cuserid exists
+set cuserid d_cuserid
 eval $inlibc
 
-: see if this is a netdb.h system
-set netdb.h i_netdb
+: see if this is a limits.h system
+set limits.h i_limits
 eval $inhdr
 
-: see if prototypes for various gethostxxx netdb.h functions are available
-echo " "
-set d_gethostprotos gethostent $i_netdb netdb.h
-eval $hasproto
-
-: see if getlogin exists
-set getlogin d_getlogin
-eval $inlibc
-
-: see if getnetbyaddr exists
-set getnetbyaddr d_getnbyaddr
-eval $inlibc
+: see if this is a float.h system
+set float.h i_float
+eval $inhdr
 
-: see if getnetbyname exists
-set getnetbyname d_getnbyname
-eval $inlibc
-
-: see if getnetent exists
-set getnetent d_getnent
-eval $inlibc
-
-: see if prototypes for various getnetxxx netdb.h functions are available
+: See if number of significant digits in a double precision number is known
 echo " "
-set d_getnetprotos getnetent $i_netdb netdb.h
-eval $hasproto
-
-
-: see if getprotobyname exists
-set getprotobyname d_getpbyname
-eval $inlibc
-
-: see if getprotobynumber exists
-set getprotobynumber d_getpbynumber
-eval $inlibc
-
-: see if getprotoent exists
-set getprotoent d_getpent
-eval $inlibc
-
-: see if getpgid exists
-set getpgid d_getpgid
-eval $inlibc
-
-: see if getpgrp2 exists
-set getpgrp2 d_getpgrp2
-eval $inlibc
-
-: see if getppid exists
-set getppid d_getppid
-eval $inlibc
+$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 getpriority exists
-set getpriority d_getprior
+: see if difftime exists
+set difftime d_difftime
 eval $inlibc
 
-: see if prototypes for various getprotoxxx netdb.h functions are available
+: see if this is a dirent system
 echo " "
-set d_getprotoprotos getprotoent $i_netdb netdb.h
-eval $hasproto
-
-: see if getpwent exists
-set getpwent d_getpwent
-eval $inlibc
+if xinc=`./findhdr dirent.h`; $test "$xinc"; then
+       val="$define"
+       echo "<dirent.h> found." >&4
+else
+       val="$undef"
+       if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
+               echo "<sys/dir.h> found." >&4
+               echo " "
+       else
+               xinc=`./findhdr sys/ndir.h`
+       fi
+       echo "<dirent.h> NOT found." >&4
+fi
+set i_dirent
+eval $setvar
 
+: Look for type of directory structure.
+echo " "
+$cppstdin $cppflags $cppminus < "$xinc" > try.c
 
-: see if getservbyname exists
-set getservbyname d_getsbyname
-eval $inlibc
+case "$direntrytype" in
+''|' ')
+       case "$i_dirent" in
+       $define) guess1='struct dirent' ;;
+       *) guess1='struct direct'  ;;
+       esac
+       ;;
+*)     guess1="$direntrytype"
+       ;;
+esac
 
-: see if getservbyport exists
-set getservbyport d_getsbyport
-eval $inlibc
+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 getservent exists
-set getservent d_getsent
-eval $inlibc
 
-: see if prototypes for various getservxxx netdb.h functions are available
+: see if the directory entry stores field length
 echo " "
-set d_getservprotos getservent $i_netdb netdb.h
-eval $hasproto
+$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 gettimeofday or ftime exists
-set gettimeofday d_gettimeod
+: see if dlerror exists
+xxx_runnm="$runnm"
+runnm=false
+set dlerror d_dlerror
 eval $inlibc
-case "$d_gettimeod" in
-"$undef")
-       set ftime d_ftime 
-       eval $inlibc
-       ;;
-*)
-       val="$undef"; set d_ftime; eval $setvar
-       ;;
-esac
-case "$d_gettimeod$d_ftime" in
-"$undef$undef")
-       echo " "
-       echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
-       ;;
-esac
+runnm="$xxx_runnm"
 
-: see if this is an grp system
-set grp.h i_grp
+: see if dlfcn is available
+set dlfcn.h i_dlfcn
 eval $inhdr
 
-case "$i_grp" in
-$define)
-       xxx=`./findhdr grp.h`
-       $cppstdin $cppflags $cppminus < $xxx >$$.h
+case "$usedl" in
+$define|y|true)
+       $cat << EOM
 
-       if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
-               val="$define"
-       else
-               val="$undef"
-       fi
-       set d_grpasswd
-       eval $setvar
+On a few systems, the dynamically loaded modules that perl generates and uses
+will need a different extension than shared libs. The default will probably
+be appropriate.
 
-       $rm -f $$.h
+EOM
+       case "$dlext" in
+       '')     dflt="$so" ;;
+       *)      dflt="$dlext" ;;
+       esac
+       rp='What is the extension of dynamically loaded modules'
+       . ./myread
+       dlext="$ans"
        ;;
 *)
-       val="$undef";
-       set d_grpasswd; eval $setvar
+       dlext="none"
        ;;
 esac
 
-: 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
+: Check if dlsym need a leading underscore
+echo " "
+val="$undef"
 
-: see if arpa/inet.h has to be included
-set arpa/inet.h i_arpainet
-eval $inhdr
+case "$dlsrc" in
+dl_dlopen.xs)
+       echo "Checking whether your dlsym() needs a leading underscore ..." >&4
+       $cat >dyna.c <<'EOM'
+fred () { }
+EOM
 
-: see if htonl --and friends-- exists
-val=''
-set htonl val
-eval $inlibc
+$cat >fred.c<<EOM
 
-: Maybe they are macros.
-case "$val" in
-$undef)
-       $cat >htonl.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>
-#$i_niin I_NETINET_IN
-#$i_sysin I_SYS_IN
-#$i_arpainet I_ARPA_INET
-#ifdef I_NETINET_IN
-#include <netinet/in.h>
-#endif
-#ifdef I_SYS_IN
-#include <sys/in.h>
-#endif
-#ifdef I_ARPA_INET
-#include <arpa/inet.h>
-#endif
-#ifdef htonl
-printf("Defined as a macro.");
+#include <nlist.h>
+#include <link.h>
 #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
+extern int fred() ;
+
+int 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") ;
+       fflush (stdout) ;
+       exit(0);
+    }
+    symbol = dlsym(handle, "fred") ;
+    if (symbol == NULL) {
+       /* try putting a leading underscore */
+       symbol = dlsym(handle, "_fred") ;
+       if (symbol == NULL) {
+           printf ("2\n") ;
+           fflush (stdout) ;
+           exit(0);
+       }
+       printf ("3\n") ;
+    }
+    else
+       printf ("4\n") ;
+    fflush (stdout) ;
+    exit(0);
+}
+EOM
+       : Call the object file tmp-dyna.o in case dlext=o.
+       if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
+               mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
+               $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
+               $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $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 "No string header found -- You'll surely have problems." >&4
+               echo "I can't compile and run the test program." >&4
+                echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
        fi
-fi
-set i_string
-eval $setvar
-case "$i_string" in
-"$undef") strings=`./findhdr strings.h`;;
-*)       strings=`./findhdr string.h`;;
+       ;;
 esac
+               
+$rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
 
-: 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
+set d_dlsymun
+eval $setvar
+
+hasproto='varname=$1; func=$2; shift; shift;
+while $test $# -ge 2; do
+       case "$1" in
+       $define) echo "#include <$2>";;
+       esac ;
+    shift 2;
+done > try.c;
+$cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
+if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
+       echo "$func() prototype found.";
+       val="$define";
 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
+       echo "$func() prototype NOT found.";
+       val="$undef";
+fi;
+set $varname;
+eval $setvar;
+$rm -f try.c tryout.c'
 
-: check whether inet_aton exists
-set inet_aton d_inetaton
+: see if prototype for drand48 is available
+echo " "
+set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
+eval $hasproto
+
+: see if dup2 exists
+set dup2 d_dup2
 eval $inlibc
 
-: see if inttypes.h is available
-set inttypes.h i_inttypes
-eval $inhdr
-: check for int64_t
-case "$use64bits" in
-"$define" )
-       echo " "
-       echo $n "Checking to see if your system supports int64_t...$c" >&4
-       $cat >try.c <<EOCP
+: see if eaccess exists
+set eaccess d_eaccess
+eval $inlibc
+
+: see if endgrent exists
+set endgrent d_endgrent
+eval $inlibc
+
+: see if endhostent exists
+set endhostent d_endhent
+eval $inlibc
+
+: see if endnetent exists
+set endnetent d_endnent
+eval $inlibc
+
+: see if endprotoent exists
+set endprotoent d_endpent
+eval $inlibc
+
+: see if endpwent exists
+set endpwent d_endpwent
+eval $inlibc
+
+: see if endservent exists
+set endservent d_endsent
+eval $inlibc
+
+: see if endspent exists
+set endspent d_endspent
+eval $inlibc
+
+: Locate the flags for 'open()'
+echo " "
+$cat >open3.c <<'EOCP'
 #include <sys/types.h>
-#$i_inttypes I_INTTYPES
-#ifdef I_INTTYPES
-#include <inttypes.h>
+#ifdef I_FCNTL
+#include <fcntl.h>
 #endif
-int64_t foo() { int64_t x; x = 7; return x; }
+#ifdef I_SYS_FILE
+#include <sys/file.h>
+#endif
+int main() {
+       if(O_RDONLY);
+#ifdef O_TRUNC
+       exit(0);
+#else
+       exit(1);
+#endif
+}
 EOCP
-       if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
+: check sys/file.h first to get FREAD on Sun
+if $test `./findhdr sys/file.h` && \
+               set open3 -DI_SYS_FILE && eval $compile; then
+       h_sysfile=true;
+       echo "<sys/file.h> defines the O_* constants..." >&4
+       if ./open3; then
+               echo "and you have the 3 argument form of open()." >&4
                val="$define"
-               echo " Yup, it does." >&4
        else
+               echo "but not the 3 argument form of open().  Oh, well." >&4
                val="$undef"
-               echo " Nope, it doesn't." >&4
        fi
-       $rm -f try.*
-       ;;
-*)     val="$undef"
-       ;;
-esac
-set d_int64t
-eval $setvar
-
-
-: Look for isascii
-echo " "
-$cat >isascii.c <<'EOCP'
-#include <stdio.h>
-#include <ctype.h>
-main() {
-       int c = 'A';
-       if (isascii(c))
-               exit(0);
+elif $test `./findhdr fcntl.h` && \
+               set open3 -DI_FCNTL && eval $compile; then
+       h_fcntl=true;
+       echo "<fcntl.h> defines the O_* constants..." >&4
+       if ./open3; then
+               echo "and you have the 3 argument form of open()." >&4
+               val="$define"
        else
-               exit(1);
-}
-EOCP
-set isascii
-if eval $compile; then
-       echo "isascii() found." >&4
-       val="$define"
+               echo "but not the 3 argument form of open().  Oh, well." >&4
+               val="$undef"
+       fi
 else
-       echo "isascii() NOT found." >&4
        val="$undef"
+       echo "I can't find the O_* constant definitions!  You got problems." >&4
 fi
-set d_isascii
+set d_open3
 eval $setvar
-$rm -f isascii*
-
-: see if killpg exists
-set killpg d_killpg
-eval $inlibc
+$rm -f open3*
 
-: see if lchown exists
+: check for non-blocking I/O stuff
+case "$h_sysfile" in
+true) echo "#include <sys/file.h>" > head.c;;
+*)
+       case "$h_fcntl" in
+       true) echo "#include <fcntl.h>" > head.c;;
+       *) echo "#include <sys/fcntl.h>" > head.c;;
+       esac
+       ;;
+esac
 echo " "
-$cat > try.c <<'EOCP'
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char lchown(); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char lchown();
+echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
+case "$o_nonblock" in
+'')
+       $cat head.c > try.c
+       $cat >>try.c <<'EOCP'
 int main() {
-    /*  The GNU C library defines this for functions which it implements
-        to always fail with ENOSYS.  Some functions are actually named
-       something starting with __ and the normal name is an alias.  */
-#if defined (__stub_lchown) || defined (__stub___lchown)
-choke me
-#else
-lchown();
+#ifdef O_NONBLOCK
+       printf("O_NONBLOCK\n");
+       exit(0);
 #endif
-; return 0; }
-EOCP
-set try
-if eval $compile; then
-    $echo "lchown() found." >&4
-    val="$define"
-else
-    $echo "lchown() NOT found." >&4
-    val="$undef"
-fi
-set d_lchown
-eval $setvar
-
-: see if link exists
-set link d_link
-eval $inlibc
-
-: see if localeconv exists
-set localeconv d_locconv
-eval $inlibc
-
-: see if lockf exists
-set lockf d_lockf
-eval $inlibc
-
-: check for length of double
-echo " "
-case "$doublesize" in
-'')
-       $echo $n "Checking to see how big your double precision numbers are...$c" >&4
-       $cat >try.c <<'EOCP'
-#include <stdio.h>
-main()
-{
-       printf("%d\n", sizeof(double));
+#ifdef O_NDELAY
+       printf("O_NDELAY\n");
+       exit(0);
+#endif
+#ifdef FNDELAY
+       printf("FNDELAY\n");
+       exit(0);
+#endif
+       exit(0);
 }
 EOCP
        set try
        if eval $compile_ok; then
-               doublesize=`./try`
-               $echo " $doublesize bytes." >&4
+               o_nonblock=`./try`
+               case "$o_nonblock" in
+               '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
+               *) echo "Seems like we can use $o_nonblock.";;
+               esac
        else
-               dflt='8'
-               echo "(I can't seem to compile the test program.  Guessing...)"
-               rp="What is the size of a double precision number (in bytes)?"
-               . ./myread
-               doublesize="$ans"
+               echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
        fi
        ;;
+*) echo "Using $hint value $o_nonblock.";;
 esac
-$rm -f try.c try
+$rm -f try try.* .out core
 
-: check for long doubles
 echo " "
-echo $n "Checking to see if your system supports long doubles...$c" >&4
-echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
-if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
-       val="$define"
-       echo " Yup, it does." >&4
-else
-       val="$undef"
-       echo " Nope, it doesn't." >&4
-fi
-$rm try.*
-set d_longdbl
-eval $setvar
-
-: check for length of long double
-case "${d_longdbl}${longdblsize}" in
-$define)
-       echo " "
-       $echo $n "Checking to see how big your long doubles are...$c" >&4
-       $cat >try.c <<'EOCP'
-#include <stdio.h>
-main()
-{
-       printf("%d\n", sizeof(long double));
-}
+echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
+case "$eagain" in
+'')
+       $cat head.c > try.c
+       $cat >>try.c <<EOCP
+#include <errno.h>
+#include <sys/types.h>
+#include <signal.h>
+#define MY_O_NONBLOCK $o_nonblock
+#ifndef errno  /* XXX need better Configure test */
+extern int errno;
+#endif
+$signal_t blech(x) int x; { exit(3); }
 EOCP
-       set try
-       if eval $compile; then
-               longdblsize=`./try`
-               $echo " $longdblsize bytes." >&4
-       else
-               dflt='8'
-               echo " "
-               echo "(I can't seem to compile the test program.  Guessing...)" >&4
-               rp="What is the size of a long double (in bytes)?"
-               . ./myread
-               longdblsize="$ans"
-       fi
-       if $test "X$doublesize" = "X$longdblsize"; then
-               echo "(That isn't any different from an ordinary double.)"
-       fi      
-       ;;
-esac
-$rm -f try.c try
+       $cat >> try.c <<'EOCP'
+int main()
+{
+       int pd[2];
+       int pu[2];
+       char buf[1];
+       char string[100];
 
-: check for long long
-echo " "
-echo $n "Checking to see if your system supports long long...$c" >&4
-echo 'long long foo() { long long x; x = 7; return x; }' > try.c
-if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
-       val="$define"
-       echo " Yup, it does." >&4
-else
-       val="$undef"
-       echo " Nope, it doesn't." >&4
-fi
-$rm try.*
-set d_longlong
-eval $setvar
+       pipe(pd);       /* Down: child -> parent */
+       pipe(pu);       /* Up: parent -> child */
+       if (0 != fork()) {
+               int ret;
+               close(pd[1]);   /* Parent reads from pd[0] */
+               close(pu[0]);   /* Parent writes (blocking) to pu[1] */
+               if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
+                       exit(1);
+               signal(SIGALRM, blech);
+               alarm(5);
+               if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
+                       exit(2);
+               sprintf(string, "%d\n", ret);
+               write(2, string, strlen(string));
+               alarm(0);
+#ifdef EAGAIN
+               if (errno == EAGAIN) {
+                       printf("EAGAIN\n");
+                       goto ok;
+               }
+#endif
+#ifdef EWOULDBLOCK
+               if (errno == EWOULDBLOCK)
+                       printf("EWOULDBLOCK\n");
+#endif
+       ok:
+               write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
+               sleep(2);                               /* Give it time to close our pipe */
+               alarm(5);
+               ret = read(pd[0], buf, 1);      /* Should read EOF */
+               alarm(0);
+               sprintf(string, "%d\n", ret);
+               write(3, string, strlen(string));
+               exit(0);
+       }
 
-: check for length of long long
-case "${d_longlong}${longlongsize}" in
-$define)
-       echo " "
-       $echo $n "Checking to see how big your long longs are...$c" >&4
-       $cat >try.c <<'EOCP'
-#include <stdio.h>
-main()
-{
-       printf("%d\n", sizeof(long long));
+       close(pd[0]);                   /* We write to pd[1] */
+       close(pu[1]);                   /* We read from pu[0] */
+       read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
+       close(pd[1]);                   /* Pipe pd is now fully closed! */
+       exit(0);                                /* Bye bye, thank you for playing! */
 }
 EOCP
        set try
        if eval $compile_ok; then
-               longlongsize=`./try`
-               $echo " $longlongsize bytes." >&4
+               echo "$startsh" >mtry
+               echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
+               chmod +x mtry
+               ./mtry >/dev/null 2>&1
+               case $? in
+               0) eagain=`$cat try.out`;;
+               1) echo "Could not perform non-blocking setting!";;
+               2) echo "I did a successful read() for something that was not there!";;
+               3) echo "Hmm... non-blocking I/O does not seem to be working!";;
+               *) echo "Something terribly wrong happened during testing.";;
+               esac
+               rd_nodata=`$cat try.ret`
+               echo "A read() system call with no data present returns $rd_nodata."
+               case "$rd_nodata" in
+               0|-1) ;;
+               *)
+                       echo "(That's peculiar, fixing that to be -1.)"
+                       rd_nodata=-1
+                       ;;
+               esac
+               case "$eagain" in
+               '')
+                       echo "Forcing errno EAGAIN on read() with no data available."
+                       eagain=EAGAIN
+                       ;;
+               *)
+                       echo "Your read() sets errno to $eagain when no data is available."
+                       ;;
+               esac
+               status=`$cat try.err`
+               case "$status" in
+               0) echo "And it correctly returns 0 to signal EOF.";;
+               -1) echo "But it also returns -1 to signal EOF, so be careful!";;
+               *) echo "However, your read() returns '$status' on EOF??";;
+               esac
+               val="$define"
+               if test "$status" = "$rd_nodata"; then
+                       echo "WARNING: you can't distinguish between EOF and no data!"
+                       val="$undef"
+               fi
        else
-               dflt='8'
-               echo " "
-               echo "(I can't seem to compile the test program.  Guessing...)"
-               rp="What is the size of a long long (in bytes)?"
-               . ./myread
-               longlongsize="$ans"
+               echo "I can't compile the test program--assuming errno EAGAIN will do."
+               eagain=EAGAIN
        fi
-       if $test "X$longsize" = "X$longlongsize"; then
-               echo "(That isn't any different from an ordinary long.)"
-       fi      
+       set d_eofnblk
+       eval $setvar
+       ;;
+*)
+       echo "Using $hint value $eagain."
+       echo "Your read() returns $rd_nodata when no data is present."
+       case "$d_eofnblk" in
+       "$define") echo "And you can see EOF because read() returns 0.";;
+       "$undef") echo "But you can't see EOF status from read() returned value.";;
+       *)
+               echo "(Assuming you can't see EOF status from read anyway.)"
+               d_eofnblk=$undef
+               ;;
+       esac
        ;;
 esac
-$rm -f try.c try
+$rm -f try try.* .out core head.c mtry
 
-: see if lstat exists
-set lstat d_lstat
+: see if fchmod exists
+set fchmod d_fchmod
 eval $inlibc
 
-: see if mblen exists
-set mblen d_mblen
+: see if fchown exists
+set fchown d_fchown
 eval $inlibc
 
-: see if mbstowcs exists
-set mbstowcs d_mbstowcs
+: see if this is an fcntl system
+set fcntl d_fcntl
 eval $inlibc
 
-: see if mbtowc exists
-set mbtowc d_mbtowc
-eval $inlibc
+: see if sys/select.h has to be included
+set sys/select.h i_sysselct
+eval $inhdr
 
-: see if memcmp exists
-set memcmp d_memcmp
-eval $inlibc
+: see if we should include time.h, sys/time.h, or both
+echo " "
+if test "X$timeincl" = X; then
+       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
+int 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=''
+       for s_timezone in '-DS_TIMEZONE' ''; do
+       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"
+                       set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
+                       if eval $compile; 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
+       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
+fi
 
-: see if memcpy exists
-set memcpy d_memcpy
-eval $inlibc
+: check for fd_set items
+$cat <<EOM
 
-: see if memmove exists
-set memmove d_memmove
-eval $inlibc
+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>
+#endif
+#ifdef I_SYS_SELECT
+#include <sys/select.h>
+#endif
+int main() {
+       fd_set fds;
 
-: see if memset exists
-set memset d_memset
-eval $inlibc
+#ifdef TRYBITS
+       if(fds.fds_bits);
+#endif
 
-: see if mkdir exists
-set mkdir d_mkdir
-eval $inlibc
+#if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
+       exit(0);
+#else
+       exit(1);
+#endif
+}
+EOCP
+set fd_set -DTRYBITS
+if eval $compile; 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
+       set fd_set
+       if eval $compile; 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*
 
-: see if mkfifo exists
-set mkfifo d_mkfifo
+: see if fgetpos exists
+set fgetpos d_fgetpos
 eval $inlibc
 
-: see if mktime exists
-set mktime d_mktime
+: see if flock exists
+set flock d_flock
 eval $inlibc
 
-: see if msgctl exists
-set msgctl d_msgctl
+: see if fork exists
+set fork d_fork
 eval $inlibc
 
-: see if msgget exists
-set msgget d_msgget
+: see if pathconf exists
+set pathconf d_pathconf
 eval $inlibc
 
-: see if msgsnd exists
-set msgsnd d_msgsnd
+: see if fpathconf exists
+set fpathconf d_fpathconf
 eval $inlibc
 
-: see if msgrcv exists
-set msgrcv d_msgrcv
+
+: see if llseek exists
+set llseek d_llseek
 eval $inlibc
 
-: see how much of the 'msg*(2)' library is present.
-h_msg=true
+: check for off64_t
 echo " "
-case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
-*"$undef"*) h_msg=false;;
-esac
-case "$osname" in
-freebsd)
-    case "`ipcs 2>&1`" in
-    "SVID messages"*"not configured"*)
-       echo "Your $osname does not have the msg*(2) configured." >&4
-        h_msg=false
-       val="$undef"
-       set msgctl d_msgctl
-       eval $setvar
-       set msgget d_msgget
-       eval $setvar
-       set msgsnd d_msgsnd
-       eval $setvar
-       set msgrcv d_msgrcv
-       eval $setvar
-       ;;
-    esac
-    ;;
-esac
-: we could also check for sys/ipc.h ...
-if $h_msg && $test `./findhdr sys/msg.h`; then
-       echo "You have the full msg*(2) library." >&4
+$echo $n "Checking to see if your system supports off64_t...$c" >&4
+$cat >try.c <<EOCP
+#include <sys/types.h>
+#include <unistd.h>
+off64_t foo() { off64_t x; x = 7; return x; }'
+EOCP
+if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
        val="$define"
+       echo " Yup, it does." >&4
 else
-       echo "You don't have the full msg*(2) library." >&4
        val="$undef"
+       echo " Nope, it doesn't." >&4
 fi
-set d_msg
+$rm -f try.*
+set d_off64_t
 eval $setvar
 
-: see if nice exists
-set nice d_nice
+: check for fpos64_t
+echo " "
+$echo $n "Checking to see if your system supports fpos64_t...$c" >&4
+$cat >try.c <<EOCP
+#include <sys/stdio.h>
+fpos64_t foo() { fpos64_t x; x = 7; return x; }'
+EOCP
+if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
+       val="$define"
+       echo " Yup, it does." >&4
+else
+       val="$undef"
+       echo " Nope, it doesn't." >&4
+fi
+$rm -f try.*
+set d_fpos64_t
+eval $setvar
+
+: see if fseeko exists
+set fseeko d_fseeko
 eval $inlibc
 
-: see if pause exists
-set pause d_pause
+: see if fsetpos exists
+set fsetpos d_fsetpos
 eval $inlibc
 
-: see if pipe exists
-set pipe d_pipe
+: see if this is a sys/param system
+set sys/param.h i_sysparam
+eval $inhdr
+
+: see if this is a sys/mount.h system
+set sys/mount.h i_sysmount
+eval $inhdr
+
+
+: see if statfs exists
+set statfs d_statfs
 eval $inlibc
 
-: see if poll exists
-set poll d_poll
+: see if fstatfs exists
+set fstatfs d_fstatfs
 eval $inlibc
 
-: test whether pthreads are created in joinable -- aka undetached -- state
-if test "X$usethreads" = "X$define"; then
-       echo $n "Checking whether pthreads are created joinable. $c" >&4 
-       $cat >try.c <<'EOCP'
-#include <pthread.h>
-#include <stdio.h>
-int main() {
-    pthread_attr_t attr;
-    int detachstate;
-    printf("%s\n",
-       pthread_attr_init(&attr) == 0 &&
-        pthread_attr_getdetachstate(&attr, &detachstate) == 0 &&
-        detachstate == PTHREAD_CREATE_DETACHED ?
-        "detached" : "joinable");
-    exit(0);
-}
-EOCP
-       set try
-       if eval $compile; then
-               yyy=`./try`
-               case "$yyy" in
-                       detached) echo "Nope, they aren't." >&4 ;;
-                       *) echo "Yup, they are." >&4 ;;
-               esac
-       else
-               echo " "
-               echo "(I can't execute the test program--assuming they are.)" >&4
-               yyy=joinable
-       fi
-       $rm -f try try.*
-       case "$yyy" in
-               detached) val="$undef" ;;
-               *) val="$define" ;;
-       esac
-       set d_pthreads_created_joinable
-       eval $setvar
-else
-    d_pthreads_created_joinable="$undef"
-fi
+: see if statfs knows about mount flags
+set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
+eval $hasfield
 
-: see if this is a pwd.h system
-set pwd.h i_pwd
-eval $inhdr
 
-case "$i_pwd" in
-$define)
-       xxx=`./findhdr pwd.h`
-       $cppstdin $cppflags $cppminus < $xxx >$$.h
+: see if statvfs exists
+set statvfs d_statvfs
+eval $inlibc
 
-       if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
-               val="$define"
-       else
-               val="$undef"
-       fi
-       set d_pwquota
-       eval $setvar
+: see if fstatvfs exists
+set fstatvfs d_fstatvfs
+eval $inlibc
 
-       if $contains 'pw_age' $$.h >/dev/null 2>&1; then
-               val="$define"
-       else
-               val="$undef"
-       fi
-       set d_pwage
-       eval $setvar
 
-       if $contains 'pw_change' $$.h >/dev/null 2>&1; then
-               val="$define"
-       else
-               val="$undef"
-       fi
-       set d_pwchange
-       eval $setvar
+: see if ftello exists
+set ftello d_ftello
+eval $inlibc
 
-       if $contains 'pw_class' $$.h >/dev/null 2>&1; then
-               val="$define"
-       else
-               val="$undef"
-       fi
-       set d_pwclass
-       eval $setvar
+: see if getgrent exists
+set getgrent d_getgrent
+eval $inlibc
 
-       if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
-               val="$define"
-       else
-               val="$undef"
-       fi
-       set d_pwexpire
-       eval $setvar
+: see if gethostbyaddr exists
+set gethostbyaddr d_gethbyaddr
+eval $inlibc
 
-       if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
-               val="$define"
-       else
-               val="$undef"
-       fi
-       set d_pwcomment
-       eval $setvar
+: see if gethostbyname exists
+set gethostbyname d_gethbyname
+eval $inlibc
 
-       if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
-               val="$define"
-       else
-               val="$undef"
-       fi
-       set d_pwgecos
-       eval $setvar
+: see if gethostent exists
+set gethostent d_gethent
+eval $inlibc
 
-       if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
-               val="$define"
+: see how we will look up host name
+echo " "
+call=''
+if set gethostname val -f d_gethname; eval $csym; $val; then
+       echo 'gethostname() found.' >&4
+       d_gethname="$define"
+       call=gethostname
+fi
+if set uname val -f d_uname; eval $csym; $val; 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
+enough to have a broken system call, use the default answer.
+
+EOM
+               dflt=y
+               case "$d_uname" in
+               "$define") dflt=n;;
+               esac
+               rp='Is your uname() broken?'
+               . ./myread
+               case "$ans" in
+               n*) d_uname="$define"; call=uname;;
+               esac
        else
-               val="$undef"
+               echo 'uname() found.' >&4
+               d_uname="$define"
+               case "$call" in
+               '') call=uname ;;
+               esac
        fi
-       set d_pwpasswd
-       eval $setvar
+fi
+case "$d_gethname" in
+'') d_gethname="$undef";;
+esac
+case "$d_uname" in
+'') d_uname="$undef";;
+esac
+case "$d_uname$d_gethname" in
+*define*)
+       dflt=n
+       cat <<EOM
+Every now and then someone has a $call() that lies about the hostname
+but can't be fixed for political or economic reasons.  If you wish, I can
+pretend $call() isn't there and maybe compute hostname at run-time
+thanks to the '$phostname' command.
 
-       $rm -f $$.h
+EOM
+       rp="Shall I ignore $call() from now on?"
+       . ./myread
+       case "$ans" in
+       y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
+       esac;;
+esac
+case "$phostname" in
+'') aphostname='';;
+*) case "$aphostname" in
+       /*) ;;
+       *) set X $phostname
+               shift
+               file=$1
+               shift
+               file=`./loc $file $file $pth`
+               aphostname=`echo $file $*`
+               ;;
+       esac
        ;;
+esac
+case "$d_uname$d_gethname" in
+*define*) ;;
 *)
-       val="$undef"; 
-       set d_pwquota; eval $setvar
-       set d_pwage; eval $setvar
-       set d_pwchange; eval $setvar
-       set d_pwclass; eval $setvar
-       set d_pwexpire; eval $setvar
-       set d_pwcomment; eval $setvar
-       set d_pwgecos; eval $setvar
-       set d_pwpasswd; eval $setvar
-       ;;
+       case "$phostname" in
+       '')
+               echo "There will be no way for $package to get your hostname." >&4;;
+       *)
+       echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
+               ;;
+       esac;;
+esac
+case "$d_phostname" in
+'') d_phostname="$undef";;
 esac
 
-: see if readdir and friends exist
-set readdir d_readdir
+: see if this is a netdb.h system
+set netdb.h i_netdb
+eval $inhdr
+
+: see if prototypes for various gethostxxx netdb.h functions are available
+echo " "
+set d_gethostprotos gethostent $i_netdb netdb.h
+eval $hasproto
+
+: see if getlogin exists
+set getlogin d_getlogin
 eval $inlibc
-set seekdir d_seekdir
+
+: see if getmntent exists
+set getmntent d_getmntent
 eval $inlibc
-set telldir d_telldir
+
+: see if getnetbyaddr exists
+set getnetbyaddr d_getnbyaddr
 eval $inlibc
-set rewinddir d_rewinddir
+
+: see if getnetbyname exists
+set getnetbyname d_getnbyname
 eval $inlibc
 
-: see if readlink exists
-set readlink d_readlink
+: see if getnetent exists
+set getnetent d_getnent
 eval $inlibc
 
-: see if rename exists
-set rename d_rename
+: see if prototypes for various getnetxxx netdb.h functions are available
+echo " "
+set d_getnetprotos getnetent $i_netdb netdb.h
+eval $hasproto
+
+
+: see if getprotobyname exists
+set getprotobyname d_getpbyname
 eval $inlibc
 
-: see if rmdir exists
-set rmdir d_rmdir
+: see if getprotobynumber exists
+set getprotobynumber d_getpbynumber
 eval $inlibc
 
-: see if memory.h is available.
-val=''
-set memory.h val
-eval $inhdr
+: see if getprotoent exists
+set getprotoent d_getpent
+eval $inlibc
 
-: 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 getpgid exists
+set getpgid d_getpgid
+eval $inlibc
 
-: can bcopy handle overlapping blocks?
-val="$undef"
-case "$d_bcopy" in
-"$define")
-       echo " "
-       echo "Checking to see if your bcopy() can do overlapping copies..." >&4
-       $cat >try.c <<EOCP
-#$i_memory I_MEMORY
-#$i_stdlib I_STDLIB
-#$i_string I_STRING
-#$i_unistd I_UNISTD
-EOCP
-       $cat >>try.c <<'EOCP'
-#include <stdio.h>
-#ifdef I_MEMORY
-#  include <memory.h>
-#endif
-#ifdef I_STDLIB
-#  include <stdlib.h>
-#endif
-#ifdef I_STRING
-#  include <string.h>
-#else
-#  include <strings.h>
-#endif
-#ifdef I_UNISTD
-#  include <unistd.h>  /* Needed for NetBSD */
-#endif
-main()
-{
-char buf[128], abc[128];
-char *b;
-int len;
-int off;
-int align;
+: see if getpgrp2 exists
+set getpgrp2 d_getpgrp2
+eval $inlibc
 
-bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
+: see if getppid exists
+set getppid d_getppid
+eval $inlibc
 
-for (align = 7; align >= 0; align--) {
-       for (len = 36; len; len--) {
-               b = buf+align;
-               bcopy(abc, b, len);
-               for (off = 1; off <= len; off++) {
-                       bcopy(b, b+off, len);
-                       bcopy(b+off, b, len);
-                       if (bcmp(b, abc, len))
-                               exit(1);
-               }
-       }
-}
-exit(0);
-}
-EOCP
-       set try
-       if eval $compile_ok; then
-               if ./try 2>/dev/null; then
-                       echo "Yes, it can."
-                       val="$define"
-               else
-                       echo "It can't, sorry."
-                       case "$d_memmove" in
-                       "$define") echo "But that's Ok since you have memmove()." ;;
-                       esac
-               fi
-       else
-               echo "(I can't compile the test program, so we'll assume not...)"
-               case "$d_memmove" in
-               "$define") echo "But that's Ok since you have memmove()." ;;
-               esac
-       fi
-       ;;
-esac
-$rm -f try.* try core
-set d_safebcpy
-eval $setvar
+: see if getpriority exists
+set getpriority d_getprior
+eval $inlibc
 
-: can memcpy handle overlapping blocks?
-val="$undef"
-case "$d_memcpy" in
-"$define")
-       echo " "
-       echo "Checking to see if your memcpy() can do overlapping copies..." >&4
-       $cat >try.c <<EOCP
-#$i_memory I_MEMORY
-#$i_stdlib I_STDLIB
-#$i_string I_STRING
-#$i_unistd I_UNISTD
-EOCP
-       $cat >>try.c <<'EOCP'
-#include <stdio.h>
-#ifdef I_MEMORY
-#  include <memory.h>
-#endif
-#ifdef I_STDLIB
-#  include <stdlib.h>
-#endif
-#ifdef I_STRING
-#  include <string.h>
-#else
-#  include <strings.h>
-#endif
-#ifdef I_UNISTD
-#  include <unistd.h>  /* Needed for NetBSD */
-#endif
-main()
-{
-char buf[128], abc[128];
-char *b;
-int len;
-int off;
-int align;
+: see if prototypes for various getprotoxxx netdb.h functions are available
+echo " "
+set d_getprotoprotos getprotoent $i_netdb netdb.h
+eval $hasproto
 
-/* Copy "abcde..." string to char abc[] so that gcc doesn't
-   try to store the string in read-only memory. */
-memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
+: see if getpwent exists
+set getpwent d_getpwent
+eval $inlibc
 
-for (align = 7; align >= 0; align--) {
-       for (len = 36; len; len--) {
-               b = buf+align;
-               memcpy(b, abc, len);
-               for (off = 1; off <= len; off++) {
-                       memcpy(b+off, b, len);
-                       memcpy(b, b+off, len);
-                       if (memcmp(b, abc, len))
-                               exit(1);
-               }
-       }
-}
-exit(0);
-}
-EOCP
-       set try
-       if eval $compile_ok; then
-               if ./try 2>/dev/null; then
-                       echo "Yes, it can."
-                       val="$define"
-               else
-                       echo "It can't, sorry."
-                       case "$d_memmove" in
-                       "$define") echo "But that's Ok since you have memmove()." ;;
-                       esac
-               fi
-       else
-               echo "(I can't compile the test program, so we'll assume not...)"
-               case "$d_memmove" in
-               "$define") echo "But that's Ok since you have memmove()." ;;
-               esac
-       fi
-       ;;
-esac
-$rm -f try.* try core
-set d_safemcpy
-eval $setvar
 
-: can memcmp be trusted to compare relative magnitude?
-val="$undef"
-case "$d_memcmp" in
-"$define")
-       echo " "
-       echo "Checking if your memcmp() can compare relative magnitude..." >&4
-       $cat >try.c <<EOCP
-#$i_memory I_MEMORY
-#$i_stdlib I_STDLIB
-#$i_string I_STRING
-#$i_unistd I_UNISTD
-EOCP
-       $cat >>try.c <<'EOCP'
-#include <stdio.h>
-#ifdef I_MEMORY
-#  include <memory.h>
-#endif
-#ifdef I_STDLIB
-#  include <stdlib.h>
-#endif
-#ifdef I_STRING
-#  include <string.h>
-#else
-#  include <strings.h>
-#endif
-#ifdef I_UNISTD
-#  include <unistd.h>  /* Needed for NetBSD */
-#endif
-main()
-{
-char a = -1;
-char b = 0;
-if ((a < b) && memcmp(&a, &b, 1) < 0)
-       exit(1);
-exit(0);
-}
-EOCP
-       set try
-       if eval $compile_ok; then
-               if ./try 2>/dev/null; then
-                       echo "Yes, it can."
-                       val="$define"
-               else
-                       echo "No, it can't (it uses signed chars)."
-               fi
-       else
-               echo "(I can't compile the test program, so we'll assume not...)"
-       fi
-       ;;
-esac
-$rm -f try.* try core
-set d_sanemcmp
-eval $setvar
+: see if getservbyname exists
+set getservbyname d_getsbyname
+eval $inlibc
 
-: see if select exists
-set select d_select
+: see if getservbyport exists
+set getservbyport d_getsbyport
 eval $inlibc
 
-: see if semctl exists
-set semctl d_semctl
+: see if getservent exists
+set getservent d_getsent
 eval $inlibc
 
-: see if semget exists
-set semget d_semget
+: see if prototypes for various getservxxx netdb.h functions are available
+echo " "
+set d_getservprotos getservent $i_netdb netdb.h
+eval $hasproto
+
+: see if getspent exists
+set getspent d_getspent
 eval $inlibc
 
-: see if semop exists
-set semop d_semop
+: see if getspnam exists
+set getspnam d_getspnam
 eval $inlibc
 
-: see how much of the 'sem*(2)' library is present.
-h_sem=true
-echo " "
-case "$d_semctl$d_semget$d_semop" in
-*"$undef"*) h_sem=false;;
-esac
-case "$osname" in
-freebsd)
-    case "`ipcs 2>&1`" in
-    "SVID messages"*"not configured"*)
-       echo "Your $osname does not have the sem*(2) configured." >&4
-        h_sem=false
-       val="$undef"
-       set semctl d_semctl
-       eval $setvar
-       set semget d_semget
-       eval $setvar
-       set semop d_semop
+: see if gettimeofday or ftime exists
+set gettimeofday d_gettimeod
+eval $inlibc
+case "$d_gettimeod" in
+"$undef")
+       set ftime d_ftime 
+       eval $inlibc
+       ;;
+*)
+       val="$undef"; set d_ftime; eval $setvar
+       ;;
+esac
+case "$d_gettimeod$d_ftime" in
+"$undef$undef")
+       echo " "
+       echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
+       ;;
+esac
+
+: see if this is an grp system
+set grp.h i_grp
+eval $inhdr
+
+case "$i_grp" in
+$define)
+       xxx=`./findhdr grp.h`
+       $cppstdin $cppflags $cppminus < $xxx >$$.h
+
+       if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
+               val="$define"
+       else
+               val="$undef"
+       fi
+       set d_grpasswd
        eval $setvar
+
+       $rm -f $$.h
+       ;;
+*)
+       val="$undef";
+       set d_grpasswd; eval $setvar
        ;;
-    esac
-    ;;
 esac
-: we could also check for sys/ipc.h ...
-if $h_sem && $test `./findhdr sys/sem.h`; then
-       echo "You have the full sem*(2) library." >&4
+
+: see if hasmntopt exists
+set hasmntopt d_hasmntopt
+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 arpa/inet.h has to be included
+set arpa/inet.h i_arpainet
+eval $inhdr
+
+: see if htonl --and friends-- exists
+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
+#$i_arpainet I_ARPA_INET
+#ifdef I_NETINET_IN
+#include <netinet/in.h>
+#endif
+#ifdef I_SYS_IN
+#include <sys/in.h>
+#endif
+#ifdef I_ARPA_INET
+#include <arpa/inet.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
-       echo "You don't have the full sem*(2) library." >&4
        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 d_sem
+set i_string
 eval $setvar
+case "$i_string" in
+"$undef") strings=`./findhdr strings.h`;;
+*)       strings=`./findhdr string.h`;;
+esac
 
-: see whether sys/sem.h defines union semun
+: index or strchr
 echo " "
-$cat > try.c <<'END'
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/sem.h>
-int main () { union semun semun; semun.buf = 0; }
-END
+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
+
+: check whether inet_aton exists
+set inet_aton d_inetaton
+eval $inlibc
+
+: Look for isascii
+echo " "
+$cat >isascii.c <<'EOCP'
+#include <stdio.h>
+#include <ctype.h>
+int main() {
+       int c = 'A';
+       if (isascii(c))
+               exit(0);
+       else
+               exit(1);
+}
+EOCP
+set isascii
+if eval $compile; then
+       echo "isascii() found." >&4
+       val="$define"
+else
+       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
+
+: see if lchown exists
+echo " "
+$cat > try.c <<'EOCP'
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char lchown(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char lchown();
+int main() {
+    /*  The GNU C library defines this for functions which it implements
+        to always fail with ENOSYS.  Some functions are actually named
+       something starting with __ and the normal name is an alias.  */
+#if defined (__stub_lchown) || defined (__stub___lchown)
+choke me
+#else
+lchown();
+#endif
+; return 0; }
+EOCP
 set try
 if eval $compile; then
-    echo "You have union semun in <sys/sem.h>." >&4
+    $echo "lchown() found." >&4
     val="$define"
 else
-    echo "You do not have union semun in <sys/sem.h>." >&4
+    $echo "lchown() NOT found." >&4
     val="$undef"
 fi
-$rm -f try try.c try.h
-set d_union_semun
+set d_lchown
 eval $setvar
 
-: see how to do semctl IPC_STAT
-case "$d_sem" in
-$define)
-    : see whether semctl IPC_STAT can use union semun
-    echo " "
-    $cat > try.h <<END
-#ifndef S_IRUSR
-#   ifdef S_IREAD
-#      define S_IRUSR S_IREAD
-#      define S_IWUSR S_IWRITE
-#      define S_IXUSR S_IEXEC
-#   else
-#      define S_IRUSR 0400
-#      define S_IWUSR 0200
-#      define S_IXUSR 0100
-#   endif
-#   define S_IRGRP (S_IRUSR>>3)
-#   define S_IWGRP (S_IWUSR>>3)
-#   define S_IXGRP (S_IXUSR>>3)
-#   define S_IROTH (S_IRUSR>>6)
-#   define S_IWOTH (S_IWUSR>>6)
-#   define S_IXOTH (S_IXUSR>>6)
+: See if number of significant digits in a double precision number is known
+echo " "
+$cat >ldbl_dig.c <<EOM
+#$i_limits I_LIMITS
+#$i_float I_FLOAT
+#ifdef I_LIMITS
+#include <limits.h>
 #endif
-#ifndef S_IRWXU
-#   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
-#   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
-#   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
+#ifdef I_FLOAT
+#include <float.h>
 #endif
-END
-
-    $cat > try.c <<END
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/sem.h>
-#include <sys/stat.h>
-#include <stdio.h>
-#include <errno.h>
-#include "try.h"
-#ifndef errno
-extern int errno;
-#endif
-#$d_union_semun HAS_UNION_SEMUN
-int main() {
-    union semun
-#ifndef HAS_UNION_SEMUN
-    {
-       int val;
-       struct semid_ds *buf;
-       unsigned short *array;
-    }
-#endif
-    arg;
-    int sem, st;
-
-#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
-    sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
-    if (sem > -1) {
-       struct semid_ds argbuf;
-       arg.buf = &argbuf;
-#      ifdef IPC_STAT
-       st = semctl(sem, 0, IPC_STAT, arg);
-       if (st == 0)
-           printf("semun\n");
-       else
-#      endif /* IPC_STAT */
-           printf("semctl IPC_STAT failed: errno = %d\n", errno);
-#      ifdef IPC_RMID
-       if (semctl(sem, 0, IPC_RMID, arg) != 0)
-#      endif /* IPC_RMID */
-           printf("semctl IPC_RMID failed: errno = %d\n", errno);
-    } else
-#endif /* IPC_PRIVATE && ... */
-       printf("semget failed: errno = %d\n", errno);
-  return 0;
-}
-END
-    val="$undef"
-    set try
-    if eval $compile; then
-       xxx=`./try`
-        case "$xxx" in
-        semun) val="$define" ;;
-        esac
-    fi
-    $rm -f try try.c
-    set d_semctl_semun
-    eval $setvar
-    case "$d_semctl_semun" in
-    $define)
-        echo "You can use union semun for semctl IPC_STAT." >&4
-       also='also'
-        ;;
-    *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
-       also=''
-        ;;
-    esac
-
-    : see whether semctl IPC_STAT can use struct semid_ds pointer
-    $cat > try.c <<'END'
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/sem.h>
-#include <sys/stat.h>
-#include "try.h"
-#include <stdio.h>
-#include <errno.h>
-#ifndef errno
-extern int errno;
+#ifdef LDBL_DIG
+printf("Contains LDBL_DIG");
 #endif
-int main() {
-    struct semid_ds arg;
-    int sem, st;
-
-#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
-    sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
-    if (sem > -1) {
-#      ifdef IPC_STAT
-       st = semctl(sem, 0, IPC_STAT, &arg);
-       if (st == 0)
-           printf("semid_ds\n");
-       else
-#      endif /* IPC_STAT */
-           printf("semctl IPC_STAT failed: errno = %d\n", errno);
-#      ifdef IPC_RMID
-       if (semctl(sem, 0, IPC_RMID, &arg) != 0)
-#      endif /* IPC_RMID */
-           printf("semctl IPC_RMID failed: errno = %d\n", errno);
-    } else
-#endif /* IPC_PRIVATE && ... */
-       printf("semget failed: errno = %d\n", errno);
-
-    return 0;
-}
-END
-    val="$undef"
-    set try
-    if eval $compile; then
-        xxx=`./try`
-        case "$xxx" in
-        semid_ds) val="$define" ;;
-        esac
-    fi
-    $rm -f try try.c
-    set d_semctl_semid_ds
-    eval $setvar
-    case "$d_semctl_semid_ds" in
-    $define)
-        echo "You can $also use struct semid_ds * for semctl IPC_STAT." >&4
-        ;;
-    *)  echo "You cannot use struct semid_ds * for semctl IPC_STAT." >&4
-        ;;
-    esac
-    $rm -f try.h
-    ;;
-*)  val="$undef"
-
-    # We do not have the full sem*(2) library, so assume we can not
-    # use either.
-
-    set d_semctl_semun
-    eval $setvar
-
-    set d_semctl_semid_ds
-    eval $setvar
-    ;;
-esac
+EOM
+$cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
+if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
+       echo "LDBL_DIG found." >&4
+       val="$define"
+else
+       echo "LDBL_DIG NOT found." >&4
+       val="$undef"
+fi
+$rm -f ldbl_dig.?
+set d_ldbl_dig
+eval $setvar
 
-: see if setegid exists
-set setegid d_setegid
+: see if link exists
+set link d_link
 eval $inlibc
 
-: see if seteuid exists
-set seteuid d_seteuid
+: see if localeconv exists
+set localeconv d_locconv
 eval $inlibc
 
-: see if setgrent exists
-set setgrent d_setgrent
+: see if lockf exists
+set lockf d_lockf
 eval $inlibc
 
-: see if sethostent exists
-set sethostent d_sethent
+: see if lstat exists
+set lstat d_lstat
 eval $inlibc
 
-: see if setlinebuf exists
-set setlinebuf d_setlinebuf
+: see if madvise exists
+set madvise d_madvise
 eval $inlibc
 
-: see if setlocale exists
-set setlocale d_setlocale
+: see if mblen exists
+set mblen d_mblen
 eval $inlibc
 
-: see if setnetent exists
-set setnetent d_setnent
+: see if mbstowcs exists
+set mbstowcs d_mbstowcs
 eval $inlibc
 
-: see if setprotoent exists
-set setprotoent d_setpent
+: see if mbtowc exists
+set mbtowc d_mbtowc
 eval $inlibc
 
-: see if setpgid exists
-set setpgid d_setpgid
+: see if memchr exists
+set memchr d_memchr
 eval $inlibc
 
-: see if setpgrp2 exists
-set setpgrp2 d_setpgrp2
+: see if memcmp exists
+set memcmp d_memcmp
 eval $inlibc
 
-: see if setpriority exists
-set setpriority d_setprior
+: see if memcpy exists
+set memcpy d_memcpy
 eval $inlibc
 
-: see if setpwent exists
-set setpwent d_setpwent
+: see if memmove exists
+set memmove d_memmove
 eval $inlibc
 
-: see if setregid exists
-set setregid d_setregid
-eval $inlibc
-set setresgid d_setresgid
+: see if memset exists
+set memset d_memset
 eval $inlibc
 
-: see if setreuid exists
-set setreuid d_setreuid
+: see if mkdir exists
+set mkdir d_mkdir
 eval $inlibc
-set setresuid d_setresuid
+
+: see if mkfifo exists
+set mkfifo d_mkfifo
 eval $inlibc
 
-: see if setrgid exists
-set setrgid d_setrgid
+: see if mktime exists
+set mktime d_mktime
 eval $inlibc
 
-: see if setruid exists
-set setruid d_setruid
+: see if this is a sys/mman.h system
+set sys/mman.h i_sysmman
+eval $inhdr
+
+: see if mmap exists
+set mmap d_mmap
 eval $inlibc
+: see what shmat returns
+: default to something harmless
+mmaptype='void *'
+case "$i_sysmman$d_mmap" in
+"$define$define")
+       $cat >mmap.c <<'END'
+#include <sys/mman.h>
+void *mmap();
+END
+       if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
+               mmaptype='void *'
+       else
+               mmaptype='caddr_t'
+       fi
+       echo "and it returns ($mmaptype)." >&4
+       ;;
+esac
 
-: see if setservent exists
-set setservent d_setsent
+
+
+: see if mprotect exists
+set mprotect d_mprotect
 eval $inlibc
 
-: see if setsid exists
-set setsid d_setsid
+: see if msgctl exists
+set msgctl d_msgctl
 eval $inlibc
 
-: see if setvbuf exists
-set setvbuf d_setvbuf
+: see if msgget exists
+set msgget d_msgget
 eval $inlibc
 
-: see if sfio.h is available
-set sfio.h i_sfio
-eval $inhdr
+: see if msgsnd exists
+set msgsnd d_msgsnd
+eval $inlibc
 
+: see if msgrcv exists
+set msgrcv d_msgrcv
+eval $inlibc
 
-: see if sfio library is available
-case "$i_sfio" in
-$define)
-       val=''
-       set sfreserve val
-       eval $inlibc
-       ;;
-*)
-       val="$undef"
-       ;;
-esac
-: Ok, but do we want to use it.
-case "$val" in
-$define)
-       case "$usesfio" in
-       true|$define|[yY]*) dflt='y';;
-       *) dflt='n';;
-       esac
-       echo "$package can use the sfio library, but it is experimental."
-       rp="You seem to have sfio available, do you want to try using it?"
-       . ./myread
-       case "$ans" in
-       y|Y) ;;
-       *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
-               val="$undef"
-               : Remove sfio from list of libraries to use
-               set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
-               shift
-               libs="$*"
-               echo "libs = $libs" >&4
-               ;;
-       esac
-       ;;
-*)     case "$usesfio" in
-       true|$define|[yY]*)
-               echo "Sorry, cannot find sfio on this machine" >&4
-               echo "Ignoring your setting of usesfio=$usesfio" >&4
-               ;;
-       esac
-       ;;
-esac
-set d_sfio
-eval $setvar
-case "$d_sfio" in
-$define) usesfio='true';;
-*) usesfio='false';;
-esac
-
-: see if shmctl exists
-set shmctl d_shmctl
-eval $inlibc
-
-: see if shmget exists
-set shmget d_shmget
-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
-       xxx=`./findhdr sys/shm.h`
-       $cppstdin $cppflags $cppminus < $xxx > 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
-eval $inlibc
-
-: see how much of the 'shm*(2)' library is present.
-h_shm=true
-echo " "
-case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
-*"$undef"*) h_shm=false;;
+: see how much of the 'msg*(2)' library is present.
+h_msg=true
+echo " "
+case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
+*"$undef"*) h_msg=false;;
 esac
 case "$osname" in
 freebsd)
     case "`ipcs 2>&1`" in
-    "SVID shared memory"*"not configured"*)
-       echo "Your $osname does not have the shm*(2) configured." >&4
-        h_shm=false
+    "SVID messages"*"not configured"*)
+       echo "Your $osname does not have the msg*(2) configured." >&4
+        h_msg=false
        val="$undef"
-       set shmctl d_shmctl
-       evat $setvar
-       set shmget d_shmget
-       evat $setvar
-       set shmat d_shmat
-       evat $setvar
-       set shmdt d_shmdt
-       evat $setvar
+       set msgctl d_msgctl
+       eval $setvar
+       set msgget d_msgget
+       eval $setvar
+       set msgsnd d_msgsnd
+       eval $setvar
+       set msgrcv d_msgrcv
+       eval $setvar
        ;;
     esac
     ;;
 esac
 : we could also check for sys/ipc.h ...
-if $h_shm && $test `./findhdr sys/shm.h`; then
-       echo "You have the full shm*(2) library." >&4
+if $h_msg && $test `./findhdr sys/msg.h`; then
+       echo "You have the full msg*(2) library." >&4
        val="$define"
 else
-       echo "You don't have the full shm*(2) library." >&4
+       echo "You don't have the full msg*(2) library." >&4
        val="$undef"
 fi
-set d_shm
+set d_msg
 eval $setvar
 
-echo " "
-: see if we have sigaction
-if set sigaction val -f d_sigaction; eval $csym; $val; then
-       echo 'sigaction() found.' >&4
-       $cat > try.c <<'EOP'
-#include <stdio.h>
-#include <sys/types.h>
-#include <signal.h>
-main()
-{
-    struct sigaction act, oact;
-}
-EOP
-       set try
-       if eval $compile_ok; then
-               val="$define"
-       else
-               echo "But you don't seem to have a useable struct sigaction." >&4
-               val="$undef"
-       fi
-else
-       echo 'sigaction NOT found.' >&4
-       val="$undef"
-fi
-set d_sigaction; eval $setvar
-$rm -f try try$_o try.c
+: see if msync exists
+set msync d_msync
+eval $inlibc
 
-: see if sigsetjmp exists
-echo " "
-case "$d_sigsetjmp" in
-'')
-       $cat >try.c <<'EOP'
-#include <setjmp.h>
-sigjmp_buf env;
-int set = 1;
-main()
-{
-       if (sigsetjmp(env,1))
-               exit(set);
-       set = 0;
-       siglongjmp(env, 1);
-       exit(1);
+: see if munmap exists
+set munmap d_munmap
+eval $inlibc
+
+: see if nice exists
+set nice d_nice
+eval $inlibc
+
+: see if POSIX threads are available
+set pthread.h i_pthread
+eval $inhdr
+
+
+
+
+: how to create joinable pthreads
+if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
+       echo " "
+       echo "Checking what constant to use for creating joinable pthreads..." >&4 
+       $cat >try.c <<'EOCP'
+#include <pthread.h>
+int main() {
+    int detachstate = JOINABLE;
 }
-EOP
-       set try
+EOCP
+       set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
        if eval $compile; then
-               if ./try >/dev/null 2>&1; then
-                       echo "POSIX sigsetjmp found." >&4
-                       val="$define"
-               else
-                       $cat >&4 <<EOM
-Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
-I'll ignore them.
-EOM
-                       val="$undef"
-               fi
-       else
-               echo "sigsetjmp not found." >&4
-               val="$undef"
-       fi
-       ;;
-*) val="$d_sigsetjmp"
-       case "$d_sigsetjmp" in
-       $define) echo "POSIX sigsetjmp found." >&4;;
-       $undef) echo "sigsetjmp not found." >&4;;
-       esac
-       ;;
-esac
-set d_sigsetjmp
-eval $setvar
-$rm -f try.c try
-
-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"
+               echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
+               val="$undef" # Yes, undef.
+               set d_old_pthread_create_joinable
+               eval $setvar
+               val=""
+               set old_pthread_create_joinable
+               eval $setvar
        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
+               set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
+               if eval $compile; then
+                       echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
+                       val="$define"
+                       set d_old_pthread_create_joinable
+                       eval $setvar
+                       val=PTHREAD_CREATE_UNDETACHED
+                       set old_pthread_create_joinable
+                       eval $setvar
+               else            
+                       set try -DJOINABLE=__UNDETACHED
+                       if eval $compile; then
+                               echo "You seem to use __UNDETACHED." >&4
+                               val="$define"
+                               set d_old_pthread_create_joinable
+                               eval $setvar
+                               val=__UNDETACHED
+                               set old_pthread_create_joinable
+                               eval $setvar
                        else
-                               echo "or even in libnet$_a, which is peculiar." >&4
-                               d_socket="$undef"
-                               d_oldsock="$undef"
+                               echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
+                               val="$define"
+                               set d_old_pthread_create_joinable
+                               eval $setvar
+                               val=0
+                               set old_pthread_create_joinable
+                               eval $setvar
                        fi
-               else
-                       echo "or anywhere else I see." >&4
-                       d_socket="$undef"
-                       d_oldsock="$undef"
                fi
        fi
+       $rm -f try try.*
+else
+    d_old_pthread_create_joinable="$undef"
+    old_pthread_create_joinable=""
 fi
 
-: see if socketpair exists
-set socketpair d_sockpair
+: see if pause exists
+set pause d_pause
 eval $inlibc
 
-: see if stat knows about block sizes
-echo " "
-set d_statblks stat st_blocks $i_sysstat sys/stat.h
-eval $hasfield
+: see if pipe exists
+set pipe d_pipe
+eval $inlibc
 
-: see if _ptr and _cnt from stdio act std
-echo " "
-if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
-       echo "(Looks like you have stdio.h from Linux.)"
-       case "$stdio_ptr" in
-       '') stdio_ptr='((fp)->_IO_read_ptr)'
-               ptr_lval=$define
-               ;;
-       *)      ptr_lval=$d_stdio_ptr_lval;;
-       esac
-       case "$stdio_cnt" in
-       '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
-               cnt_lval=$undef
-               ;;
-       *)      cnt_lval=$d_stdio_cnt_lval;;
-       esac
-       case "$stdio_base" in
-       '') stdio_base='((fp)->_IO_read_base)';;
-       esac
-       case "$stdio_bufsiz" in
-       '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
-       esac
-else
-       case "$stdio_ptr" in
-       '') stdio_ptr='((fp)->_ptr)'
-               ptr_lval=$define
-               ;;
-       *)      ptr_lval=$d_stdio_ptr_lval;;
-       esac
-       case "$stdio_cnt" in
-       '') stdio_cnt='((fp)->_cnt)'
-               cnt_lval=$define
-               ;;
-       *)      cnt_lval=$d_stdio_cnt_lval;;
-       esac
-       case "$stdio_base" in
-       '') stdio_base='((fp)->_base)';;
-       esac
-       case "$stdio_bufsiz" in
-       '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
-       esac
-fi
-: test whether _ptr and _cnt really work
-echo "Checking how std your stdio is..." >&4
+: see if poll exists
+set poll d_poll
+eval $inlibc
+
+
+: see whether the various POSIXish _yields exist
 $cat >try.c <<EOP
+#include <pthread.h>
 #include <stdio.h>
-#define FILE_ptr(fp)   $stdio_ptr
-#define FILE_cnt(fp)   $stdio_cnt
-main() {
-       FILE *fp = fopen("try.c", "r");
-       char c = getc(fp);
-       if (
-               18 <= FILE_cnt(fp) &&
-               strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
-       )
-               exit(0);
-       exit(1);
+int main() {
+#ifdef SCHED_YIELD
+       sched_yield();
+#else
+#ifdef PTHREAD_YIELD
+       pthread_yield();
+#else
+#ifdef PTHREAD_YIELD_NULL
+       pthread_yield(NULL);
+#endif
+#endif
+#endif
 }
 EOP
-val="$undef"
-set try
+: see if sched_yield exists
+set try -DSCHED_YIELD
 if eval $compile; then
-       if ./try; then
-               echo "Your stdio acts pretty std."
-               val="$define"
-       else
-               echo "Your stdio isn't very std."
-       fi
+    val="$define"
+    sched_yield='sched_yield()'
 else
-       echo "Your stdio doesn't appear very std."
+    val="$undef"
 fi
-$rm -f try.c try
-set d_stdstdio
+case "$usethreads" in
+$define)
+       case "$val" in
+       $define) echo 'sched_yield() found.' >&4        ;;
+       *)       echo 'sched_yield() NOT found.' >&4    ;;
+       esac
+esac
+set d_sched_yield
 eval $setvar
 
-: Can _ptr be used as an lvalue?
-case "$d_stdstdio$ptr_lval" in
-$define$define) val=$define ;;
-*) val=$undef ;;
+: see if pthread_yield exists
+set try -DPTHREAD_YIELD
+if eval $compile; then
+    val="$define"
+    case "$sched_yield" in
+    '') sched_yield='pthread_yield()' ;;
+    esac
+else
+    set try -DPTHREAD_YIELD_NULL
+    if eval $compile; then
+       val="$define"
+       case "$sched_yield" in
+       '') sched_yield='pthread_yield(NULL)' ;;
+       esac
+    else
+       val="$undef"
+    fi
+fi
+case "$usethreads" in
+$define)
+       case "$val" in
+       $define) echo 'pthread_yield() found.' >&4      ;;
+       *)       echo 'pthread_yield() NOT found.' >&4  ;;
+       esac
+       ;;
 esac
-set d_stdio_ptr_lval
+set d_pthread_yield
 eval $setvar
 
-: Can _cnt be used as an lvalue?
-case "$d_stdstdio$cnt_lval" in
-$define$define) val=$define ;;
-*) val=$undef ;;
+case "$sched_yield" in
+'') sched_yield=undef ;;
 esac
-set d_stdio_cnt_lval
-eval $setvar
 
-: see if _base is also standard
-val="$undef"
-case "$d_stdstdio" in
+$rm -f try try.*
+
+: see if this is a pwd.h system
+set pwd.h i_pwd
+eval $inhdr
+
+case "$i_pwd" in
 $define)
-       $cat >try.c <<EOP
-#include <stdio.h>
-#define FILE_base(fp)  $stdio_base
-#define FILE_bufsiz(fp)        $stdio_bufsiz
-main() {
-       FILE *fp = fopen("try.c", "r");
-       char c = getc(fp);
-       if (
-               19 <= FILE_bufsiz(fp) &&
-               strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
-       )
-               exit(0);
-       exit(1);
-}
-EOP
-       set try
-       if eval $compile; then
-               if ./try; then
-                       echo "And its _base field acts std."
-                       val="$define"
-               else
-                       echo "But its _base field isn't std."
-               fi
+       xxx=`./findhdr pwd.h`
+       $cppstdin $cppflags $cppminus < $xxx >$$.h
+
+       if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
+               val="$define"
        else
-               echo "However, it seems to be lacking the _base field."
+               val="$undef"
        fi
-       $rm -f try.c try
+       set d_pwquota
+       eval $setvar
+
+       if $contains 'pw_age' $$.h >/dev/null 2>&1; then
+               val="$define"
+       else
+               val="$undef"
+       fi
+       set d_pwage
+       eval $setvar
+
+       if $contains 'pw_change' $$.h >/dev/null 2>&1; then
+               val="$define"
+       else
+               val="$undef"
+       fi
+       set d_pwchange
+       eval $setvar
+
+       if $contains 'pw_class' $$.h >/dev/null 2>&1; then
+               val="$define"
+       else
+               val="$undef"
+       fi
+       set d_pwclass
+       eval $setvar
+
+       if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
+               val="$define"
+       else
+               val="$undef"
+       fi
+       set d_pwexpire
+       eval $setvar
+
+       if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
+               val="$define"
+       else
+               val="$undef"
+       fi
+       set d_pwcomment
+       eval $setvar
+
+       if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
+               val="$define"
+       else
+               val="$undef"
+       fi
+       set d_pwgecos
+       eval $setvar
+
+       if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
+               val="$define"
+       else
+               val="$undef"
+       fi
+       set d_pwpasswd
+       eval $setvar
+
+       $rm -f $$.h
+       ;;
+*)
+       val="$undef"; 
+       set d_pwquota; eval $setvar
+       set d_pwage; eval $setvar
+       set d_pwchange; eval $setvar
+       set d_pwclass; eval $setvar
+       set d_pwexpire; eval $setvar
+       set d_pwcomment; eval $setvar
+       set d_pwgecos; eval $setvar
+       set d_pwpasswd; eval $setvar
        ;;
 esac
-set d_stdiobase
-eval $setvar
 
-: see if strcoll exists
-set strcoll d_strcoll
+: 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
 
-: check for structure copying
-echo " "
-echo "Checking to see if your C compiler can copy structs..." >&4
-$cat >try.c <<'EOCP'
-main()
-{
-       struct blurfl {
-               int dyick;
-       } foo, bar;
+: see if readlink exists
+set readlink d_readlink
+eval $inlibc
 
-       foo = bar;
-}
-EOCP
-if $cc -c try.c >/dev/null 2>&1 ; then
-       val="$define"
-       echo "Yup, it can."
-else
-       val="$undef"
-       echo "Nope, it can't."
-fi
-set d_strctcpy
-eval $setvar
-$rm -f try.*
-
-: see if strerror and/or sys_errlist[] exist
-echo " "
-if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
-    if set strerror val -f d_strerror; eval $csym; $val; then
-               echo 'strerror() found.' >&4
-               d_strerror="$define"
-               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"
-               else
-                       echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
-                       d_syserrlst="$undef"
-               fi
-    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='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"
-               else
-                       echo "(You don't appear to have any sys_errlist[], how can this be?)"
-                       d_syserrlst="$undef"
-               fi
-    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='((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='"unknown"'
-    fi
-fi
-
-: see if strtod exists
-set strtod d_strtod
-eval $inlibc
-
-: see if strtol exists
-set strtol d_strtol
-eval $inlibc
-
-: see if strtoul exists
-set strtoul d_strtoul
-eval $inlibc
-
-: see if strxfrm exists
-set strxfrm d_strxfrm
-eval $inlibc
-
-: see if symlink exists
-set symlink d_symlink
+: see if readv exists
+set readv d_readv
 eval $inlibc
 
-: see if syscall exists
-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;
-       echo "#ifdef $type" >> temp.c;
-       echo "printf(\"We have $type\");" >> temp.c;
-       echo "#endif" >> temp.c;
-       $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'
-
-: define an is-a-typedef? function that prompts if the type is not available.
-typedef_ask='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;
-       echo "#ifdef $type" >> temp.c;
-       echo "printf(\"We have $type\");" >> temp.c;
-       echo "#endif" >> temp.c;
-       $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
-       echo " " ;
-       echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
-       if $contains $type temp.E >/dev/null 2>&1; then
-               echo "$type found." >&4;
-               eval "$var=\$type";
-       else
-               echo "$type NOT found." >&4;
-               dflt="$def";
-               . ./myread ;
-               eval "$var=\$ans";
-       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"
-       inc=''
-       case "$i_systimes" in
-       "$define") inc='sys/times.h';;
-       esac
-       rp="What is the type returned by times() on this system?"
-       set clock_t clocktype long stdio.h sys/types.h $inc
-       eval $typedef_ask
-else
-       echo 'times() NOT found, hope that will do.' >&4
-       d_times="$undef"
-       clocktype='int'
-fi
-
-: see if truncate exists
-set truncate d_truncate
+: see if rename exists
+set rename d_rename
 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
+: see if rmdir exists
+set rmdir d_rmdir
 eval $inlibc
 
-: see how we will look up host name
-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
-               $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
-enough to have a broken system call, use the default answer.
-
-EOM
-               dflt=y
-               case "$d_uname" in
-               "$define") dflt=n;;
-               esac
-               rp='Is your uname() broken?'
-               . ./myread
-               case "$ans" in
-               n*) d_uname="$define"; call=uname;;
-               esac
-       else
-               echo 'uname() found.' >&4
-               d_uname="$define"
-               call=uname
-       fi
-fi
-case "$d_gethname" in
-'') d_gethname="$undef";;
-esac
-case "$d_uname" in
-'') d_uname="$undef";;
-esac
-case "$d_phostname" in
-'') d_phostname="$undef";;
-esac
-
-: backward compatibility for d_hvfork
-if test X$d_hvfork != X; then
-       d_vfork="$d_hvfork"
-       d_hvfork=''
-fi
-: see if there is a vfork
+: see if memory.h is available.
 val=''
-set vfork val
-eval $inlibc
+set memory.h val
+eval $inhdr
 
-: Ok, but do we want to use it. vfork is reportedly unreliable in 
-: perl on Solaris 2.x, and probably elsewhere.
+: See if it conflicts with string.h
 case "$val" in
 $define)
-       echo " "
-       case "$usevfork" in
-       false) dflt='n';;
-       *) dflt='y';;
-       esac
-       rp="Some systems have problems with vfork().  Do you want to use it?"
-       . ./myread
-       case "$ans" in
-       y|Y) ;;
+       case "$strings" in
+       '') ;;
        *)
-               echo "Ok, we won't use vfork()."
-               val="$undef"
+               $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 d_vfork
+set i_memory
 eval $setvar
-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 sys/types.h has to be included
-set sys/types.h i_systypes
-eval $inhdr
-
-: see if closedir exists
-set closedir d_closedir
-eval $inlibc
-
-case "$d_closedir" in
+: can bcopy handle overlapping blocks?
+val="$undef"
+case "$d_bcopy" 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         /**/
-#$i_systypes I_SYS_TYPES       /**/
-
-#if defined(I_SYS_TYPES)
-#include <sys/types.h>
+       echo "Checking to see if your bcopy() can do overlapping copies..." >&4
+       $cat >try.c <<EOCP
+#$i_memory I_MEMORY
+#$i_stdlib I_STDLIB
+#$i_string I_STRING
+#$i_unistd I_UNISTD
+EOCP
+       $cat >>try.c <<'EOCP'
+#include <stdio.h>
+#ifdef I_MEMORY
+#  include <memory.h>
 #endif
-#if defined(I_DIRENT)
-#include <dirent.h>
-#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
-#include <sys/dir.h>
+#ifdef I_STDLIB
+#  include <stdlib.h>
 #endif
+#ifdef I_STRING
+#  include <string.h>
 #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
+#  include <strings.h>
 #endif
+#ifdef I_UNISTD
+#  include <unistd.h>  /* Needed for NetBSD */
 #endif
-#endif 
-int main() { return closedir(opendir(".")); }
-EOM
-       set closedir
+int main()
+{
+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(abc, b, len);
+               for (off = 1; off <= len; off++) {
+                       bcopy(b, b+off, len);
+                       bcopy(b+off, b, len);
+                       if (bcmp(b, abc, len))
+                               exit(1);
+               }
+       }
+}
+exit(0);
+}
+EOCP
+       set try
        if eval $compile_ok; then
-               if ./closedir > /dev/null 2>&1 ; then
-                       echo "Yes, it does."
-                       val="$undef"
-               else
-                       echo "No, it doesn't."
+               if ./try 2>/dev/null; then
+                       echo "Yes, it can."
                        val="$define"
+               else
+                       echo "It can't, sorry."
+                       case "$d_memmove" in
+                       "$define") echo "But that's Ok since you have memmove()." ;;
+                       esac
                fi
        else
-               echo "(I can't seem to compile the test program--assuming it doesn't)"
-               val="$define"
+               echo "(I can't compile the test program, so we'll assume not...)"
+               case "$d_memmove" in
+               "$define") echo "But that's Ok since you have memmove()." ;;
+               esac
        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
-$cat >try.c <<'EOCP'
-main()
-{
-       typedef struct _goo_struct goo_struct;
-       goo_struct * volatile goo = ((goo_struct *)0);
-       struct _goo_struct {
-               long long_int;
-               int reg_int;
-               char char_var;
-       };
-       typedef unsigned short foo_t;
-       char *volatile foo;
-       volatile int bar;
-       volatile foo_t blech;
-       foo = foo;
-}
-EOCP
-if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
-       val="$define"
-       echo "Yup, it does."
-else
-       val="$undef"
-       echo "Nope, it doesn't."
-fi
-set d_volatile
+$rm -f try.* try core
+set d_safebcpy
 eval $setvar
-$rm -f try.*
-
-: see if there is a wait4
-set wait4 d_wait4
-eval $inlibc
-
-: see if waitpid exists
-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
+: can memcpy handle overlapping blocks?
+val="$undef"
+case "$d_memcpy" in
+"$define")
+       echo " "
+       echo "Checking to see if your memcpy() can do overlapping copies..." >&4
+       $cat >try.c <<EOCP
+#$i_memory I_MEMORY
+#$i_stdlib I_STDLIB
+#$i_string I_STRING
+#$i_unistd I_UNISTD
+EOCP
+       $cat >>try.c <<'EOCP'
+#include <stdio.h>
+#ifdef I_MEMORY
+#  include <memory.h>
+#endif
+#ifdef I_STDLIB
+#  include <stdlib.h>
+#endif
+#ifdef I_STRING
+#  include <string.h>
+#else
+#  include <strings.h>
+#endif
+#ifdef I_UNISTD
+#  include <unistd.h>  /* Needed for NetBSD */
+#endif
+int main()
+{
+char buf[128], abc[128];
+char *b;
+int len;
+int off;
+int align;
 
-: preserve RCS keywords in files with variable substitution, grrr
-Date='$Date'
-Id='$Id'
-Log='$Log'
-RCSfile='$RCSfile'
-Revision='$Revision'
+/* Copy "abcde..." string to char abc[] so that gcc doesn't
+   try to store the string in read-only memory. */
+memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
 
-: check for alignment requirements
-echo " "
-case "$alignbytes" in
-'') echo "Checking alignment constraints..." >&4
-       $cat >try.c <<'EOCP'
-struct foobar {
-       char foo;
-       double bar;
-} try;
-main()
-{
-       printf("%d\n", (char *)&try.bar - (char *)&try.foo);
+for (align = 7; align >= 0; align--) {
+       for (len = 36; len; len--) {
+               b = buf+align;
+               memcpy(b, abc, len);
+               for (off = 1; off <= len; off++) {
+                       memcpy(b+off, b, len);
+                       memcpy(b, b+off, len);
+                       if (memcmp(b, abc, len))
+                               exit(1);
+               }
+       }
+}
+exit(0);
 }
 EOCP
        set try
        if eval $compile_ok; then
-               dflt=`./try`
+               if ./try 2>/dev/null; then
+                       echo "Yes, it can."
+                       val="$define"
+               else
+                       echo "It can't, sorry."
+                       case "$d_memmove" in
+                       "$define") echo "But that's Ok since you have memmove()." ;;
+                       esac
+               fi
        else
-               dflt='8'
-               echo "(I can't seem to compile the test program...)"
+               echo "(I can't compile the test program, so we'll assume not...)"
+               case "$d_memmove" in
+               "$define") echo "But that's Ok since you have memmove()." ;;
+               esac
        fi
        ;;
-*) dflt="$alignbytes"
-       ;;
 esac
-rp="Doubles must be aligned on a how-many-byte boundary?"
-. ./myread
-alignbytes="$ans"
-$rm -f try.c try
+$rm -f try.* try core
+set d_safemcpy
+eval $setvar
 
-: 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");
-       exit(0);
+: can memcmp be trusted to compare relative magnitude?
+val="$undef"
+case "$d_memcmp" in
+"$define")
+       echo " "
+       echo "Checking if your memcmp() can compare relative magnitude..." >&4
+       $cat >try.c <<EOCP
+#$i_memory I_MEMORY
+#$i_stdlib I_STDLIB
+#$i_string I_STRING
+#$i_unistd I_UNISTD
+EOCP
+       $cat >>try.c <<'EOCP'
+#include <stdio.h>
+#ifdef I_MEMORY
+#  include <memory.h>
+#endif
+#ifdef I_STDLIB
+#  include <stdlib.h>
+#endif
+#ifdef I_STRING
+#  include <string.h>
+#else
+#  include <strings.h>
+#endif
+#ifdef I_UNISTD
+#  include <unistd.h>  /* Needed for NetBSD */
+#endif
+int main()
+{
+char a = -1;
+char b = 0;
+if ((a < b) && memcmp(&a, &b, 1) < 0)
+       exit(1);
+exit(0);
 }
 EOCP
-       xxx_prompt=y
        set try
-       if eval $compile && ./try > /dev/null; then
-               dflt=`./try`
-               case "$dflt" in
-               [1-4][1-4][1-4][1-4]|12345678|87654321)
-                       echo "(The test program ran ok.)"
-                       echo "byteorder=$dflt"
-                       xxx_prompt=n
-                       ;;
-               ????|????????) echo "(The test program ran ok.)" ;;
-               *) echo "(The test program didn't run right for some reason.)" ;;
-               esac
+       if eval $compile_ok; then
+               if ./try 2>/dev/null; then
+                       echo "Yes, it can."
+                       val="$define"
+               else
+                       echo "No, it can't (it uses signed chars)."
+               fi
        else
-               dflt='4321'
-               cat <<'EOM'
-(I can't seem to compile the test program.  Guessing big-endian...)
-EOM
+               echo "(I can't compile the test program, so we'll assume not...)"
        fi
-       case "$xxx_prompt" in
-       y)
-               rp="What is the order of bytes in a long?"
-               . ./myread
-               byteorder="$ans"
-               ;;
-       *)      byteorder=$dflt
-               ;;
-       esac
        ;;
 esac
-$rm -f try.c try
+$rm -f try.* try core
+set d_sanemcmp
+eval $setvar
 
-: how do we catenate cpp tokens here?
+: see if select exists
+set select d_select
+eval $inlibc
+
+: see if semctl exists
+set semctl d_semctl
+eval $inlibc
+
+: see if semget exists
+set semget d_semget
+eval $inlibc
+
+: see if semop exists
+set semop d_semop
+eval $inlibc
+
+: see how much of the 'sem*(2)' library is present.
+h_sem=true
 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." >&4
-       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!" >&4
-       echo "However, in the good old days we don't know how to stringify and"
-       echo "catify at the same time."
-       cpp_stuff=1
+case "$d_semctl$d_semget$d_semop" in
+*"$undef"*) h_sem=false;;
+esac
+case "$osname" in
+freebsd)
+    case "`ipcs 2>&1`" in
+    "SVID messages"*"not configured"*)
+       echo "Your $osname does not have the sem*(2) configured." >&4
+        h_sem=false
+       val="$undef"
+       set semctl d_semctl
+       eval $setvar
+       set semget d_semget
+       eval $setvar
+       set semop d_semop
+       eval $setvar
+       ;;
+    esac
+    ;;
+esac
+: we could also check for sys/ipc.h ...
+if $h_sem && $test `./findhdr sys/sem.h`; then
+       echo "You have the full sem*(2) library." >&4
+       val="$define"
 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? */*/"
+       echo "You don't have the full sem*(2) library." >&4
+       val="$undef"
 fi
-$rm -f cpp_stuff.*
+set d_sem
+eval $setvar
 
-: see if this is a db.h system
-set db.h i_db
-eval $inhdr
+: see whether sys/sem.h defines union semun
+echo " "
+$cat > try.c <<'END'
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
+int main () { union semun semun; semun.buf = 0; }
+END
+set try
+if eval $compile; then
+    echo "You have union semun in <sys/sem.h>." >&4
+    val="$define"
+else
+    echo "You do not have union semun in <sys/sem.h>." >&4
+    val="$undef"
+fi
+$rm -f try try.c try.h
+set d_union_semun
+eval $setvar
 
-case "$i_db" in
+: see how to do semctl IPC_STAT
+case "$d_sem" in
 $define)
-       : Check db version.
-       echo " "
-       echo "Checking Berkeley DB version ..." >&4
-       $cat >try.c <<EOCP
-#$d_const HASCONST
-#ifndef HASCONST
-#define const
+    : see whether semctl IPC_STAT can use union semun
+    echo " "
+    $cat > try.h <<END
+#ifndef S_IRUSR
+#   ifdef S_IREAD
+#      define S_IRUSR S_IREAD
+#      define S_IWUSR S_IWRITE
+#      define S_IXUSR S_IEXEC
+#   else
+#      define S_IRUSR 0400
+#      define S_IWUSR 0200
+#      define S_IXUSR 0100
+#   endif
+#   define S_IRGRP (S_IRUSR>>3)
+#   define S_IWGRP (S_IWUSR>>3)
+#   define S_IXGRP (S_IXUSR>>3)
+#   define S_IROTH (S_IRUSR>>6)
+#   define S_IWOTH (S_IWUSR>>6)
+#   define S_IXOTH (S_IXUSR>>6)
+#endif
+#ifndef S_IRWXU
+#   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
+#   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
+#   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
 #endif
+END
+
+    $cat > try.c <<END
 #include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
+#include <sys/stat.h>
 #include <stdio.h>
-#include <db.h>
-main()
-{
-#ifdef DB_VERSION_MAJOR        /* DB version >= 2 */
-    int Major, Minor, Patch ;
-    unsigned long Version ;
-    (void)db_version(&Major, &Minor, &Patch) ;
-    printf("You have Berkeley DB Version 2 or greater\n");
-
-    printf("db.h is from Berkeley DB Version %d.%d.%d\n",
-               DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
-    printf("libdb is from Berkeley DB Version %d.%d.%d\n",
-               Major, Minor, Patch) ;
-
-    /* check that db.h & libdb are compatible */
-    if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
-       printf("db.h and libdb are incompatible\n") ;
-        exit(3);       
-    }
-
-    printf("db.h and libdb are compatible\n") ;
-
-    Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
-               + DB_VERSION_PATCH ;
-
-    /* needs to be >= 2.3.4 */
-    if (Version < 2003004) {
-    /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
-       printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
-        exit(2);       
-    }
-
-    exit(0);
-#else
-#if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
-    printf("You have Berkeley DB Version 1\n");
-    exit(0);   /* DB version < 2: the coast is clear. */
-#else
-    exit(1);   /* <db.h> not Berkeley DB? */
+#include <errno.h>
+#include "try.h"
+#ifndef errno
+extern int errno;
 #endif
+#$d_union_semun HAS_UNION_SEMUN
+int main() {
+    union semun
+#ifndef HAS_UNION_SEMUN
+    {
+       int val;
+       struct semid_ds *buf;
+       unsigned short *array;
+    }
 #endif
-}
-EOCP
-       set try
-       if eval $compile && ./try; then
-               echo 'Looks OK.' >&4
+    arg;
+    int sem, st;
+
+#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
+    sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
+    if (sem > -1) {
+       struct semid_ds argbuf;
+       arg.buf = &argbuf;
+#      ifdef IPC_STAT
+       st = semctl(sem, 0, IPC_STAT, arg);
+       if (st == 0)
+           printf("semun\n");
+       else
+#      endif /* IPC_STAT */
+           printf("semctl IPC_STAT failed: errno = %d\n", errno);
+#      ifdef IPC_RMID
+       if (semctl(sem, 0, IPC_RMID, arg) != 0)
+#      endif /* IPC_RMID */
+           printf("semctl IPC_RMID failed: errno = %d\n", errno);
+    } else
+#endif /* IPC_PRIVATE && ... */
+       printf("semget failed: errno = %d\n", errno);
+  return 0;
+}
+END
+    val="$undef"
+    set try
+    if eval $compile; then
+       xxx=`./try`
+        case "$xxx" in
+        semun) val="$define" ;;
+        esac
+    fi
+    $rm -f try try.c
+    set d_semctl_semun
+    eval $setvar
+    case "$d_semctl_semun" in
+    $define)
+        echo "You can use union semun for semctl IPC_STAT." >&4
+       also='also'
+        ;;
+    *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
+       also=''
+        ;;
+    esac
+
+    : see whether semctl IPC_STAT can use struct semid_ds pointer
+    $cat > try.c <<'END'
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
+#include <sys/stat.h>
+#include "try.h"
+#include <stdio.h>
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+int main() {
+    struct semid_ds arg;
+    int sem, st;
+
+#if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
+    sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
+    if (sem > -1) {
+#      ifdef IPC_STAT
+       st = semctl(sem, 0, IPC_STAT, &arg);
+       if (st == 0)
+           printf("semid_ds\n");
+       else
+#      endif /* IPC_STAT */
+           printf("semctl IPC_STAT failed: errno = %d\n", errno);
+#      ifdef IPC_RMID
+       if (semctl(sem, 0, IPC_RMID, &arg) != 0)
+#      endif /* IPC_RMID */
+           printf("semctl IPC_RMID failed: errno = %d\n", errno);
+    } else
+#endif /* IPC_PRIVATE && ... */
+       printf("semget failed: errno = %d\n", errno);
+
+    return 0;
+}
+END
+    val="$undef"
+    set try
+    if eval $compile; then
+        xxx=`./try`
+        case "$xxx" in
+        semid_ds) val="$define" ;;
+        esac
+    fi
+    $rm -f try try.c
+    set d_semctl_semid_ds
+    eval $setvar
+    case "$d_semctl_semid_ds" in
+    $define)
+        echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
+        ;;
+    *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
+        ;;
+    esac
+    $rm -f try.h
+    ;;
+*)  val="$undef"
+
+    # We do not have the full sem*(2) library, so assume we can not
+    # use either.
+
+    set d_semctl_semun
+    eval $setvar
+
+    set d_semctl_semid_ds
+    eval $setvar
+    ;;
+esac
+
+: see if setegid exists
+set setegid d_setegid
+eval $inlibc
+
+: see if seteuid exists
+set seteuid d_seteuid
+eval $inlibc
+
+: see if setgrent exists
+set setgrent d_setgrent
+eval $inlibc
+
+: see if sethostent exists
+set sethostent d_sethent
+eval $inlibc
+
+: see if setlinebuf exists
+set setlinebuf d_setlinebuf
+eval $inlibc
+
+: see if setlocale exists
+set setlocale d_setlocale
+eval $inlibc
+
+: see if setnetent exists
+set setnetent d_setnent
+eval $inlibc
+
+: see if setprotoent exists
+set setprotoent d_setpent
+eval $inlibc
+
+: see if setpgid exists
+set setpgid d_setpgid
+eval $inlibc
+
+: see if setpgrp2 exists
+set setpgrp2 d_setpgrp2
+eval $inlibc
+
+: see if setpriority exists
+set setpriority d_setprior
+eval $inlibc
+
+: see if setpwent exists
+set setpwent d_setpwent
+eval $inlibc
+
+: see if setregid exists
+set setregid d_setregid
+eval $inlibc
+set setresgid d_setresgid
+eval $inlibc
+
+: see if setreuid exists
+set setreuid d_setreuid
+eval $inlibc
+set setresuid d_setresuid
+eval $inlibc
+
+: see if setrgid exists
+set setrgid d_setrgid
+eval $inlibc
+
+: see if setruid exists
+set setruid d_setruid
+eval $inlibc
+
+: see if setservent exists
+set setservent d_setsent
+eval $inlibc
+
+: see if setsid exists
+set setsid d_setsid
+eval $inlibc
+
+: see if setspent exists
+set setspent d_setspent
+eval $inlibc
+
+: see if setvbuf exists
+set setvbuf d_setvbuf
+eval $inlibc
+
+: see if sfio.h is available
+set sfio.h i_sfio
+eval $inhdr
+
+
+: see if sfio library is available
+case "$i_sfio" in
+$define)
+       val=''
+       set sfreserve val
+       eval $inlibc
+       ;;
+*)
+       val="$undef"
+       ;;
+esac
+: Ok, but do we want to use it.
+case "$val" in
+$define)
+       case "$usesfio" in
+       true|$define|[yY]*) dflt='y';;
+       *) dflt='n';;
+       esac
+       echo "$package can use the sfio library, but it is experimental."
+       rp="You seem to have sfio available, do you want to try using it?"
+       . ./myread
+       case "$ans" in
+       y|Y) ;;
+       *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
+               val="$undef"
+               : Remove sfio from list of libraries to use
+               set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
+               shift
+               libs="$*"
+               echo "libs = $libs" >&4
+               ;;
+       esac
+       ;;
+*)     case "$usesfio" in
+       true|$define|[yY]*)
+               echo "Sorry, cannot find sfio on this machine" >&4
+               echo "Ignoring your setting of usesfio=$usesfio" >&4
+               ;;
+       esac
+       ;;
+esac
+set d_sfio
+eval $setvar
+case "$d_sfio" in
+$define) usesfio='true';;
+*) usesfio='false';;
+esac
+
+: see if shmctl exists
+set shmctl d_shmctl
+eval $inlibc
+
+: see if shmget exists
+set shmget d_shmget
+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
+       xxx=`./findhdr sys/shm.h`
+       $cppstdin $cppflags $cppminus < $xxx > 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
+eval $inlibc
+
+: see how much of the 'shm*(2)' library is present.
+h_shm=true
+echo " "
+case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
+*"$undef"*) h_shm=false;;
+esac
+case "$osname" in
+freebsd)
+    case "`ipcs 2>&1`" in
+    "SVID shared memory"*"not configured"*)
+       echo "Your $osname does not have the shm*(2) configured." >&4
+        h_shm=false
+       val="$undef"
+       set shmctl d_shmctl
+       evat $setvar
+       set shmget d_shmget
+       evat $setvar
+       set shmat d_shmat
+       evat $setvar
+       set shmdt d_shmdt
+       evat $setvar
+       ;;
+    esac
+    ;;
+esac
+: we could also check for sys/ipc.h ...
+if $h_shm && $test `./findhdr sys/shm.h`; then
+       echo "You have the full shm*(2) library." >&4
+       val="$define"
+else
+       echo "You don't have the full shm*(2) library." >&4
+       val="$undef"
+fi
+set d_shm
+eval $setvar
+
+echo " "
+: see if we have sigaction
+if set sigaction val -f d_sigaction; eval $csym; $val; then
+       echo 'sigaction() found.' >&4
+       $cat > try.c <<'EOP'
+#include <stdio.h>
+#include <sys/types.h>
+#include <signal.h>
+int main()
+{
+    struct sigaction act, oact;
+    act.sa_flags = 0;
+    oact.sa_handler = 0;
+}
+EOP
+       set try
+       if eval $compile_ok; then
+               val="$define"
+       else
+               echo "But you don't seem to have a useable struct sigaction." >&4
+               val="$undef"
+       fi
+else
+       echo 'sigaction NOT found.' >&4
+       val="$undef"
+fi
+set d_sigaction; eval $setvar
+$rm -f try try$_o try.c
+
+: see if sigsetjmp exists
+echo " "
+case "$d_sigsetjmp" in
+'')
+       $cat >try.c <<'EOP'
+#include <setjmp.h>
+sigjmp_buf env;
+int set = 1;
+int main()
+{
+       if (sigsetjmp(env,1))
+               exit(set);
+       set = 0;
+       siglongjmp(env, 1);
+       exit(1);
+}
+EOP
+       set try
+       if eval $compile; then
+               if ./try >/dev/null 2>&1; then
+                       echo "POSIX sigsetjmp found." >&4
+                       val="$define"
+               else
+                       $cat >&4 <<EOM
+Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
+I'll ignore them.
+EOM
+                       val="$undef"
+               fi
+       else
+               echo "sigsetjmp not found." >&4
+               val="$undef"
+       fi
+       ;;
+*) val="$d_sigsetjmp"
+       case "$d_sigsetjmp" in
+       $define) echo "POSIX sigsetjmp found." >&4;;
+       $undef) echo "sigsetjmp not found." >&4;;
+       esac
+       ;;
+esac
+set d_sigsetjmp
+eval $setvar
+$rm -f try.c try
+
+: see if sys/stat.h is available
+set sys/stat.h i_sysstat
+eval $inhdr
+
+: see if stat knows about block sizes
+echo " "
+set d_statblks stat st_blocks $i_sysstat sys/stat.h
+eval $hasfield
+
+: see if _ptr and _cnt from stdio act std
+echo " "
+if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
+       echo "(Looks like you have stdio.h from Linux.)"
+       case "$stdio_ptr" in
+       '') stdio_ptr='((fp)->_IO_read_ptr)'
+               ptr_lval=$define
+               ;;
+       *)      ptr_lval=$d_stdio_ptr_lval;;
+       esac
+       case "$stdio_cnt" in
+       '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
+               cnt_lval=$undef
+               ;;
+       *)      cnt_lval=$d_stdio_cnt_lval;;
+       esac
+       case "$stdio_base" in
+       '') stdio_base='((fp)->_IO_read_base)';;
+       esac
+       case "$stdio_bufsiz" in
+       '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
+       esac
+else
+       case "$stdio_ptr" in
+       '') stdio_ptr='((fp)->_ptr)'
+               ptr_lval=$define
+               ;;
+       *)      ptr_lval=$d_stdio_ptr_lval;;
+       esac
+       case "$stdio_cnt" in
+       '') stdio_cnt='((fp)->_cnt)'
+               cnt_lval=$define
+               ;;
+       *)      cnt_lval=$d_stdio_cnt_lval;;
+       esac
+       case "$stdio_base" in
+       '') stdio_base='((fp)->_base)';;
+       esac
+       case "$stdio_bufsiz" in
+       '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
+       esac
+fi
+: test whether _ptr and _cnt really work
+echo "Checking how std your stdio is..." >&4
+$cat >try.c <<EOP
+#include <stdio.h>
+#define FILE_ptr(fp)   $stdio_ptr
+#define FILE_cnt(fp)   $stdio_cnt
+int main() {
+       FILE *fp = fopen("try.c", "r");
+       char c = getc(fp);
+       if (
+               18 <= FILE_cnt(fp) &&
+               strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
+       )
+               exit(0);
+       exit(1);
+}
+EOP
+val="$undef"
+set try
+if eval $compile; then
+       if ./try; then
+               echo "Your stdio acts pretty std."
+               val="$define"
+       else
+               echo "Your stdio isn't very std."
+       fi
+else
+       echo "Your stdio doesn't appear very std."
+fi
+$rm -f try.c try
+set d_stdstdio
+eval $setvar
+
+: Can _ptr be used as an lvalue?
+case "$d_stdstdio$ptr_lval" in
+$define$define) val=$define ;;
+*) val=$undef ;;
+esac
+set d_stdio_ptr_lval
+eval $setvar
+
+: Can _cnt be used as an lvalue?
+case "$d_stdstdio$cnt_lval" in
+$define$define) val=$define ;;
+*) val=$undef ;;
+esac
+set d_stdio_cnt_lval
+eval $setvar
+
+: see if _base is also standard
+val="$undef"
+case "$d_stdstdio" in
+$define)
+       $cat >try.c <<EOP
+#include <stdio.h>
+#define FILE_base(fp)  $stdio_base
+#define FILE_bufsiz(fp)        $stdio_bufsiz
+int main() {
+       FILE *fp = fopen("try.c", "r");
+       char c = getc(fp);
+       if (
+               19 <= FILE_bufsiz(fp) &&
+               strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
+       )
+               exit(0);
+       exit(1);
+}
+EOP
+       set try
+       if eval $compile; then
+               if ./try; then
+                       echo "And its _base field acts std."
+                       val="$define"
+               else
+                       echo "But its _base field isn't std."
+               fi
+       else
+               echo "However, it seems to be lacking the _base field."
+       fi
+       $rm -f try.c try
+       ;;
+esac
+set d_stdiobase
+eval $setvar
+
+$cat >&4 <<EOM
+Checking how to access stdio streams by file descriptor number...
+EOM
+case "$stdio_stream_array" in
+'')    $cat >try.c <<EOCP
+#include <stdio.h>
+int main() {
+  if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
+    printf("yes\n");
+}
+EOCP
+       for s in _iob __iob __sF
+       do
+               set try -DSTDIO_STREAM_ARRAY=$s
+               if eval $compile; then
+                       case "`./try$exe_ext`" in
+                       yes)    stdio_stream_array=$s; break ;;
+                       esac
+               fi
+       done
+       $rm -f try.* try$exe_ext
+esac
+case "$stdio_stream_array" in
+'')    $cat >&4 <<EOM
+I can't figure out how to access stdio streams by file descriptor number.
+EOM
+       d_stdio_stream_array="$undef"
+       ;;
+*)     $cat >&4 <<EOM
+You can access stdio streams by file descriptor number by the $stdio_stream_array array.
+EOM
+       d_stdio_stream_array="$define"
+       ;;
+esac
+
+: see if strcoll exists
+set strcoll d_strcoll
+eval $inlibc
+
+: check for structure copying
+echo " "
+echo "Checking to see if your C compiler can copy structs..." >&4
+$cat >try.c <<'EOCP'
+int main()
+{
+       struct blurfl {
+               int dyick;
+       } foo, bar;
+
+       foo = bar;
+}
+EOCP
+if $cc -c try.c >/dev/null 2>&1 ; then
+       val="$define"
+       echo "Yup, it can."
+else
+       val="$undef"
+       echo "Nope, it can't."
+fi
+set d_strctcpy
+eval $setvar
+$rm -f try.*
+
+: see if strerror and/or sys_errlist[] exist
+echo " "
+if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
+    if set strerror val -f d_strerror; eval $csym; $val; then
+               echo 'strerror() found.' >&4
+               d_strerror="$define"
+               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"
+               else
+                       echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
+                       d_syserrlst="$undef"
+               fi
+    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='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"
+               else
+                       echo "(You don't appear to have any sys_errlist[], how can this be?)"
+                       d_syserrlst="$undef"
+               fi
+    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='((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='"unknown"'
+    fi
+fi
+
+: see if strtod exists
+set strtod d_strtod
+eval $inlibc
+
+: see if strtol exists
+set strtol d_strtol
+eval $inlibc
+
+: see if strtoul exists
+set strtoul d_strtoul
+eval $inlibc
+
+: see if strtoull exists
+set strtoull d_strtoull
+eval $inlibc
+
+: see if strxfrm exists
+set strxfrm d_strxfrm
+eval $inlibc
+
+: see if symlink exists
+set symlink d_symlink
+eval $inlibc
+
+: see if syscall exists
+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
+
+: see if sys/types.h has to be included
+set sys/types.h i_systypes
+eval $inhdr
+
+: see if prototype for telldir is available
+echo " "
+set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
+eval $hasproto
+
+: 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;
+       echo "#ifdef $type" >> temp.c;
+       echo "printf(\"We have $type\");" >> temp.c;
+       echo "#endif" >> temp.c;
+       $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'
+
+: define an is-a-typedef? function that prompts if the type is not available.
+typedef_ask='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;
+       echo "#ifdef $type" >> temp.c;
+       echo "printf(\"We have $type\");" >> temp.c;
+       echo "#endif" >> temp.c;
+       $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
+       echo " " ;
+       echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
+       if $contains $type temp.E >/dev/null 2>&1; then
+               echo "$type found." >&4;
+               eval "$var=\$type";
+       else
+               echo "$type NOT found." >&4;
+               dflt="$def";
+               . ./myread ;
+               eval "$var=\$ans";
+       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"
+       inc=''
+       case "$i_systimes" in
+       "$define") inc='sys/times.h';;
+       esac
+       rp="What is the type returned by times() on this system?"
+       set clock_t clocktype long stdio.h sys/types.h $inc
+       eval $typedef_ask
+else
+       echo 'times() NOT found, hope that will do.' >&4
+       d_times="$undef"
+       clocktype='int'
+fi
+
+: see if truncate exists
+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
+
+: backward compatibility for d_hvfork
+if test X$d_hvfork != X; then
+       d_vfork="$d_hvfork"
+       d_hvfork=''
+fi
+: see if there is a vfork
+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
+       cat <<'EOM'
+Perl can only use a vfork() that doesn't suffer from strict
+restrictions on calling functions or modifying global data in
+the child.  For example, glibc-2.1 contains such a vfork()
+that is unsuitable.  If your system provides a proper fork()
+call, chances are that you do NOT want perl to use vfork().
+
+EOM
+       rp="Do you still want to use vfork()?"
+       . ./myread
+       case "$ans" in
+       y|Y) ;;
+       *)
+               echo "Ok, we won't use vfork()."
+               val="$undef"
+               ;;
+       esac
+       ;;
+esac
+set d_vfork
+eval $setvar
+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         /**/
+#$i_systypes I_SYS_TYPES       /**/
+
+#if defined(I_SYS_TYPES)
+#include <sys/types.h>
+#endif
+#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
+       set closedir
+       if eval $compile_ok; 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
+$cat >try.c <<'EOCP'
+int main()
+{
+       typedef struct _goo_struct goo_struct;
+       goo_struct * volatile goo = ((goo_struct *)0);
+       struct _goo_struct {
+               long long_int;
+               int reg_int;
+               char char_var;
+       };
+       typedef unsigned short foo_t;
+       char *volatile foo;
+       volatile int bar;
+       volatile foo_t blech;
+       foo = foo;
+}
+EOCP
+if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
+       val="$define"
+       echo "Yup, it does."
+else
+       val="$undef"
+       echo "Nope, it doesn't."
+fi
+set d_volatile
+eval $setvar
+$rm -f try.*
+
+: see if there is a wait4
+set wait4 d_wait4
+eval $inlibc
+
+: see if waitpid exists
+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
+
+: see if writev exists
+set writev d_writev
+eval $inlibc
+
+: preserve RCS keywords in files with variable substitution, grrr
+Date='$Date'
+Id='$Id'
+Log='$Log'
+RCSfile='$RCSfile'
+Revision='$Revision'
+
+case "$crosscompile" in
+''|[nN]*) crosscompile="$undef" ;;
+esac
+
+case "$osname" in
+next|rhapsody) multiarch="$define" ;;
+esac
+case "$multiarch" in
+''|[nN]*) multiarch="$undef" ;;
+esac
+
+: check for alignment requirements
+echo " "
+case "$crosscompile$multiarch" in
+*$define*)
+       $cat <<EOM
+You seem to be either cross-compiling or doing a multiarchitecture build,
+skipping the memory alignment check.
+
+EOM
+       case "$alignbytes" in
+       '') alignbytes=8 ;;
+       esac
+       ;;
+*)
+       case "$alignbytes" in
+       '') echo "Checking alignment constraints..." >&4
+               $cat >try.c <<'EOCP'
+struct foobar {
+       char foo;
+       double bar;
+} try_algn;
+int main()
+{
+       printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
+}
+EOCP
+               set try
+               if eval $compile_ok; then
+                       dflt=`./try`
+               else
+                       dflt='8'
+                       echo "(I can't seem to compile the test program...)"
+               fi
+               ;;
+       *) dflt="$alignbytes"
+               ;;
+       esac
+       rp="Doubles must be aligned on a how-many-byte boundary?"
+       . ./myread
+       alignbytes="$ans"
+       $rm -f try.c try
+       ;;
+esac
+
+
+: check for ordering of bytes in a long
+echo " "
+case "$crosscompile$multiarch" in
+*$define*)
+       $cat <<EOM
+You seem to be either cross-compiling or doing a multiarchitecture build,
+skipping the byteorder check.
+
+EOM
+       byteorder='0xffff'
+       ;;
+*)
+       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,
+an Alpha will report 12345678. 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>
+int 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");
+       exit(0);
+}
+EOCP
+               xxx_prompt=y
+               set try
+               if eval $compile && ./try > /dev/null; then
+                       dflt=`./try`
+                       case "$dflt" in
+                       [1-4][1-4][1-4][1-4]|12345678|87654321)
+                               echo "(The test program ran ok.)"
+                               echo "byteorder=$dflt"
+                               xxx_prompt=n
+                       ;;
+                       ????|????????) 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 "$xxx_prompt" in
+               y)
+                       rp="What is the order of bytes in a long?"
+                       . ./myread
+                       byteorder="$ans"
+                       ;;
+               *)      byteorder=$dflt
+                       ;;
+               esac
+               ;;
+       esac
+       $rm -f try.c try
+       ;;
+esac
+
+
+: 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." >&4
+       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!" >&4
+       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 db version.
+       echo " "
+       echo "Checking Berkeley DB version ..." >&4
+       $cat >try.c <<EOCP
+#$d_const HASCONST
+#ifndef HASCONST
+#define const
+#endif
+#include <sys/types.h>
+#include <stdio.h>
+#include <db.h>
+int main()
+{
+#ifdef DB_VERSION_MAJOR        /* DB version >= 2 */
+    int Major, Minor, Patch ;
+    unsigned long Version ;
+    (void)db_version(&Major, &Minor, &Patch) ;
+    printf("You have Berkeley DB Version 2 or greater\n");
+
+    printf("db.h is from Berkeley DB Version %d.%d.%d\n",
+               DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
+    printf("libdb is from Berkeley DB Version %d.%d.%d\n",
+               Major, Minor, Patch) ;
+
+    /* check that db.h & libdb are compatible */
+    if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
+       printf("db.h and libdb are incompatible\n") ;
+        exit(3);       
+    }
+
+    printf("db.h and libdb are compatible\n") ;
+
+    Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
+               + DB_VERSION_PATCH ;
+
+    /* needs to be >= 2.3.4 */
+    if (Version < 2003004) {
+    /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
+       printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
+        exit(2);       
+    }
+
+    exit(0);
+#else
+#if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
+    printf("You have Berkeley DB Version 1\n");
+    exit(0);   /* DB version < 2: the coast is clear. */
+#else
+    exit(1);   /* <db.h> not Berkeley DB? */
+#endif
+#endif
+}
+EOCP
+       set try
+       if eval $compile && ./try; then
+               echo 'Looks OK.' >&4
        else
                echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
                i_db=$undef
@@ -9878,7 +11102,7 @@ size_t size;
 {
 }
 HASHINFO info;
-main()
+int main()
 {
        info.hash = hash_cb;
 }
@@ -9923,7 +11147,7 @@ const DBT *key2;
 {
 }
 BTREEINFO info;
-main()
+int main()
 {
        info.prefix = prefix_cb;
 }
@@ -9976,7 +11200,7 @@ sub() {
 #endif
        exit(0);
 }
-main() { sub(); }
+int main() { sub(); }
 EOCP
        if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
                voidflags=$defvoidused
@@ -10044,6 +11268,7 @@ $rm -f try.* .out
 
 : How can we generate normalized random numbers ?
 echo " "
+echo "Looking for a random number function..." >&4
 case "$randfunc" in
 '')
        if set drand48 val -f; eval $csym; $val; then
@@ -10085,8 +11310,8 @@ while $test "$cont"; do
        if set $ans val -f; eval $csym; $val; then
                cont=''
        else
-               dflt=n
-               rp="Function $ans does not exists. Use that name anyway?"
+               dflt=y
+               rp="I cannot find function $ans. Use that name anyway?"
                . ./myread
                dflt=rand
                case "$ans" in
@@ -10116,7 +11341,7 @@ echo "Checking to see how many bits your $randfunc() function produces..." >&4
 #ifdef I_STDLIB
 #  include <stdlib.h>
 #endif
-main()
+int main()
 {
        register int i;
        register unsigned long tmp;
                        dflt="31"
                        rp="How many bits does your $randfunc() function produce?"
                        . ./myread
-                       randbits="$ans"
-                       seedfunc="s$randfunc"
-                       drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
-                       if set $seedfunc val -f; eval $csym; $val; then
-                               echo "(Using $seedfunc() to seed random generator)"
-                       else
-                               echo "(Warning: no $seedfunc() to seed random generator)"
-                               seedfunc=rand
-                       fi
-                       randseedtype=unsigned
-                       ;;
-               esac
-               ;;
-       esac
-done
-
-echo " "
-echo "Determining whether or not we are on an EBCDIC system..." >&4
-$cat >tebcdic.c <<'EOM'
-int main()
-{
-  if ('M'==0xd4) return 0;
-  return 1;
-}
-EOM
-
-val=$undef
-set tebcdic
-if eval $compile_ok; then
-       if ./tebcdic; then
-               echo "You have EBCDIC." >&4
-               val="$define"
-       else
-               echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
-       fi
-else
-       echo "$me: I'm unable to compile the test program." >&4
-       echo "I'll assume ASCII or some ISO Latin." >&4
-fi
-$rm -f tebcdic.c tebcdic
-set ebcdic
-eval $setvar
-
-: see what type file positions are declared as in the library
-rp="What is the type for file position used by fsetpos()?"
-set fpos_t fpostype long stdio.h sys/types.h
-eval $typedef_ask
-
-: get csh whereabouts
-case "$csh" in
-'csh') val="$undef" ;;
-*) val="$define" ;;
-esac
-set d_csh
-eval $setvar
-: Respect a hint or command line value for full_csh.
-case "$full_csh" in
-'') full_csh=$csh ;;
-esac
-
-: 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
-echo " "
-echo "Looking for the type for group ids returned by getgid()."
-set gid_t gidtype xxx stdio.h sys/types.h
-eval $typedef
-case "$gidtype" in
-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";;
-esac
-case "$gidtype" in
-gid_t) echo "gid_t found." ;;
-*)     rp="What is the type for group ids returned by getgid()?"
-       . ./myread
-       gidtype="$ans"
-       ;;
-esac
-
-: see if getgroups exists
-set getgroups d_getgrps
-eval $inlibc
-
-: see if setgroups exists
-set setgroups d_setgrps
-eval $inlibc
-
-
-: Find type of 2nd arg to 'getgroups()' and 'setgroups()'
-echo " "
-case "$d_getgrps$d_setgrps" in
-*define*)
-       case "$groupstype" in
-       '') dflt="$gidtype" ;;
-       *)  dflt="$groupstype" ;;
-       esac
-       $cat <<EOM
-What type of pointer is the second argument to getgroups() and setgroups()?
-Usually this is the same as group ids, $gidtype, but not always.
-
-EOM
-       rp='What type pointer is the second argument to getgroups() and setgroups()?'
-       . ./myread
-       groupstype="$ans"
-       ;;
-*)  groupstype="$gidtype";;
-esac
-
-: see what type lseek is declared as in the kernel
-rp="What is the type used for lseek's offset on this system?"
-set off_t lseektype long stdio.h sys/types.h
-eval $typedef_ask
+                       randbits="$ans"
+                       seedfunc="s$randfunc"
+                       drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
+                       if set $seedfunc val -f; eval $csym; $val; then
+                               echo "(Using $seedfunc() to seed random generator)"
+                       else
+                               echo "(Warning: no $seedfunc() to seed random generator)"
+                               seedfunc=rand
+                       fi
+                       randseedtype=unsigned
+                       ;;
+               esac
+               ;;
+       esac
+done
 
 echo " "
-$echo $n "Checking to see how big your file offsets are...$c" >&4
-$cat >try.c <<EOCP
-#include <sys/types.h>
-#include <stdio.h>
-main()
+echo "Determining whether or not we are on an EBCDIC system..." >&4
+$cat >tebcdic.c <<'EOM'
+int main()
 {
-       printf("%d\n", sizeof($lseektype));
+  if ('M'==0xd4) return 0;
+  return 1;
 }
-EOCP
-set try
+EOM
+
+val=$undef
+set tebcdic
 if eval $compile_ok; then
-       lseeksize=`./try`
-       $echo " $lseeksize bytes." >&4
+       if ./tebcdic; then
+               echo "You have EBCDIC." >&4
+               val="$define"
+       else
+               echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
+       fi
 else
-       dflt='4'
-       echo " "
-       echo "(I can't seem to compile the test program.  Guessing...)"
-       rp="What is the size of your file offsets (in bytes)?"
-       . ./myread
-       lseeksize="$ans"
+       echo "I'm unable to compile the test program." >&4
+       echo "I'll assume ASCII or some ISO Latin." >&4
 fi
-$rm -f try.c try
+$rm -f tebcdic.c tebcdic
+set ebcdic
+eval $setvar
 
 echo " "
-echo "Checking if your $make program sets \$(MAKE)..." >&4
-case "$make_set_make" in
-'')
-       $sed 's/^X //' > testmake.mak << 'EOF'
-Xall:
-X      @echo 'maketemp="$(MAKE)"'
-EOF
-       case "`$make -f testmake.mak 2>/dev/null`" in
-       *maketemp=*) make_set_make='#' ;;
-       *)      make_set_make="MAKE=$make" ;;
-       esac
-       $rm -f testmake.mak
-       ;;
-esac
-case "$make_set_make" in
-'#') echo "Yup, it does.";;
-*) echo "Nope, it doesn't.";;
+$cat >&4 <<EOM
+Checking how to flush all pending stdio output...
+EOM
+# I only know how to find the first 32 possibly open files on SunOS.
+# See also hints/sunos_4_1.sh and util.c  --AD
+case "$osname" in
+sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
 esac
-
-: see what type is used for mode_t
-rp="What is the type used for file modes for system calls (e.g. fchmod())?"
-set mode_t modetype int stdio.h sys/types.h
-eval $typedef_ask
-
-: define a fucntion to check prototypes
-$cat > protochk <<EOSH
-$startsh
-cc="$cc"
-optimize="$optimize"
-ccflags="$ccflags"
-prototype="$prototype"
-define="$define"
-rm=$rm
-EOSH
-
-$cat >> protochk <<'EOSH'
-
-$rm -f try.c
-foo="$1"
-shift
-while test $# -ge 2; do
-       case "$1" in
-               $define) echo "#include <$2>" >> try.c ;;
-               literal) echo "$2" >> try.c ;;
-       esac
-    shift 2
-done
-test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
-cat >> try.c <<'EOCP'
-#ifdef CAN_PROTOTYPE
-#define        _(args) args
+$cat >>try.c <<EOCP
+#include <stdio.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+# include <unistd.h>
+#endif
+#$d_sysconf HAS_SYSCONF
+#$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
+#ifdef HAS_STDIO_STREAM_ARRAY
+# define STDIO_STREAM_ARRAY $stdio_stream_array
+#endif
+int main() {
+  FILE* p = fopen("try.out", "w");
+#ifdef TRY_FPUTC
+  fputc('x', p);
 #else
-#define        _(args) ()
+# ifdef TRY_FPRINTF
+  fprintf(p, "x");
+# endif
+#endif
+#ifdef TRY_FFLUSH_NULL
+  fflush(NULL);
+#endif
+#ifdef TRY_FFLUSH_ALL
+  {
+    long open_max = -1;
+# ifdef PERL_FFLUSH_ALL_FOPEN_MAX
+    open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
+# else
+#  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
+    open_max = sysconf(_SC_OPEN_MAX);
+#  else
+#   ifdef FOPEN_MAX
+    open_max = FOPEN_MAX;
+#   else
+#    ifdef OPEN_MAX
+    open_max = OPEN_MAX;
+#    else
+#     ifdef _NFILE
+    open_max = _NFILE;
+#     endif
+#    endif
+#   endif
+#  endif
+# endif 
+# ifdef HAS_STDIO_STREAM_ARRAY
+    if (open_max > 0) {
+      long i;
+      for (i = 0; i < open_max; i++)
+           if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
+               STDIO_STREAM_ARRAY[i]._file < open_max &&
+               STDIO_STREAM_ARRAY[i]._flag)
+               fflush(&STDIO_STREAM_ARRAY[i]);
+    }  
+  }
+# endif
 #endif
+  _exit(42);
+}
 EOCP
-echo "$foo" >> try.c
-echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
-$cc $optimize $ccflags -c try.c > /dev/null 2>&1
-status=$?
-$rm -f try.[co]
-exit $status
-EOSH
-chmod +x protochk
-$eunicefix protochk
-
-: see what type is used for size_t
-rp="What is the type used for the length parameter for string functions?"
-set size_t sizetype 'unsigned int' stdio.h sys/types.h
-eval $typedef_ask
-
-: check for type of arguments to gethostbyaddr. 
-if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
-       case "$d_gethbyaddr" in
-       $define)
-               $cat <<EOM
-
-Checking to see what type of arguments are accepted by gethostbyaddr().
-EOM
-               hdrs="$define sys/types.h
-                       $d_socket sys/socket.h 
-                       $i_niin netinet/in.h 
-                       $i_netdb netdb.h
-                       $i_unistd unistd.h"
-               : The first arg can 'char *' or 'void *'
-               : The second arg is some of integral type
-               for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
-                       for yyy in size_t long int; do
-                               case "$netdb_host_type" in
-                               '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
-                                       if ./protochk "$try" $hdrs; then
-                                               echo "Your system accepts $xxx for the first arg."
-                                               echo "...and $yyy for the second arg."
-                                               netdb_host_type="$xxx"
-                                               netdb_hlen_type="$yyy"
-                                       fi
-                                       ;;
-                               esac
-                       done
-               done
-               : In case none of those worked, prompt the user.
-               case "$netdb_host_type" in
-               '')     rp='What is the type for the 1st argument to gethostbyaddr?'
-                       dflt='char *'
-                       . ./myread
-                       netdb_host_type=$ans
-                       rp='What is the type for the 2nd argument to gethostbyaddr?'
-                       dflt="$sizetype"
-                       . ./myread
-                       netdb_hlen_type=$ans
-                       ;;
-               esac
-               ;;
-       *)      : no gethostbyaddr, so pick harmless defaults
-               netdb_host_type='char *'
-               netdb_hlen_type="$sizetype"
-               ;;
-       esac
-       # Remove the "const" if needed. -- but then we'll have a 
-       # prototype clash!
-       # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
+: first we have to find out how _not_ to flush
+if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
+    output=''
+    set try -DTRY_FPUTC
+    if eval $compile; then
+           $rm -f try.out
+           ./try$exe_ext 2>/dev/null
+           if $test ! -s try.out -a "X$?" = X42; then
+               output=-DTRY_FPUTC
+           fi
+    fi
+    case "$output" in
+    '')
+           set try -DTRY_FPRINTF
+           $rm -f try.out
+           if eval $compile; then
+                   $rm -f try.out
+                   ./try$exe_ext 2>/dev/null
+                   if $test ! -s try.out -a "X$?" = X42; then
+                       output=-DTRY_FPRINTF
+                   fi
+           fi
+       ;;
+    esac
 fi
-
-: check for type of argument to gethostbyname. 
-if test "X$netdb_name_type" = X ; then
-       case "$d_gethbyname" in
-       $define)
-               $cat <<EOM
-
-Checking to see what type of argument is accepted by gethostbyname().
+: check for fflush NULL behaviour
+case "$fflushNULL" in
+'')    set try -DTRY_FFLUSH_NULL $output
+       if eval $compile; then
+               $rm -f try.out
+               ./try$exe_ext 2>/dev/null
+               code="$?"
+               if $test -s try.out -a "X$code" = X42; then
+                       fflushNULL="`$cat try.out`"
+               else
+                       if $test "X$code" != X42; then
+                               $cat >&4 <<EOM
+(If this test failed, don't worry, we'll try another method shortly.)
 EOM
-               hdrs="$define sys/types.h
-                       $d_socket sys/socket.h 
-                       $i_niin netinet/in.h 
-                       $i_netdb netdb.h
-                       $i_unistd unistd.h"
-               for xxx in "const char *" "char *"; do
-                       case "$netdb_name_type" in
-                       '')     try="extern struct hostent *gethostbyname($xxx);"
-                               if ./protochk "$try" $hdrs; then
-                                       echo "Your system accepts $xxx."
-                                       netdb_name_type="$xxx"
-                               fi
-                               ;;
-                       esac
-               done
-               : In case none of those worked, prompt the user.
-               case "$netdb_name_type" in
-               '')     rp='What is the type for the 1st argument to gethostbyname?'
-                       dflt='char *'
-                       . ./myread
-                       netdb_name_type=$ans
-                       ;;
-               esac
-               ;;
-       *)      : no gethostbyname, so pick harmless default
-               netdb_name_type='char *'
-               ;;
-       esac
-fi
-
-: check for type of 1st argument to getnetbyaddr. 
-if test "X$netdb_net_type" = X ; then
-       case "$d_getnbyaddr" in
-       $define)
-               $cat <<EOM
-
-Checking to see what type of 1st argument is accepted by getnetbyaddr().
+                       fi
+               fi
+       fi
+       $rm -f core try.core core.try.*
+       case "$fflushNULL" in
+       x)      $cat >&4 <<EOM
+Your fflush(NULL) works okay.
 EOM
-               hdrs="$define sys/types.h
-                       $d_socket sys/socket.h 
-                       $i_niin netinet/in.h 
-                       $i_netdb netdb.h
-                       $i_unistd unistd.h"
-               for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
-                       case "$netdb_net_type" in
-                       '')     try="extern struct netent *getnetbyaddr($xxx, int);"
-                               if ./protochk "$try" $hdrs; then
-                                       echo "Your system accepts $xxx."
-                                       netdb_net_type="$xxx"
-                               fi
-                               ;;
-                       esac
-               done
-               : In case none of those worked, prompt the user.
-               case "$netdb_net_type" in
-               '')     rp='What is the type for the 1st argument to getnetbyaddr?'
-                       dflt='long'
-                       . ./myread
-                       netdb_net_type=$ans
+               fflushNULL="$define"
+               ;;
+       '')     $cat >&4 <<EOM
+Your fflush(NULL) isn't working (contrary to ANSI C).
+EOM
+               fflushNULL="$undef"
+               ;;
+       *)      $cat >&4 <<EOM
+Cannot figure out whether your fflush(NULL) works or not.
+I'm assuming it doesn't (contrary to ANSI C).
+EOM
+               fflushNULL="$undef"
+               ;;
+       esac
+       ;;
+$define|true|[yY]*)
+       fflushNULL="$define"
+       ;;
+*)
+       fflushNULL="$undef"
+       ;;
+esac
+: check explicit looping only if NULL did not work
+case "$fflushNULL" in
+"$undef")
+       : check for fflush all behaviour
+       case "$fflushall" in
+       '')     set try -DTRY_FFLUSH_ALL $output
+               if eval $compile; then
+                       $cat >&4 <<EOM
+(Now testing the other method--but note that also this may fail.)
+EOM
+                       $rm -f try.out
+                       ./try$exe_ext 2>/dev/null
+                       if $test -s try.out -a "X$?" = X42; then
+                               fflushall="`$cat try.out`"
+                       fi
+               fi
+               $rm -f core try.core core.try.*
+               case "$fflushall" in
+               x)      $cat >&4 <<EOM
+Whew. Flushing explicitly all the stdio streams works.
+EOM
+                       fflushall="$define"
+                       ;;
+               '')     $cat >&4 <<EOM
+Sigh. Flushing explicitly all the stdio streams doesn't work.
+EOM
+                       fflushall="$undef"
+                       ;;
+               *)      $cat >&4 <<EOM
+Cannot figure out whether flushing stdio streams explicitly works or not.
+I'm assuming it doesn't.
+EOM
+                       fflushall="$undef"
                        ;;
                esac
                ;;
-       *)      : no getnetbyaddr, so pick harmless default
-               netdb_net_type='long'
+       "$define"|true|[yY]*)
+               fflushall="$define"
+               ;;
+       *)
+               fflushall="$undef"
                ;;
-       esac
-fi
-: locate the preferred pager for this system
-case "$pager" in
-'')
-       dflt=''
-       case "$pg" in
-       /*) dflt=$pg;;
-       esac
-       case "$more" in
-       /*) dflt=$more;;
-       esac
-       case "$less" in
-       /*) dflt=$less;;
-       esac
-       case "$dflt" in
-       '') dflt=/usr/ucb/more;;
        esac
        ;;
-*) dflt="$pager";;
+*)     fflushall="$undef"      
+       ;;
 esac
-echo " "
-fn=f/
-rp='What pager is used on your system?'
-. ./getfile
-pager="$ans"
+case "$fflushNULL$fflushall" in
+undefundef)
+       $cat <<EOM
+I cannot figure out how to flush pending stdio output.
+EOM
+       ;;
+esac
+$rm -f try.* try$exe_ext
 
-: see what type pids are declared as in the kernel
-rp="What is the type of process ids on this system?"
-set pid_t pidtype int stdio.h sys/types.h
+: see what type file positions are declared as in the library
+rp="What is the type for file position used by fsetpos()?"
+set fpos_t fpostype long stdio.h sys/types.h
 eval $typedef_ask
 
+: Store the full pathname to the ar program for use in the C program
+: Respect a hint or command line value for full_ar.
+case "$full_ar" in
+'') full_ar=$ar ;;
+esac
 
-: see whether the state of pthread_attr_setdetachstate is an int pointer
-$cat >try.c <<EOP
-#include <pthread.h>
-main() {
-    pthread_attr_t attr;
-    int state = 0;     
-    pthread_attr_init(&attr);
-#ifdef POINTER
-    pthread_attr_setdetachstate(&attr, &state);
-#else
-    pthread_attr_setdetachstate(&attr, state);
-#endif
-}
-EOP
-set try
-if eval $compile; then
-    val="$undef"
-else
-    set try -DPOINTER
-    if eval $compile; then
-        val="$define"
-    else
-        val="$undef"
-    fi
-fi
-set pthread_setdetachstate_pointer
-eval $setvar
-
-$rm -f try try.*
+: Store the full pathname to the sed program for use in the C program
+full_sed=$sed
 
-: check for length of pointer
+: see what type gids are declared as in the kernel
 echo " "
-case "$ptrsize" in
-'')
-       $echo $n "Checking to see how big your pointers are...$c" >&4
-       if test "$voidflags" -gt 7; then
-               echo '#define VOID_PTR char *' > try.c
-       else
-               echo '#define VOID_PTR void *' > try.c
-       fi
-       $cat >>try.c <<'EOCP'
-#include <stdio.h>
-main()
-{
-       printf("%d\n", sizeof(VOID_PTR));
-       exit(0);
-}
-EOCP
-       set try
-       if eval $compile_ok; then
-               ptrsize=`./try`
-               $echo " $ptrsize bytes." >&4
-       else
-               dflt='4'
-               echo "(I can't seem to compile the test program.  Guessing...)" >&4
-               rp="What is the size of a pointer (in bytes)?"
-               . ./myread
-               ptrsize="$ans"
-       fi
+echo "Looking for the type for group ids returned by getgid()."
+set gid_t gidtype xxx stdio.h sys/types.h
+eval $typedef
+case "$gidtype" in
+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";;
+esac
+case "$gidtype" in
+gid_t) echo "gid_t found." ;;
+*)     rp="What is the type for group ids returned by getgid()?"
+       . ./myread
+       gidtype="$ans"
        ;;
 esac
-$rm -f try.c try
 
-: see if ar generates random libraries by itself
+: see if getgroups exists
+set getgroups d_getgrps
+eval $inlibc
+
+: see if setgroups exists
+set setgroups d_setgrps
+eval $inlibc
+
+
+: Find type of 2nd arg to 'getgroups()' and 'setgroups()'
 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=''
-               ;;
+case "$d_getgrps$d_setgrps" in
+*define*)
+       case "$groupstype" in
+       '') dflt="$gidtype" ;;
+       *)  dflt="$groupstype" ;;
        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* 
+       $cat <<EOM
+What type of pointer is the second argument to getgroups() and setgroups()?
+Usually this is the same as group ids, $gidtype, but not always.
 
+EOM
+       rp='What type pointer is the second argument to getgroups() and setgroups()?'
+       . ./myread
+       groupstype="$ans"
+       ;;
+*)  groupstype="$gidtype";;
+esac
 
-: see whether the various POSIXish _yields exist
-$cat >try.c <<EOP
-#include <pthread.h>
+: see what type lseek is declared as in the kernel
+rp="What is the type used for lseek's offset on this system?"
+set off_t lseektype long stdio.h sys/types.h
+eval $typedef_ask
+
+echo " "
+$echo $n "Checking to see how big your file offsets are...$c" >&4
+$cat >try.c <<EOCP
+#include <sys/types.h>
 #include <stdio.h>
-main() {
-#ifdef SCHED_YIELD
-       sched_yield();
-#else
-#ifdef PTHREAD_YIELD
-       pthread_yield();
-#else
-#ifdef PTHREAD_YIELD_NULL
-       pthread_yield(NULL);
-#endif
-#endif
-#endif
+int main()
+{
+       printf("%d\n", sizeof($lseektype));
 }
-EOP
-: see if sched_yield exists
-set try -DSCHED_YIELD
-if eval $compile; then
-    val="$define"
-    sched_yield='sched_yield()'
-else
-    val="$undef"
-fi
-case "$usethreads" in
-$define)
-       case "$val" in
-       $define) echo 'sched_yield() found.' >&4        ;;
-       *)       echo 'sched_yield() NOT found.' >&4    ;;
-       esac
-esac
-set d_sched_yield
-eval $setvar
-
-: see if pthread_yield exists
-set try -DPTHREAD_YIELD
-if eval $compile; then
-    val="$define"
-    case "$sched_yield" in
-    '') sched_yield='pthread_yield()' ;;
-    esac
-else
-    set try -DPTHREAD_YIELD_NULL
-    if eval $compile; then
-       val="$define"
-       case "$sched_yield" in
-       '') sched_yield='pthread_yield(NULL)' ;;
-       esac
-    else
-       val="$undef"
-    fi
+EOCP
+set try
+if eval $compile_ok; then
+       lseeksize=`./try`
+       $echo " $lseeksize bytes." >&4
+else
+       dflt='4'
+       echo " "
+       echo "(I can't seem to compile the test program.  Guessing...)"
+       rp="What is the size of your file offsets (in bytes)?"
+       . ./myread
+       lseeksize="$ans"
 fi
-case "$usethreads" in
-$define)
-       case "$val" in
-       $define) echo 'pthread_yield() found.' >&4      ;;
-       *)       echo 'pthread_yield() NOT found.' >&4  ;;
+$rm -f try.c try
+
+echo " "
+echo "Checking if your $make program sets \$(MAKE)..." >&4
+case "$make_set_make" in
+'')
+       $sed 's/^X //' > testmake.mak << 'EOF'
+Xall:
+X      @echo 'maketemp="$(MAKE)"'
+EOF
+       case "`$make -f testmake.mak 2>/dev/null`" in
+       *maketemp=*) make_set_make='#' ;;
+       *)      make_set_make="MAKE=$make" ;;
        esac
+       $rm -f testmake.mak
        ;;
 esac
-set d_pthread_yield
-eval $setvar
-
-case "$sched_yield" in
-'') sched_yield=undef ;;
+case "$make_set_make" in
+'#') echo "Yup, it does.";;
+*) echo "Nope, it doesn't.";;
 esac
 
-$rm -f try try.*
+: see what type is used for mode_t
+rp="What is the type used for file modes for system calls (e.g. fchmod())?"
+set mode_t modetype int stdio.h sys/types.h
+eval $typedef_ask
 
-: see if sys/select.h has to be included
-set sys/select.h i_sysselct
-eval $inhdr
+: define a fucntion to check prototypes
+$cat > protochk <<EOSH
+$startsh
+cc="$cc"
+optimize="$optimize"
+ccflags="$ccflags"
+prototype="$prototype"
+define="$define"
+rm=$rm
+EOSH
 
-: see if we should include time.h, sys/time.h, or both
-echo " "
-if test "X$timeincl" = X; then
-       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);
+$cat >> protochk <<'EOSH'
+
+$rm -f try.c
+foo="$1"
+shift
+while test $# -ge 2; do
+       case "$1" in
+               $define) echo "#include <$2>" >> try.c ;;
+               literal) echo "$2" >> try.c ;;
+       esac
+    shift 2
+done
+test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
+cat >> try.c <<'EOCP'
+#ifdef CAN_PROTOTYPE
+#define        _(args) args
+#else
+#define        _(args) ()
 #endif
-       exit(1);
-}
 EOCP
-       flags=''
-       for s_timezone in '-DS_TIMEZONE' ''; do
-       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"
-                       set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
-                       if eval $compile; then
-                               set X $i_time $i_systime $i_systimek $sysselect $s_timeval
-                               shift
-                               flags="$*"
-                               echo " "
-                               $echo $n "Succeeded with $flags$c"
-                       fi
+echo "$foo" >> try.c
+echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
+$cc $optimize $ccflags -c try.c > /dev/null 2>&1
+status=$?
+$rm -f try.[co]
+exit $status
+EOSH
+chmod +x protochk
+$eunicefix protochk
+
+: see what type is used for size_t
+rp="What is the type used for the length parameter for string functions?"
+set size_t sizetype 'unsigned int' stdio.h sys/types.h
+eval $typedef_ask
+
+: check for type of arguments to gethostbyaddr. 
+if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
+       case "$d_gethbyaddr" in
+       $define)
+               $cat <<EOM
+
+Checking to see what type of arguments are accepted by gethostbyaddr().
+EOM
+               hdrs="$define sys/types.h
+                       $d_socket sys/socket.h 
+                       $i_niin netinet/in.h 
+                       $i_netdb netdb.h
+                       $i_unistd unistd.h"
+               : The first arg can 'char *' or 'void *'
+               : The second arg is some of integral type
+               for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
+                       for yyy in size_t long int; do
+                               case "$netdb_host_type" in
+                               '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
+                                       if ./protochk "$try" $hdrs; then
+                                               echo "Your system accepts $xxx for the first arg."
+                                               echo "...and $yyy for the second arg."
+                                               netdb_host_type="$xxx"
+                                               netdb_hlen_type="$yyy"
+                                       fi
+                                       ;;
+                               esac
+                       done
+               done
+               : In case none of those worked, prompt the user.
+               case "$netdb_host_type" in
+               '')     rp='What is the type for the 1st argument to gethostbyaddr?'
+                       dflt='char *'
+                       . ./myread
+                       netdb_host_type=$ans
+                       rp='What is the type for the 2nd argument to gethostbyaddr?'
+                       dflt="$sizetype"
+                       . ./myread
+                       netdb_hlen_type=$ans
+                       ;;
+               esac
+               ;;
+       *)      : no gethostbyaddr, so pick harmless defaults
+               netdb_host_type='char *'
+               netdb_hlen_type="$sizetype"
+               ;;
+       esac
+       # Remove the "const" if needed. -- but then we'll have a 
+       # prototype clash!
+       # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
+fi
+
+: check for type of argument to gethostbyname. 
+if test "X$netdb_name_type" = X ; then
+       case "$d_gethbyname" in
+       $define)
+               $cat <<EOM
+
+Checking to see what type of argument is accepted by gethostbyname().
+EOM
+               hdrs="$define sys/types.h
+                       $d_socket sys/socket.h 
+                       $i_niin netinet/in.h 
+                       $i_netdb netdb.h
+                       $i_unistd unistd.h"
+               for xxx in "const char *" "char *"; do
+                       case "$netdb_name_type" in
+                       '')     try="extern struct hostent *gethostbyname($xxx);"
+                               if ./protochk "$try" $hdrs; then
+                                       echo "Your system accepts $xxx."
+                                       netdb_name_type="$xxx"
+                               fi
+                               ;;
+                       esac
+               done
+               : In case none of those worked, prompt the user.
+               case "$netdb_name_type" in
+               '')     rp='What is the type for the 1st argument to gethostbyname?'
+                       dflt='char *'
+                       . ./myread
+                       netdb_name_type=$ans
+                       ;;
+               esac
+               ;;
+       *)      : no gethostbyname, so pick harmless default
+               netdb_name_type='char *'
+               ;;
+       esac
+fi
+
+: check for type of 1st argument to getnetbyaddr. 
+if test "X$netdb_net_type" = X ; then
+       case "$d_getnbyaddr" in
+       $define)
+               $cat <<EOM
+
+Checking to see what type of 1st argument is accepted by getnetbyaddr().
+EOM
+               hdrs="$define sys/types.h
+                       $d_socket sys/socket.h 
+                       $i_niin netinet/in.h 
+                       $i_netdb netdb.h
+                       $i_unistd unistd.h"
+               for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
+                       case "$netdb_net_type" in
+                       '')     try="extern struct netent *getnetbyaddr($xxx, int);"
+                               if ./protochk "$try" $hdrs; then
+                                       echo "Your system accepts $xxx."
+                                       netdb_net_type="$xxx"
+                               fi
+                               ;;
+                       esac
+               done
+               : In case none of those worked, prompt the user.
+               case "$netdb_net_type" in
+               '')     rp='What is the type for the 1st argument to getnetbyaddr?'
+                       dflt='long'
+                       . ./myread
+                       netdb_net_type=$ans
                        ;;
                esac
-       done
-       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";;
+               ;;
+       *)      : no getnetbyaddr, so pick harmless default
+               netdb_net_type='long'
+               ;;
        esac
-       case "$flags" in
-       *I_TIME*) i_time="$define"
-               timeincl=`./findhdr time.h`" $timeincl"
-               echo "We'll include <time.h>." >&4;;
-       *) i_time="$undef";;
+fi
+: locate the preferred pager for this system
+case "$pager" in
+'')
+       dflt=''
+       case "$pg" in
+       /*) dflt=$pg;;
        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";;
+       case "$more" in
+       /*) dflt=$more;;
        esac
-       $rm -f try.c try
-fi
-
-: check for fd_set items
-$cat <<EOM
+       case "$less" in
+       /*) dflt=$less;;
+       esac
+       case "$dflt" in
+       '') dflt=/usr/ucb/more;;
+       esac
+       ;;
+*) dflt="$pager";;
+esac
+echo " "
+fn=f/
+rp='What pager is used on your system?'
+. ./getfile
+pager="$ans"
 
-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>
-#endif
-#ifdef I_SYS_SELECT
-#include <sys/select.h>
-#endif
-main() {
-       fd_set fds;
+: see what type pids are declared as in the kernel
+rp="What is the type of process ids on this system?"
+set pid_t pidtype int stdio.h sys/types.h
+eval $typedef_ask
 
-#ifdef TRYBITS
-       if(fds.fds_bits);
-#endif
+: Find earliest binary compatible site_perl subdirectory perl can use.
+case "$bincompat5005" in
+"$define") xs_apiversion='5.005' ;;
+*) xs_apiversion=$apiversion ;;   # The current site_perl version.
+esac
+: Find earliest pure perl site_perl subdirectory perl can use.
+: The versioned directories started at 5.005.
+pm_apiversion='5.005'
 
-#if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
+: check for length of pointer
+echo " "
+case "$ptrsize" in
+'')
+       $echo $n "Checking to see how big your pointers are...$c" >&4
+       if test "$voidflags" -gt 7; then
+               echo '#define VOID_PTR char *' > try.c
+       else
+               echo '#define VOID_PTR void *' > try.c
+       fi
+       $cat >>try.c <<'EOCP'
+#include <stdio.h>
+int main()
+{
+       printf("%d\n", sizeof(VOID_PTR));
        exit(0);
-#else
-       exit(1);
-#endif
 }
 EOCP
-set fd_set -DTRYBITS
-if eval $compile; 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"
+       set try
+       if eval $compile_ok; then
+               ptrsize=`./try`
+               $echo " $ptrsize bytes." >&4
        else
-               $cat >&4 <<'EOM'
-but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
-EOM
-               d_fd_macros="$undef"
+               dflt='4'
+               echo "(I can't seem to compile the test program.  Guessing...)" >&4
+               rp="What is the size of a pointer (in bytes)?"
+               . ./myread
+               ptrsize="$ans"
        fi
+       ;;
+esac
+$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'
+int 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
-       $cat <<'EOM'
-Hmm, your compiler has some difficulty with fd_set.  Checking further...
-EOM
-       set fd_set
-       if eval $compile; 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
+       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 "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"
+               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 fd_set*
+$rm -f foo* bar* 
 
 : check for type of arguments to select. 
 case "$selecttype" in
@@ -10883,7 +12040,9 @@ EOM
                : The first arg can be int, unsigned, or size_t
                : The last arg may or may not be 'const'
                val=''
-               for xxx in 'fd_set *' 'int *' 'void *'; do
+               : void pointer has been seen but using that
+               : breaks the selectminbits test
+               for xxx in 'fd_set *' 'int *'; do
                        for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
                                for tmo in 'struct timeval *' 'const struct timeval *'; do
                                        case "$val" in
@@ -10945,6 +12104,10 @@ EOM
 #ifdef I_SYS_SELECT
 #include <sys/select.h>
 #endif
+#$d_socket HAS_SOCKET
+#ifdef HAS_SOCKET
+#   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
+#endif
 #include <stdio.h>
 $selecttype b;
 #define S sizeof(*(b))
@@ -11012,6 +12175,8 @@ esac
 
 : Trace out the files included by signal.h, then look for SIGxxx names.
 : Remove SIGARRAYSIZE used by HPUX.
+: Remove SIGSTKSIZE used by Linux.
+: Remove SIGSTKSZ used by Posix.
 : Remove SIGTYP void lines used by OS2.
 xxx=`echo '#include <signal.h>' |
        $cppstdin $cppminus $cppflags 2>/dev/null |
@@ -11029,7 +12194,7 @@ case "$xxxfiles" in
 '')    xxxfiles=`./findhdr signal.h` ;;
 esac
 xxx=`awk '
-$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $3 !~ /void/ {
+$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
        print substr($2, 4, 20)
 }
 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
@@ -11129,20 +12294,22 @@ $1 ~ /^NSIG$/ { nsig = $2 }
        sig_name[$2] = $1
        sig_num[$2] = $2
     }
-
 }
 END { 
-    if (nsig == 0) { nsig = maxsig + 1 }
-       for (n = 1; n < nsig; n++) {
-               if (sig_name[n]) {
-                       printf("%s %d\n", sig_name[n], sig_num[n])
-               }
-               else {
-                       printf("NUM%d %d\n", n, n) 
-               }
+    if (nsig == 0) {
+       nsig = maxsig + 1
+    }
+    printf("NSIG %d\n", nsig);
+    for (n = 1; n < nsig; n++) {
+       if (sig_name[n]) {
+           printf("%s %d\n", sig_name[n], sig_num[n])
        }
+       else {
+           printf("NUM%d %d\n", n, n) 
+       }
+    }
     for (n = 0; n < ndups; n++) {
-               printf("%s %d\n", dup_name[n], dup_num[n])
+       printf("%s %d\n", dup_name[n], dup_num[n])
     }
 }
 EOP
@@ -11208,7 +12375,8 @@ else
        0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
        esac
        echo $@ | $tr ' ' $trnl | \
-               $awk '{ printf $1; printf " %d\n", ++s; }' >signal.lst
+           $awk '{ printf "%s %d\n", $1, ++s; }
+                 END { printf "NSIG %d\n", ++s }' >signal.lst
 fi
 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
 EOS
@@ -11218,20 +12386,29 @@ $eunicefix signal_cmd
 : generate list of signal names
 echo " "
 case "$sig_name_init" in
-'')
+'') doinit=yes ;;
+*)  case "$sig_num_init" in
+    ''|*,*) doinit=yes ;;
+    esac ;;
+esac
+case "$doinit" in
+yes)
        echo "Generating a list of signal names and numbers..." >&4
        . ./signal_cmd
-       sig_name=`$awk '{printf "%s ", $1}' signal.lst`
-       sig_name="ZERO $sig_name"
-       sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
-                                               { printf "\"%s\", ", $1 }
-                                               END { printf "0\n" }' signal.lst`
-       sig_num=`$awk 'BEGIN { printf "0, " }
-                                       { printf "%d, ", $2}
-                                       END { printf "0\n"}' signal.lst`
-       ;;
-esac
-echo "The following signals are available:"
+       sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
+       sig_name=`$awk 'BEGIN { printf "ZERO " }
+                       !/^NSIG/ { printf "%s ", $1 }' signal.lst`
+       sig_num=`$awk  'BEGIN { printf "0 " }
+                       !/^NSIG/ { printf "%d ", $2 }' signal.lst`
+       sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
+                            !/^NSIG/   { printf "\"%s\", ", $1 }
+                            END        { printf "0\n" }' signal.lst`
+       sig_num_init=`$awk  'BEGIN      { printf "0, " }
+                            !/^NSIG/   { printf "%d, ", $2}
+                            END        { printf "0\n"}' signal.lst`
+       ;;
+esac
+echo "The following $sig_count signals are available:"
 echo " "
 echo $sig_name | $awk \
 'BEGIN { linelen = 0 }
@@ -11258,7 +12435,7 @@ $cat > ssize.c <<EOM
 #include <sys/types.h>
 #define Size_t $sizetype
 #define SSize_t $dflt
-main()
+int main()
 {
        if (sizeof(Size_t) == sizeof(SSize_t))
                printf("$dflt\n");
@@ -11342,6 +12519,43 @@ uid_t) echo "uid_t found." ;;
        ;;
 esac
 
+echo " "
+case "$uidtype" in
+*_t) zzz="$uidtype"    ;;
+*)   zzz="uid"         ;;
+esac
+echo "Checking the sign of $zzz..." >&4
+cat > try.c <<EOCP
+#include <sys/types.h>
+#include <stdio.h>
+int main() {
+       $uidtype foo = -1;
+       if (foo < 0)
+               printf("-1\n");
+       else
+               printf("1\n");
+}
+EOCP
+set try
+if eval $compile; then
+       yyy=`./try`
+       case "$yyy" in
+       '')     uidsign=1
+               echo "(I can't execute the test program--guessing unsigned.)" >&4
+               ;;
+       *)      uidsign=$yyy
+               case "$uidsign" in
+                1) echo "Your $zzz is unsigned." ;;
+               -1) echo "Your $zzz is signed."   ;;
+               esac
+               ;;
+       esac
+else
+       uidsign=1
+       echo "(I can't compile the test program--guessing unsigned.)" >&4
+fi
+
+
 : see if dbm.h is available
 : see if dbmclose exists
 set dbmclose d_dbmclose
@@ -11429,10 +12643,24 @@ eval $setvar
 set locale.h i_locale
 eval $inhdr
 
+: see if mach cthreads are available
+if test "X$usethreads" = "X$define"; then
+       set mach/cthreads.h i_machcthr
+       eval $inhdr
+else
+       i_machcthr="$undef"
+fi
+
+
+
 : see if this is a math.h system
 set math.h i_math
 eval $inhdr
 
+: see if this is a mntent.h system
+set mntent.h i_mntent
+eval $inhdr
+
 : see if ndbm.h is available
 set ndbm.h t_ndbm
 eval $inhdr
@@ -11482,6 +12710,14 @@ esac
 set i_neterrno
 eval $setvar
 
+: see if netinet/tcp.h is available
+set netinet/tcp.h i_netinettcp
+eval $inhdr
+
+: see if this is a poll.h system
+set poll.h i_poll
+eval $inhdr
+
 : get C preprocessor symbols handy
 echo " "
 $echo $n "Hmm... $c"
@@ -11534,12 +12770,16 @@ $eunicefix Cppsym
 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
 
 : now check the C compiler for additional symbols
+postprocess_cc_v=''
+case "$osname" in
+aix) postprocess_cc_v="|$tr , ' '" ;;
+esac
 $cat >ccsym <<EOS
 $startsh
 $cat >tmp.c <<EOF
 extern int foo;
 EOF
-for i in \`$cc -v -c tmp.c 2>&1\`
+for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
 do
        case "\$i" in
        -D*) echo "\$i" | $sed 's/^-D//';;
@@ -11548,6 +12788,7 @@ do
 done
 $rm -f try.c
 EOS
+postprocess_cc_v=''
 chmod +x ccsym
 $eunicefix ccsym
 ./ccsym > ccsym1.raw
@@ -11564,32 +12805,41 @@ $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 "Your C compiler doesn't seem to define any symbols!" >&4
        echo " "
-       echo "However, your C preprocessor defines the following ones:"
+       echo "However, your C preprocessor defines the following symbols:"
        $cat Cppsym.true
+       ccsymbols=''
+       cppsymbols=`$cat Cppsym.true`
+        cppsymbols=`echo $cppsymbols`
+       cppccsymbols="$cppsymbols"
 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'
+               cppccsymbols=`$cat ccsym.com`
+               cppccsymbols=`echo $cppccsymbols`
                $test "$silent" || sleep 1
        fi
        if $test -s ccsym.cpp; then
                $test "$also" && echo " "
-               echo "Your C pre-processor ${also}defines the following $symbols:"
+               echo "Your C pre-processor ${also}defines the following symbols:"
                $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
                also='further '
+               cppsymbols=`$cat ccsym.cpp`
+               cppsymbols=`echo $cppsymbols`
                $test "$silent" || sleep 1
        fi
        if $test -s ccsym.own; then
                $test "$also" && echo " "
-               echo "Your C compiler ${also}defines the following cpp variables:"
+               echo "Your C compiler ${also}defines the following cpp symbols:"
                $sed -e 's/\(.*\)=1/\1/' ccsym.own
                $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
+               ccsymbols=`$cat ccsym.own`
+               ccsymbols=`echo $ccsymbols`
                $test "$silent" || sleep 1
        fi
 fi
@@ -11650,6 +12900,14 @@ set i_termio; eval $setvar
 val=$val2; set i_sgtty; eval $setvar
 val=$val3; set i_termios; eval $setvar
 
+: see if this is a shadow.h system
+set shadow.h i_shadow
+eval $inhdr
+
+: see if this is a socks.h system
+set socks.h i_socks
+eval $inhdr
+
 : see if stdarg is available
 echo " "
 if $test `./findhdr stdarg.h`; then
 set i_sysioctl
 eval $setvar
 
-: see if this is a sys/param system
-set sys/param.h i_sysparam
-eval $inhdr
-
 : see if sys/resource.h has to be included
 set sys/resource.h i_sysresrc
 eval $inhdr
@@ -11789,6 +13043,10 @@ eval $inhdr
 set sys/security.h i_syssecrt
 eval $inhdr
 
+: see if this is a sys/statvfs.h system
+set sys/statvfs.h i_sysstatvfs
+eval $inhdr
+
 : see if this is a sys/un.h system
 set sys/un.h i_sysun
 eval $inhdr
@@ -11838,8 +13096,6 @@ eval $setvar
 
 echo " "
 echo "Looking for extensions..." >&4
-tdir=`pwd`
-cd $rsrc/ext
 : If we are using the old config.sh, known_extensions may contain
 : old or inaccurate or duplicate values.
 known_extensions=''
@@ -11848,30 +13104,35 @@ nonxs_extensions=''
 : We do not just use MANIFEST because the user may have dropped
 : some additional extensions into the source tree and expect them
 : to be built.
-for xxx in * ; do
-       case "$xxx" in
-       DynaLoader|dynaload) ;;
-       *)      if $test -f $xxx/$xxx.xs; then
-                       known_extensions="$known_extensions $xxx"
-               elif $test -f $xxx/Makefile.PL; then
-                       nonxs_extensions="$nonxs_extensions $xxx"
-               else
-                       if $test -d $xxx; then
-                               # Look for nested extensions, eg. Devel/Dprof.
-                               cd $xxx
-                               for yyy in * ; do
-                               if $test -f $yyy/$yyy.xs; then
-                                       known_extensions="$known_extensions $xxx/$yyy"
-                               elif $test -f $yyy/Makefile.PL; then
-                                       nonxs_extensions="$nonxs_extensions $xxx/$yyy"
-                               fi
-                               done
-                               cd ..
-                       fi
-               fi 
-               ;;
-       esac
-done
+
+: Function to recursively find available extensions, ignoring DynaLoader
+: NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
+find_extensions='
+    for xxx in *; do
+       case "$xxx" in
+           DynaLoader|dynaload) ;;
+           *)
+           if $test -f $xxx/$xxx.xs; then
+               known_extensions="$known_extensions $1$xxx";
+           elif $test -f $xxx/Makefile.PL; then
+               nonxs_extensions="$nonxs_extensions $1$xxx";
+           else
+               if $test -d $xxx -a $# -lt 10; then
+                   set $1$xxx/ $*;
+                   cd $xxx;
+                   eval $find_extensions;
+                   cd ..;
+                   shift;
+               fi;
+           fi
+           ;;
+       esac;
+    done'
+tdir=`pwd`
+cd $rsrc/ext
+set X
+shift
+eval $find_extensions
 set X $nonxs_extensions
 shift
 nonxs_extensions="$*"
@@ -12108,9 +13369,8 @@ case "$d_portable" in
        echo " "
        echo "Stripping down executable paths..." >&4
        for file in $loclist $trylist; do
-               if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
-                       eval $file="\$file"
-               fi
+               eval temp=\$$file
+               eval $file=`basename $temp`
        done
        ;;
 esac
@@ -12162,6 +13422,7 @@ awk='$awk'
 baserev='$baserev'
 bash='$bash'
 bin='$bin'
+bincompat5005='$bincompat5005'
 binexp='$binexp'
 bison='$bison'
 byacc='$byacc'
@@ -12173,6 +13434,7 @@ cc='$cc'
 cccdlflags='$cccdlflags'
 ccdlflags='$ccdlflags'
 ccflags='$ccflags'
+ccsymbols='$ccsymbols'
 cf_by='$cf_by'
 cf_email='$cf_email'
 cf_time='$cf_time'
@@ -12187,21 +13449,39 @@ cp='$cp'
 cpio='$cpio'
 cpp='$cpp'
 cpp_stuff='$cpp_stuff'
+cppccsymbols='$cppccsymbols'
 cppflags='$cppflags'
 cpplast='$cpplast'
 cppminus='$cppminus'
 cpprun='$cpprun'
 cppstdin='$cppstdin'
+cppsymbols='$cppsymbols'
+crosscompile='$crosscompile'
 cryptlib='$cryptlib'
 csh='$csh'
 d_Gconvert='$d_Gconvert'
+d_PRIEldbl='$d_PRIEldbl'
+d_PRIFldbl='$d_PRIFldbl'
+d_PRIGldbl='$d_PRIGldbl'
+d_PRIX64='$d_PRIX64'
+d_PRId64='$d_PRId64'
+d_PRIeldbl='$d_PRIeldbl'
+d_PRIfldbl='$d_PRIfldbl'
+d_PRIgldbl='$d_PRIgldbl'
+d_PRIi64='$d_PRIi64'
+d_PRIo64='$d_PRIo64'
+d_PRIu64='$d_PRIu64'
+d_PRIx64='$d_PRIx64'
 d_access='$d_access'
 d_accessx='$d_accessx'
 d_alarm='$d_alarm'
 d_archlib='$d_archlib'
+d_atolf='$d_atolf'
+d_atoll='$d_atoll'
 d_attribut='$d_attribut'
 d_bcmp='$d_bcmp'
 d_bcopy='$d_bcopy'
+d_bincompat5005='$d_bincompat5005'
 d_bsd='$d_bsd'
 d_bsdgetpgrp='$d_bsdgetpgrp'
 d_bsdsetpgrp='$d_bsdsetpgrp'
@@ -12213,16 +13493,13 @@ d_chown='$d_chown'
 d_chroot='$d_chroot'
 d_chsize='$d_chsize'
 d_closedir='$d_closedir'
+d_cmsghdr_s='$d_cmsghdr_s'
 d_const='$d_const'
 d_crypt='$d_crypt'
 d_csh='$d_csh'
 d_cuserid='$d_cuserid'
 d_dbl_dig='$d_dbl_dig'
-d_dbmclose64='$d_dbmclose64'
-d_dbminit64='$d_dbminit64'
-d_delete64='$d_delete64'
 d_difftime='$d_difftime'
-d_dirent64s='$d_dirent64s'
 d_dirnamlen='$d_dirnamlen'
 d_dlerror='$d_dlerror'
 d_dlopen='$d_dlopen'
@@ -12237,6 +13514,7 @@ d_endnent='$d_endnent'
 d_endpent='$d_endpent'
 d_endpwent='$d_endpwent'
 d_endsent='$d_endsent'
+d_endspent='$d_endspent'
 d_eofnblk='$d_eofnblk'
 d_eunice='$d_eunice'
 d_fchmod='$d_fchmod'
@@ -12245,28 +13523,18 @@ d_fcntl='$d_fcntl'
 d_fd_macros='$d_fd_macros'
 d_fd_set='$d_fd_set'
 d_fds_bits='$d_fds_bits'
-d_fetch64='$d_fetch64'
-d_fgetpos64='$d_fgetpos64'
 d_fgetpos='$d_fgetpos'
-d_firstkey64='$d_firstkey64'
 d_flexfnam='$d_flexfnam'
-d_flock64s='$d_flock64s'
 d_flock='$d_flock'
-d_fopen64='$d_fopen64'
 d_fork='$d_fork'
 d_fpathconf='$d_fpathconf'
-d_freopen64='$d_freopen64'
-d_fseek64='$d_fseek64'
-d_fseeko64='$d_fseeko64'
+d_fpos64_t='$d_fpos64_t'
 d_fseeko='$d_fseeko'
-d_fsetpos64='$d_fsetpos64'
 d_fsetpos='$d_fsetpos'
-d_fstat64='$d_fstat64'
-d_ftell64='$d_ftell64'
-d_ftello64='$d_ftello64'
+d_fstatfs='$d_fstatfs'
+d_fstatvfs='$d_fstatvfs'
 d_ftello='$d_ftello'
 d_ftime='$d_ftime'
-d_ftruncate64='$d_ftruncate64'
 d_getgrent='$d_getgrent'
 d_getgrps='$d_getgrps'
 d_gethbyaddr='$d_gethbyaddr'
@@ -12275,6 +13543,7 @@ d_gethent='$d_gethent'
 d_gethname='$d_gethname'
 d_gethostprotos='$d_gethostprotos'
 d_getlogin='$d_getlogin'
+d_getmntent='$d_getmntent'
 d_getnbyaddr='$d_getnbyaddr'
 d_getnbyname='$d_getnbyname'
 d_getnent='$d_getnent'
@@ -12293,29 +13562,33 @@ d_getsbyname='$d_getsbyname'
 d_getsbyport='$d_getsbyport'
 d_getsent='$d_getsent'
 d_getservprotos='$d_getservprotos'
+d_getspent='$d_getspent'
+d_getspnam='$d_getspnam'
 d_gettimeod='$d_gettimeod'
 d_gnulibc='$d_gnulibc'
 d_grpasswd='$d_grpasswd'
+d_hasmntopt='$d_hasmntopt'
 d_htonl='$d_htonl'
 d_index='$d_index'
 d_inetaton='$d_inetaton'
-d_ino64t='$d_ino64t'
 d_int64t='$d_int64t'
+d_iovec_s='$d_iovec_s'
 d_isascii='$d_isascii'
 d_killpg='$d_killpg'
 d_lchown='$d_lchown'
+d_ldbl_dig='$d_ldbl_dig'
 d_link='$d_link'
+d_llseek='$d_llseek'
 d_locconv='$d_locconv'
-d_lockf64='$d_lockf64'
 d_lockf='$d_lockf'
 d_longdbl='$d_longdbl'
 d_longlong='$d_longlong'
-d_lseek64='$d_lseek64'
-d_lstat64='$d_lstat64'
 d_lstat='$d_lstat'
+d_madvise='$d_madvise'
 d_mblen='$d_mblen'
 d_mbstowcs='$d_mbstowcs'
 d_mbtowc='$d_mbtowc'
+d_memchr='$d_memchr'
 d_memcmp='$d_memcmp'
 d_memcpy='$d_memcpy'
 d_memmove='$d_memmove'
@@ -12323,20 +13596,28 @@ d_memset='$d_memset'
 d_mkdir='$d_mkdir'
 d_mkfifo='$d_mkfifo'
 d_mktime='$d_mktime'
+d_mmap='$d_mmap'
+d_mprotect='$d_mprotect'
 d_msg='$d_msg'
+d_msg_ctrunc='$d_msg_ctrunc'
+d_msg_dontroute='$d_msg_dontroute'
+d_msg_oob='$d_msg_oob'
+d_msg_peek='$d_msg_peek'
+d_msg_proxy='$d_msg_proxy'
 d_msgctl='$d_msgctl'
 d_msgget='$d_msgget'
+d_msghdr_s='$d_msghdr_s'
 d_msgrcv='$d_msgrcv'
 d_msgsnd='$d_msgsnd'
+d_msync='$d_msync'
+d_munmap='$d_munmap'
 d_mymalloc='$d_mymalloc'
-d_nextkey64='$d_nextkey64'
 d_nice='$d_nice'
-d_off64t='$d_off64t'
+d_off64_t='$d_off64_t'
+d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
 d_oldpthreads='$d_oldpthreads'
 d_oldsock='$d_oldsock'
 d_open3='$d_open3'
-d_open64='$d_open64'
-d_opendir64='$d_opendir64'
 d_pathconf='$d_pathconf'
 d_pause='$d_pause'
 d_phostname='$d_phostname'
@@ -12344,7 +13625,6 @@ d_pipe='$d_pipe'
 d_poll='$d_poll'
 d_portable='$d_portable'
 d_pthread_yield='$d_pthread_yield'
-d_pthreads_created_joinable='$d_pthreads_created_joinable'
 d_pwage='$d_pwage'
 d_pwchange='$d_pwchange'
 d_pwclass='$d_pwclass'
@@ -12353,9 +13633,10 @@ d_pwexpire='$d_pwexpire'
 d_pwgecos='$d_pwgecos'
 d_pwpasswd='$d_pwpasswd'
 d_pwquota='$d_pwquota'
-d_readdir64='$d_readdir64'
 d_readdir='$d_readdir'
 d_readlink='$d_readlink'
+d_readv='$d_readv'
+d_recvmsg='$d_recvmsg'
 d_rename='$d_rename'
 d_rewinddir='$d_rewinddir'
 d_rmdir='$d_rmdir'
@@ -12363,7 +13644,7 @@ d_safebcpy='$d_safebcpy'
 d_safemcpy='$d_safemcpy'
 d_sanemcmp='$d_sanemcmp'
 d_sched_yield='$d_sched_yield'
-d_seekdir64='$d_seekdir64'
+d_scm_rights='$d_scm_rights'
 d_seekdir='$d_seekdir'
 d_select='$d_select'
 d_sem='$d_sem'
@@ -12372,6 +13653,7 @@ d_semctl_semid_ds='$d_semctl_semid_ds'
 d_semctl_semun='$d_semctl_semun'
 d_semget='$d_semget'
 d_semop='$d_semop'
+d_sendmsg='$d_sendmsg'
 d_setegid='$d_setegid'
 d_seteuid='$d_seteuid'
 d_setgrent='$d_setgrent'
@@ -12394,6 +13676,7 @@ d_setrgid='$d_setrgid'
 d_setruid='$d_setruid'
 d_setsent='$d_setsent'
 d_setsid='$d_setsid'
+d_setspent='$d_setspent'
 d_setvbuf='$d_setvbuf'
 d_sfio='$d_sfio'
 d_shm='$d_shm'
@@ -12406,13 +13689,15 @@ d_sigaction='$d_sigaction'
 d_sigsetjmp='$d_sigsetjmp'
 d_socket='$d_socket'
 d_sockpair='$d_sockpair'
-d_stat64='$d_stat64'
 d_statblks='$d_statblks'
+d_statfs='$d_statfs'
+d_statfsflags='$d_statfsflags'
+d_statvfs='$d_statvfs'
 d_stdio_cnt_lval='$d_stdio_cnt_lval'
 d_stdio_ptr_lval='$d_stdio_ptr_lval'
+d_stdio_stream_array='$d_stdio_stream_array'
 d_stdiobase='$d_stdiobase'
 d_stdstdio='$d_stdstdio'
-d_store64='$d_store64'
 d_strchr='$d_strchr'
 d_strcoll='$d_strcoll'
 d_strctcpy='$d_strctcpy'
@@ -12421,6 +13706,7 @@ d_strerror='$d_strerror'
 d_strtod='$d_strtod'
 d_strtol='$d_strtol'
 d_strtoul='$d_strtoul'
+d_strtoull='$d_strtoull'
 d_strxfrm='$d_strxfrm'
 d_suidsafe='$d_suidsafe'
 d_symlink='$d_symlink'
@@ -12431,17 +13717,16 @@ d_syserrlst='$d_syserrlst'
 d_system='$d_system'
 d_tcgetpgrp='$d_tcgetpgrp'
 d_tcsetpgrp='$d_tcsetpgrp'
-d_telldir64='$d_telldir64'
 d_telldir='$d_telldir'
+d_telldirproto='$d_telldirproto'
 d_time='$d_time'
 d_times='$d_times'
-d_tmpfile64='$d_tmpfile64'
-d_truncate64='$d_truncate64'
 d_truncate='$d_truncate'
 d_tzname='$d_tzname'
 d_umask='$d_umask'
 d_uname='$d_uname'
 d_union_semun='$d_union_semun'
+d_vendorlib='$d_vendorlib'
 d_vfork='$d_vfork'
 d_void_closedir='$d_void_closedir'
 d_voidsig='$d_voidsig'
@@ -12452,6 +13737,7 @@ d_wait4='$d_wait4'
 d_waitpid='$d_waitpid'
 d_wcstombs='$d_wcstombs'
 d_wctomb='$d_wctomb'
+d_writev='$d_writev'
 d_xenix='$d_xenix'
 date='$date'
 db_hashtype='$db_hashtype'
@@ -12472,11 +13758,14 @@ eunicefix='$eunicefix'
 exe_ext='$exe_ext'
 expr='$expr'
 extensions='$extensions'
+fflushNULL='$fflushNULL'
+fflushall='$fflushall'
 find='$find'
 firstmakefile='$firstmakefile'
 flex='$flex'
 fpostype='$fpostype'
 freetype='$freetype'
+full_ar='$full_ar'
 full_csh='$full_csh'
 full_sed='$full_sed'
 gccversion='$gccversion'
@@ -12505,17 +13794,24 @@ i_grp='$i_grp'
 i_inttypes='$i_inttypes'
 i_limits='$i_limits'
 i_locale='$i_locale'
+i_machcthr='$i_machcthr'
 i_malloc='$i_malloc'
 i_math='$i_math'
 i_memory='$i_memory'
+i_mntent='$i_mntent'
 i_ndbm='$i_ndbm'
 i_netdb='$i_netdb'
 i_neterrno='$i_neterrno'
+i_netinettcp='$i_netinettcp'
 i_niin='$i_niin'
+i_poll='$i_poll'
+i_pthread='$i_pthread'
 i_pwd='$i_pwd'
 i_rpcsvcdbm='$i_rpcsvcdbm'
 i_sfio='$i_sfio'
 i_sgtty='$i_sgtty'
+i_shadow='$i_shadow'
+i_socks='$i_socks'
 i_stdarg='$i_stdarg'
 i_stddef='$i_stddef'
 i_stdlib='$i_stdlib'
@@ -12526,6 +13822,8 @@ i_sysfile='$i_sysfile'
 i_sysfilio='$i_sysfilio'
 i_sysin='$i_sysin'
 i_sysioctl='$i_sysioctl'
+i_sysmman='$i_sysmman'
+i_sysmount='$i_sysmount'
 i_sysndir='$i_sysndir'
 i_sysparam='$i_sysparam'
 i_sysresrc='$i_sysresrc'
@@ -12533,10 +13831,12 @@ i_syssecrt='$i_syssecrt'
 i_sysselct='$i_sysselct'
 i_syssockio='$i_syssockio'
 i_sysstat='$i_sysstat'
+i_sysstatvfs='$i_sysstatvfs'
 i_systime='$i_systime'
 i_systimek='$i_systimek'
 i_systimes='$i_systimes'
 i_systypes='$i_systypes'
+i_sysuio='$i_sysuio'
 i_sysun='$i_sysun'
 i_syswait='$i_syswait'
 i_termio='$i_termio'
@@ -12555,10 +13855,15 @@ installarchlib='$installarchlib'
 installbin='$installbin'
 installman1dir='$installman1dir'
 installman3dir='$installman3dir'
+installprefix='$installprefix'
+installprefixexp='$installprefixexp'
 installprivlib='$installprivlib'
 installscript='$installscript'
 installsitearch='$installsitearch'
 installsitelib='$installsitelib'
+installstyle='$installstyle'
+installusrbinperl='$installusrbinperl'
+installvendorlib='$installvendorlib'
 intsize='$intsize'
 known_extensions='$known_extensions'
 ksh='$ksh'
@@ -12566,6 +13871,7 @@ large='$large'
 ld='$ld'
 lddlflags='$lddlflags'
 ldflags='$ldflags'
+ldlibpthname='$ldlibpthname'
 less='$less'
 lib_ext='$lib_ext'
 libc='$libc'
@@ -12605,9 +13911,11 @@ medium='$medium'
 mips='$mips'
 mips_type='$mips_type'
 mkdir='$mkdir'
+mmaptype='$mmaptype'
 models='$models'
 modetype='$modetype'
 more='$more'
+multiarch='$multiarch'
 mv='$mv'
 myarchname='$myarchname'
 mydomain='$mydomain'
@@ -12625,6 +13933,7 @@ nonxs_ext='$nonxs_ext'
 nroff='$nroff'
 o_nonblock='$o_nonblock'
 obj_ext='$obj_ext'
+old_pthread_create_joinable='$old_pthread_create_joinable'
 optimize='$optimize'
 orderlib='$orderlib'
 osname='$osname'
@@ -12641,6 +13950,7 @@ pg='$pg'
 phostname='$phostname'
 pidtype='$pidtype'
 plibpth='$plibpth'
+pm_apiversion='$pm_apiversion'
 pmake='$pmake'
 pr='$pr'
 prefix='$prefix'
@@ -12648,7 +13958,6 @@ prefixexp='$prefixexp'
 privlib='$privlib'
 privlibexp='$privlibexp'
 prototype='$prototype'
-pthread_setdetachstate_pointer='$pthread_setdetachstate_pointer'
 ptrsize='$ptrsize'
 randbits='$randbits'
 randfunc='$randfunc'
@@ -12658,6 +13967,18 @@ rd_nodata='$rd_nodata'
 rm='$rm'
 rmail='$rmail'
 runnm='$runnm'
+sPRIEldbl='$sPRIEldbl'
+sPRIFldbl='$sPRIFldbl'
+sPRIGldbl='$sPRIGldbl'
+sPRIX64='$sPRIX64'
+sPRId64='$sPRId64'
+sPRIeldbl='$sPRIeldbl'
+sPRIfldbl='$sPRIfldbl'
+sPRIgldbl='$sPRIgldbl'
+sPRIi64='$sPRIi64'
+sPRIo64='$sPRIo64'
+sPRIu64='$sPRIu64'
+sPRIx64='$sPRIx64'
 sched_yield='$sched_yield'
 scriptdir='$scriptdir'
 scriptdirexp='$scriptdirexp'
@@ -12673,14 +13994,18 @@ shmattype='$shmattype'
 shortsize='$shortsize'
 shrpenv='$shrpenv'
 shsharp='$shsharp'
+sig_count='$sig_count'
 sig_name='$sig_name'
 sig_name_init='$sig_name_init'
 sig_num='$sig_num'
+sig_num_init='$sig_num_init'
 signal_t='$signal_t'
 sitearch='$sitearch'
 sitearchexp='$sitearchexp'
 sitelib='$sitelib'
 sitelibexp='$sitelibexp'
+siteprefix='$siteprefix'
+siteprefixexp='$siteprefixexp'
 sizetype='$sizetype'
 sleep='$sleep'
 smail='$smail'
@@ -12703,6 +14028,7 @@ stdio_bufsiz='$stdio_bufsiz'
 stdio_cnt='$stdio_cnt'
 stdio_filbuf='$stdio_filbuf'
 stdio_ptr='$stdio_ptr'
+stdio_stream_array='$stdio_stream_array'
 strings='$strings'
 submit='$submit'
 subversion='$subversion'
@@ -12718,11 +14044,15 @@ touch='$touch'
 tr='$tr'
 trnl='$trnl'
 troff='$troff'
+uidsign='$uidsign'
 uidtype='$uidtype'
 uname='$uname'
 uniq='$uniq'
 use64bits='$use64bits'
 usedl='$usedl'
+uselargefiles='$uselargefiles'
+uselongdouble='$uselongdouble'
+usemorebits='$usemorebits'
 usemultiplicity='$usemultiplicity'
 usemymalloc='$usemymalloc'
 usenm='$usenm'
@@ -12731,14 +14061,21 @@ useperlio='$useperlio'
 useposix='$useposix'
 usesfio='$usesfio'
 useshrplib='$useshrplib'
+usesocks='$usesocks'
 usethreads='$usethreads'
+usevendorprefix='$usevendorprefix'
 usevfork='$usevfork'
 usrinc='$usrinc'
 uuname='$uuname'
+vendorlib='$vendorlib'
+vendorlibexp='$vendorlibexp'
+vendorprefix='$vendorprefix'
+vendorprefixexp='$vendorprefixexp'
 version='$version'
 vi='$vi'
 voidflags='$voidflags'
 xlibpth='$xlibpth'
+xs_apiversion='$xs_apiversion'
 zcat='$zcat'
 zip='$zip'
 EOT
@@ -12748,8 +14085,8 @@ $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
 
 : add special variables
 $test -f $src/patchlevel.h && \
-awk '/^#define/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
-echo "CONFIG=true" >>config.sh
+awk '/^#define[        ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
+echo "CONFIGDOTSH=true" >>config.sh
 
 : propagate old symbols
 if $test -f UU/config.sh; then