perl5.000 patch.0g: [various portability fixes, and use latest metaconfig for Configure]
Andy Dougherty [Wed, 18 Jan 1995 03:44:04 +0000 (03:44 +0000)]
This patch incorporates various portability fixes and uses the latest
metaconfig to generate Configure (and config_h.SH).

It would take a long time to summarize all that I've changed.  I
haven't included many code changes because I'm trying *not* to
duplicate bug fixes Larry may already have applied.

Here's an older description I prepared that's still mostly accurate:

I've also included a few portability fixes in the main source, but
these are certainly not a complete set of everything that's been
reported.

Don't be put off by the size of the patch.  Mostly, it's just
rearrangement of the parts in Configure and some cosmetic changes.

Since gcc often supports long long, I had started to add quad support
to Configure.  Since SunOS 4.1.3 defines a conflicting "quad"
structure, I changed the name from 'quad' to Quad_t, consistent with
other Configure "types."  I also changed "QUAD" to "HAS_QUAD".
However, it turns out it's pretty hard to actually *use* Quad_t.
Neither system I have access to can sprintf() a "long long", nor can
they carry one around in an IV, unless I make IV "long long", which I
didn't want to force generally.  Thus I wonder whether any but a
precious few could actually use Quad_t, and dropped the tests from
Configure.  I left in the s/quad/Quad_t/ and s/QUAD/HAS_QUAD/ stuff in
case someone else wants to pick it up, and also because I was too lazy
to take it back out :-).

Some highlights:

Configure
    Several new options.  Use Configure -h to learn more.  Also,
        read the directions Configure prints. :-)
    Spaces now allowed in -D command line options.
    New -O option that overrides config.sh.
    You can start interactively and then change that to accepting
        all the defaults by specifying &-d at any Configure prompt.  This
        is useful if you have to re-run Configure to only change a few
        settings.
    Signal type set correctly for the cast{i32,neg} tests.
    archname detection improved a bit
    guard against ksh users who have set -u
    Oldconfig.U cleaned up and regularized a bit more.
    Guard against hint files using (and over-writing) $tmp.
    Command line options now are processed after metaconfig INIT
        lines.  Thus things like Configure -Uuseposix should work now.
    Various miscellaneous clean-ups.
    better use/detection of tr.
    i_db.U now checks for hash and prefix type (I think!)  I can't
        test it here.
    i_?db*.U now all check for an associated function before deciding
        to include or not the header.
MANIFEST
MANIFEST.new
        Sorted & updated.
Makefile.SH
    Some shells/makes bombed out on   test -d lib/auto || mkdir lib/auto
        Use makedir instead.
README
    Some additional notes that people won't read :-).
cflags.SH
        Now calls $startsh.  Weird things were happening on Intergraph,
and this might be related.
config.H
    Updated.
config_h.SH
    Regenerated.
deb.c
        Varargs dependencies on STANDARD_C replaced by I_STDARG.
doop.c
        quad stuff.
ext/DB_File/DB_File.xs
    Use the new DB_Hash_t and DB_Prefix_t symbols.
ext/SDBM_File/sdbm/sdbm.h
    Fix #defines to be more robust.
mg.c
    Replace VOIDSIG by metaconfig's Signal_t.
opcode.h
opcode.pl
    semop only takes 2 arguments, not 3.
perl.c
    Better guard on getenv() prototype.  A hint file can use this, if
        necessary.  Me, I think some compilers are just too picky.
perl.h
    The (very) beginnings of some Quad support.  See above.
    Remove the very troublesome sprintf() prototype.  Since we don't
        _use_ the return value anyway (since it's not portable) this
        should be o.k.  The problem was that some systems CAN_PROTOTYPE
        but include char *sprintf(); in <stdio.h>.  That's incompatible
        with the version we used to have in perl.h.  Most people have
        a prototype for sprintf() in <stdio.h>.  Those that don't probably
        can get by without it anyway.
    Protect the timesbuf by the specific HAS_TIMES test.  Some older
        gcc-2.something/Solaris 2.something installations apparently don't
        have times.
pp.c
    More quad stuff.
pp_ctl.c
    s/STANDARD_C/I_STDARG/ for varargs stuff.
pp_sys.c
    use Signal_t.
proto.h
   Update to match new metaconfig names.
util.c
    s/STANDARD_C/I_STDARG/ for varargs stuff.
    comment out <unistd.h>.  A pause prototype was causing problems on
        some systems.
vms/config.vms
    Changed to use Signal_t.

32 files changed:
Configure
MANIFEST
MANIFEST.new [new file with mode: 0644]
Makefile.SH
README
cflags.SH
config.H
config_h.SH
deb.c
doop.c
ext/DB_File/DB_File.xs
ext/SDBM_File/sdbm/sdbm.h
ext/util/make_ext
globals.c [new file with mode: 0644]
hints/irix_6.sh
hints/next_3_2.sh
installperl
lib/ExtUtils/MakeMaker.pm
lib/Term/Cap.pm
mg.c
miniperlmain.c
opcode.h
opcode.pl
perl.c
perl.h
pod/Makefile
pp.c
pp_ctl.c
pp_hot.c
pp_sys.c
proto.h
util.c

index 3d3b38d..78ffe16 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -18,9 +18,9 @@
 # archive site. Check with Archie if you don't know where that can be.)
 #
 
-# $Id: Head.U,v 3.0.1.5 1994/08/29 16:03:44 ram Exp $
+# $Id: Head.U,v 3.0.1.6 1994/10/29 15:54:19 ram Exp $
 #
-# Generated on Tue Oct 11 22:49:31 EDT 1994 [metaconfig 3.0 PL35]
+# Generated on Wed Jan 18 13:55:15 EST 1995 [metaconfig 3.0 PL48]
 
 cat >/tmp/c1$$ <<EOF
 ARGGGHHHH!!!!!
@@ -89,6 +89,7 @@ if test -f /hp-ux -a -f /bin/ksh; then
                cat <<'EOM'
 (Feeding myself to ksh to avoid nasty sh bug in "here document" expansion.)
 EOM
+               unset ENV
                exec /bin/ksh $0 "$@"
        fi
 else
@@ -109,6 +110,7 @@ extensions=''
 known_extensions=''
 static_ext=''
 useposix=''
+d_bsd=''
 d_eunice=''
 d_xenix=''
 eunicefix=''
@@ -121,6 +123,7 @@ cat=''
 chgrp=''
 chmod=''
 chown=''
+comm=''
 compress=''
 cp=''
 cpio=''
@@ -199,6 +202,7 @@ archlibexp=''
 archname=''
 d_archlib=''
 installarchlib=''
+baserev=''
 bin=''
 binexp=''
 installbin=''
@@ -220,14 +224,13 @@ cpprun=''
 cppstdin=''
 d_access=''
 d_alarm=''
-d_attrib=''
+d_attribut=''
 d_bcmp=''
 d_bcopy=''
 d_bzero=''
 d_casti32=''
 castflags=''
 d_castneg=''
-d_charsprf=''
 d_chown=''
 d_chroot=''
 d_chsize=''
@@ -383,14 +386,18 @@ d_wctomb=''
 dlext=''
 cccdlflags=''
 ccdlflags=''
+d_shrplib=''
 dlsrc=''
 lddlflags=''
+shrpdir=''
 usedl=''
 fpostype=''
 gidtype=''
 groupstype=''
 h_fcntl=''
 h_sysfile=''
+db_hashtype=''
+db_prefixtype=''
 i_db=''
 i_dbm=''
 d_dirnamlen=''
@@ -482,6 +489,7 @@ orderlib=''
 ranlib=''
 package=''
 spackage=''
+patchlevel=''
 prefix=''
 installprivlib=''
 privlib=''
@@ -512,10 +520,124 @@ mips_type=''
 usrinc=''
 defvoidused=''
 voidflags=''
-yacc=''
-yaccflags=''
 CONFIG=''
 
+define='define'
+undef='undef'
+smallmach='pdp11 i8086 z8000 i80286 iAPX286'
+rmlist=''
+
+: We must find out about Eunice early
+eunicefix=':'
+if test -f /etc/unixtovms; then
+       eunicefix=/etc/unixtovms
+fi
+if test -f /etc/unixtovms.exe; then
+       eunicefix=/etc/unixtovms.exe
+fi
+
+: list of known cpp symbols, sorted alphabetically
+al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
+al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
+al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
+al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
+al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
+al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
+al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
+al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
+al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
+al="$al VMS Xenix286"
+al="$al _AIX _AIX32 _AIX370 _AM29000 _COFF _CRAY _CX_UX _EPI"
+al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET"
+al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
+al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
+al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
+al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
+al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
+al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
+al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
+al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
+al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
+al="$al __SVR4_2__ __UMAXV__"
+al="$al ____386BSD____ __alpha __alpha__ __amiga"
+al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
+al="$al __host_mips__"
+al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
+al="$al __hp9000s500 __hp9000s700 __hp9000s800"
+al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
+al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
+al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
+al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
+al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
+al="$al __mc88100 __mc88100__ __mips __mips__"
+al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
+al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
+al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
+al="$al _host_mips _mips _unix"
+al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
+al="$al apollo ardent att386 att3b"
+al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
+al="$al cadmus clipper concurrent convex cray ctix"
+al="$al dmert encore gcos gcx gimpel gould"
+al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
+al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
+al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
+al="$al i186 i286 i386 i486 i8086"
+al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
+al="$al ksr1 linux luna luna88k m68k m88100 m88k"
+al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
+al="$al mc68040 mc68060 mc68k mc68k32 mc700"
+al="$al mc88000 mc88100 merlin mert mips mvs n16"
+al="$al ncl_el ncl_mr"
+al="$al news1500 news1700 news1800 news1900 news3700"
+al="$al news700 news800 news900 ns16000 ns32000"
+al="$al ns32016 ns32332 ns32k nsc32000 os osf"
+al="$al parisc pc532 pdp11 plexus posix pyr"
+al="$al riscix riscos scs sequent sgi sinix sony sony_news"
+al="$al sonyrisc sparc sparclite spectrum stardent stratos"
+al="$al sun sun3 sun386 svr4 sysV68 sysV88"
+al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
+al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
+al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
+al="$al xenix z8000"
+
+gccversion=''
+groupstype=''
+i_whoami=''
+: change the next line if compiling for Xenix/286 on Xenix/386
+xlibpth='/usr/lib/386 /lib/386'
+
+: general looking path for locating libraries
+glibpth="/lib/pa1.1 /usr/lib/large /lib /usr/lib $xlibpth"
+glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
+glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib /usr/shlib"
+
+: Private path used by Configure to find libraries.  Its value
+: is prepended to libpth. This variable takes care of special
+: machines, like the mips.  Usually, it should be empty.
+plibpth=''
+
+: default library list
+libswanted=''
+: full support for void wanted by default
+defvoidused=15
+
+: set useposix=false in your hint file to disable the POSIX extension.
+useposix=true
+: no include file wanted by default
+inclwanted=''
+
+: List of libraries we want.
+libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl'
+libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt"
+libswanted="$libswanted ucb bsd BSD PW x"
+: We want to search /usr/shlib before most other libraries.
+: This is only used by ext/util/extliblist
+glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
+glibpth="/usr/shlib $glibpth"
+: Do not use vfork unless overridden by a hint file.
+usevfork=false
+
 : script used to extract .SH files with variable substitutions
 cat >extract <<'EOS'
 CONFIG=true
@@ -565,7 +687,7 @@ EOS
 : produce awk script to parse command line options
 cat >options.awk <<'EOF'
 BEGIN {
-       optstr = "deEf:hrsSD:U:V";      # getopt-style specification
+       optstr = "dD:eEf:hOrsSU:V";     # getopt-style specification
 
        len = length(optstr);
        for (i = 1; i <= len; i++) {
@@ -622,7 +744,9 @@ alldone=''
 error=''
 silent=''
 extractsh=''
+override=''
 optdef='optdef.sh'
+rm -f $optdef
 
 : option parsing
 while test $# -gt 0; do
@@ -644,6 +768,7 @@ while test $# -gt 0; do
        -r) shift; reuseval=true;;
        -s) shift; silent=true;;
        -E) shift; alldone=exit;;
+       -O) shift; override=true;;
        -S) shift; extractsh=true;;
        -D)
                shift
@@ -652,7 +777,8 @@ while test $# -gt 0; do
                        echo "$me: use '-U symbol=', not '-D symbol='." >&2
                        echo "$me: ignoring -D $1" >&2
                        ;;
-               *=*) echo "$1" >> $optdef;;
+               *=*) echo "$1" | \
+                               sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> $optdef;;
                *) echo "$1='define'" >> $optdef;;
                esac
                shift
@@ -669,7 +795,7 @@ while test $# -gt 0; do
                esac
                shift
                ;;
-       -V) echo "$me generated by metaconfig 3.0 PL35." >&2
+       -V) echo "$me generated by metaconfig 3.0 PL48." >&2
                exit 0;;
        --) break;;
        -*) echo "$me: unknown option $1" >&2; shift; error=true;;
@@ -680,7 +806,7 @@ done
 case "$error" in
 true)
        cat >&2 <<EOM
-Usage: $me [-dehrESV] [-f config.sh] [-D symbol] [-D symbol=value]
+Usage: $me [-dehrEOSV] [-f config.sh] [-D symbol] [-D symbol=value]
                  [-U symbol] [-U symbol=]
   -d : use defaults for all answers.
   -e : go on without questioning past the production of config.sh.
@@ -692,6 +818,7 @@ Usage: $me [-dehrESV] [-f config.sh] [-D symbol] [-D symbol=value]
          -D symbol         symbol gets the value 'define'
          -D symbol=value   symbol gets the value 'value'
   -E : stop at the end of questions, after having produced config.sh.
+  -O : let -D and -U override definitions from loaded configuration file.
   -S : perform variable substitutions on all .SH files (can mix with -f)
   -U : undefine symbol:
          -U symbol    symbol gets the value 'undef'
@@ -707,10 +834,9 @@ case "$silent" in
 true) exec 1>/dev/null;;
 esac
 
-: run the defines and the undefines, if any
+: run the defines and the undefines, if any, but leave the file out there...
 touch $optdef
 . ./$optdef
-rm -f $optdef
 
 case "$extractsh" in
 true)
@@ -723,6 +849,7 @@ true)
        echo "Fetching answers from $config_sh..."
        cd ..
        . $config
+       test "$override" && . ./$optdef
        echo " "
        . ./UU/extract
        rm -rf UU
@@ -739,121 +866,8 @@ echo " "
 : Here we go...
 echo "Beginning of configuration questions for $package."
 
-define='define'
-undef='undef'
-smallmach='pdp11 i8086 z8000 i80286 iAPX286'
-rmlist=''
-
 trap 'echo " "; rm -rf $rmlist; exit 1' 1 2 3 15
 
-: We must find out about Eunice early
-eunicefix=':'
-if test -f /etc/unixtovms; then
-       eunicefix=/etc/unixtovms
-fi
-if test -f /etc/unixtovms.exe; then
-       eunicefix=/etc/unixtovms.exe
-fi
-
-: list of known cpp symbols
-al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CRAY DGUX DOLPHIN DPX2"
-al="$al GO32 HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
-al="$al MIPSEB MIPSEL MSDOS MTXINU 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 SVR3 SVR4"
-al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV"
-al="$al UTEK UTS UTek UnicomPBB UnicomPBD Utek VMS"
-al="$al _AIX _AIX32 _AM29000 _COFF _CRAY _EPI _IBMR2"
-al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
-al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _R3000"
-al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
-al="$al _SYSTYPE_SYSV _SYSV3 _UNICOS"
-al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
-al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
-al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
-al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
-al="$al __Next__ __OSF1__ __PARAGON__ __PWB __STDC__"
-al="$al ____386BSD____ __alpha __alpha__ __amiga"
-al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
-al="$al __host_mips__"
-al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
-al="$al __hp9000s500 __hp9000s700 __hp9000s800"
-al="$al __hppa __hpux __i286 __i286__ __i386 __i386__"
-al="$al __i486 __i486__ __i860 __i860__"
-al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
-al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
-al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
-al="$al __mc88100 __mc88100__ __mips __mips__"
-al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
-al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
-al="$al __unix __unix__ __vax __vax__"
-al="$al _host_mips _mips _unix"
-al="$al a29k aegis alliant am29000 amiga ansi"
-al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bull"
-al="$al convex cray ctix encore gcos gimpel"
-al="$al hcx host_mips hp200 hp300 hp700 hp800"
-al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
-al="$al hp9000s700 hp9000s800 hp9k8 hpux"
-al="$al i186 i286 i386 i486 i8086"
-al="$al i80960 i860 iAPX286 ibm interdata is68k"
-al="$al linux luna luna88k m68k m88100 m88k"
-al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
-al="$al mc68040 mc68060 mc68k mc68k32 mc700"
-al="$al mc88000 mc88100 merlin mert mips mvs n16"
-al="$al ncl_el ncl_mr"
-al="$al news1500 news1700 news1800 news1900 news3700"
-al="$al news700 news800 news900 ns16000 ns32000"
-al="$al ns32016 ns32332 ns32k nsc32000 os osf"
-al="$al parisc pc532 pdp11 plexus posix pyr"
-al="$al riscix riscos sequent sgi sinix sony sony_news"
-al="$al sonyrisc sparc sparclite spectrum stratos"
-al="$al sun sun3 sun386 svr4 sysV68 sysV88"
-al="$al tower tower32 tower32_200 tower32_600 tower32_700"
-al="$al tower32_800 tower32_850 tss u3b u3b2 u3b20 u3b200"
-al="$al u3b5 ultrix unix unixpc unos vax venix vms"
-al="$al xenix z8000"
-
-i_whoami=''
-: change the next line if compiling for Xenix/286 on Xenix/386
-xlibpth='/usr/lib/386 /lib/386'
-
-: general looking path for locating libraries
-glibpth="/lib/pa1.1 /usr/lib/large /lib /usr/lib $xlibpth"
-glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
-glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib /usr/shlib"
-
-: Private path used by Configure to find libraries.  Its value
-: is prepended to libpth. This variable takes care of special
-: machines, like the mips.  Usually, it should be empty.
-plibpth=''
-
-: full support for void wanted by default
-defvoidused=15
-
-: set useposix=false in your hint file to disable the POSIX extension.
-useposix=true
-gccversion=''
-: no include file wanted by default
-inclwanted=''
-
-groupstype=''
-: default library list
-libswanted=''
-: List of libraries we want.
-libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl'
-libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt"
-libswanted="$libswanted ucb bsd BSD PW x"
-: We want to search /usr/shlib before most other libraries.
-: This is only used by ext/util/extliblist
-glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
-glibpth="/usr/shlib $glibpth"
-: Do not use vfork unless overridden by a hint file.
-usevfork=false
-: We can look for titanos too.
-al="$al ardent titan"
-
 : Some greps do not return status, grrr.
 echo "grimblepritz" >grimble
 if grep blurfldyick grimble >/dev/null 2>&1 ; then
@@ -984,6 +998,21 @@ while expr "X\$ans" : "X!" >/dev/null; do
        case  "\$answ" in
        "\$ans")
                case "\$ans" in
+               \\&*)
+                       set x \`expr "X\$ans" : "X&\(.*\)\$"\`
+                       shift
+                       case "\$1" in
+                       -d)
+                               fastread=yes
+                               echo "(OK, I'll run with -d after this question.)"
+                               ;;
+                       -*)
+                               echo "*** Sorry, \$1 not supported yet."
+                               ;;
+                       esac
+                       $myecho
+                       ans=!
+                       ;;
                "!")
                        sh 1>&4
                        echo " "
@@ -1083,6 +1112,8 @@ and you will be prompted again.
 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
 the questions and use the computed defaults (or the previous answers if there
 was already a config.sh file). Type 'Configure -h' for a list of options.
+You may also start interactively and then answer '& -d' at any prompt to turn
+on the non-interactive behaviour for the remaining of the execution.
 
 EOH
        . ./myread
@@ -1116,14 +1147,14 @@ fi
 : see if sh knows # comments
 echo " "
 echo "Checking your sh to see if it knows about # comments..." >&4
-if sh -c '#' >/dev/null 2>&1 ; then
+if `sh -c '#' >/dev/null 2>&1`; then
        echo "Your sh handles # comments correctly."
        shsharp=true
        spitshell=cat
        echo " "
        echo "Okay, let's see if #! works on this system..."
        xcat=/bin/cat
-       test -r $xcat || xcat=/usr/bin/cat
+       test -f $xcat || xcat=/usr/bin/cat
        echo "#!$xcat" >try
        $eunicefix try
        chmod +x try
@@ -1203,7 +1234,7 @@ for dir in \$*; do
        ;;
        *)
        for thisthing in \$dir/\$thing; do
-               : Just loop through to pick last element
+               : just loop through to pick last item
        done
        if test -f \$thisthing; then
                echo \$thisthing
@@ -1224,6 +1255,7 @@ $eunicefix loc
 loclist="
 awk
 cat
+comm
 cp
 echo
 expr
@@ -1241,7 +1273,6 @@ uniq
 "
 trylist="
 Mcc
-bison
 byacc
 cpp
 csh
@@ -1296,7 +1327,7 @@ test)
        echo "Hopefully test is built into your sh."
        ;;
 *)
-       if sh -c "PATH= test true" >/dev/null 2>&1; then
+       if `sh -c "PATH= test true" >/dev/null 2>&1`; then
                echo "Using the test built into your sh."
                test=test
                _test=test
@@ -1346,14 +1377,42 @@ else
 fi
 $rm -f blurfl sym
 
+: see whether [:lower:] and [:upper:] are supported character classes
+echo " "
+up='[A-Z]'
+low='[a-z]'
+case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
+ABYZ)
+       echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
+       up='[:upper:]'
+       low='[:lower:]'
+       ;;
+*)
+       echo "Your tr only supports [a-z] and [A-Z] to convert case." >&4
+       ;;
+esac
+: set up the translation script tr, must be called with ./tr of course
+cat >tr <<EOSC
+$startsh
+case "\$1\$2" in
+'[A-Z][a-z]') exec $tr '$up' '$low';;
+'[a-z][A-Z]') exec $tr '$low' '$up';;
+esac
+exec $tr "\$@"
+EOSC
+chmod +x tr
+$eunicefix tr
+
 : Try to determine whether config.sh was made on this system
 case "$config_sh" in
 '')
 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
-       tr '[A-Z]' '[a-z]' | tr '\012' ' '`
+       ./tr '[A-Z]' '[a-z]' | tr '\012' ' '`
 dflt=n
-if test -f ../config.sh; then
+if test "$fastread" = yes; then
+       dflt=y
+elif test -f ../config.sh; then
        oldmyuname=''
        if $contains myuname= ../config.sh >/dev/null 2>&1; then
                eval "old`grep myuname= ../config.sh`"
@@ -1374,12 +1433,13 @@ if test -f config.sh; then
        case "$ans" in
        n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
        *)  echo "Fetching default answers from your old config.sh file..." >&4
-               tmp="$n"
-               tans="$c"
+               tmp_n="$n"
+               tmp_c="$c"
                . ./config.sh
+               test "$override" && . UU/$optdef
                cp config.sh UU
-               n="$tmp"
-               c="$tans"
+               n="$tmp_n"
+               c="$tmp_c"
                hint=previous
                ;;
        esac
@@ -1401,7 +1461,8 @@ EOM
        $test -f /dnix && osname=dnix
        $test -f /unicos && osname=unicos && osvers=`$uname -r`
        $test -f /bin/mips && /bin/mips && osname=mips
-       $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
+       $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
+               $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
        $test -d /usr/apollo/bin && osname=apollo
        $test -f /etc/saf/_sactab && osname=svr4
        $test -d /usr/include/minix && osname=minix
@@ -1419,17 +1480,18 @@ EOM
                [23]100) osname=mips ;;
                next*) osname=next ;;
                news*) osname=news ;;
-               i386*) if $test -f /etc/kconfig; then
-                           osname=isc
+               i386*)
+                       if $test -f /etc/kconfig; then
+                               osname=isc
                                if test "$lns" = "ln -s"; then
                                        osvers=4
                                elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
                                        osvers=3
                                elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
                                        osvers=2
-                           fi
-                      fi
-                      ;;
+                               fi
+                       fi
+                       ;;
                esac
 
                case "$1" in
@@ -1460,12 +1522,14 @@ EOM
                        *.08.*) osvers=9 ;;
                        *.09.*) osvers=9 ;;
                        *.10.*) osvers=10 ;;
+                       *)      osvers="$3" ;;
                        esac
                        ;;
                irix) osname=irix
                        case "$3" in
                        4*) osvers=4 ;;
                        5*) osvers=5 ;;
+                       *)      osvers="$3" ;;
                        esac
                        ;;
                linux) osname=linux
@@ -1475,8 +1539,8 @@ EOM
                        esac
                        ;;
                netbsd*) osname=netbsd 
-                               osvers="$3"
-                               ;;
+                       osvers="$3"
+                       ;;
                bsd386) osname=bsd386
                        osvers=`$uname -r`
                        ;;
@@ -1484,6 +1548,7 @@ EOM
                solaris) osname=solaris
                        case "$3" in
                        5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
+                       *)      osvers="$3" ;;
                        esac
                        ;;
                sunos) osname=sunos
@@ -1499,27 +1564,22 @@ EOM
                        2*) osvers=2 ;;
                        3*) osvers=3 ;;
                        4*) osvers=4 ;;
+                       *)      osvers="$3" ;;
                        esac
                        ;;
                ultrix) osname=ultrix
-                       case "$3" in
-                       1*) osvers=1 ;;
-                       2*) osvers=2 ;;
-                       3*) osvers=3 ;;
-                       4*) osvers=4 ;;
-                       esac
+                       osvers="$3"
                        ;;
                osf1)   case "$5" in
                                alpha)  osname=dec_osf
                                        case "$3" in
-                       [vt]1\.*) osvers=1 ;;
-                        [vt]2\.*) osvers=2 ;;
-                        [vt]3\.*) osvers=3 ;;
+                                               [vt]1\.*) osvers=1 ;;
+                                               [vt]2\.*) osvers=2 ;;
+                                               [vt]3\.*) osvers=3 ;;
                                        esac
-                    ;;
-                       hp*)    osname=hp_osf1  ;;      # TR
-                       mips)   osname=mips_osf1 ;;     # TR
-                       # TR =  Technology Releases: unsupported
+                                       ;;
+                       hp*)    osname=hp_osf1  ;;
+                       mips)   osname=mips_osf1 ;;
                        esac
                        ;;
                uts) osname=uts 
@@ -1541,9 +1601,9 @@ EOM
                                        : Check for ESIX
                                        if test -f /stand/boot ; then
                                                eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
-                                               if test -n $INITPROG -a -f $INITPROG; then
-                                                       isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
-                                                       if test -n $isesix; then
+                                               if test -n "$INITPROG" -a -f "$INITPROG"; then
+                       isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
+                                                       if test -n "$isesix"; then
                                                                osname=esix4
                                                        fi
                                                fi
@@ -1582,7 +1642,7 @@ EOM
                esac
        else
                if test -f /vmunix -a -f news_os.sh; then
-                       (what /vmunix | tr '[A-Z]' '[a-z]') > ../UU/kernel.what 2>&1
+                       (what /vmunix | ../UU/tr '[A-Z]' '[a-z]') > ../UU/kernel.what 2>&1
                        if $contains news-os ../UU/kernel.what >/dev/null 2>&1; then
                                osname=news_os
                        fi
@@ -1594,12 +1654,12 @@ EOM
        : specified already.
        case "$hintfile" in
        ''|' ')
-               file=`echo "${osname}_${osvers}" | sed -e 's@\.@_@g' -e 's@_$@@'`
+               file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
                : Also try without trailing minor version numbers.
-               xfile=`echo $file | sed -e 's@_[^_]*$@@'`
-               xxfile=`echo $xfile | sed -e 's@_[^_]*$@@'`
-               xxxfile=`echo $xxfile | sed -e 's@_[^_]*$@@'`
-               xxxxfile=`echo $xxxfile | sed -e 's@_[^_]*$@@'`
+               xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
+               xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
+               xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
+               xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
                case "$file" in
                '') dflt=none ;;
                *)  case "$osvers" in
@@ -1626,7 +1686,7 @@ EOM
                esac
                ;;
        *)
-               dflt=`echo $hintfile | sed 's/\.sh$//'`
+               dflt=`echo $hintfile | $sed 's/\.sh$//'`
                ;;
        esac
                        
@@ -1679,15 +1739,16 @@ cd UU
 *)
        echo " "
        echo "Fetching default answers from $config_sh..." >&4
-       tmp="$n"
-       tans="$c"
+       tmp_n="$n"
+       tmp_c="$c"
        cd ..
        cp $config_sh config.sh 2>/dev/null
        . ./config.sh
        cd UU
+       test "$override" && . ./$optdef
        cp ../config.sh .
-       n="$tmp"
-       c="$tans"
+       n="$tmp_n"
+       c="$tmp_c"
        hint=previous
        ;;
 esac
@@ -1700,15 +1761,16 @@ done
 cat << EOM
 
 Configure uses the operating system name and version to set some defaults.
-Say "none" to leave it blank.
+The default value is probably right if the name rings a bell. Otherwise,
+since spelling matters for me, either accept the default or answer "none"
+to leave it blank.
 
 EOM
-
 case "$osname" in
        ''|' ')
                case "$hintfile" in
                ''|' '|none) dflt=none ;;
-               *)  dflt=`echo $hintfile | sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
+               *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
                esac
                ;;
        *) dflt="$osname" ;;
@@ -1716,8 +1778,8 @@ esac
 rp="Operating system name?"
 . ./myread
 case "$ans" in
-    none)  osname='' ;;
-    *) osname="$ans" ;;
+none)  osname='' ;;
+*) osname=`echo "$ans" | $sed -e 's/[  ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
 esac
 : who configured the system
 cf_time=`$date 2>&1`
@@ -1898,6 +1960,7 @@ echo exit 1 >osf1
 echo exit 1 >eunice
 echo exit 1 >xenix
 echo exit 1 >venix
+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
@@ -1919,6 +1982,7 @@ elif test `echo abc | tr a-z A-Z` = Abc ; then
        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..."
@@ -1956,7 +2020,7 @@ if test -f /venix; then
        echo exit 0 >venix
 else
        echo " "
-       if xenix; then
+       if ./xenix; then
                : null
        else
                echo "Nor is it Venix..."
@@ -1968,7 +2032,7 @@ $rm -f foo
 
 : see if we need a special compiler
 echo " "
-if usg; then
+if ./usg; then
        case "$cc" in
        '') case "$Mcc" in
                /*) dflt='Mcc';;
@@ -2008,18 +2072,19 @@ else
        . ./myread
        cc="$ans"
 fi
-echo "Checking if you are using GNU cc ..." >&4
+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__);
+       printf("%s\n", __VERSION__);
 #else
-printf("%s\n", "1");
+       printf("%s\n", "1");
 #endif
 #endif
-return 0;
+       exit(0);
 }
 EOM
 if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
@@ -2029,7 +2094,7 @@ if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
        *)  echo "You are using GNU cc $gccversion." ;;
        esac
 else
-       echo "I can't compile the test program.  I'll assume it's not GNU cc."
+       echo "I can't compile the test program -- Assuming it isn't GNU cc."
 fi
 $rm -f gccvers*
 case "$gccversion" in
@@ -2057,9 +2122,6 @@ rp="Do you expect to run these scripts and binaries on multiple machines?"
 . ./myread
 case "$ans" in
        y*) d_portable="$define"
-       for file in $loclist $trylist; do
-               eval $file="\$file"
-       done
        ;;
        *)  d_portable="$undef" ;;
 esac
@@ -2117,6 +2179,13 @@ orig_rp="$rp"
 orig_dflt="$dflt"
 
 case "$fn" in
+*\(*)
+       expr $fn : '.*(\(.*\)).*' | tr ',' '\012' >getfile.ok
+       fn=`echo $fn | sed 's/(.*)//'`
+       ;;
+esac
+
+case "$fn" in
 *:*)
        loc_file=`expr $fn : '.*:\(.*\)'`
        fn=`expr $fn : '\(.*\):.*'`
@@ -2171,6 +2240,13 @@ while test "$type"; do
        true) rp="$rp (~name ok)";;
        esac
        . UU/myread
+       if test -f UU/getfile.ok && \
+               $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
+       then
+               value="$ans"
+               ansexp="$ans"
+               break
+       fi
        case "$ans" in
        none)
                value=''
@@ -2188,7 +2264,7 @@ while test "$type"; do
                        case $? in
                        0)
                                if test "$ans" != "$value"; then
-                                       echo "(That is $value on this particular system.)"
+                                       echo "(That expands to $value on this system.)"
                                fi
                                ;;
                        *) value="$ans";;
@@ -2290,6 +2366,7 @@ cd UU
 ans="$value"
 rp="$orig_rp"
 dflt="$orig_dflt"
+rm -f getfile.ok
 EOSC
 
 : What should the include directory be ?
@@ -2631,7 +2708,7 @@ esac
 
 : flags used in final linking phase
 case "$ldflags" in
-'') if venix; then
+'') if ./venix; then
                dflt='-i -z'
        else
                dflt=''
@@ -2656,7 +2733,7 @@ rmlist="$rmlist pdp11"
 
 : Set private lib path
 case "$plibpth" in
-'') if mips; then
+'') if ./mips; then
                plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
        fi;;
 esac
@@ -2711,10 +2788,12 @@ case "$so" in
        ;;
 *) dflt="$so";;
 esac
-$cat << EOM
+$cat <<EOM
 
 On some systems, shared libraries may be available.  Answer 'none' if
-you want to suppress searching of shared libraries.
+you want to suppress searching of shared libraries for the remaining
+of this configuration.
+
 EOM
 rp='What is the file extension used for shared libraries?'
 . ./myread
@@ -2870,7 +2949,7 @@ case "$libs" in
                : Handle C library specially below.
                ;;
        -l*)
-               thislib=`echo X$thislib | $sed -e 's/^X//' -e 's/^-l//'`
+               thislib=`echo $thislib | $sed -e 's/^-l//'`
                if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
                        :
                elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
@@ -2986,6 +3065,7 @@ echo " "
 $sed 's/^/     /' libnames >&4
 echo " "
 $echo $n "This may take a while...$c" >&4
+
 nm $nm_opt $* 2>/dev/null >libc.tmp
 $echo $n ".$c"
 $grep fprintf libc.tmp > libc.ptf
@@ -3140,10 +3220,10 @@ yes)
        case "$tres" in
        true)
                echo "$sym() found." >&4;
-               case "$was" in $undef) . whoa; esac; eval "$var=\$td";;
+               case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
        *)
                echo "$sym() NOT found." >&4;
-               case "$was" in $define) . whoa; esac; eval "$var=\$tu";;
+               case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
        esac;;
 *)
        case "$was" in
@@ -3158,6 +3238,7 @@ eval $inlibc
 
 case "$d_gconvert" in
 $define)
+       echo "We'll use it to convert floats into a string then." >&4
        d_Gconvert="gconvert((x),(n),(t),(b))"
        ;;
 *)
@@ -3168,24 +3249,25 @@ $define)
        case "$d_gcvt" in
        $define) 
                : Test whether gcvt drops a trailing decimal point
-               cat >try.c <<'EOP'
+               $cat >try.c <<'EOP'
 main() { 
-char buf[64]; 
-gcvt(1.0, 8, buf); 
-if (buf[0] != '1' || buf[1] != '\0')
-    return 1;
-gcvt(0.0, 8, buf); 
-if (buf[0] != '0' || buf[1] != '\0')
-    return 1;
-gcvt(-1.0, 8, buf); 
-if (buf[0] != '-' || buf[1] != '1' || buf[2] != '\0')
-    return 1;
-return 0;
+       char buf[64]; 
+       gcvt(1.0, 8, buf); 
+       if (buf[0] != '1' || buf[1] != '\0')
+               exit(1);
+       gcvt(0.0, 8, buf); 
+       if (buf[0] != '0' || buf[1] != '\0')
+               exit(1);
+       gcvt(-1.0, 8, buf); 
+       if (buf[0] != '-' || buf[1] != '1' || buf[2] != '\0')
+               exit(1);
+       exit(0);
 }
 EOP
                if $cc $ccflags $ldflags -o try try.c $libs > /dev/null 2>&1; then
                        if ./try; then
                                echo "Good, your gcvt() drops a trailing decimal point."
+                               echo "We'll use it to convert floats into a string." >&4
                                d_Gconvert="gcvt((x),(n),(b))"
                        else
                                echo "But your gcvt() keeps a trailing decimal point".
@@ -3200,7 +3282,7 @@ EOP
        esac
        case "$d_Gconvert" in
        '')
-               echo "I'll use sprintf instead." >&4
+               echo "I'll use sprintf instead to convert floats into a string." >&4
                d_Gconvert='sprintf((b),"%.*g",(n),(x))'
                ;;
        esac
@@ -3396,20 +3478,29 @@ fi
 : determine where public architecture dependent libraries go
 case "$archname" in
 '')    tpath=`echo $PATH | sed -e 's/:/ /g'`
-       xxx=`./loc arch blurfl $tpath`
-       if test -f "$xxx"; then
+       if xxx=`./loc arch blurfl $tpath`; test -f "$xxx"; then
                tarchname=`arch`
-               archname="${tarchname}-${osname}"
+               archname="${tarchname}-$osname"
+       elif xxx=`./loc uname blurfl $tpath`; test -f "$xxx" ; then
+               if uname -m > tmparch 2>&1 ; then
+                       tarchname=`cat tmparch`
+                       archname="${tarchname}-$osname"
+               fi
+               rm -f tmparch
        else
                archname="$osname"
        fi
        ;;
 esac
-case "$privlib" in
-'') dflt=`./loc . "." $prefix/lib /usr/local/lib /usr/lib /lib`;;
-*)  dflt="$privlib/$archname";;
+case "$archlib" in
+'')
+       case "$privlib" in
+       '') dflt=`./loc . "." $prefix/lib /usr/local/lib /usr/lib /lib`;;
+       *)  dflt="$privlib/$archname";;
+       esac
+       ;;
+*) dflt="$archlib";;
 esac
-fn=d~
 cat <<EOM
 
 $package contains architecture-dependent library files.  If you are
@@ -3418,6 +3509,7 @@ 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"
@@ -3448,34 +3540,33 @@ else
        d_archlib="$define"
 fi
 
-
 : function used to set $1 to $val
 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
 case "$val$was" in
-$define$undef) . whoa; eval "$var=\$td";;
-$undef$define) . whoa; eval "$var=\$tu";;
+$define$undef) . ./whoa; eval "$var=\$td";;
+$undef$define) . ./whoa; eval "$var=\$tu";;
 *) eval "$var=$val";;
 esac'
 
-: Look for GNUC style attribute checking
+: Look for GNU-cc style attribute checking
 echo " "
 echo "Checking whether your compiler can handle __attribute__ ..." >&4
 $cat >attrib.c <<'EOCP'
-void   croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
+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__. ."
+               echo "Your C compiler doesn't fully support __attribute__."
                val="$undef"
        else
-               echo "Your C compiler supports __attribute__. ."
+               echo "Your C compiler supports __attribute__."
                val="$define"
        fi
 else
-       echo "Your C compiler doesn't seem to understand __attribute__. ."
+       echo "Your C compiler doesn't seem to understand __attribute__ at all."
        val="$undef"
 fi
-set d_attrib
+set d_attribut
 eval $setvar
 $rm -f attrib*
 
@@ -3507,7 +3598,7 @@ main()
        exit(0);
 }
 EOP
-       if $cc $ccflags -o set $ldflags set.c $libs >/dev/null 2>&1; then
+       if $cc $ccflags -o set set.c $ldflags $libs >/dev/null 2>&1; then
                ./set 2>/dev/null
                case $? in
                0) echo "You have to use setpgrp() instead of setpgrp(pid, pgrp)." >&4
@@ -3516,7 +3607,7 @@ EOP
                        val="$define";;
                esac
        else
-               if usg; then
+               if ./usg; then
                        xxx="USG one, i.e. you use setpgrp()."
                        val="$undef"
                else
@@ -3564,19 +3655,57 @@ rp="What is the size of an integer (in bytes)?"
 intsize="$ans"
 $rm -f try.c try
 
-: check for ability to cast large floats to 32-bit ints.
+: see if signal is declared as pointer to function returning int or void
 echo " "
-echo 'Checking whether your C compiler can cast large floats to int32.' >&4
-if $test "$intsize" -eq 4; then
-       xxx=int
+xxx=`./findhdr signal.h`
+$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
+if $contains 'int.*\*[         ]*signal' $$.tmp >/dev/null 2>&1 ; then
+       echo "You have int (*signal())() instead of void." >&4
+       val="$undef"
+elif $contains 'void.*\*[      ]*signal' $$.tmp >/dev/null 2>&1 ; then
+       echo "You have void (*signal())() instead of int." >&4
+       val="$define"
+elif $contains 'extern[        ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
+       echo "You have int (*signal())() instead of void." >&4
+       val="$undef"
 else
-       xxx=long
-fi
-$cat >try.c <<EOCP
-#include <sys/types.h>
-#include <signal.h>
-blech() { exit(3); }
-main()
+       case "$d_voidsig" in
+       '')
+       echo "I can't determine whether signal handler returns void or int..." >&4
+               dflt=void
+               rp="What type does your signal handler return?"
+               . ./myread
+               case "$ans" in
+               v*) val="$define";;
+               *) val="$undef";;
+               esac;;
+       "$define")
+               echo "As you already told me, signal handler returns void." >&4;;
+       *)
+               echo "As you already told me, signal handler returns int." >&4;;
+       esac
+fi
+set d_voidsig
+eval $setvar
+case "$d_voidsig" in
+"$define") signal_t="void";;
+*) signal_t="int";;
+esac
+$rm -f $$.tmp
+
+: check for ability to cast large floats to 32-bit ints.
+echo " "
+echo 'Checking whether your C compiler can cast large floats to int32.' >&4
+if $test "$intsize" -eq 4; then
+       xxx=int
+else
+       xxx=long
+fi
+$cat >try.c <<EOCP
+#include <sys/types.h>
+#include <signal.h>
+$signal_t blech() { exit(3); }
+main()
 {
        $xxx i32;
        double f;
@@ -3614,9 +3743,10 @@ $rm -f try try.*
 : check for ability to cast negative floats to unsigned
 echo " "
 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
-$cat >try.c <<'EOCP'
+$cat >try.c <<EOCP
+#include <sys/types.h>
 #include <signal.h>
-blech() { exit(3); }
+$signal_t blech() { exit(3); }
 main()
 {
        double f = -123;
@@ -3659,6 +3789,7 @@ if $cc -o try $ccflags try.c >/dev/null 2>&1; then
        ./try
        castflags=$?
 else
+       echo "(I can't seem to compile the test program--assuming it can't)"
        castflags=3
 fi
 case "$castflags" in
@@ -3673,27 +3804,6 @@ set d_castneg
 eval $setvar
 $rm -f try.*
 
-: see if sprintf is declared as int or pointer to char
-echo " "
-$cat >ucbsprf.c <<'EOF'
-main()
-{
-       int sprintf();
-       char buf[10];
-       exit((unsigned long)sprintf(buf,"%s","foo") > 10L);
-}
-EOF
-if $cc ucbsprf.c -o ucbsprf >/dev/null 2>&1 && ./ucbsprf; then
-       echo "Your sprintf() returns (int)." >&4
-       val="$undef"
-else
-       echo "Your sprintf() returns (char*)." >&4
-       val="$define"
-fi
-set d_charsprf
-eval $setvar
-$rm -f ucbsprf*
-
 : see if vprintf exists
 echo " "
 if set vprintf val -f d_vprintf; eval $csym; $val; then
@@ -3822,10 +3932,10 @@ while $test "$cont"; do
        var=$2; eval "was=\$$2";
        if $test "$xxx" && $test -r "$xxx";
        then eval $xxf;
-               eval "case \"\$$var\" in $undef) . whoa; esac"; eval "$var=\$td";
+               eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
                cont="";
        else eval $xxnf;
-               eval "case \"\$$var\" in $define) . whoa; esac"; eval "$var=\$tu"; fi;
+               eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
        set $yyy; shift; shift; yyy=$@;
        case $# in 0) cont="";;
        2) xxf="echo \"but I found <\$1> $instead.\" >&4";
@@ -3836,7 +3946,7 @@ while $test "$cont"; do
 done;
 while $test "$yyy";
 do set $yyy; var=$2; eval "was=\$$2";
-       eval "case \"\$$var\" in $define) . whoa; esac"; eval "$var=\$tu";
+       eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
        set $yyy; shift; shift; yyy=$@;
 done'
 
@@ -3935,7 +4045,8 @@ $rm -f try.c
 
 : see if the directory entry stores field length
 echo " "
-if $contains 'd_namlen' $xinc >/dev/null 2>&1; then
+$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
@@ -3944,6 +4055,7 @@ else
 fi
 set d_dirnamlen
 eval $setvar
+$rm -f try.c
 
 : see if dlerror exists
 set dlerror d_dlerror
@@ -3972,14 +4084,14 @@ $undef|n|false)
 *) 
        dflt='n'
        case "$d_dlopen" in
-    define) dflt='y' ;;
-    esac
+           $define) dflt='y' ;;
+       esac
        case "$i_dld" in
-    define) dflt='y' ;;
-    esac
-    : Does a dl_xxx.xs file exist for this operating system
-    $test -f ../$dldir/dl_${osname}.xs && dflt='y'
-    ;;
+           $define) dflt='y' ;;
+       esac
+       : Does a dl_xxx.xs file exist for this operating system
+       $test -f ../$dldir/dl_${osname}.xs && dflt='y'
+       ;;
 esac
 rp="Do you wish to use dynamic loading?"
 . ./myread
@@ -4018,24 +4130,17 @@ To use no flags, say "none".
 
 EOM
     case "$cccdlflags" in
-    ''|' ') case "$osname" in
-                       hpux)  dflt='+z' ;;
-                       next)  dflt='none' ;;
-                       sunos) 
-                               case "$cc" in
-                               *gcc*)  dflt='-fpic' ;;
-                               *)              dflt='-pic' ;;
-                               esac
-                               ;;
-                       solaris) 
-                               case "$cc" in
-                               *gcc*)  dflt='-fpic' ;;
-                               *)              dflt='-K pic' ;;
-                               esac
-                               ;;
-               *)     dflt='none' ;;
-                       esac
-                       ;;
+    ''|' ') case "$cc" in
+               *gcc*)  dflt='-fpic' ;;
+               *)  case "$osname" in
+                       hpux)   dflt='+z' ;;
+                       next)   dflt='none' ;;
+                       solaris) dflt='-K pic' ;;
+                       sunos)  dflt='-pic' ;;
+                       svr4*|esix*) dflt='-Kpic' ;;
+                       *)      dflt='none' ;;
+                   esac ;;
+           esac ;;
     *) dflt="$cccdlflags" ;;
     esac
     rp="Any special flags to pass to $cc -c to compile shared library modules?"
@@ -4047,11 +4152,11 @@ EOM
 
     cat << 'EOM'
 
-Some systems may require passing special flags to ld to create a shared
-library.  If your ld flags include -L/local/path options to locate libraries
-outside your loader's normal search path, you may need to specify those
--L options here as well.
-To use no flags, say "none".
+Some systems may require passing special flags to ld to create a
+library that can be dynamically loaded.  If your ld flags include
+-L/other/path options to locate libraries outside your loader's normal
+search path, you may need to specify those -L options here as well.  To
+use no flags, say "none".
 
 EOM
     case "$lddlflags" in
@@ -4059,13 +4164,14 @@ EOM
                        hpux)  dflt='-b' ;;
                        next)  dflt='none' ;;
                        solaris) dflt='-G' ;;
-                       sunos) dflt='none' ;;
+                       sunos) dflt='-assert nodefinitions' ;;
+                       svr4*|esix*) dflt="-G $ldflags" ;;
                *)     dflt='none' ;;
                        esac
                        ;;
     *) dflt="$lddlflags" ;;
     esac
-    rp="Any special flags to pass to ld to create a shared library?"
+    rp="Any special flags to pass to ld to create a dynamically loaded library?"
     . ./myread
     case "$ans" in
     none) lddlflags='' ;;
@@ -4080,16 +4186,13 @@ say "none".
 
 EOM
     case "$ccdlflags" in
-    ''|' ')
-               case "$osname" in
-               hpux)  dflt='none' ;;
-               next)  dflt='none' ;;
-               sunos) dflt='none' ;;
-           *)     dflt='none' ;;
-               esac
-               ;;
-    *)  dflt="$ccdlflags"
-           ;;
+    ''|' ') case "$osname" in
+               hpux)   dflt='none' ;;
+               next)   dflt='none' ;;
+               sunos)  dflt='none' ;;
+               *)      dflt='none' ;;
+           esac ;;
+    *)  dflt="$ccdlflags" ;;
     esac
     rp="Any special flags to pass to $cc to use dynamic loading?"
     . ./myread
@@ -4105,6 +4208,50 @@ EOM
     ;;
 esac
 
+val="$undef"
+case "$osname" in
+esix*|svr4*)
+    case "$usedl" in
+    $define)
+       $cat <<EOM
+
+System V Release 4 systems can support dynamic loading
+only if libperl is created as a shared library.
+
+EOM
+       val="$define"
+       ;;
+    esac ;;
+esac
+set d_shrplib; eval $setvar
+case "$d_shrplib" in
+$define)
+    cat <<EOM >&4
+
+Be sure to add the perl source directory to the LD_LIBRARY_PATH
+environment variable before running make:
+    LD_LIBRARY_PATH=`cd ..;pwd`; export LD_LIBRARY_PATH
+or
+    setenv LD_LIBRARY_PATH `cd ..;pwd`
+
+EOM
+;;
+esac
+case "$d_shrplib" in
+$define)
+       case "$shrpdir" in
+       "")     dflt="$archlib/CORE";;
+       *)      dflt="$shrpdir";;
+       esac
+       rp="What directory should we install the shared libperl into?"
+       fn="d~"
+       . ./getfile
+       shrpdir="$ans"
+       ;;
+*)     shrpdir='none'
+       ;;
+esac
+
 : see if dlfcn is available
 set dlfcn.h i_dlfcn
 eval $inhdr
@@ -4210,7 +4357,7 @@ set d_dlsymun
 eval $setvar
 
 : see if setuid scripts can be secure
-cat <<EOM
+$cat <<EOM
 
 Some kernels have a bug that prevents setuid #! scripts from being
 secure.  Some sites have disabled setuid #! scripts because of this.
@@ -4227,8 +4374,8 @@ if $test -d /dev/fd; then
        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"
+               echo "Congratulations, your kernel has secure setuid scripts!" >&4
+               val="$define"
        else
                $cat <<EOM
 If you are not sure if they are secure, I can check but I'll need a
@@ -4248,24 +4395,25 @@ EOM
                        "$undef")
                                echo "Well, the $hint value is *not* secure." >&4
                                dflt=n;;
-                       *)      echo "Well, the $hint value  *is* secure." >&4
+                       *)      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
+               *)
+                       $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
+                       else
                                echo "I don't think setuid scripts are secure." >&4
                                dflt=n
-               fi
+                       fi
                        ;;
                esac
                rp='Does your kernel have *secure* setuid scripts?'
@@ -4285,8 +4433,15 @@ eval $setvar
 $rm -f reflect flect
 
 : now see if they want to do setuid emulation
-cat <<EOM
-
+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
@@ -4295,13 +4450,6 @@ setuid/setgid in a secure fashion.  This emulation will only work if
 setuid scripts have been disabled in your kernel.
 
 EOM
-val="$undef"
-case "$d_suidsafe" in
-"$define")
-       val="$undef"
-       echo "No need to emulate SUID scripts since they are secure here." >& 4
-       ;;
-*)
        case "$d_dosuid" in
        "$define") dflt=y ;;
        *) dflt=n ;;
@@ -5297,8 +5445,8 @@ typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
 case "$inclist" in
 "") inclist="sys/types.h";;
 esac;
-eval "val=\$$var";
-case "$val" in
+eval "varval=\$$var";
+case "$varval" in
 "")
        $rm -f temp.c;
        for inc in $inclist; do
@@ -5311,7 +5459,7 @@ case "$val" in
                eval "$var=$def";
        fi;
        $rm -f temp.?;;
-*) eval "$var=$val";;
+*) eval "$var=$varval";;
 esac'
 
 : see if this is a sys/times.h system
@@ -5417,7 +5565,7 @@ case "$myhostname" in
 *) cont='';;
 esac
 if $test "$cont"; then
-       if xenix; then
+       if ./xenix; then
                echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
                if tans=`cat /etc/systemid 2>&1` ; then
                        myhostname=$tans
@@ -5460,14 +5608,6 @@ fi
 set $myhostname
 myhostname=$1
 
-: translate upper to lower if necessary
-case "$myhostname" in
-*[A-Z]*)
-       echo "(Normalizing case in your host name)"
-       myhostname=`echo $myhostname | tr '[A-Z]' '[a-z]'`
-       ;;
-esac
-
 : verify guess
 if $test "$myhostname" ; then
        dflt=y
@@ -5487,11 +5627,19 @@ while $test "X$myhostname" = X ; do
        myhostname="$ans"
 done
 
+: translate upper to lower if necessary
+case "$myhostname" in
+*[A-Z]*)
+       echo "(Normalizing case in your host name)"
+       myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
+       ;;
+esac
+
 : a little sanity check here
 case "$phostname" in
 '') ;;
 *)
-       case `$phostname | tr '[A-Z]' '[a-z]'` in
+       case `$phostname | ./tr '[A-Z]' '[a-z]'` in
        $myhostname$mydomain|$myhostname) ;;
        *)
                case "$phostname" in
@@ -5512,7 +5660,7 @@ echo " "
 if false; then
        : dummy stub to allow use of elif
 elif set uname val -f d_uname; eval $csym; $val; then
-       if xenix; then
+       if ./xenix; then
                $cat <<'EOM'
 uname() was found, but you're running xenix, and older versions of xenix
 have a broken uname(). If you don't really know whether your xenix is old
@@ -5642,44 +5790,6 @@ esac
 set d_void_closedir
 eval $setvar
 $rm -f closedir*
-: see if signal is declared as pointer to function returning int or void
-echo " "
-xxx=`./findhdr signal.h`
-$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
-if $contains 'int.*\*[         ]*signal' $$.tmp >/dev/null 2>&1 ; then
-       echo "You have int (*signal())() instead of void." >&4
-       val="$undef"
-elif $contains 'void.*\*[      ]*signal' $$.tmp >/dev/null 2>&1 ; then
-       echo "You have void (*signal())() instead of int." >&4
-       val="$define"
-elif $contains 'extern[        ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
-       echo "You have int (*signal())() instead of void." >&4
-       val="$undef"
-else
-       case "$d_voidsig" in
-       '')
-       echo "I can't determine whether signal handler returns void or int..." >&4
-               dflt=void
-               rp="What type does your signal handler return?"
-               . ./myread
-               case "$ans" in
-               v*) val="$define";;
-               *) val="$undef";;
-               esac;;
-       "$define")
-               echo "As you already told me, signal handler returns void." >&4;;
-       *)
-               echo "As you already told me, signal handler returns int." >&4;;
-       esac
-fi
-set d_voidsig
-eval $setvar
-case "$d_voidsig" in
-"$define") signal_t="void";;
-*) signal_t="int";;
-esac
-$rm -f $$.tmp
-
 : check for volatile keyword
 echo " "
 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
@@ -5861,7 +5971,7 @@ $cat >cpp_stuff.c <<'EOCP'
 RCAT(Rei,ser)
 ACAT(Cir,cus)
 EOCP
-$cppstdin $cppflags $cppminus < cpp_stuff.c >cpp_stuff.out 2>&1
+$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
        echo "Oh!  Smells like ANSI's been here."
        echo "We can catify or stringify, separately or together!"
@@ -5878,19 +5988,96 @@ to have to edit the values of CAT[2-5] in config.h...
 EOM
        cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
 fi
+$rm -f cpp_stuff.*
+
+: see if this is a db.h system
+set db.h i_db
+eval $inhdr
+
+case "$i_db" in
+define)
+       : Check the return type needed for hash 
+       echo "Checking return type needed for hash for Berkeley DB ..." >&4
+       cat >try.c <<'EOCP'
+#include <sys/types.h>
+#include <db.h>
+u_int32_t 
+hash_cb (ptr, size)
+const void * ptr ;
+size_t size ;
+{
+}
+HASHINFO info ;
+main()
+{
+    info.hash = hash_cb ;
+}
+EOCP
+       if $cc $ccflags -c try.c >try.out 2>&1 ; then
+               if $contains warning try.out >>/dev/null 2>&1 ; then
+                       db_hashtype='int'
+               else
+                       db_hashtype='u_int32_t'
+               fi
+       else
+               echo "I can't seem to compile the test program." >&4
+               db_hashtype=int
+       fi
+       $rm -f try.[co]
+       echo "Your version of Berkeley DB uses $db_hashtype for hash."
+       ;;
+*)     db_hashtype=int
+       ;;
+esac
+
+case "$i_db" in
+define)
+       : Check the return type needed for prefix 
+       echo "Checking return type needed for prefix for Berkeley DB ..." >&4
+       cat >try.c <<'EOCP'
+#include <sys/types.h>
+#include <db.h>
+size_t 
+prefix_cb (key1, key2)
+const DBT * key1 ;
+const DBT * key2 ;
+{
+}
+BTREEINFO info ;
+main()
+{
+    info.prefix = prefix_cb ;
+}
+EOCP
+       if $cc $ccflags -c try.c  >try.out 2>&1 ; then
+               if $contains warning try.out >>/dev/null 2>&1 ; then
+                       db_prefixtype='int'
+               else
+                       db_prefixtype='size_t'
+               fi
+       else
+               echo "I can't seem to compile the test program." >&4
+               db_prefixtype='int'
+       fi
+       $rm -f try.[co]
+       echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
+       ;;
+*)     db_prefixtype='int'
+       ;;
+esac
 
 : check for void type
 echo " "
+echo "Checking to see how well your C compiler groks the void type..." >&4
+echo " "
 $cat >&4 <<EOM
-Checking to see how well your C compiler groks the void type...
-
   Support flag bits are:
     1: basic void declarations.
     2: arrays of pointers to functions returning void.
     4: operations between pointers to and addresses of void functions.
     8: generic void pointers.
-
 EOM
+echo " "
 case "$voidflags" in
 '')
        $cat >try.c <<'EOCP'
@@ -5968,21 +6155,65 @@ rp="Your void support flags add up to what?"
 voidflags="$ans"
 $rm -f try.* .out
 
-: see if this is a db.h system
-set db.h i_db
-eval $inhdr
-
-: see if we have the old dbm
-set dbm.h i_dbm
+: see if dbm.h is available
+set dbm.h t_dbm
 eval $inhdr
+case "$t_dbm" in
+$define)
+       : see if dbmclose exists
+       set dbmclose d_dbmclose
+       eval $inlibc
+       case "$d_dbmclose" in
+       $undef)
+               t_dbm="$undef"
+               echo "We won't be including <dbm.h>"
+               ;;
+       esac
+       ;;
+esac
+val="$t_dbm"
+set i_dbm
+eval $setvar
 
 : see if ndbm.h is available
-set ndbm.h i_ndbm
+set ndbm.h t_ndbm
 eval $inhdr
+case "$t_ndbm" in
+$define)
+       : see if dbm_open exists
+       set dbm_open d_dbm_open
+       eval $inlibc
+       case "$d_dbm_open" in
+       $undef)
+               t_ndbm="$undef"
+               echo "We won't be including <ndbm.h>"
+               ;;
+       esac
+       ;;
+esac
+val="$t_ndbm"
+set i_ndbm
+eval $setvar
 
 : see if gdbm.h is available
-set gdbm.h i_gdbm
+set gdbm.h t_gdbm
 eval $inhdr
+case "$t_gdbm" in
+$define)
+       : see if gdbm_open exists
+       set gdbm_open d_gdbm_open
+       eval $inlibc
+       case "$d_gdbm_open" in
+       $undef)
+               t_gdbm="$undef"
+               echo "We won't be including <gdbm.h>"
+               ;;
+       esac
+       ;;
+esac
+val="$t_gdbm"
+set i_gdbm
+eval $setvar
 
 echo " "
 echo "Looking for extensions..." >&4
@@ -6179,7 +6410,7 @@ $cat <<EOM
 
 $package has manual pages available in source form.
 EOM
-case "$_nroff" in
+case "$nroff" in
 nroff)
        echo "However, you don't have nroff, so they're probably useless to you."
        case "$mansrc" in
@@ -6252,6 +6483,19 @@ rp="What type is used for file modes?"
 . ./myread
 modetype="$ans"
 
+: set the base revision
+baserev=5.0
+
+: get the patchlevel
+echo " "
+echo "Getting the current patchlevel..." >&4
+if $test -r ../patchlevel.h;then
+       patchlevel=`awk '/PATCHLEVEL/ {print $3}' < ../patchlevel.h`
+else
+       patchlevel=0
+fi
+echo "(You have $package $baserev PL$patchlevel.)"
+
 : Cruising for prototypes
 echo " "
 echo "Checking out function prototypes..." >&4
@@ -6320,9 +6564,7 @@ $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 test -n "$ranlib" ; then
-       orderlib=false
-elif $cc $ccflags $ldflags -o foobar foo.o bar.a $libs > /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
@@ -6334,16 +6576,15 @@ elif ar ts bar.a >/dev/null 2>&1 &&
                orderlib=false
                ranlib="ar ts"
 else
-       if $test -f /usr/bin/ranlib; then
-               ranlib=/usr/bin/ranlib
-       elif $test -f /bin/ranlib; then
-               ranlib=/bin/ranlib
-       elif $test -f /usr/local/bin/ranlib; then
-               ranlib=/usr/local/bin/ranlib
-       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."
+               echo "your system has '$ranlib'; we'll use that."
                orderlib=false
        else
                echo "your system doesn't seem to support random libraries"
@@ -6747,9 +6988,9 @@ fi
 
 : see if time exists
 echo " "
-if set time tval -f d_time; eval $csym; $tval; then
+if set time val -f d_time; eval $csym; $val; then
        echo 'time() found.' >&4
-       tval="$define"
+       val="$define"
        set time_t timetype long stdio.h sys/types.h
        eval $typedef
        dflt="$timetype"
@@ -6759,10 +7000,9 @@ if set time tval -f d_time; eval $csym; $tval; then
        timetype="$ans"
 else
        echo 'time() not found, hope that will do.' >&4
-       tval="$undef"
+       val="$undef"
        timetype='int';
 fi
-val=$tval
 set d_time
 eval $setvar
 
@@ -6785,37 +7025,6 @@ rp="What is the type for user ids returned by getuid()?"
 . ./myread
 uidtype="$ans"
 
-: determine compiler compiler
-case "$yacc" in
-'')
-       dflt=yacc;;
-*)
-       dflt="$yacc";;
-esac
-echo " "
-comp='yacc'
-if $test -f "$byacc"; then
-       dflt="$byacc"
-       comp="byacc or $comp"
-fi
-if $test -f "$bison"; then
-       comp="$comp or bison -y"
-fi
-rp="Which compiler compiler ($comp) shall I use?"
-. ./myread
-yacc="$ans"
-case "$yacc" in
-*bis*)
-       case "$yacc" in
-       *-y*) ;;
-       *)
-               yacc="$yacc -y"
-               echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
-               ;;
-       esac
-       ;;
-esac
-
 : see if this is a sys/file.h system
 val=''
 set sys/file.h val
@@ -6932,6 +7141,7 @@ eval $setvar
 
 : get C preprocessor symbols handy
 echo " "
+$echo $n "Hmm... $c"
 echo $al | $tr ' ' '\012' >Cppsym.know
 $cat <<EOSS >Cppsym
 $startsh
@@ -6978,9 +7188,62 @@ exit \$status
 EOSS
 chmod +x Cppsym
 $eunicefix Cppsym
-echo "Your C preprocessor defines the following symbols:"
-Cppsym -l $al >Cppsym.true
-$cat Cppsym.true
+./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
+
+: now check the C compiler for additional symbols
+$cat >ccsym <<EOS
+$startsh
+$cat >tmp.c <<EOF
+extern int foo;
+EOF
+for i in \`$cc -v -c tmp.c 2>&1\`
+do
+       case "\$i" in
+       -D*) echo "\$i" | $sed 's/^-D//';;
+       -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
+       esac
+done
+$rm -f try.c
+EOS
+chmod +x ccsym
+$eunicefix ccsym
+./ccsym | $sort | $uniq >ccsym.raw
+$awk '/\=/ { print $0; next } { print $0"=1" }' ccsym.raw >ccsym.list
+$awk '{ print $0"=1" }' Cppsym.true >ccsym.true
+$comm -13 ccsym.true ccsym.list >ccsym.own
+$comm -12 ccsym.true ccsym.list >ccsym.com
+$comm -23 ccsym.true ccsym.list >ccsym.cpp
+also=''
+symbols='symbols'
+if $test -z ccsym.raw; then
+       echo "Your C compiler doesn't seem to define any symbol!" >&4
+       echo " "
+       echo "However, your C preprocessor defines the following ones:"
+       $cat Cppsym.true
+else
+       if $test -s ccsym.com; then
+               echo "Your C compiler and pre-processor define these symbols:"
+               $sed -e 's/\(.*\)=.*/\1/' ccsym.com
+               also='also '
+               symbols='ones'
+               $test "$silent" || sleep 1
+       fi
+       if $test -s ccsym.cpp; then
+               $test "$also" && echo " "
+               echo "Your C pre-processor ${also}defines the following $symbols:"
+               $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
+               also='further '
+               $test "$silent" || sleep 1
+       fi
+       if $test -s ccsym.own; then
+               $test "$also" && echo " "
+               echo "Your C compiler ${also}defines the following cpp variables:"
+               $sed -e 's/\(.*\)=1/\1/' ccsym.own
+               $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
+               $test "$silent" || sleep 1
+       fi
+fi
+$rm -f ccsym*
 
 : see if this is a termio system
 val="$undef"
@@ -6994,7 +7257,7 @@ fi
 echo " "
 case "$val3" in
 "$define") echo "You have POSIX termios.h... good!" >&4;;
-*) if Cppsym pyr; then
+*) if ./Cppsym pyr; then
                case "`/bin/universe`" in
                ucb) if $test `./findhdr sgtty.h`; then
                                val2="$define"
@@ -7011,7 +7274,7 @@ case "$val3" in
                                echo "<termio.h> not found--you could have problems." >&4
                        fi;;
                esac
-       elif usg; then
+       elif ./usg; then
                if $test `./findhdr termio.h`; then
                        echo "<termio.h> found." >&4
                        val="$define"
@@ -7210,6 +7473,17 @@ if $test -f config.over; then
        esac
 fi
 
+: in case they want portability, strip down executable paths
+case "$d_portable" in
+"$define")
+       echo " "
+       echo "Stripping down executable paths..." >&4
+       for file in $loclist $trylist; do
+               eval $file="\$file"
+       done
+       ;;
+esac
+
 : create config.sh file
 echo " "
 echo "Creating config.sh..." >&4
@@ -7226,149 +7500,89 @@ $startsh
 # Configured by: $cf_by
 # Target system: $myuname
 
-dynamic_ext='$dynamic_ext'
-extensions='$extensions'
-known_extensions='$known_extensions'
-static_ext='$static_ext'
-useposix='$useposix'
-d_eunice='$d_eunice'
-d_xenix='$d_xenix'
-eunicefix='$eunicefix'
-Mcc='$Mcc'
-awk='$awk'
-bash='$bash'
-bison='$bison'
-byacc='$byacc'
-cat='$cat'
-chgrp='$chgrp'
-chmod='$chmod'
-chown='$chown'
-compress='$compress'
-cp='$cp'
-cpio='$cpio'
-cpp='$cpp'
-csh='$csh'
-date='$date'
-echo='$echo'
-egrep='$egrep'
-emacs='$emacs'
-expr='$expr'
-find='$find'
-flex='$flex'
-gcc='$gcc'
-grep='$grep'
-inews='$inews'
-ksh='$ksh'
-less='$less'
-line='$line'
-lint='$lint'
-ln='$ln'
-lp='$lp'
-lpr='$lpr'
-ls='$ls'
-mail='$mail'
-mailx='$mailx'
-make='$make'
-mkdir='$mkdir'
-more='$more'
-mv='$mv'
-nroff='$nroff'
-perl='$perl'
-pg='$pg'
-pmake='$pmake'
-pr='$pr'
-rm='$rm'
-rmail='$rmail'
-sed='$sed'
-sendmail='$sendmail'
-sh='$sh'
-shar='$shar'
-sleep='$sleep'
-smail='$smail'
-sort='$sort'
-submit='$submit'
-tail='$tail'
-tar='$tar'
-tbl='$tbl'
-test='$test'
-touch='$touch'
-tr='$tr'
-troff='$troff'
-uname='$uname'
-uniq='$uniq'
-uuname='$uuname'
-vi='$vi'
-zcat='$zcat'
-libswanted='$libswanted'
-hint='$hint'
-myuname='$myuname'
-osname='$osname'
-osvers='$osvers'
 Author='$Author'
 Date='$Date'
 Header='$Header'
 Id='$Id'
 Locker='$Locker'
 Log='$Log'
+Mcc='$Mcc'
 RCSfile='$RCSfile'
 Revision='$Revision'
 Source='$Source'
 State='$State'
 afs='$afs'
 alignbytes='$alignbytes'
+aphostname='$aphostname'
 archlib='$archlib'
 archlibexp='$archlibexp'
 archname='$archname'
-d_archlib='$d_archlib'
-installarchlib='$installarchlib'
+awk='$awk'
+baserev='$baserev'
+bash='$bash'
 bin='$bin'
 binexp='$binexp'
-installbin='$installbin'
+bison='$bison'
+byacc='$byacc'
 byteorder='$byteorder'
+c='$c'
+castflags='$castflags'
+cat='$cat'
 cc='$cc'
-gccversion='$gccversion'
+cccdlflags='$cccdlflags'
+ccdlflags='$ccdlflags'
 ccflags='$ccflags'
-cppflags='$cppflags'
-ldflags='$ldflags'
-lkflags='$lkflags'
-optimize='$optimize'
 cf_by='$cf_by'
 cf_time='$cf_time'
+chgrp='$chgrp'
+chmod='$chmod'
+chown='$chown'
+clocktype='$clocktype'
+comm='$comm'
+compress='$compress'
 contains='$contains'
+cp='$cp'
+cpio='$cpio'
+cpp='$cpp'
 cpp_stuff='$cpp_stuff'
+cppflags='$cppflags'
 cpplast='$cpplast'
 cppminus='$cppminus'
 cpprun='$cpprun'
 cppstdin='$cppstdin'
+cryptlib='$cryptlib'
+csh='$csh'
+d_Gconvert='$d_Gconvert'
 d_access='$d_access'
 d_alarm='$d_alarm'
-d_attrib='$d_attrib'
+d_archlib='$d_archlib'
+d_attribut='$d_attribut'
 d_bcmp='$d_bcmp'
 d_bcopy='$d_bcopy'
+d_bsd='$d_bsd'
+d_bsdpgrp='$d_bsdpgrp'
 d_bzero='$d_bzero'
 d_casti32='$d_casti32'
-castflags='$castflags'
 d_castneg='$d_castneg'
-d_charsprf='$d_charsprf'
+d_charvspr='$d_charvspr'
 d_chown='$d_chown'
 d_chroot='$d_chroot'
 d_chsize='$d_chsize'
 d_closedir='$d_closedir'
-d_void_closedir='$d_void_closedir'
 d_const='$d_const'
-cryptlib='$cryptlib'
 d_crypt='$d_crypt'
 d_csh='$d_csh'
 d_cuserid='$d_cuserid'
 d_dbl_dig='$d_dbl_dig'
 d_difftime='$d_difftime'
+d_dirnamlen='$d_dirnamlen'
 d_dlerror='$d_dlerror'
 d_dlopen='$d_dlopen'
 d_dlsymun='$d_dlsymun'
 d_dosuid='$d_dosuid'
-d_suidsafe='$d_suidsafe'
 d_drem='$d_drem'
 d_dup2='$d_dup2'
+d_eunice='$d_eunice'
 d_fchmod='$d_fchmod'
 d_fchown='$d_fchown'
 d_fcntl='$d_fcntl'
@@ -7380,14 +7594,11 @@ d_flexfnam='$d_flexfnam'
 d_flock='$d_flock'
 d_fmod='$d_fmod'
 d_fork='$d_fork'
+d_fpathconf='$d_fpathconf'
 d_fsetpos='$d_fsetpos'
-d_Gconvert='$d_Gconvert'
 d_getgrps='$d_getgrps'
 d_gethent='$d_gethent'
-aphostname='$aphostname'
 d_gethname='$d_gethname'
-d_phostname='$d_phostname'
-d_uname='$d_uname'
 d_getlogin='$d_getlogin'
 d_getpgrp2='$d_getpgrp2'
 d_getpgrp='$d_getpgrp'
@@ -7395,6 +7606,7 @@ d_getppid='$d_getppid'
 d_getprior='$d_getprior'
 d_group='$d_group'
 d_htonl='$d_htonl'
+d_index='$d_index'
 d_isascii='$d_isascii'
 d_killpg='$d_killpg'
 d_link='$d_link'
@@ -7417,23 +7629,30 @@ d_msgctl='$d_msgctl'
 d_msgget='$d_msgget'
 d_msgrcv='$d_msgrcv'
 d_msgsnd='$d_msgsnd'
+d_mymalloc='$d_mymalloc'
 d_nice='$d_nice'
+d_oldsock='$d_oldsock'
 d_open3='$d_open3'
 d_passwd='$d_passwd'
-d_fpathconf='$d_fpathconf'
 d_pathconf='$d_pathconf'
 d_pause='$d_pause'
+d_phostname='$d_phostname'
 d_pipe='$d_pipe'
 d_portable='$d_portable'
+d_pwage='$d_pwage'
+d_pwchange='$d_pwchange'
+d_pwclass='$d_pwclass'
+d_pwcomment='$d_pwcomment'
+d_pwexpire='$d_pwexpire'
+d_pwquota='$d_pwquota'
 d_readdir='$d_readdir'
-d_rewinddir='$d_rewinddir'
-d_seekdir='$d_seekdir'
-d_telldir='$d_telldir'
 d_readlink='$d_readlink'
 d_rename='$d_rename'
+d_rewinddir='$d_rewinddir'
 d_rmdir='$d_rmdir'
 d_safebcpy='$d_safebcpy'
 d_safemcpy='$d_safemcpy'
+d_seekdir='$d_seekdir'
 d_select='$d_select'
 d_sem='$d_sem'
 d_semctl='$d_semctl'
@@ -7445,7 +7664,6 @@ d_setlinebuf='$d_setlinebuf'
 d_setlocale='$d_setlocale'
 d_setpgid='$d_setpgid'
 d_setpgrp2='$d_setpgrp2'
-d_bsdpgrp='$d_bsdpgrp'
 d_setpgrp='$d_setpgrp'
 d_setprior='$d_setprior'
 d_setregid='$d_setregid'
@@ -7458,65 +7676,79 @@ d_setsid='$d_setsid'
 d_shm='$d_shm'
 d_shmat='$d_shmat'
 d_shmatprototype='$d_shmatprototype'
-shmattype='$shmattype'
 d_shmctl='$d_shmctl'
 d_shmdt='$d_shmdt'
 d_shmget='$d_shmget'
-d_oldsock='$d_oldsock'
+d_shrplib='$d_shrplib'
 d_socket='$d_socket'
 d_sockpair='$d_sockpair'
-sockethdr='$sockethdr'
-socketlib='$socketlib'
 d_statblks='$d_statblks'
 d_stdstdio='$d_stdstdio'
-d_index='$d_index'
 d_strchr='$d_strchr'
 d_strcoll='$d_strcoll'
 d_strctcpy='$d_strctcpy'
 d_strerrm='$d_strerrm'
 d_strerror='$d_strerror'
-d_sysernlst='$d_sysernlst'
-d_syserrlst='$d_syserrlst'
 d_strxfrm='$d_strxfrm'
+d_suidsafe='$d_suidsafe'
 d_symlink='$d_symlink'
 d_syscall='$d_syscall'
 d_sysconf='$d_sysconf'
+d_sysernlst='$d_sysernlst'
+d_syserrlst='$d_syserrlst'
 d_system='$d_system'
 d_tcgetpgrp='$d_tcgetpgrp'
 d_tcsetpgrp='$d_tcsetpgrp'
+d_telldir='$d_telldir'
 d_time='$d_time'
-timetype='$timetype'
-clocktype='$clocktype'
 d_times='$d_times'
 d_truncate='$d_truncate'
 d_tzname='$d_tzname'
 d_umask='$d_umask'
+d_uname='$d_uname'
 d_vfork='$d_vfork'
-usevfork='$usevfork'
+d_void_closedir='$d_void_closedir'
 d_voidsig='$d_voidsig'
-signal_t='$signal_t'
+d_voidtty='$d_voidtty'
 d_volatile='$d_volatile'
-d_charvspr='$d_charvspr'
 d_vprintf='$d_vprintf'
 d_wait4='$d_wait4'
 d_waitpid='$d_waitpid'
 d_wcstombs='$d_wcstombs'
 d_wctomb='$d_wctomb'
+d_xenix='$d_xenix'
+date='$date'
+db_hashtype='$db_hashtype'
+db_prefixtype='$db_prefixtype'
+defvoidused='$defvoidused'
+direntrytype='$direntrytype'
 dlext='$dlext'
-cccdlflags='$cccdlflags'
-ccdlflags='$ccdlflags'
 dlsrc='$dlsrc'
-lddlflags='$lddlflags'
-usedl='$usedl'
+dynamic_ext='$dynamic_ext'
+echo='$echo'
+egrep='$egrep'
+emacs='$emacs'
+eunicefix='$eunicefix'
+expr='$expr'
+extensions='$extensions'
+find='$find'
+flex='$flex'
 fpostype='$fpostype'
+gcc='$gcc'
+gccversion='$gccversion'
 gidtype='$gidtype'
+glibpth='$glibpth'
+grep='$grep'
+groupcat='$groupcat'
 groupstype='$groupstype'
 h_fcntl='$h_fcntl'
 h_sysfile='$h_sysfile'
+hint='$hint'
+hostcat='$hostcat'
+huge='$huge'
+i_bsdioctl='$i_bsdioctl'
 i_db='$i_db'
 i_dbm='$i_dbm'
-d_dirnamlen='$d_dirnamlen'
-direntrytype='$direntrytype'
 i_dirent='$i_dirent'
 i_dld='$i_dld'
 i_dlfcn='$i_dlfcn'
@@ -7531,111 +7763,158 @@ i_memory='$i_memory'
 i_ndbm='$i_ndbm'
 i_neterrno='$i_neterrno'
 i_niin='$i_niin'
-i_sysin='$i_sysin'
-d_pwage='$d_pwage'
-d_pwchange='$d_pwchange'
-d_pwclass='$d_pwclass'
-d_pwcomment='$d_pwcomment'
-d_pwexpire='$d_pwexpire'
-d_pwquota='$d_pwquota'
 i_pwd='$i_pwd'
+i_sgtty='$i_sgtty'
+i_stdarg='$i_stdarg'
 i_stddef='$i_stddef'
 i_stdlib='$i_stdlib'
 i_string='$i_string'
-strings='$strings'
 i_sysdir='$i_sysdir'
 i_sysfile='$i_sysfile'
-d_voidtty='$d_voidtty'
-i_bsdioctl='$i_bsdioctl'
 i_sysfilio='$i_sysfilio'
+i_sysin='$i_sysin'
 i_sysioctl='$i_sysioctl'
-i_syssockio='$i_syssockio'
 i_sysndir='$i_sysndir'
 i_sysparam='$i_sysparam'
 i_sysselct='$i_sysselct'
+i_syssockio='$i_syssockio'
+i_systime='$i_systime'
+i_systimek='$i_systimek'
 i_systimes='$i_systimes'
-i_sgtty='$i_sgtty'
 i_termio='$i_termio'
 i_termios='$i_termios'
-i_systime='$i_systime'
-i_systimek='$i_systimek'
 i_time='$i_time'
-timeincl='$timeincl'
 i_unistd='$i_unistd'
 i_utime='$i_utime'
-i_stdarg='$i_stdarg'
 i_varargs='$i_varargs'
 i_varhdr='$i_varhdr'
 i_vfork='$i_vfork'
+incpath='$incpath'
+inews='$inews'
+installarchlib='$installarchlib'
+installbin='$installbin'
+installmansrc='$installmansrc'
+installprivlib='$installprivlib'
+installscript='$installscript'
 intsize='$intsize'
+known_extensions='$known_extensions'
+ksh='$ksh'
+large='$large'
+lddlflags='$lddlflags'
+ldflags='$ldflags'
+less='$less'
 libc='$libc'
-glibpth='$glibpth'
 libpth='$libpth'
-plibpth='$plibpth'
-xlibpth='$xlibpth'
 libs='$libs'
+libswanted='$libswanted'
+line='$line'
+lint='$lint'
+lkflags='$lkflags'
+ln='$ln'
 lns='$lns'
+lp='$lp'
+lpr='$lpr'
+ls='$ls'
 lseektype='$lseektype'
-d_mymalloc='$d_mymalloc'
+mail='$mail'
+mailx='$mailx'
+make='$make'
 mallocobj='$mallocobj'
 mallocsrc='$mallocsrc'
 malloctype='$malloctype'
-usemymalloc='$usemymalloc'
-installmansrc='$installmansrc'
 manext='$manext'
 mansrc='$mansrc'
 mansrcexp='$mansrcexp'
-huge='$huge'
-large='$large'
 medium='$medium'
+mips='$mips'
+mips_type='$mips_type'
+mkdir='$mkdir'
 models='$models'
-small='$small'
-split='$split'
 modetype='$modetype'
+more='$more'
+mv='$mv'
 mydomain='$mydomain'
 myhostname='$myhostname'
-phostname='$phostname'
-c='$c'
+myuname='$myuname'
 n='$n'
-groupcat='$groupcat'
-hostcat='$hostcat'
-passcat='$passcat'
+nm_opt='$nm_opt'
+nroff='$nroff'
+optimize='$optimize'
 orderlib='$orderlib'
-ranlib='$ranlib'
+osname='$osname'
+osvers='$osvers'
 package='$package'
-spackage='$spackage'
+passcat='$passcat'
+patchlevel='$patchlevel'
+perl='$perl'
+pg='$pg'
+phostname='$phostname'
+plibpth='$plibpth'
+pmake='$pmake'
+pr='$pr'
 prefix='$prefix'
-installprivlib='$installprivlib'
 privlib='$privlib'
 privlibexp='$privlibexp'
 prototype='$prototype'
 randbits='$randbits'
-installscript='$installscript'
+ranlib='$ranlib'
+rm='$rm'
+rmail='$rmail'
+runnm='$runnm'
 scriptdir='$scriptdir'
 scriptdirexp='$scriptdirexp'
+sed='$sed'
 selecttype='$selecttype'
+sendmail='$sendmail'
+sh='$sh'
+shar='$shar'
+sharpbang='$sharpbang'
+shmattype='$shmattype'
+shrpdir='$shrpdir'
+shsharp='$shsharp'
 sig_name='$sig_name'
+signal_t='$signal_t'
 sizetype='$sizetype'
+sleep='$sleep'
+smail='$smail'
+small='$small'
 so='$so'
-sharpbang='$sharpbang'
-shsharp='$shsharp'
+sockethdr='$sockethdr'
+socketlib='$socketlib'
+sort='$sort'
+spackage='$spackage'
 spitshell='$spitshell'
+split='$split'
 ssizetype='$ssizetype'
 startsh='$startsh'
+static_ext='$static_ext'
 stdchar='$stdchar'
+strings='$strings'
+submit='$submit'
 sysman='$sysman'
+tail='$tail'
+tar='$tar'
+tbl='$tbl'
+test='$test'
+timeincl='$timeincl'
+timetype='$timetype'
+touch='$touch'
+tr='$tr'
+troff='$troff'
 uidtype='$uidtype'
-nm_opt='$nm_opt'
-runnm='$runnm'
+uname='$uname'
+uniq='$uniq'
+usedl='$usedl'
+usemymalloc='$usemymalloc'
 usenm='$usenm'
-incpath='$incpath'
-mips='$mips'
-mips_type='$mips_type'
+useposix='$useposix'
+usevfork='$usevfork'
 usrinc='$usrinc'
-defvoidused='$defvoidused'
+uuname='$uuname'
+vi='$vi'
 voidflags='$voidflags'
-yacc='$yacc'
-yaccflags='$yaccflags'
+xlibpth='$xlibpth'
+zcat='$zcat'
 EOT
 
 : add special variables
index 735fb41..78c73a0 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -18,7 +18,7 @@ c2ph.SH                       program to translate dbx stabs to perl
 c2ph.doc               documentation for c2ph
 cflags.SH              A script that emits C compilation flags per file
 config.H               Sample config.h
-config_h.SH             Produces config.h
+config_h.SH            Produces config.h
 configpm               Produces lib/Config.pm
 cop.h                  Control operator header
 cv.h                   Code value header
@@ -155,6 +155,7 @@ ext/util/make_ext   Used by Makefile to execute extension Makefiles
 ext/util/mkbootstrap   Turns ext/*/*_BS into bootstrap info
 form.h                 Public declarations for the above
 global.sym             Symbols that need hiding when embedded
+globals.c              File to declare global symbols (for shared library)
 gv.c                   Glob value code
 gv.h                   Glob value header
 h2ph.SH                        A thing to turn C .h files into perl .ph files
@@ -180,6 +181,7 @@ hints/altos486.sh   Hints for named architecture
 hints/apollo.sh                Hints for named architecture
 hints/aux.sh           Hints for named architecture
 hints/bsd386.sh                Hints for named architecture
+hints/convexos.sh      Hints for named architecture
 hints/dec_osf.sh       Hints for named architecture
 hints/dgux.sh          Hints for named architecture
 hints/dnix.sh          Hints for named architecture
@@ -193,6 +195,7 @@ hints/hpux_9.sh             Hints for named architecture
 hints/i386.sh          Hints for named architecture
 hints/irix_4.sh                Hints for named architecture
 hints/irix_5.sh                Hints for named architecture
+hints/irix_6.sh                Hints for named architecture
 hints/isc.sh           Hints for named architecture
 hints/isc_2.sh         Hints for named architecture
 hints/linux.sh         Hints for named architecture
@@ -243,17 +246,17 @@ lib/File/Basename.pm      A module to emulate the basename program
 lib/File/CheckTree.pm  Perl module supporting wholesale file mode validation
 lib/File/Find.pm       Routines to do a find
 lib/FileHandle.pm      FileHandle methods
-lib/Shell.pm           A module to make AUTOLOADEed system() calls
 lib/Getopt/Long.pm     A module to fetch command options (GetOptions)
 lib/Getopt/Std.pm      A module to fetch command options (getopt, getopts)
 lib/I18N/Collate.pm    Routines to do strxfrm-based collation
 lib/IPC/Open2.pm       Open a two-ended pipe
 lib/IPC/Open3.pm       Open a three-ended pipe!
-lib/Math/BigInt.pm     An arbitrary precision integer arithmetic package
 lib/Math/BigFloat.pm   An arbitrary precision floating-point arithmetic package
+lib/Math/BigInt.pm     An arbitrary precision integer arithmetic package
 lib/Math/Complex.pm    A Complex package
 lib/Net/Ping.pm                Ping methods
 lib/Search/Dict.pm     A module to do binary search on dictionaries
+lib/Shell.pm           A module to make AUTOLOADEed system() calls
 lib/Sys/Hostname.pm    Hostname methods
 lib/Sys/Syslog.pm      Perl module supporting syslogging
 lib/Term/Cap.pm                Perl module supporting termcap usage
@@ -507,9 +510,9 @@ util.c                      Utility routines
 util.h                 Public declarations for the above
 vms/config.vms         VMS port
 vms/descrip.mms                VMS port
+vms/gen_shrfls.pl      VMS port
 vms/genconfig.pl       VMS port
 vms/genopt.com         VMS port
-vms/gen_shrfls.pl      VMS port
 vms/makefile.          VMS port
 vms/mms2make.pl                VMS port
 vms/perlshr.c          VMS port
@@ -524,6 +527,7 @@ writemain.SH                Generate perlmain.c from miniperlmain.c+extensions
 x2p/EXTERN.h           Same as above
 x2p/INTERN.h           Same as above
 x2p/Makefile.SH                Precursor to Makefile
+x2p/a2p.c              A byacc'ed a2p.y
 x2p/a2p.h              Global declarations
 x2p/a2p.man            Manual page for awk to perl translator
 x2p/a2p.y              A yacc grammer for awk
diff --git a/MANIFEST.new b/MANIFEST.new
new file mode 100644 (file)
index 0000000..78c73a0
--- /dev/null
@@ -0,0 +1,547 @@
+Artistic               The "Artistic License"
+Changes                        Differences between Perl 4 and Perl 5
+Configure              Portability tool
+Copying                        The GNU General Public License
+Doc/perl5-notes                Samples of new functionality
+EXTERN.h               Included before foreign .h files
+INTERN.h               Included before domestic .h files
+MANIFEST               This list of files
+Makefile.SH            A script that generates Makefile
+README                 The Instructions
+README.vms             Notes about VMS
+Todo                   The Wishlist
+XSUB.h                 Include file for extension subroutines
+autosplit              Splits up autoloader functions
+av.c                   Array value code
+av.h                   Array value header
+c2ph.SH                        program to translate dbx stabs to perl
+c2ph.doc               documentation for c2ph
+cflags.SH              A script that emits C compilation flags per file
+config.H               Sample config.h
+config_h.SH            Produces config.h
+configpm               Produces lib/Config.pm
+cop.h                  Control operator header
+cv.h                   Code value header
+deb.c                  Debugging routines
+doSH                   Script to run all the *.SH files
+doio.c                 I/O operations
+doop.c                 Support code for various operations
+dosish.h               Some defines for MS/DOSish machines
+dump.c                 Debugging output
+eg/ADB                 An adb wrapper to put in your crash dir
+eg/README              Intro to example perl scripts
+eg/changes             A program to list recently changed files
+eg/client              A sample client
+eg/down                        A program to do things to subdirectories
+eg/dus                 A program to do du -s on non-mounted dirs
+eg/findcp              A find wrapper that implements a -cp switch
+eg/findtar             A find wrapper that pumps out a tar file
+eg/g/gcp               A program to do a global rcp
+eg/g/gcp.man           Manual page for gcp
+eg/g/ged               A program to do a global edit
+eg/g/ghosts            A sample /etc/ghosts file
+eg/g/gsh               A program to do a global rsh
+eg/g/gsh.man           Manual page for gsh
+eg/muck                        A program to find missing make dependencies
+eg/muck.man            Manual page for muck
+eg/myrup               A program to find lightly loaded machines
+eg/nih                 Script to insert #! workaround
+eg/relink              A program to change symbolic links
+eg/rename              A program to rename files
+eg/rmfrom              A program to feed doomed filenames to
+eg/scan/scan_df                Scan for filesystem anomalies
+eg/scan/scan_last      Scan for login anomalies
+eg/scan/scan_messages  Scan for console message anomalies
+eg/scan/scan_passwd    Scan for passwd file anomalies
+eg/scan/scan_ps                Scan for process anomalies
+eg/scan/scan_sudo      Scan for sudo anomalies
+eg/scan/scan_suid      Scan for setuid anomalies
+eg/scan/scanner                An anomaly reporter
+eg/server              A sample server
+eg/shmkill             A program to remove unused shared memory
+eg/sysvipc/README      Intro to Sys V IPC examples
+eg/sysvipc/ipcmsg      Example of SYS V IPC message queues
+eg/sysvipc/ipcsem      Example of Sys V IPC semaphores
+eg/sysvipc/ipcshm      Example of Sys V IPC shared memory
+eg/travesty            A program to print travesties of its input text
+eg/unuc                        Un-uppercases an all-uppercase text
+eg/uudecode            A version of uudecode
+eg/van/empty           A program to empty the trashcan
+eg/van/unvanish                A program to undo what vanish does
+eg/van/vanexp          A program to expire vanished files
+eg/van/vanish          A program to put files in a trashcan
+eg/who                 A sample who program
+eg/wrapsuid            A setuid script wrapper generator
+emacs/cperl-mode       An alternate perl-mode
+emacs/emacs19          Notes about emacs 19
+emacs/perl-mode.el     Emacs major mode for perl
+emacs/perldb.el                Emacs debugging
+emacs/perldb.pl                Emacs debugging
+emacs/tedstuff         Some optional patches
+embed.h                        Maps symbols to safer names
+embed_h.sh             Produces embed.h
+ext/DB_File/DB_File.pm         Berkeley DB extension Perl module
+ext/DB_File/DB_File.xs         Berkeley DB extension external subroutines
+ext/DB_File/DB_File_BS         Berkeley DB extension mkbootstrap fodder
+ext/DB_File/Makefile.PL                Berkeley DB extension makefile writer
+ext/DB_File/typemap            Berkeley DB extension interface types
+ext/DynaLoader/DynaLoader.doc  Dynamic Loader specification
+ext/DynaLoader/DynaLoader.pm   Dynamic Loader perl module
+ext/DynaLoader/Makefile.PL     Dynamic Loader makefile writer
+ext/DynaLoader/README          Dynamic Loader notes and intro
+ext/DynaLoader/dl_aix.xs       AIX implementation
+ext/DynaLoader/dl_dld.xs       GNU dld style implementation
+ext/DynaLoader/dl_dlopen.xs    BSD/SunOS4&5 dlopen() style implementation
+ext/DynaLoader/dl_hpux.xs      HP-UX implementation
+ext/DynaLoader/dl_next.xs      Next implementation
+ext/DynaLoader/dl_none.xs      Stub implementation
+ext/DynaLoader/dl_vms.xs       VMS implementation
+ext/DynaLoader/dlutils.c       Dynamic loader utilities for dl_*.xs files
+ext/Fcntl/Fcntl.pm             Fcntl extension Perl module
+ext/Fcntl/Fcntl.xs             Fcntl extension external subroutines
+ext/Fcntl/MANIFEST             Fcntl extension file list
+ext/Fcntl/Makefile.PL          Fcntl extension makefile writer
+ext/GDBM_File/GDBM_File.pm     GDBM extension Perl module
+ext/GDBM_File/GDBM_File.xs     GDBM extension external subroutines
+ext/GDBM_File/Makefile.PL      GDBM extension makefile writer
+ext/GDBM_File/typemap          GDBM extension interface types
+ext/NDBM_File/Makefile.PL      NDBM extension makefile writer
+ext/NDBM_File/NDBM_File.pm     NDBM extension Perl module
+ext/NDBM_File/NDBM_File.xs     NDBM extension external subroutines
+ext/NDBM_File/typemap          NDBM extension interface types
+ext/ODBM_File/Makefile.PL      ODBM extension makefile writer
+ext/ODBM_File/ODBM_File.pm     ODBM extension Perl module
+ext/ODBM_File/ODBM_File.xs     ODBM extension external subroutines
+ext/ODBM_File/typemap          ODBM extension interface types
+ext/POSIX/Makefile.PL          POSIX extension makefile writer
+ext/POSIX/POSIX.pm             POSIX extension Perl module
+ext/POSIX/POSIX.xs             POSIX extension external subroutines
+ext/POSIX/typemap              POSIX extension interface types
+ext/SDBM_File/Makefile.PL      SDBM extension makefile writer
+ext/SDBM_File/SDBM_File.pm     SDBM extension Perl module
+ext/SDBM_File/SDBM_File.xs     SDBM extension external subroutines
+ext/SDBM_File/sdbm/CHANGES             SDBM kit
+ext/SDBM_File/sdbm/COMPARE             SDBM kit
+ext/SDBM_File/sdbm/Makefile.PL         SDBM kit
+ext/SDBM_File/sdbm/README              SDBM kit
+ext/SDBM_File/sdbm/README.too          SDBM kit
+ext/SDBM_File/sdbm/biblio              SDBM kit
+ext/SDBM_File/sdbm/dba.c               SDBM kit
+ext/SDBM_File/sdbm/dbd.c               SDBM kit
+ext/SDBM_File/sdbm/dbe.1               SDBM kit
+ext/SDBM_File/sdbm/dbe.c               SDBM kit
+ext/SDBM_File/sdbm/dbm.c               SDBM kit
+ext/SDBM_File/sdbm/dbm.h               SDBM kit
+ext/SDBM_File/sdbm/dbu.c               SDBM kit
+ext/SDBM_File/sdbm/grind               SDBM kit
+ext/SDBM_File/sdbm/hash.c              SDBM kit
+ext/SDBM_File/sdbm/linux.patches       SDBM kit
+ext/SDBM_File/sdbm/makefile.sdbm       SDBM kit
+ext/SDBM_File/sdbm/pair.c              SDBM kit
+ext/SDBM_File/sdbm/pair.h              SDBM kit
+ext/SDBM_File/sdbm/readme.ms           SDBM kit
+ext/SDBM_File/sdbm/readme.ps           SDBM kit
+ext/SDBM_File/sdbm/sdbm.3              SDBM kit
+ext/SDBM_File/sdbm/sdbm.c              SDBM kit
+ext/SDBM_File/sdbm/sdbm.h              SDBM kit
+ext/SDBM_File/sdbm/tune.h              SDBM kit
+ext/SDBM_File/sdbm/util.c              SDBM kit
+ext/SDBM_File/typemap  SDBM extension interface types
+ext/Socket/Makefile.PL Socket extension makefile writer
+ext/Socket/Socket.pm   Socket extension Perl module
+ext/Socket/Socket.xs   Socket extension external subroutines
+ext/util/extliblist    Used by extension Makefile.PL to make lib lists
+ext/util/make_ext      Used by Makefile to execute extension Makefiles
+ext/util/mkbootstrap   Turns ext/*/*_BS into bootstrap info
+form.h                 Public declarations for the above
+global.sym             Symbols that need hiding when embedded
+globals.c              File to declare global symbols (for shared library)
+gv.c                   Glob value code
+gv.h                   Glob value header
+h2ph.SH                        A thing to turn C .h files into perl .ph files
+h2pl/README            How to turn .ph files into .pl files
+h2pl/cbreak.pl         cbreak routines using .ph
+h2pl/cbreak2.pl                cbreak routines using .pl
+h2pl/eg/sizeof.ph      Sample sizeof array initialization
+h2pl/eg/sys/errno.pl   Sample translated errno.pl
+h2pl/eg/sys/ioctl.pl   Sample translated ioctl.pl
+h2pl/eg/sysexits.pl    Sample translated sysexits.pl
+h2pl/getioctlsizes     Program to extract types from ioctl.h
+h2pl/mksizes           Program to make %sizeof array
+h2pl/mkvars            Program to make .pl from .ph files
+h2pl/tcbreak           cbreak test routine using .ph
+h2pl/tcbreak2          cbreak test routine using .pl
+h2xs                   Program to make .xs files from C header files
+handy.h                        Handy definitions
+hints/3b1.sh           Hints for named architecture
+hints/3b1cc            Hints for named architecture
+hints/README.hints     Hints for named architecture
+hints/aix.sh           Hints for named architecture
+hints/altos486.sh      Hints for named architecture
+hints/apollo.sh                Hints for named architecture
+hints/aux.sh           Hints for named architecture
+hints/bsd386.sh                Hints for named architecture
+hints/convexos.sh      Hints for named architecture
+hints/dec_osf.sh       Hints for named architecture
+hints/dgux.sh          Hints for named architecture
+hints/dnix.sh          Hints for named architecture
+hints/dynix.sh         Hints for named architecture
+hints/esix4.sh         Hints for named architecture
+hints/fps.sh           Hints for named architecture
+hints/freebsd.sh       Hints for named architecture
+hints/genix.sh         Hints for named architecture
+hints/greenhills.sh    Hints for named architecture
+hints/hpux_9.sh                Hints for named architecture
+hints/i386.sh          Hints for named architecture
+hints/irix_4.sh                Hints for named architecture
+hints/irix_5.sh                Hints for named architecture
+hints/irix_6.sh                Hints for named architecture
+hints/isc.sh           Hints for named architecture
+hints/isc_2.sh         Hints for named architecture
+hints/linux.sh         Hints for named architecture
+hints/mips.sh          Hints for named architecture
+hints/mpc.sh           Hints for named architecture
+hints/ncr_tower.sh     Hints for named architecture
+hints/netbsd.sh                Hints for named architecture
+hints/next_3_2.sh      Hints for named architecture
+hints/opus.sh          Hints for named architecture
+hints/sco_2_3_0.sh     Hints for named architecture
+hints/sco_2_3_1.sh     Hints for named architecture
+hints/sco_2_3_2.sh     Hints for named architecture
+hints/sco_2_3_3.sh     Hints for named architecture
+hints/sco_2_3_4.sh     Hints for named architecture
+hints/sco_3.sh         Hints for named architecture
+hints/solaris_2.sh     Hints for named architecture
+hints/stellar.sh       Hints for named architecture
+hints/sunos_4_0.sh     Hints for named architecture
+hints/sunos_4_1.sh     Hints for named architecture
+hints/svr4.sh          Hints for named architecture
+hints/ti1500.sh                Hints for named architecture
+hints/titanos.sh       Hints for named architecture
+hints/ultrix_4.sh      Hints for named architecture
+hints/unicos.sh                Hints for named architecture
+hints/unisysdynix.sh   Hints for named architecture
+hints/utekv.sh         Hints for named architecture
+hints/uts.sh           Hints for named architecture
+hv.c                   Hash value code
+hv.h                   Hash value header
+installperl            Perl script to do "make install" dirty work
+interp.sym             Interpreter specific symbols to hide in a struct
+ioctl.pl               Sample ioctl.pl
+keywords.h             The keyword numbers
+keywords.pl            Program to write keywords.h
+lib/AnyDBM_File.pm     Perl module to emulate dbmopen
+lib/AutoLoader.pm      Autoloader base class
+lib/AutoSplit.pm       A module to split up autoload functions
+lib/Benchmark.pm       A module to time pieces of code and such
+lib/Carp.pm            Error message base class
+lib/Cwd.pm             Various cwd routines (getcwd, fastcwd, chdir)
+lib/English.pm         Readable aliases for short variables
+lib/Env.pm             Map environment into ordinary variables
+lib/Exporter.pm                Exporter base class
+lib/ExtUtils/MakeMaker.pm      Write Makefiles for extensions
+lib/ExtUtils/typemap           Extension interface types
+lib/ExtUtils/xsubpp            External subroutine preprocessor
+lib/File/Basename.pm   A module to emulate the basename program
+lib/File/CheckTree.pm  Perl module supporting wholesale file mode validation
+lib/File/Find.pm       Routines to do a find
+lib/FileHandle.pm      FileHandle methods
+lib/Getopt/Long.pm     A module to fetch command options (GetOptions)
+lib/Getopt/Std.pm      A module to fetch command options (getopt, getopts)
+lib/I18N/Collate.pm    Routines to do strxfrm-based collation
+lib/IPC/Open2.pm       Open a two-ended pipe
+lib/IPC/Open3.pm       Open a three-ended pipe!
+lib/Math/BigFloat.pm   An arbitrary precision floating-point arithmetic package
+lib/Math/BigInt.pm     An arbitrary precision integer arithmetic package
+lib/Math/Complex.pm    A Complex package
+lib/Net/Ping.pm                Ping methods
+lib/Search/Dict.pm     A module to do binary search on dictionaries
+lib/Shell.pm           A module to make AUTOLOADEed system() calls
+lib/Sys/Hostname.pm    Hostname methods
+lib/Sys/Syslog.pm      Perl module supporting syslogging
+lib/Term/Cap.pm                Perl module supporting termcap usage
+lib/Term/Complete.pm   A command completion subroutine
+lib/Test/Harness.pm    A test harness
+lib/Text/Abbrev.pm     An abbreviation table builder
+lib/Text/ParseWords.pm Perl module to split words on arbitrary delimiter
+lib/Text/Soundex.pm    Perl module to implement Soundex
+lib/Text/Tabs.pm       Do expand and unexpand
+lib/TieHash.pm         Base class for tied hashes
+lib/Time/Local.pm      Reverse translation of localtime, gmtime
+lib/abbrev.pl          An abbreviation table builder
+lib/assert.pl          assertion and panic with stack trace
+lib/bigfloat.pl                An arbitrary precision floating point package
+lib/bigint.pl          An arbitrary precision integer arithmetic package
+lib/bigrat.pl          An arbitrary precision rational arithmetic package
+lib/cacheout.pl                Manages output filehandles when you need too many
+lib/chat2.inter                A chat2 with interaction
+lib/chat2.pl           Randal's famous expect-ish routines
+lib/complete.pl                A command completion subroutine
+lib/ctime.pl           A ctime workalike
+lib/dotsh.pl           Code to "dot" in a shell script
+lib/dumpvar.pl         A variable dumper
+lib/exceptions.pl      catch and throw routines
+lib/fastcwd.pl         a faster but more dangerous getcwd
+lib/find.pl            A find emulator--used by find2perl
+lib/finddepth.pl       A depth-first find emulator--used by find2perl
+lib/flush.pl           Routines to do single flush
+lib/ftp.pl             FTP code
+lib/getcwd.pl          A getcwd() emulator
+lib/getopt.pl          Perl library supporting option parsing
+lib/getopts.pl         Perl library supporting option parsing
+lib/hostname.pl                Old hostname code
+lib/importenv.pl       Perl routine to get environment into variables
+lib/integer.pm         For "use integer"
+lib/less.pm            For "use less"
+lib/look.pl            A "look" equivalent
+lib/newgetopt.pl       A perl library supporting long option parsing
+lib/open2.pl           Open a two-ended pipe
+lib/open3.pl           Open a three-ended pipe
+lib/perl5db.pl         Perl debugging routines
+lib/pwd.pl             Routines to keep track of PWD environment variable
+lib/shellwords.pl      Perl library to split into words with shell quoting
+lib/sigtrap.pm         For trapping an abort and giving traceback
+lib/stat.pl            Perl library supporting stat function
+lib/strict.pm          For "use strict"
+lib/subs.pm            Declare overriding subs
+lib/syslog.pl          Perl library supporting syslogging
+lib/tainted.pl         Old code for tainting
+lib/termcap.pl         Perl library supporting termcap usage
+lib/timelocal.pl       Perl library supporting inverse of localtime, gmtime
+lib/validate.pl                Perl library supporting wholesale file mode validation
+makedepend.SH          Precursor to makedepend
+makedir.SH             Precursor to makedir
+malloc.c               A version of malloc you might not want
+mg.c                   Magic code
+mg.h                   Magic header
+miniperlmain.c         Basic perl w/o dynamic loading or extensions
+mv-if-diff             Script to mv a file if it changed
+myconfig               Prints summary of the current configuration
+op.c                   Opcode syntax tree code
+op.h                   Opcode syntax tree header
+opcode.h               Automatically generated opcode header
+opcode.pl              Opcode header generatore
+patchlevel.h           The current patch level of perl
+perl.c                 main()
+perl.h                 Global declarations
+perl_exp.SH            Creates list of exported symbols for AIX.
+perlsh                 A poor man's perl shell
+perly.c                        A byacc'ed perly.y
+perly.c.diff           Fixup perly.c to allow recursion
+perly.fixer            A program to remove yacc stack limitations
+perly.h                        The header file for perly.c
+perly.y                        Yacc grammar for perl
+pl2pm                  A pl to pm translator
+pod/Makefile           Make pods into something else
+pod/modpods/Abbrev.pod         Doc for Abbrev.pm
+pod/modpods/AnyDBMFile.pod     Doc for AnyDBMFile.pm
+pod/modpods/AutoLoader.pod     Doc for AutoLoader.pm
+pod/modpods/AutoSplit.pod      Doc for AutoSplit.pm
+pod/modpods/Basename.pod       Doc for Basename.pm
+pod/modpods/Benchmark.pod      Doc for Benchmark.pm
+pod/modpods/Carp.pod           Doc for Carp.pm
+pod/modpods/CheckTree.pod      Doc for CheckTree.pm
+pod/modpods/Collate.pod                Doc for Collate.pm
+pod/modpods/Config.pod         Doc for Config.pm
+pod/modpods/Cwd.pod            Doc for Cwd.pm
+pod/modpods/DB_File.pod                Doc for File.pm
+pod/modpods/Dynaloader.pod     Doc for Dynaloader.pm
+pod/modpods/English.pod                Doc for English.pm
+pod/modpods/Env.pod            Doc for Env.pm
+pod/modpods/Exporter.pod       Doc for Exporter.pm
+pod/modpods/Fcntl.pod          Doc for Fcntl.pm
+pod/modpods/FileHandle.pod     Doc for FileHandle.pm
+pod/modpods/Find.pod           Doc for Find.pm
+pod/modpods/Finddepth.pod      Doc for Finddepth.pm
+pod/modpods/GetOptions.pod     Doc for GetOptions.pm
+pod/modpods/Getopt.pod         Doc for Getopt.pm
+pod/modpods/MakeMaker.pod      Doc for MakeMaker.pm
+pod/modpods/Open2.pod          Doc for Open2.pm
+pod/modpods/Open3.pod          Doc for Open3.pm
+pod/modpods/POSIX.pod          Doc for POSIX.pm
+pod/modpods/Ping.pod           Doc for Ping.pm
+pod/modpods/Socket.pod         Doc for Socket.pm
+pod/modpods/integer.pod                Doc for integer.pm
+pod/modpods/less.pod           Doc for less.pm
+pod/modpods/sigtrap.pod                Doc for sigtrap.pm
+pod/modpods/strict.pod         Doc for strict.pm
+pod/modpods/subs.pod           Doc for subs.pm
+pod/perl.pod           Top level perl man page
+pod/perlapi.pod                XS api info
+pod/perlbook.pod       Book info
+pod/perlbot.pod                Object-oriented Bag o' Tricks
+pod/perlcall.pod       Callback info
+pod/perldata.pod       Data structure info
+pod/perldebug.pod      Debugger info
+pod/perldiag.pod       Diagnostic info
+pod/perlembed.pod      Embedding info
+pod/perlform.pod       Format info
+pod/perlfunc.pod       Function info
+pod/perlguts.pod       Internals info
+pod/perlipc.pod                IPC info
+pod/perlmod.pod                Module info
+pod/perlobj.pod                Object info
+pod/perlop.pod         Operator info
+pod/perlovl.pod                Overloading info
+pod/perlpod.pod                Pod info
+pod/perlre.pod         Regular expression info
+pod/perlref.pod                References info
+pod/perlrun.pod                Execution info
+pod/perlsec.pod                Security info
+pod/perlstyle.pod      Style info
+pod/perlsub.pod                Subroutine info
+pod/perlsyn.pod                Syntax info
+pod/perltrap.pod       Trap info
+pod/perlvar.pod                Variable info
+pod/pod2html           Translator to turn pod into HTML
+pod/pod2man            Translator to turn pod into manpage
+pod/splitman           Splits perlfunc into multiple man pages
+pp.c                   Push/Pop code
+pp.h                   Push/Pop code defs
+pp_ctl.c               Push/Pop code for control flow
+pp_hot.c               Push/Pop code for heavily used opcodes
+pp_sys.c               Push/Pop code for system interaction
+proto.h                        Prototypes
+regcomp.c              Regular expression compiler
+regcomp.h              Private declarations for above
+regexec.c              Regular expression evaluator
+regexp.h               Public declarations for the above
+run.c                  The interpreter loop
+scope.c                        Scope entry and exit code
+scope.h                        Scope entry and exit header
+sv.c                   Scalar value code
+sv.h                   Scalar value header
+t/README               Instructions for regression tests
+t/TEST                 The regression tester
+t/base/cond.t          See if conditionals work
+t/base/if.t            See if if works
+t/base/lex.t           See if lexical items work
+t/base/pat.t           See if pattern matching works
+t/base/term.t          See if various terms work
+t/cmd/elsif.t          See if else-if works
+t/cmd/for.t            See if for loops work
+t/cmd/mod.t            See if statement modifiers work
+t/cmd/subval.t         See if subroutine values work
+t/cmd/switch.t         See if switch optimizations work
+t/cmd/while.t          See if while loops work
+t/comp/cmdopt.t                See if command optimization works
+t/comp/cpp.t           See if C preprocessor works
+t/comp/decl.t          See if declarations work
+t/comp/multiline.t     See if multiline strings work
+t/comp/package.t       See if packages work
+t/comp/script.t                See if script invokation works
+t/comp/term.t          See if more terms work
+t/io/argv.t            See if ARGV stuff works
+t/io/dup.t             See if >& works right
+t/io/fs.t              See if directory manipulations work
+t/io/inplace.t         See if inplace editing works
+t/io/pipe.t            See if secure pipes work
+t/io/print.t           See if print commands work
+t/io/tell.t            See if file seeking works
+t/lib/anydbm.t         See if AnyDBM_File works
+t/lib/bigint.t         See if bigint.pl works
+t/lib/db-btree.t       See if DB_File works
+t/lib/db-hash.t                See if DB_File works
+t/lib/db-recno.t       See if DB_File works
+t/lib/english.t                See if English works
+t/lib/gdbm.t           See if GDBM_File works
+t/lib/ndbm.t           See if NDBM_File works
+t/lib/odbm.t           See if ODBM_File works
+t/lib/posix.t          See if POSIX works
+t/lib/sdbm.t           See if SDBM_File works
+t/lib/soundex.t                See if Soundex works
+t/op/append.t          See if . works
+t/op/array.t           See if array operations work
+t/op/auto.t            See if autoincrement et all work
+t/op/chop.t            See if chop works
+t/op/cond.t            See if conditional expressions work
+t/op/delete.t          See if delete works
+t/op/do.t              See if subroutines work
+t/op/each.t            See if associative iterators work
+t/op/eval.t            See if eval operator works
+t/op/exec.t            See if exec and system work
+t/op/exp.t             See if math functions work
+t/op/flip.t            See if range operator works
+t/op/fork.t            See if fork works
+t/op/glob.t            See if <*> works
+t/op/goto.t            See if goto works
+t/op/groups.t          See if $( works
+t/op/index.t           See if index works
+t/op/int.t             See if int works
+t/op/join.t            See if join works
+t/op/list.t            See if array lists work
+t/op/local.t           See if local works
+t/op/magic.t           See if magic variables work
+t/op/misc.t            See if miscellaneous bugs have been fixed
+t/op/mkdir.t           See if mkdir works
+t/op/my.t              See if lexical scoping works
+t/op/oct.t             See if oct and hex work
+t/op/ord.t             See if ord works
+t/op/pack.t            See if pack and unpack work
+t/op/pat.t             See if esoteric patterns work
+t/op/push.t            See if push and pop work
+t/op/quotemeta.t       See if quotemeta works
+t/op/rand.t            See if rand works
+t/op/range.t           See if .. works
+t/op/re_tests          Input file for op.regexp
+t/op/read.t            See if read() works
+t/op/readdir.t         See if readdir() works
+t/op/ref.t             See if refs and objects work
+t/op/regexp.t          See if regular expressions work
+t/op/repeat.t          See if x operator works
+t/op/sleep.t           See if sleep works
+t/op/sort.t            See if sort works
+t/op/split.t           See if split works
+t/op/sprintf.t         See if sprintf works
+t/op/stat.t            See if stat works
+t/op/study.t           See if study works
+t/op/subst.t           See if substitution works
+t/op/substr.t          See if substr works
+t/op/time.t            See if time functions work
+t/op/undef.t           See if undef works
+t/op/unshift.t         See if unshift works
+t/op/vec.t             See if vectors work
+t/op/write.t           See if write works
+t/re_tests             Regular expressions for regexp.t
+taint.c                        Tainting code
+toke.c                 The tokener
+unixish.h              Defines that are assumed on Unix
+util.c                 Utility routines
+util.h                 Public declarations for the above
+vms/config.vms         VMS port
+vms/descrip.mms                VMS port
+vms/gen_shrfls.pl      VMS port
+vms/genconfig.pl       VMS port
+vms/genopt.com         VMS port
+vms/makefile.          VMS port
+vms/mms2make.pl                VMS port
+vms/perlshr.c          VMS port
+vms/perlvms.pod                VMS port
+vms/sockadapt.c                VMS port
+vms/sockadapt.h                VMS port
+vms/test.com           VMS port
+vms/vms.c              VMS port
+vms/vmsish.h           VMS port
+vms/writemain.pl       VMS port
+writemain.SH           Generate perlmain.c from miniperlmain.c+extensions
+x2p/EXTERN.h           Same as above
+x2p/INTERN.h           Same as above
+x2p/Makefile.SH                Precursor to Makefile
+x2p/a2p.c              A byacc'ed a2p.y
+x2p/a2p.h              Global declarations
+x2p/a2p.man            Manual page for awk to perl translator
+x2p/a2p.y              A yacc grammer for awk
+x2p/a2py.c             Awk compiler, sort of
+x2p/cflags.SH          A script that emits C compilation flags per file
+x2p/find2perl.SH       A find to perl translator
+x2p/handy.h            Handy definitions
+x2p/hash.c             Associative arrays again
+x2p/hash.h             Public declarations for the above
+x2p/s2p.SH             Sed to perl translator
+x2p/s2p.man            Manual page for sed to perl translator
+x2p/str.c              String handling package
+x2p/str.h              Public declarations for the above
+x2p/util.c             Utility routines
+x2p/util.h             Public declarations for the above
+x2p/walk.c             Parse tree walker
+xf                     A script to translate Perl 4 symbols to Perl 5
index 1144176..b3e5e04 100644 (file)
@@ -22,16 +22,35 @@ case "$d_dosuid" in
 *) suidperl='';;
 esac
 
+shrpenv=""
+case "$d_shrplib" in
+*define*)
+    patchlevel=`egrep '^#define[       ]+PATCHLEVEL' patchlevel.h \
+       | awk '{print $3}'`
+    case "$patchlevel" in
+     *[0-9]) plibsuf=.$so.$patchlevel;;
+     *)            plibsuf=.$so;;
+    esac
+    case "$shrpdir" in
+     /usr/lib) ;;
+     "")       ;;
+     *)                shrpenv="env LD_RUN_PATH=$shrpdir";;
+    esac
+    pldlflags="$cccdlflags";;
+*)  plibsuf=.a
+    pldlflags="";;
+esac
+
 : Configure sets byacc=byacc if byacc is not found.  We reset it to ''
 case "$byacc" in
-''|'byacc') byacc='';;
+'byacc') byacc='';;
 esac
 
 : Prepare dependency lists for Makefile.
 dynamic_list=' '
 for f in $dynamic_ext; do
     : the dependency named here will never exist
-       base=`echo "$f" | sed 's/.*\///'`
+      base=`echo "$f" | sed 's/.*\///'`
     dynamic_list="$dynamic_list ext/$f/$base.$dlext"
 done
 
@@ -85,6 +104,9 @@ LDDLFLAGS = $lddlflags
 CCDLFLAGS = $ccdlflags
 CCCDLFLAGS = $cccdlflags
 DLSUFFIX = .$dlext
+PLDLFLAGS = $pldlflags
+PLIBSUF = $plibsuf
+SHRPENV = $shrpenv
 
 dynamic_ext = $dynamic_list
 static_ext = $static_list
@@ -125,13 +147,13 @@ h = $(h1) $(h2) $(h3) $(h4)
 
 c1 = $(mallocsrc) av.c scope.c op.c doop.c doio.c dump.c hv.c mg.c
 c2 = perl.c perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c
-c3 = gv.c sv.c taint.c toke.c util.c deb.c run.c
+c3 = gv.c sv.c taint.c toke.c util.c deb.c run.c globals.c
 
 c = $(c1) $(c2) $(c3) miniperlmain.c perlmain.c
 
 obj1 = $(mallocobj) gv.o toke.o perly.o op.o regcomp.o dump.o util.o mg.o
 obj2 = hv.o av.o run.o pp_hot.o sv.o pp.o scope.o pp_ctl.o pp_sys.o
-obj3 = doop.o doio.o regexec.o taint.o deb.o 
+obj3 = doop.o doio.o regexec.o taint.o deb.o globals.o
 
 obj = $(obj1) $(obj2) $(obj3)
 
@@ -144,7 +166,7 @@ obj = $(obj1) $(obj2) $(obj3)
 # Eventually some form of 'make-a-perl' script will automate this
 # together with linking a perl executable with any desired
 # static modules.
-perllib = libperl.a
+perllib = libperl$(PLIBSUF)
 
 lintflags = -hbvxac
 
@@ -154,7 +176,7 @@ addedbyconf = UU
 SHELL = /bin/sh
 
 .c.o:
-       $(CCCMD) $*.c
+       $(CCCMD) $(PLDLFLAGS) $*.c
 
 all: makefile miniperl preplibrary $(public) $(dynamic_ext)
        @echo " "; echo "       Making x2p stuff"; cd x2p; $(MAKE) all
@@ -173,11 +195,15 @@ $spitshell >>Makefile <<'!NO!SUBS!'
 miniperl: $& miniperlmain.o $(perllib)
        $(CC) $(LARGE) $(CLDFLAGS) -o miniperl miniperlmain.o $(perllib) $(libs)
 
+miniperlmain.o: miniperlmain.c
+       $(CCCMD) $(PLDLFLAGS) $*.c
+
 perlmain.c: miniperlmain.c config.sh makefile $(static_ext_autoinit)
        sh writemain $(DYNALOADER) $(static_ext) > tmp
        sh mv-if-diff tmp perlmain.c
 
 perlmain.o: perlmain.c
+       $(CCCMD) $(PLDLFLAGS) $*.c
 
 # The file ext.libs is a list of libraries that must be linked in
 # for static extensions, e.g. -lm -lgdbm, etc.  The individual
@@ -186,7 +212,7 @@ ext.libs:   $(static_ext)
        -@test -f ext.libs || touch ext.libs
 
 perl: $& perlmain.o $(perllib) $(DYNALOADER) $(static_ext) ext.libs
-       $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o perl perlmain.o $(perllib) $(DYNALOADER) $(static_ext) `cat ext.libs` $(libs)
+       $(SHRPENV) $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o perl perlmain.o $(perllib) $(DYNALOADER) $(static_ext) `cat ext.libs` $(libs)
 
 pureperl: $& perlmain.o $(perllib) $(DYNALOADER) $(static_ext) ext.libs
        purify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o pureperl perlmain.o $(perllib) $(DYNALOADER) $(static_ext) `cat ext.libs` $(libs)
@@ -195,8 +221,23 @@ quantperl: $& perlmain.o $(perllib) $(DYNALOADER) $(static_ext) ext.libs
        quantify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o quantperl perlmain.o $(perllib) $(DYNALOADER) $(static_ext) `cat ext.libs` $(libs)
 
 $(perllib): $& perl.o $(obj)
+!NO!SUBS!
+
+case "$d_shrplib" in
+*define*)
+$spitshell >>Makefile <<'!NO!SUBS!'
+       ld $(LDDLFLAGS) -o $@ perl.o $(obj)
+!NO!SUBS!
+;;
+*)
+$spitshell >>Makefile <<'!NO!SUBS!'
        ar rcu $(perllib) perl.o $(obj)
        @$(ranlib) $(perllib)
+!NO!SUBS!
+;;
+esac
+
+$spitshell >>Makefile <<'!NO!SUBS!'
 
 # This version, if specified in Configure, does ONLY those scripts which need
 # set-id emulation.  Suidperl must be setuid root.  It contains the "taint"
@@ -219,7 +260,7 @@ embed.h: embed_h.sh global.sym interp.sym
        sh embed_h.sh
 
 preplibrary: miniperl lib/Config.pm
-       @test -d lib/auto || mkdir lib/auto
+       @./makedir lib/auto
        @echo " AutoSplitting perl library"
        @./miniperl -Ilib -e 'use AutoSplit; \
                autosplit_lib_modules(@ARGV)' lib/*.pm lib/*/*.pm
@@ -234,9 +275,8 @@ install: all
 : Only print out the rules for running byacc if the user _has_ byacc.
 : Otherwise, comment them out.  Users who really know what they are
 : doing can uncomment them and run yacc or bison or whatever.
-: Configure sets byacc=byacc if byacc is not found.
 case "$byacc" in
-''|'byacc')
+'')
        comment1='#' 
        comment2='' ;;
 *)     comment1=''
@@ -250,7 +290,7 @@ perly.h: perly.c
        touch perly.h
 
 # I now supply perly.c with the kits, so the following section is
-# commented out if you don't have byacc.
+# used only if you have byacc.
 
 ${comment1}perly.c:    perly.y perly.c.diff
 ${comment1}    @ echo 'Expect' 109 shift/reduce and 1 reduce/reduce conflict
@@ -259,7 +299,7 @@ ${comment1} sh \$(shellflags) ./perly.fixer y.tab.c perly.c
 ${comment1}    mv y.tab.h perly.h
 ${comment1}    echo 'extern YYSTYPE yylval;' >>perly.h
 
-# This version is used only if you do not have byacc.
+# This version is used if you do not have byacc.
 ${comment2}perly.c:    perly.y
 ${comment2}    touch perly.c
 
@@ -293,11 +333,10 @@ clean:
        @for x in $(dynamic_ext) $(static_ext) ; do \
        sh ext/util/make_ext clean $$x ; \
        done
-       rm -f perl suidperl miniperl
+       rm -f perl suidperl miniperl $(perllib)
 
 realclean: clean
        -cd x2p; $(MAKE) realclean
-       : could add: "-cd pod; $(MAKE) realclean" here and to pod/Makefile
        @for x in $(DYNALOADER) $(dynamic_ext) $(static_ext) ; do \
        sh ext/util/make_ext realclean $$x ; \
        done
@@ -305,12 +344,16 @@ realclean: clean
        rm -rf $(addedbyconf)
        rm -f Makefile cflags makedepend makedir writemain
        rm -f config.h makefile makefile.old
-       rm -f x2p/Makefile x2p/makefile x2p/makefile.old x2p/cflags
        rm -f lib/Config.pm
        rm -rf lib/auto
        rm -f h2ph h2ph.man c2ph pstruct
        rm -rf .config
 
+clobber:       realclean
+       rm -f config.sh cppstdin
+    
+distclean:     clobber
+
 # The following lint has practically everything turned on.  Unfortunately,
 # you have to wade through a lot of mumbo jumbo that can't be suppressed.
 # If the source file has a /*NOSTRICT*/ somewhere, ignore the lint message
diff --git a/README b/README
index d9a97c7..31e6de3 100644 (file)
--- a/README
+++ b/README
@@ -69,11 +69,13 @@ Installation
     config.sh, and Makefile. You may have to explicitly say   
         sh Configure    to ensure that Configure is run under sh.
     If you're a hotshot, run Configure -d to take all the defaults and
-    then edit config.sh to patch up any flaws.
+    then edit config.sh to patch up any flaws and run Configure -S.
 
     Configure supports a number of useful options.  Run Configure -h 
     to get a listing.  To compile with gcc, for example, you can run 
-    Configure -Dcc=gcc, or answer 'gcc' at the cc prompt.
+    Configure -Dcc=gcc, or answer 'gcc' at the cc prompt.  If you
+    change compilers or make other significant changes, you should
+    probably _not_ re-use your old config.sh.
     
     By default, perl will be installed in /usr/local/{bin, lib, man}.
     You can specify a different prefix for the default installation
@@ -148,6 +150,9 @@ Installation
     If you get duplicates upon linking for malloc et al, say -DHIDEMYMALLOC.
     If you get duplicate function definitions (a perl function has the
     same name as another function on your system) try -DEMBED.
+    If you get varags problems with gcc, be sure that gcc is installed
+    correctly.  When using gcc, you should probably have i_stdarg='define'
+    and i_varags='undef' in config.sh.
 
 5)  make test
 
index 4a17475..bb0f216 100755 (executable)
--- a/cflags.SH
+++ b/cflags.SH
@@ -22,6 +22,7 @@ echo "Extracting cflags (with variable substitutions)"
 : Protect any dollar signs and backticks that you do not want interpreted
 : by putting a backslash in front.  You may delete these comments.
 $spitshell >cflags <<!GROK!THIS!
+$startsh
 !GROK!THIS!
 
 : In the following dollars and backticks do not need the extra backslash.
index 5ad7f3f..7f2dfe5 100644 (file)
--- a/config.H
+++ b/config.H
@@ -14,7 +14,7 @@
  * $Id: Config_h.U,v 3.0.1.2 1993/08/24 12:13:20 ram Exp $
  */
 
-/* Configuration time: Thu Oct  6 18:27:36 EDT 1994
+/* Configuration time: Mon Dec 19 13:04:26 EST 1994
  * Configured by: andy
  * Target system: crystal crystal 3.2 2 i386 
  */
  */
 #define MEM_ALIGNBYTES 4       /**/
 
+/* ARCHLIB:
+ *     This variable, if defined, holds the name of the directory in
+ *     which the user wants to put architecture-dependent public
+ *     library files for perl5.  It is most often a local directory
+ *     such as /usr/local/lib.  Programs using this variable must be
+ *     prepared to deal with filename expansion.  If ARCHLIB is the
+ *     same as PRIVLIB, it is not defined, since presumably the
+ *     program already searches PRIVLIB.
+ */
+#define ARCHLIB "/usr/local/lib/perl5/i386-isc"                /**/
+
 /* BIN:
  *     This symbol holds the path of the bin directory where the package will
  *     be installed. Program must be prepared to deal with ~name substitution.
  */
 #define BYTEORDER 0x1234       /* large digits for MSB */
 
+/* CAT2:
+ *     This macro catenates 2 tokens together.
+ */
+/* STRINGIFY:
+ *     This macro surrounds its token with double quotes.
+ */
+#if 1 == 1
+#define CAT2(a,b)a/**/b
+#define CAT3(a,b,c)a/**/b/**/c
+#define CAT4(a,b,c,d)a/**/b/**/c/**/d
+#define CAT5(a,b,c,d,e)a/**/b/**/c/**/d/**/e
+#define STRINGIFY(a)"a"
+               /* If you can get stringification with catify, tell me how! */
+#endif
+#if 1 == 42
+#define CAT2(a,b)a ## b
+#define CAT3(a,b,c)a ## b ## c
+#define CAT4(a,b,c,d)a ## b ## c ## d
+#define CAT5(a,b,c,d,e)a ## b ## c ## d ## e
+#define StGiFy(a)# a
+#define STRINGIFY(a)StGiFy(a)
+#define SCAT2(a,b)StGiFy(a) StGiFy(b)
+#define SCAT3(a,b,c)StGiFy(a) StGiFy(b) StGiFy(c)
+#define SCAT4(a,b,c,d)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d)
+#define SCAT5(a,b,c,d,e)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d) StGiFy(e)
+#endif
+#ifndef CAT2
+#include "Bletch: How does this C preprocessor catenate tokens?"
+#endif
+
 /* CPPSTDIN:
  *     This symbol contains the first part of the string which will invoke
  *     the C preprocessor on the standard input and produce to standard
@@ -52,7 +93,7 @@
  *     output.  This symbol will have the value "-" if CPPSTDIN needs a minus
  *     to specify standard input, otherwise the value is "".
  */
-#define CPPSTDIN "gcc -E"
+#define CPPSTDIN "cc -E"
 #define CPPMINUS "-"
 
 /* HAS_ALARM:
  */
 #define HAS_ALARM              /**/
 
+/* HASATTRIBUTE:
+ *     This symbol indicates the C compiler can check for function attributes,
+ *     such as printf formats. This is normally only supported by GNU cc.
+ */
+/*#define HASATTRIBUTE         /**/
+#ifndef HASATTRIBUTE
+#define __attribute__(_arg_)
+#endif
+
 /* HAS_BCMP:
  *     This symbol is defined if the bcmp() routine is available to
  *     compare blocks of memory.
  *             1 = couldn't cast < 0
  *             2 = couldn't cast >= 0x80000000
  */
-#define        CASTNEGFLOAT            /**/
-#define CASTFLAGS 0            /**/
-
-/* CHARSPRINTF:
- *     This symbol is defined if this system declares "char *sprintf()" in
- *     stdio.h.  The trend seems to be to declare it as "int sprintf()".  It
- *     is up to the package author to declare sprintf correctly based on the
- *     symbol.
- */
-/*#define      CHARSPRINTF     /**/
+/*#define      CASTNEGFLOAT            /**/
+#define CASTFLAGS 3            /**/
 
 /* HAS_CHOWN:
  *     This symbol, if defined, indicates that the chown routine is
  *     This symbol, if defined, indicates that the chsize routine is available
  *     to truncate files.  You might need a -lx to get this routine.
  */
-#define        HAS_CHSIZE              /**/
+/*#define      HAS_CHSIZE              /**/
+
+/* VOID_CLOSEDIR:
+ *     This symbol, if defined, indicates that the closedir() routine
+ *     does not return a value.
+ */
+/*#define VOID_CLOSEDIR                /**/
 
 /* HASCONST:
  *     This symbol, if defined, indicates that this C compiler knows about
  *     within your programs. The mere use of the "const" keyword will
  *     trigger the necessary tests.
  */
-#define HASCONST       /**/
+/*#define HASCONST     /**/
 #ifndef HASCONST
 #define const
 #endif
  */
 #define HAS_DIFFTIME           /**/
 
+/* HAS_DLERROR:
+ *     This symbol, if defined, indicates that the dlerror routine is
+ *     available to return a string describing the last error that
+ *     occurred from a call to dlopen(), dlclose() or dlsym().
+ */
+/*#define HAS_DLERROR  /**/
+
+/* SETUID_SCRIPTS_ARE_SECURE_NOW:
+ *     This symbol, if defined, indicates that the bug that prevents
+ *     setuid scripts from being secure is not present in this kernel.
+ */
+/* DOSUID:
+ *     This symbol, if defined, indicates that the C program should
+ *     check the script that it is executing for setuid/setgid bits, and
+ *     attempt to emulate setuid/setgid on systems that have disabled
+ *     setuid #! scripts because the kernel can't do it securely.
+ *     It is up to the package designer to make sure that this emulation
+ *     is done securely.  Among other things, it should do an fstat on
+ *     the script it just opened to make sure it really is a setuid/setgid
+ *     script, it should make sure the arguments passed correspond exactly
+ *     to the argument on the #! line, and it should not trust any
+ *     subprocesses to which it must pass the filename rather than the
+ *     file descriptor of the script to be executed.
+ */
+/*#define SETUID_SCRIPTS_ARE_SECURE_NOW        /**/
+/*#define DOSUID               /**/
+
+/* HAS_DREM:
+ *     This symbol, if defined, indicates that the drem routine is
+ *     available.  This routine is roughly the same as fmod, i.e. it
+ *     computes the remainder r=x-n*y, where n=rint(x/y), whereas fmod
+ *     uses n=trunc(x/y).
+ */
+/*#define HAS_DREM             /**/
+
 /* HAS_DUP2:
  *     This symbol, if defined, indicates that the dup2 routine is
  *     available to duplicate file descriptors.
  */
 /*#define HAS_FLOCK            /**/
 
+/* HAS_FMOD:
+ *     This symbol, if defined, indicates that the fmod routine is
+ *     available to compute the remainder r=x-n*y where n=trunc(x/y).
+ */
+#define HAS_FMOD               /**/
+
 /* HAS_FORK:
  *     This symbol, if defined, indicates that the fork routine is
  *     available.
  */
 /*#define HAS_FSETPOS  /**/
 
+/* Gconvert:
+ *     This preprocessor macro is defined to convert a floating point
+ *     number to a string without a trailing decimal point.  This
+ *     emulates the behavior of sprintf("%g"), but is sometimes much more
+ *     efficient.  If gconvert() is not available, but gcvt() drops the
+ *     trailing decimal point, then gcvt() is used.  If all else fails,
+ *     a macro using sprintf("%g") is used. Arguments for the Gconvert
+ *     macro are: value, number of digits, whether trailing zeros should
+ *     be retained, and the output buffer.
+ */
+#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
+
 /* HAS_GETGROUPS:
  *     This symbol, if defined, indicates that the getgroups() routine is
  *     available to get the list of process groups.  If unavailable, multiple
 #define HAS_NTOHL              /**/
 #define HAS_NTOHS              /**/
 
+/* HAS_ISASCII:
+ *     This manifest constant lets the C program know that isascii 
+ *     is available.
+ */
+#define HAS_ISASCII            /**/
+
 /* HAS_KILLPG:
  *     This symbol, if defined, indicates that the killpg routine is available
  *     to kill process groups.  If unavailable, you probably should use kill
  */
 #define HAS_LINK       /**/
 
+/* USE_LINUX_STDIO:
+ *     This symbol is defined if this system has a FILE structure declaring
+ *     _IO_read_base, _IO_read_ptr, and _IO_read_end in stdio.h.
+ */
+/*#define USE_LINUX_STDIO      /**/
+
+/* HAS_LOCALECONV:
+ *     This symbol, if defined, indicates that the localeconv routine is
+ *     available for numeric and monetary formatting conventions.
+ */
+#define HAS_LOCALECONV /**/
+
 /* HAS_LOCKF:
  *     This symbol, if defined, indicates that the lockf routine is
  *     available to do file locking.
  */
 #define HAS_MKDIR              /**/
 
+/* HAS_MKFIFO:
+ *     This symbol, if defined, indicates that the mkfifo routine is
+ *     available to create FIFOs. Otherwise, mknod should be able to
+ *     do it for you. However, if mkfifo is there, mknod might require
+ *     super-user privileges which mkfifo will not.
+ */
+#define HAS_MKFIFO             /**/
+
 /* HAS_MKTIME:
  *     This symbol, if defined, indicates that the mktime routine is
  *     available.
  */
 /*#define HAS_PASSWD           /**/
 
+/* HAS_PATHCONF:
+ *     This symbol, if defined, indicates that pathconf() is available
+ *     to determine file-system related limits and options associated
+ *     with a given filename.
+ */
+/* HAS_FPATHCONF:
+ *     This symbol, if defined, indicates that pathconf() is available
+ *     to determine file-system related limits and options associated
+ *     with a given open file descriptor.
+ */
+#define HAS_PATHCONF           /**/
+#define HAS_FPATHCONF          /**/
+
 /* HAS_PAUSE:
  *     This symbol, if defined, indicates that the pause routine is
  *     available to suspend a process until a signal is received.
  */
 #define HAS_RMDIR              /**/
 
+/* HAS_SAFE_BCOPY:
+ *     This symbol, if defined, indicates that the bcopy routine is available
+ *     to copy potentially overlapping memory blocks. Otherwise you should
+ *     probably use memmove() or memcpy(). If neither is defined, roll your
+ *     own version.
+ */
+#define HAS_SAFE_BCOPY /**/
+
+/* HAS_SAFE_MEMCPY:
+ *     This symbol, if defined, indicates that the memcpy routine is available
+ *     to copy potentially overlapping memory blocks. Otherwise you should
+ *     probably use memmove() or memcpy(). If neither is defined, roll your
+ *     own version.
+ */
+#define HAS_SAFE_MEMCPY        /**/
+
 /* HAS_SELECT:
  *     This symbol, if defined, indicates that the select routine is
  *     available to select active file descriptors. If the timeout field
  *     This symbol, if defined, indicates that the setpgrp routine is
  *     available to set the current process group.
  */
+/* USE_BSDPGRP:
+ *     This symbol, if defined, indicates that the BSD notion of process
+ *     group is to be used. For instance, you have to say setpgrp(pid, pgrp)
+ *     instead of the USG setpgrp().
+ */
 #define HAS_SETPGRP            /**/
+/*#define USE_BSDPGRP          /**/
 
 /* HAS_SETPGRP2:
  *     This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
  */
 #define HAS_SYSCALL    /**/
 
+/* HAS_SYSCONF:
+ *     This symbol, if defined, indicates that sysconf() is available
+ *     to determine system related limits and options.
+ */
+#define HAS_SYSCONF    /**/
+
 /* HAS_SYSTEM:
  *     This symbol, if defined, indicates that the system routine is
  *     available to issue a shell command.
  */
 #define HAS_TCSETPGRP          /**/
 
+/* Time_t:
+ *     This symbol holds the type returned by time(). It can be long,
+ *     or time_t on BSD sites (in which case <sys/types.h> should be
+ *     included).
+ */
+#define Time_t time_t          /* Time type */
+
 /* HAS_TIMES:
  *     This symbol, if defined, indicates that the times() routine exists.
  *     Note that this became obsolete on some systems (SUNOS), which now
  *     is up to the package author to declare things correctly based on the
  *     symbol.
  */
+/* Signal_t:
+ *     This symbol's value is either "void" or "int", corresponding to the
+ *     appropriate return type of a signal handler.  Thus, you can declare
+ *     a signal handler using "Signal_t (*handler)()", and define the
+ *     handler using "Signal_t handler(sig)".
+ */
 #define VOIDSIG        /**/
+#define Signal_t void  /* Signal handler's return type */
 
 /* HASVOLATILE:
  *     This symbol, if defined, indicates that this C compiler knows about
  *     the volatile declaration.
  */
-#define        HASVOLATILE     /**/
+/*#define      HASVOLATILE     /**/
 #ifndef HASVOLATILE
 #define volatile
 #endif
  */
 #define Gid_t gid_t            /* Type for getgid(), etc... */
 
+/* Groups_t:
+ *     This symbol holds the type used for the second argument to
+ *     getgroups().  Usually, this is the same of gidtype, but
+ *     sometimes it isn't.  It can be int, ushort, uid_t, etc... 
+ *     It may be necessary to include <sys/types.h> to get any 
+ *     typedef'ed information.  This is only required if you have
+ *     getgroups().
+ */
+#ifdef HAS_GETGROUPS
+#define Groups_t gid_t /* Type for 2nd arg to getgroups() */
+#endif
+
 /* I_DIRENT:
  *     This symbol, if defined, indicates to the C program that it should
  *     include <dirent.h>. Using this symbol also triggers the definition
  */
 /*#define I_MEMORY             /**/
 
-/* I_NDBM:
- *     This symbol, if defined, indicates that ndbm.h exists and should
- *     be included.
+/* I_NET_ERRNO:
+ *     This symbol, if defined, indicates that <net/errno.h> exists and 
+ *     should be included.
  */
-#define I_NDBM /**/
+#define I_NET_ERRNO            /**/
 
 /* I_NETINET_IN:
  *     This symbol, if defined, indicates to the C program that it should
  *     This symbol, if defined, indicates to the C program that it should
  *     include <varargs.h>.
  */
-#define I_STDARG               /**/
-/*#define I_VARARGS    /**/
+/*#define I_STDARG             /**/
+#define I_VARARGS      /**/
 
 /* I_VFORK:
  *     This symbol, if defined, indicates to the C program that it should
  */
 #define Off_t off_t            /* <offset> type */
 
+/* Mode_t:
+ *     This symbol holds the type used to declare file modes 
+ *     for systems calls.  It is usually mode_t, but may be
+ *     int or unsigned short.  It may be necessary to include <sys/types.h>
+ *     to get any typedef'ed information.
+ */
+#define Mode_t mode_t   /* file mode parameter for system calls */
+
 /* PRIVLIB:
  *     This symbol contains the name of the private library for this package.
  *     The library is private in the sense that it needn't be in anyone's
  *
  *             int main _((int argc, char *argv[]));
  */
-#define        CAN_PROTOTYPE   /**/
+/*#define      CAN_PROTOTYPE   /**/
 #ifdef CAN_PROTOTYPE
 #define        _(args) args
 #else
  */
 #define Size_t size_t   /* length paramater for string functions */
 
+/* SSize_t:
+ *     This symbol holds the type used by functions that return
+ *     a count of bytes or an error condition.  It must be a signed type.
+ *     It is usually ssize_t, but may be long or int, etc.
+ *     It may be necessary to include <sys/types.h> or <unistd.h>
+ *     to get any typedef'ed information.
+ *     We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
+ */
+#define SSize_t int     /* signed count of bytes */
+
 /* STDCHAR:
  *     This symbol is defined to be the type of char used in stdio.h.
  *     It has the values "unsigned char" or "char".
  */
 #define LOC_SED        "/bin/sed"      /**/
 
-/* ARCHLIB:
- *     This variable, if defined, holds the name of the directory in
- *     which the user wants to put architecture-dependent public
- *     library files for perl5.  It is most often a local directory
- *     such as /usr/local/lib.  Programs using this variable must be
- *     prepared to deal with filename expansion.  If ARCHLIB is the
- *     same as PRIVLIB, it is not defined, since presumably the
- *     program already searches PRIVLIB.
- */
-#define ARCHLIB "/usr/local/lib/perl5/isc"             /**/
-
-/* CAT2:
- *     This macro catenates 2 tokens together.
- */
-#if 42 == 1
-#define CAT2(a,b)a/**/b
-#define CAT3(a,b,c)a/**/b/**/c
-#define CAT4(a,b,c,d)a/**/b/**/c/**/d
-#define CAT5(a,b,c,d,e)a/**/b/**/c/**/d/**/e
-#define STRINGIFY(a)"a"
-               /* If you can get stringification with catify, tell me how! */
-#endif
-#if 42 == 42
-#define CAT2(a,b)a ## b
-#define CAT3(a,b,c)a ## b ## c
-#define CAT4(a,b,c,d)a ## b ## c ## d
-#define CAT5(a,b,c,d,e)a ## b ## c ## d ## e
-#define StGiFy(a)# a
-#define STRINGIFY(a)StGiFy(a)
-#define SCAT2(a,b)StGiFy(a) StGiFy(b)
-#define SCAT3(a,b,c)StGiFy(a) StGiFy(b) StGiFy(c)
-#define SCAT4(a,b,c,d)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d)
-#define SCAT5(a,b,c,d,e)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d) StGiFy(e)
-#endif
-#ifndef CAT2
-#include "Bletch: How does this C preprocessor catenate tokens?"
-#endif
-
-/* GNUC_ATTRIBUTE_CHECK:
- *     This symbol indicates the C compiler can check for function attributes,
- *     such as printf formats.
- */
-#define        GNUC_ATTRIBUTE_CHECK    /* */
-
-/* VOID_CLOSEDIR:
- *     This symbol, if defined, indicates that the closedir() routine
- *     does not return a value.
- */
-/*#define VOID_CLOSEDIR                /**/
-
-/* HAS_DLERROR:
- *     This symbol, if defined, indicates that the dlerror routine is
- *     available.
- */
-/*#define HAS_DLERROR          /**/
-
 /* DLSYM_NEEDS_UNDERSCORE:
  *     This symbol, if defined, indicates that we need to prepend an
  *     underscore to the symbol name before calling dlsym().  This only
  */
 /*#define      DLSYM_NEEDS_UNDERSCORE  /* */
 
-/* SETUID_SCRIPTS_ARE_SECURE_NOW:
- *     This symbol, if defined, indicates that the bug that prevents
- *     setuid scripts from being secure is not present in this kernel.
- */
-/* DOSUID:
- *     This symbol, if defined, indicates that the C program should
- *     check the script that it is executing for setuid/setgid bits, and
- *     attempt to emulate setuid/setgid on systems that have disabled
- *     setuid #! scripts because the kernel can't do it securely.
- *     It is up to the package designer to make sure that this emulation
- *     is done securely.  Among other things, it should do an fstat on
- *     the script it just opened to make sure it really is a setuid/setgid
- *     script, it should make sure the arguments passed correspond exactly
- *     to the argument on the #! line, and it should not trust any
- *     subprocesses to which it must pass the filename rather than the
- *     file descriptor of the script to be executed.
- */
-/*#define SETUID_SCRIPTS_ARE_SECURE_NOW        /**/
-
-/*#define DOSUID               /**/
-
-/* HAS_DREM:
- *     This symbol, if defined, indicates that the drem routine is
- *     available.  This is a Pyramid routine that is the same as
- *     fmod.
- */
-/*#define HAS_DREM             /**/
-
-/* HAS_FMOD:
- *     This symbol, if defined, indicates that the fmod routine is
- *     available.
- */
-#define HAS_FMOD               /**/
-
-/* Gconvert:
- *     This preprocessor macro is defined to convert a floating point
- *     number to a string without a trailing decimal point.  This
- *     emulates the behavior of sprintf("%g"), but is sometimes much more
- *     efficient.  If gconvert() is not available, but gcvt() drops the
- *     trailing decimal point, then gcvt() is used.  If all else fails,
- *     a macro using sprintf("%g") is used.
- */
-#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
-
-/* HAS_ISASCII:
- *     This manifest constant lets the C program know that isascii 
- *     is available.
- */
-#define HAS_ISASCII            /**/
-
-/* USE_LINUX_STDIO:
- *     This symbol is defined if this system has a FILE structure declaring
- *     _IO_read_base, _IO_read_ptr, and _IO_read_end in stdio.h.
- */
-/*#define USE_LINUX_STDIO      /**/
-
-/* HAS_LOCALECONV:
- *     This symbol, if defined, indicates that the localeconv routine is
- *     available for numeric and monetary formatting conventions.
- */
-#define HAS_LOCALECONV /**/
-
-/* HAS_MKFIFO:
- *     This symbol, if defined, indicates that the mkfifo routine is
- *     available.
- */
-#define HAS_MKFIFO             /**/
-
-/* HAS_PATHCONF:
- *     This symbol, if defined, indicates that pathconf() is available
- *     to determine file-system related limits and options associated
- *     with a given filename.
- */
-/* HAS_FPATHCONF:
- *     This symbol, if defined, indicates that pathconf() is available
- *     to determine file-system related limits and options associated
- *     with a given open file descriptor.
- */
-#define HAS_PATHCONF           /**/
-#define HAS_FPATHCONF          /**/
-
-/* HAS_SAFE_BCOPY:
- *     This symbol, if defined, indicates that the bcopy routine is available
- *     to copy potentially overlapping memory blocks. Otherwise you should
- *     probably use memmove() or memcpy(). If neither is defined, roll your
- *     own version.
- */
-#define HAS_SAFE_BCOPY /**/
-
-/* HAS_SAFE_MEMCPY:
- *     This symbol, if defined, indicates that the memcpy routine is available
- *     to copy potentially overlapping memory blocks. Otherwise you should
- *     probably use memmove() or memcpy(). If neither is defined, roll your
- *     own version.
- */
-#define HAS_SAFE_MEMCPY        /**/
-
-/* HAS_SYSCONF:
- *     This symbol, if defined, indicates that sysconf() is available
- *     to determine system related limits and options.
- */
-#define HAS_SYSCONF            /**/
-
-/* Time_t:
- *     This symbol holds the type returned by time(). It can be long,
- *     or time_t on BSD sites (in which case <sys/types.h> should be
- *     included).
- */
-#define Time_t time_t          /* Time type */
-
 /* USE_DYNAMIC_LOADING:
  *     This symbol, if defined, indicates that dynamic loading of
  *     some sort is available.
  */
 /*#define USE_DYNAMIC_LOADING          /**/
 
-/* Groups_t:
- *     This symbol holds the type used for the second argument to
- *     getgroups().  Usually, this is the same of gidtype, but
- *     sometimes it isn't.  It can be int, ushort, uid_t, etc... 
- *     It may be necessary to include <sys/types.h> to get any 
- *     typedef'ed information.  This is only required if you have
- *     getgroups().
+/* DB_Prefix_t:
+ *     This symbol contains the type of the prefix structure element
+ *     in the <db.h> header file.  In older versions of DB, it was
+ *     int, while in newer ones it is u_int32_t.
  */
-#ifdef HAS_GETGROUPS
-#define Groups_t gid_t /* Type for 2nd arg to getgroups() */
-#endif
+/* DB_Hash_t:
+ *     This symbol contains the type of the prefix structure element
+ *     in the <db.h> header file.  In older versions of DB, it was
+ *     int, while in newer ones it is size_t.
+ */
+#define DB_Hash_t      "int"           /**/
+#define DB_Prefix_t    "int"   /**/
 
-/* I_NET_ERRNO:
- *     This symbol, if defined, indicates that <net/errno.h> exists and 
- *     should be included.
+/* I_NDBM:
+ *     This symbol, if defined, indicates that ndbm.h exists and should
+ *     be included.
  */
-#define I_NET_ERRNO            /**/
+#define I_NDBM /**/
 
 /* Malloc_t:
  *     This symbol is the type of pointer returned by malloc and realloc.
  */
-#define Malloc_t void *                        /**/
+#define Malloc_t char *                        /**/
 
 /* MYMALLOC:
  *     This symbol, if defined, indicates that we're using our own malloc.
  */
 #define MYMALLOC                       /**/
 
-/* Mode_t:
- *     This symbol holds the type used to declare file modes 
- *     for systems calls.  It is usually mode_t, but may be
- *     int or unsigned short.  It may be necessary to include <sys/types.h>
- *     to get any typedef'ed information.
- */
-#define Mode_t mode_t   /* file mode parameter for system calls*/
-
-/* SSize_t:
- *     This symbol holds the type used by functions that return
- *     a count of bytes or an error condition.  It must be a signed type.
- *     It is usually ssize_t, but may be long or int, etc.
- *     It may be necessary to include <sys/types.h> or <unistd.h>
- *     to get any typedef'ed information.
- *     We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
- */
-#define SSize_t int     /* signed count of bytes */
-
 #endif
index 19304be..d0801e4 100755 (executable)
@@ -25,7 +25,7 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  * that running config.h.SH again will wipe out any changes you've made.
  * For a more permanent change edit config.sh and rerun config.h.SH.
  *
- * Config_h.U
+ * \$Id: Config_h.U,v 3.0.1.2 1993/08/24 12:13:20 ram Exp $
  */
 
 /* Configuration time: $cf_time
@@ -42,6 +42,17 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #define MEM_ALIGNBYTES $alignbytes     /**/
 
+/* ARCHLIB:
+ *     This variable, if defined, holds the name of the directory in
+ *     which the user wants to put architecture-dependent public
+ *     library files for $package.  It is most often a local directory
+ *     such as /usr/local/lib.  Programs using this variable must be
+ *     prepared to deal with filename expansion.  If ARCHLIB is the
+ *     same as PRIVLIB, it is not defined, since presumably the
+ *     program already searches PRIVLIB.
+ */
+#$d_archlib ARCHLIB "$archlib"         /**/
+
 /* BIN:
  *     This symbol holds the path of the bin directory where the package will
  *     be installed. Program must be prepared to deal with ~name substitution.
@@ -54,6 +65,36 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #define BYTEORDER 0x$byteorder /* large digits for MSB */
 
+/* CAT2:
+ *     This macro catenates 2 tokens together.
+ */
+/* STRINGIFY:
+ *     This macro surrounds its token with double quotes.
+ */
+#if $cpp_stuff == 1
+#define CAT2(a,b)a/**/b
+#define CAT3(a,b,c)a/**/b/**/c
+#define CAT4(a,b,c,d)a/**/b/**/c/**/d
+#define CAT5(a,b,c,d,e)a/**/b/**/c/**/d/**/e
+#define STRINGIFY(a)"a"
+               /* If you can get stringification with catify, tell me how! */
+#endif
+#if $cpp_stuff == 42
+#define CAT2(a,b)a ## b
+#define CAT3(a,b,c)a ## b ## c
+#define CAT4(a,b,c,d)a ## b ## c ## d
+#define CAT5(a,b,c,d,e)a ## b ## c ## d ## e
+#define StGiFy(a)# a
+#define STRINGIFY(a)StGiFy(a)
+#define SCAT2(a,b)StGiFy(a) StGiFy(b)
+#define SCAT3(a,b,c)StGiFy(a) StGiFy(b) StGiFy(c)
+#define SCAT4(a,b,c,d)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d)
+#define SCAT5(a,b,c,d,e)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d) StGiFy(e)
+#endif
+#ifndef CAT2
+#include "Bletch: How does this C preprocessor catenate tokens?"
+#endif
+
 /* CPPSTDIN:
  *     This symbol contains the first part of the string which will invoke
  *     the C preprocessor on the standard input and produce to standard
@@ -75,6 +116,15 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_alarm HAS_ALARM            /**/
 
+/* HASATTRIBUTE:
+ *     This symbol indicates the C compiler can check for function attributes,
+ *     such as printf formats. This is normally only supported by GNU cc.
+ */
+#$d_attribut HASATTRIBUTE      /**/
+#ifndef HASATTRIBUTE
+#define __attribute__(_arg_)
+#endif
+
 /* HAS_BCMP:
  *     This symbol is defined if the bcmp() routine is available to
  *     compare blocks of memory.
@@ -113,14 +163,6 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
 #$d_castneg    CASTNEGFLOAT            /**/
 #define CASTFLAGS $castflags           /**/
 
-/* CHARSPRINTF:
- *     This symbol is defined if this system declares "char *sprintf()" in
- *     stdio.h.  The trend seems to be to declare it as "int sprintf()".  It
- *     is up to the package author to declare sprintf correctly based on the
- *     symbol.
- */
-#$d_charsprf   CHARSPRINTF     /**/
-
 /* HAS_CHOWN:
  *     This symbol, if defined, indicates that the chown routine is
  *     available.
@@ -139,6 +181,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_chsize     HAS_CHSIZE              /**/
 
+/* VOID_CLOSEDIR:
+ *     This symbol, if defined, indicates that the closedir() routine
+ *     does not return a value.
+ */
+#$d_void_closedir VOID_CLOSEDIR                /**/
+
 /* HASCONST:
  *     This symbol, if defined, indicates that this C compiler knows about
  *     the const type. There is no need to actually test for that symbol
@@ -182,6 +230,41 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_difftime HAS_DIFFTIME              /**/
 
+/* HAS_DLERROR:
+ *     This symbol, if defined, indicates that the dlerror routine is
+ *     available to return a string describing the last error that
+ *     occurred from a call to dlopen(), dlclose() or dlsym().
+ */
+#$d_dlerror HAS_DLERROR        /**/
+
+/* SETUID_SCRIPTS_ARE_SECURE_NOW:
+ *     This symbol, if defined, indicates that the bug that prevents
+ *     setuid scripts from being secure is not present in this kernel.
+ */
+/* DOSUID:
+ *     This symbol, if defined, indicates that the C program should
+ *     check the script that it is executing for setuid/setgid bits, and
+ *     attempt to emulate setuid/setgid on systems that have disabled
+ *     setuid #! scripts because the kernel can't do it securely.
+ *     It is up to the package designer to make sure that this emulation
+ *     is done securely.  Among other things, it should do an fstat on
+ *     the script it just opened to make sure it really is a setuid/setgid
+ *     script, it should make sure the arguments passed correspond exactly
+ *     to the argument on the #! line, and it should not trust any
+ *     subprocesses to which it must pass the filename rather than the
+ *     file descriptor of the script to be executed.
+ */
+#$d_suidsafe SETUID_SCRIPTS_ARE_SECURE_NOW     /**/
+#$d_dosuid DOSUID              /**/
+
+/* HAS_DREM:
+ *     This symbol, if defined, indicates that the drem routine is
+ *     available.  This routine is roughly the same as fmod, i.e. it
+ *     computes the remainder r=x-n*y, where n=rint(x/y), whereas fmod
+ *     uses n=trunc(x/y).
+ */
+#$d_drem HAS_DREM              /**/
+
 /* HAS_DUP2:
  *     This symbol, if defined, indicates that the dup2 routine is
  *     available to duplicate file descriptors.
@@ -224,6 +307,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_flock HAS_FLOCK            /**/
 
+/* HAS_FMOD:
+ *     This symbol, if defined, indicates that the fmod routine is
+ *     available to compute the remainder r=x-n*y where n=trunc(x/y).
+ */
+#$d_fmod HAS_FMOD              /**/
+
 /* HAS_FORK:
  *     This symbol, if defined, indicates that the fork routine is
  *     available.
@@ -236,6 +325,18 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_fsetpos HAS_FSETPOS        /**/
 
+/* Gconvert:
+ *     This preprocessor macro is defined to convert a floating point
+ *     number to a string without a trailing decimal point.  This
+ *     emulates the behavior of sprintf("%g"), but is sometimes much more
+ *     efficient.  If gconvert() is not available, but gcvt() drops the
+ *     trailing decimal point, then gcvt() is used.  If all else fails,
+ *     a macro using sprintf("%g") is used. Arguments for the Gconvert
+ *     macro are: value, number of digits, whether trailing zeros should
+ *     be retained, and the output buffer.
+ */
+#define Gconvert(x,n,t,b) $d_Gconvert
+
 /* HAS_GETGROUPS:
  *     This symbol, if defined, indicates that the getgroups() routine is
  *     available to get the list of process groups.  If unavailable, multiple
@@ -317,6 +418,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
 #$d_htonl HAS_NTOHL            /**/
 #$d_htonl HAS_NTOHS            /**/
 
+/* HAS_ISASCII:
+ *     This manifest constant lets the C program know that isascii 
+ *     is available.
+ */
+#$d_isascii HAS_ISASCII                /**/
+
 /* HAS_KILLPG:
  *     This symbol, if defined, indicates that the killpg routine is available
  *     to kill process groups.  If unavailable, you probably should use kill
@@ -330,6 +437,18 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_link HAS_LINK      /**/
 
+/* USE_LINUX_STDIO:
+ *     This symbol is defined if this system has a FILE structure declaring
+ *     _IO_read_base, _IO_read_ptr, and _IO_read_end in stdio.h.
+ */
+#$d_linuxstd USE_LINUX_STDIO   /**/
+
+/* HAS_LOCALECONV:
+ *     This symbol, if defined, indicates that the localeconv routine is
+ *     available for numeric and monetary formatting conventions.
+ */
+#$d_locconv HAS_LOCALECONV     /**/
+
 /* HAS_LOCKF:
  *     This symbol, if defined, indicates that the lockf routine is
  *     available to do file locking.
@@ -393,6 +512,14 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_mkdir HAS_MKDIR            /**/
 
+/* HAS_MKFIFO:
+ *     This symbol, if defined, indicates that the mkfifo routine is
+ *     available to create FIFOs. Otherwise, mknod should be able to
+ *     do it for you. However, if mkfifo is there, mknod might require
+ *     super-user privileges which mkfifo will not.
+ */
+#$d_mkfifo HAS_MKFIFO          /**/
+
 /* HAS_MKTIME:
  *     This symbol, if defined, indicates that the mktime routine is
  *     available.
@@ -423,6 +550,19 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_passwd HAS_PASSWD          /**/
 
+/* HAS_PATHCONF:
+ *     This symbol, if defined, indicates that pathconf() is available
+ *     to determine file-system related limits and options associated
+ *     with a given filename.
+ */
+/* HAS_FPATHCONF:
+ *     This symbol, if defined, indicates that pathconf() is available
+ *     to determine file-system related limits and options associated
+ *     with a given open file descriptor.
+ */
+#$d_pathconf HAS_PATHCONF              /**/
+#$d_fpathconf HAS_FPATHCONF            /**/
+
 /* HAS_PAUSE:
  *     This symbol, if defined, indicates that the pause routine is
  *     available to suspend a process until a signal is received.
@@ -480,6 +620,22 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_rmdir HAS_RMDIR            /**/
 
+/* HAS_SAFE_BCOPY:
+ *     This symbol, if defined, indicates that the bcopy routine is available
+ *     to copy potentially overlapping memory blocks. Otherwise you should
+ *     probably use memmove() or memcpy(). If neither is defined, roll your
+ *     own version.
+ */
+#$d_safebcpy HAS_SAFE_BCOPY    /**/
+
+/* HAS_SAFE_MEMCPY:
+ *     This symbol, if defined, indicates that the memcpy routine is available
+ *     to copy potentially overlapping memory blocks. Otherwise you should
+ *     probably use memmove() or memcpy(). If neither is defined, roll your
+ *     own version.
+ */
+#$d_safemcpy HAS_SAFE_MEMCPY   /**/
+
 /* HAS_SELECT:
  *     This symbol, if defined, indicates that the select routine is
  *     available to select active file descriptors. If the timeout field
@@ -524,6 +680,18 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_setpgid HAS_SETPGID        /**/
 
+/* HAS_SETPGRP:
+ *     This symbol, if defined, indicates that the setpgrp routine is
+ *     available to set the current process group.
+ */
+/* USE_BSDPGRP:
+ *     This symbol, if defined, indicates that the BSD notion of process
+ *     group is to be used. For instance, you have to say setpgrp(pid, pgrp)
+ *     instead of the USG setpgrp().
+ */
+#$d_setpgrp HAS_SETPGRP                /**/
+#$d_bsdpgrp USE_BSDPGRP                /**/
+
 /* HAS_SETPGRP2:
  *     This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
  *     routine is available to set the current process group.
@@ -685,6 +853,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_syscall HAS_SYSCALL        /**/
 
+/* HAS_SYSCONF:
+ *     This symbol, if defined, indicates that sysconf() is available
+ *     to determine system related limits and options.
+ */
+#$d_sysconf HAS_SYSCONF        /**/
+
 /* HAS_SYSTEM:
  *     This symbol, if defined, indicates that the system routine is
  *     available to issue a shell command.
@@ -703,6 +877,13 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_tcsetpgrp HAS_TCSETPGRP            /**/
 
+/* Time_t:
+ *     This symbol holds the type returned by time(). It can be long,
+ *     or time_t on BSD sites (in which case <sys/types.h> should be
+ *     included).
+ */
+#define Time_t $timetype               /* Time type */
+
 /* HAS_TIMES:
  *     This symbol, if defined, indicates that the times() routine exists.
  *     Note that this became obsolete on some systems (SUNOS), which now
@@ -739,7 +920,14 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  *     is up to the package author to declare things correctly based on the
  *     symbol.
  */
+/* Signal_t:
+ *     This symbol's value is either "void" or "int", corresponding to the
+ *     appropriate return type of a signal handler.  Thus, you can declare
+ *     a signal handler using "Signal_t (*handler)()", and define the
+ *     handler using "Signal_t handler(sig)".
+ */
 #$d_voidsig VOIDSIG    /**/
+#define Signal_t $signal_t     /* Signal handler's return type */
 
 /* HASVOLATILE:
  *     This symbol, if defined, indicates that this C compiler knows about
@@ -803,6 +991,18 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #define Gid_t $gidtype         /* Type for getgid(), etc... */
 
+/* Groups_t:
+ *     This symbol holds the type used for the second argument to
+ *     getgroups().  Usually, this is the same of gidtype, but
+ *     sometimes it isn't.  It can be int, ushort, uid_t, etc... 
+ *     It may be necessary to include <sys/types.h> to get any 
+ *     typedef'ed information.  This is only required if you have
+ *     getgroups().
+ */
+#ifdef HAS_GETGROUPS
+#define Groups_t $groupstype   /* Type for 2nd arg to getgroups() */
+#endif
+
 /* I_DIRENT:
  *     This symbol, if defined, indicates to the C program that it should
  *     include <dirent.h>. Using this symbol also triggers the definition
@@ -866,11 +1066,11 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$i_memory I_MEMORY            /**/
 
-/* I_NDBM:
- *     This symbol, if defined, indicates that ndbm.h exists and should
- *     be included.
+/* I_NET_ERRNO:
+ *     This symbol, if defined, indicates that <net/errno.h> exists and 
+ *     should be included.
  */
-#$i_ndbm I_NDBM        /**/
+#$i_neterrno I_NET_ERRNO               /**/
 
 /* I_NETINET_IN:
  *     This symbol, if defined, indicates to the C program that it should
@@ -1052,6 +1252,14 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #define Off_t $lseektype               /* <offset> type */
 
+/* Mode_t:
+ *     This symbol holds the type used to declare file modes 
+ *     for systems calls.  It is usually mode_t, but may be
+ *     int or unsigned short.  It may be necessary to include <sys/types.h>
+ *     to get any typedef'ed information.
+ */
+#define Mode_t $modetype        /* file mode parameter for system calls */
+
 /* PRIVLIB:
  *     This symbol contains the name of the private library for this package.
  *     The library is private in the sense that it needn't be in anyone's
@@ -1118,6 +1326,16 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #define Size_t $sizetype        /* length paramater for string functions */
 
+/* SSize_t:
+ *     This symbol holds the type used by functions that return
+ *     a count of bytes or an error condition.  It must be a signed type.
+ *     It is usually ssize_t, but may be long or int, etc.
+ *     It may be necessary to include <sys/types.h> or <unistd.h>
+ *     to get any typedef'ed information.
+ *     We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
+ */
+#define SSize_t $ssizetype      /* signed count of bytes */
+
 /* STDCHAR:
  *     This symbol is defined to be the type of char used in stdio.h.
  *     It has the values "unsigned char" or "char".
@@ -1175,65 +1393,6 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #define LOC_SED        "$sed"  /**/
 
-/* ARCHLIB:
- *     This variable, if defined, holds the name of the directory in
- *     which the user wants to put architecture-dependent public
- *     library files for $package.  It is most often a local directory
- *     such as /usr/local/lib.  Programs using this variable must be
- *     prepared to deal with filename expansion.  If ARCHLIB is the
- *     same as PRIVLIB, it is not defined, since presumably the
- *     program already searches PRIVLIB.
- */
-#$d_archlib ARCHLIB "$archlib"         /**/
-
-/* CAT2:
- *     This macro catenates 2 tokens together.
- */
-/* STRINGIFY:
- *     This macro surrounds its token with double quotes.
- */
-#if $cpp_stuff == 1
-#define CAT2(a,b)a/**/b
-#define CAT3(a,b,c)a/**/b/**/c
-#define CAT4(a,b,c,d)a/**/b/**/c/**/d
-#define CAT5(a,b,c,d,e)a/**/b/**/c/**/d/**/e
-#define STRINGIFY(a)"a"
-               /* If you can get stringification with catify, tell me how! */
-#endif
-#if $cpp_stuff == 42
-#define CAT2(a,b)a ## b
-#define CAT3(a,b,c)a ## b ## c
-#define CAT4(a,b,c,d)a ## b ## c ## d
-#define CAT5(a,b,c,d,e)a ## b ## c ## d ## e
-#define StGiFy(a)# a
-#define STRINGIFY(a)StGiFy(a)
-#define SCAT2(a,b)StGiFy(a) StGiFy(b)
-#define SCAT3(a,b,c)StGiFy(a) StGiFy(b) StGiFy(c)
-#define SCAT4(a,b,c,d)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d)
-#define SCAT5(a,b,c,d,e)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d) StGiFy(e)
-#endif
-#ifndef CAT2
-#include "Bletch: How does this C preprocessor catenate tokens?"
-#endif
-
-/* GNUC_ATTRIBUTE_CHECK:
- *     This symbol indicates the C compiler can check for function attributes,
- *     such as printf formats.
- */
-#$d_attrib     GNUC_ATTRIBUTE_CHECK    /* */
-
-/* VOID_CLOSEDIR:
- *     This symbol, if defined, indicates that the closedir() routine
- *     does not return a value.
- */
-#$d_void_closedir VOID_CLOSEDIR                /**/
-
-/* HAS_DLERROR:
- *     This symbol, if defined, indicates that the dlerror routine is
- *     available.
- */
-#$d_dlerror HAS_DLERROR                /**/
-
 /* DLSYM_NEEDS_UNDERSCORE:
  *     This symbol, if defined, indicates that we need to prepend an
  *     underscore to the symbol name before calling dlsym().  This only
@@ -1242,151 +1401,30 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_dlsymun    DLSYM_NEEDS_UNDERSCORE  /* */
 
-/* SETUID_SCRIPTS_ARE_SECURE_NOW:
- *     This symbol, if defined, indicates that the bug that prevents
- *     setuid scripts from being secure is not present in this kernel.
- */
-/* DOSUID:
- *     This symbol, if defined, indicates that the C program should
- *     check the script that it is executing for setuid/setgid bits, and
- *     attempt to emulate setuid/setgid on systems that have disabled
- *     setuid #! scripts because the kernel can't do it securely.
- *     It is up to the package designer to make sure that this emulation
- *     is done securely.  Among other things, it should do an fstat on
- *     the script it just opened to make sure it really is a setuid/setgid
- *     script, it should make sure the arguments passed correspond exactly
- *     to the argument on the #! line, and it should not trust any
- *     subprocesses to which it must pass the filename rather than the
- *     file descriptor of the script to be executed.
- */
-#$d_suidsafe SETUID_SCRIPTS_ARE_SECURE_NOW     /**/
-
-#$d_dosuid DOSUID              /**/
-
-/* HAS_DREM:
- *     This symbol, if defined, indicates that the drem routine is
- *     available.  This is a Pyramid routine that is the same as
- *     fmod.
- */
-#$d_drem HAS_DREM              /**/
-
-/* HAS_FMOD:
- *     This symbol, if defined, indicates that the fmod routine is
- *     available.
- */
-#$d_fmod HAS_FMOD              /**/
-
-/* Gconvert:
- *     This preprocessor macro is defined to convert a floating point
- *     number to a string without a trailing decimal point.  This
- *     emulates the behavior of sprintf("%g"), but is sometimes much more
- *     efficient.  If gconvert() is not available, but gcvt() drops the
- *     trailing decimal point, then gcvt() is used.  If all else fails,
- *     a macro using sprintf("%g") is used.
- */
-#define Gconvert(x,n,t,b) $d_Gconvert
-
-/* HAS_ISASCII:
- *     This manifest constant lets the C program know that isascii 
- *     is available.
- */
-#$d_isascii HAS_ISASCII                /**/
-
-/* USE_LINUX_STDIO:
- *     This symbol is defined if this system has a FILE structure declaring
- *     _IO_read_base, _IO_read_ptr, and _IO_read_end in stdio.h.
- */
-#$d_linuxstd USE_LINUX_STDIO   /**/
-
-/* HAS_LOCALECONV:
- *     This symbol, if defined, indicates that the localeconv routine is
- *     available for numeric and monetary formatting conventions.
- */
-#$d_locconv HAS_LOCALECONV     /**/
-
-/* HAS_MKFIFO:
- *     This symbol, if defined, indicates that the mkfifo routine is
- *     available.
- */
-#$d_mkfifo HAS_MKFIFO          /**/
-
-/* HAS_PATHCONF:
- *     This symbol, if defined, indicates that pathconf() is available
- *     to determine file-system related limits and options associated
- *     with a given filename.
- */
-/* HAS_FPATHCONF:
- *     This symbol, if defined, indicates that pathconf() is available
- *     to determine file-system related limits and options associated
- *     with a given open file descriptor.
- */
-#$d_pathconf HAS_PATHCONF              /**/
-#$d_fpathconf HAS_FPATHCONF            /**/
-
-/* HAS_SAFE_BCOPY:
- *     This symbol, if defined, indicates that the bcopy routine is available
- *     to copy potentially overlapping memory blocks. Otherwise you should
- *     probably use memmove() or memcpy(). If neither is defined, roll your
- *     own version.
- */
-#$d_safebcpy HAS_SAFE_BCOPY    /**/
-
-/* HAS_SAFE_MEMCPY:
- *     This symbol, if defined, indicates that the memcpy routine is available
- *     to copy potentially overlapping memory blocks. Otherwise you should
- *     probably use memmove() or memcpy(). If neither is defined, roll your
- *     own version.
- */
-#$d_safemcpy HAS_SAFE_MEMCPY   /**/
-
-/* HAS_SETPGRP:
- *     This symbol, if defined, indicates that the setpgrp routine is
- *     available to set the current process group.
- */
-/* USE_BSDPGRP:
- *     This symbol, if defined, indicates that the BSD notion of process
- *     group is to be used. For instance, you have to say setpgrp(pid, pgrp)
- *     instead of the USG setpgrp().
- */
-#$d_setpgrp HAS_SETPGRP                /**/
-#$d_bsdpgrp USE_BSDPGRP                /**/
-
-/* HAS_SYSCONF:
- *     This symbol, if defined, indicates that sysconf() is available
- *     to determine system related limits and options.
- */
-#$d_sysconf HAS_SYSCONF                /**/
-
-/* Time_t:
- *     This symbol holds the type returned by time(). It can be long,
- *     or time_t on BSD sites (in which case <sys/types.h> should be
- *     included).
- */
-#define Time_t $timetype               /* Time type */
-
 /* USE_DYNAMIC_LOADING:
  *     This symbol, if defined, indicates that dynamic loading of
  *     some sort is available.
  */
 #$usedl USE_DYNAMIC_LOADING            /**/
 
-/* Groups_t:
- *     This symbol holds the type used for the second argument to
- *     getgroups().  Usually, this is the same of gidtype, but
- *     sometimes it isn't.  It can be int, ushort, uid_t, etc... 
- *     It may be necessary to include <sys/types.h> to get any 
- *     typedef'ed information.  This is only required if you have
- *     getgroups().
+/* DB_Prefix_t:
+ *     This symbol contains the type of the prefix structure element
+ *     in the <db.h> header file.  In older versions of DB, it was
+ *     int, while in newer ones it is u_int32_t.
  */
-#ifdef HAS_GETGROUPS
-#define Groups_t $groupstype   /* Type for 2nd arg to getgroups() */
-#endif
+/* DB_Hash_t:
+ *     This symbol contains the type of the prefix structure element
+ *     in the <db.h> header file.  In older versions of DB, it was
+ *     int, while in newer ones it is size_t.
+ */
+#define DB_Hash_t      "$db_hashtype"          /**/
+#define DB_Prefix_t    "$db_prefixtype"        /**/
 
-/* I_NET_ERRNO:
- *     This symbol, if defined, indicates that <net/errno.h> exists and 
- *     should be included.
+/* I_NDBM:
+ *     This symbol, if defined, indicates that ndbm.h exists and should
+ *     be included.
  */
-#$i_neterrno I_NET_ERRNO               /**/
+#$i_ndbm I_NDBM        /**/
 
 /* Malloc_t:
  *     This symbol is the type of pointer returned by malloc and realloc.
@@ -1398,23 +1436,5 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_mymalloc MYMALLOC                  /**/
 
-/* Mode_t:
- *     This symbol holds the type used to declare file modes 
- *     for systems calls.  It is usually mode_t, but may be
- *     int or unsigned short.  It may be necessary to include <sys/types.h>
- *     to get any typedef'ed information.
- */
-#define Mode_t $modetype        /* file mode parameter for system calls*/
-
-/* SSize_t:
- *     This symbol holds the type used by functions that return
- *     a count of bytes or an error condition.  It must be a signed type.
- *     It is usually ssize_t, but may be long or int, etc.
- *     It may be necessary to include <sys/types.h> or <unistd.h>
- *     to get any typedef'ed information.
- *     We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
- */
-#define SSize_t $ssizetype      /* signed count of bytes */
-
 #endif
 !GROK!THIS!
diff --git a/deb.c b/deb.c
index d5627fa..f518b19 100644 (file)
--- a/deb.c
+++ b/deb.c
@@ -40,7 +40,7 @@ deb(pat,a1,a2,a3,a4,a5,a6,a7,a8)
 
 #else /* !defined(I_STDARG) && !defined(I_VARARGS) */
 
-#  ifdef STANDARD_C
+#  ifdef I_STDARG
 void
 deb(char *pat, ...)
 #  else
diff --git a/doop.c b/doop.c
index 42a5a0c..99307a7 100644 (file)
--- a/doop.c
+++ b/doop.c
@@ -158,9 +158,9 @@ register SV **sarg;
     register char *t;
     register char *f;
     bool dolong;
-#ifdef QUAD
+#ifdef HAS_QUAD
     bool doquad;
-#endif /* QUAD */
+#endif /* HAS_QUAD */
     char ch;
     register char *send;
     register SV *arg;
@@ -189,9 +189,9 @@ register SV **sarg;
        f = t;
        *buf = '\0';
        xs = buf;
-#ifdef QUAD
+#ifdef HAS_QUAD
        doquad =
-#endif /* QUAD */
+#endif /* HAS_QUAD */
        dolong = FALSE;
        pre = post = 0;
        for (t++; t < send; t++) {
@@ -208,7 +208,7 @@ register SV **sarg;
            case '.': case '#': case '-': case '+': case ' ':
                continue;
            case 'l':
-#ifdef QUAD
+#ifdef HAS_QUAD
                if (dolong) {
                    dolong = FALSE;
                    doquad = TRUE;
@@ -236,9 +236,9 @@ register SV **sarg;
            case 'd':
                ch = *(++t);
                *t = '\0';
-#ifdef QUAD
+#ifdef HAS_QUAD
                if (doquad)
-                   (void)sprintf(buf,s,(quad)SvNV(arg));
+                   (void)sprintf(buf,s,(Quad_t)SvNV(arg));
                else
 #endif
                if (dolong)
@@ -254,9 +254,9 @@ register SV **sarg;
                ch = *(++t);
                *t = '\0';
                value = SvNV(arg);
-#ifdef QUAD
+#ifdef HAS_QUAD
                if (doquad)
-                   (void)sprintf(buf,s,(unsigned quad)value);
+                   (void)sprintf(buf,s,(unsigned Quad_t)value);
                else
 #endif
                if (dolong)
index c83f976..86c3b49 100644 (file)
 
 #include <fcntl.h> 
 
-#ifndef DBXS_HASH_TYPE
-#define DBXS_HASH_TYPE u_int32_t
-#endif
-
-#ifndef DBXS_PREFIX_TYPE
-#define DBXS_PREFIX_TYPE size_t
-#endif
-
 typedef DB * DB_File;
 typedef DBT DBTKEY ;
 
@@ -126,7 +118,7 @@ const DBT * key2 ;
 
 }
 
-static DBXS_PREFIX_TYPE
+static DB_Prefix_t
 btree_prefix(key1, key2)
 const DBT * key1 ;
 const DBT * key2 ;
@@ -173,7 +165,7 @@ const DBT * key2 ;
     return (retval) ;
 }
 
-static DBXS_HASH_TYPE
+static DB_Hash_t
 hash_cb(data, size)
 const void * data ;
 size_t size ;
index 927e2c2..6f54bd0 100644 (file)
@@ -216,7 +216,7 @@ extern long sdbm_hash proto((char *, int));
 #  endif
 #else
 #   ifndef memcmp
-#      define memcmp(s1,s2,l) my_memcmp(s1,s2,l)
+#      define memcmp   my_memcmp
 #   endif
 #endif /* HAS_MEMCMP */
 
index dca9a8d..f4a1b88 100644 (file)
@@ -31,12 +31,17 @@ if test "X$extspec" = X; then
        exit 1;
 fi
 
-# convert old style Name.a into ext/Name/Name.a format
-case "$extspec" in
-ext/*) ;;
-*::*)  extspec=`echo "$extspec" | sed -e 's!\(.*\)::\(.*\)!ext/\1/\2/\2.a!'` ;;
-*)     extspec=`echo "$extspec" | sed -e 's:\(.*\)\.\(.*\):ext/\1/\1.\2:'` ;;
-esac
+# canonise
+extspec=`echo "$extspec" | sed -e 's:^ext/::' -e 's:\.[^\.]*$::'`
+extspec="ext/$extspec"
+tailext=`echo "$extspec" | sed -e 's:.*/\([^/]*\)$:\1:'"`
+headext=`echo "$extspec" | sed -e 's:/[^/]*$::'"`
+if test -d "$headext/$tailext"; then
+    extspec="$headext/$tailext"
+fi
+if test -f "$extspec/$tailext.xs"; then
+    extspec="$extspec/$tailext"
+fi
 
 # get extension directory path, module name and depth
 pname=`echo "$extspec" | sed -e 's:^ext/::' -e 's:/[^/]*$::'`
diff --git a/globals.c b/globals.c
new file mode 100644 (file)
index 0000000..0550a5a
--- /dev/null
+++ b/globals.c
@@ -0,0 +1,2 @@
+#include "INTERN.h"
+#include "perl.h"
index 79363bb..5752c25 100644 (file)
@@ -11,27 +11,24 @@ i_time='define'
 cc="cc -32"
 ccflags="$ccflags -D_POSIX_SOURCE -ansiposix -D_BSD_TYPES -Olimit 3000"
 lddlflags="-32 -shared"
-set `echo X "$libswanted "|sed -e 's/ socket / /' -e 's/ nsl / /' -e 's/ dl /
-/'`
+set `echo X "$libswanted "|sed -e 's/ socket / /' -e 's/ nsl / /' -e 's/ dl / /'`
 shift
 libswanted="$*"
-
+#
 # The following might be of interest if you wish to try 64-bit mode:
-# irix_6.sh
+# irix_6_64bit.sh
 # Krishna Sethuraman, krishna@mit.edu
-# This will build a 64-bit perl 5 executable under IRIX 6.x.
-# I had to remove socket, sun, crypt, nsl, and dl from the 
-# link line because there are no 64-bit libraries with these
-# names (as of IRIX 6.0.1).
+# taken from irix_5.sh .  Changes from irix_5.sh:
+# Olimit and nested comments (warning 1009) no longer accepted
+# -OPT:fold_arith_limit so POSIX module will optimize
+# no 64bit versions of sun, crypt, nsl, socket, dl dso's available
+# as of IRIX 6.0.1 so omit those from libswanted line via `sed'.
 
-# I don't know if this will actually build a fully working perl because I
-# can't tell if the symbols normally provided by these libraries
-# are provided by other libraries which remain on the link line.
-# In any case, perl does build with this file without unresolved
-# symbol complaints.
+# perl 5 built with this hints file passes most tests (`make test').
+# Fails on op/subst test only. (built and tested under IRIX 6.0.1).
 
 # i_time='define'
-# ccflags="$ccflags -D_POSIX_SOURCE -ansiposix -D_BSD_TYPES -Olimit 3000"
+# ccflags="$ccflags -D_POSIX_SOURCE -ansiposix -D_BSD_TYPES -woff 1009 -OPT:fold_arith_limit=1046"
 # lddlflags="-shared"
 # set `echo X "$libswanted "|sed -e 's/ socket / /' -e 's/ sun / /' -e 's/ crypt / /' -e 's/ nsl / /' -e 's/ dl / /'`
 # shift
index 1f86526..71c9e10 100644 (file)
@@ -14,3 +14,9 @@ d_setpgid='define'
 d_setsid='define'
 d_tcgetpgrp='define'
 d_tcsetpgrp='define'
+#
+# On some NeXT machines, the timestamp put by ranlib is not correct, and
+# this may cause useless recompiles.  Fix that by adding a sleep before
+# running ranlib.  The '5' is an empirical number that's "long enough."
+# (Thanks to Andreas Koenig <k@franz.ww.tu-berlin.de>)
+ranlib='sleep 5; /bin/ranlib' 
index fb4bb05..73da720 100755 (executable)
@@ -29,15 +29,7 @@ while (<CONFIG>) {
 }
 close CONFIG;
 
-open(PERL_C, "perl.c");
-while (<PERL_C>) {
-    last if /Revision:/;
-}
-close PERL_C;
-s/.*Revision: //;
-$major = $_ + 0;
-
-$ver = sprintf("%5.3f", $major + $PATCHLEVEL / 1000);
+$ver = sprintf("%5.3f", $] + 0);
 $release = substr($ver,0,3);
 $patchlevel = substr($ver,3,2);
 
@@ -56,6 +48,17 @@ if ($d_dosuid && $>) { die "You must run as root to install suidperl\n"; }
 -x 't/TEST'            || warn "WARNING: You've never run 'make test'!!!",
        "  (Installing anyway.)\n";
 
+if ($d_shrplib) {
+    if (!<libperl*.$so*>) {
+       warn "WARNING: Can't find libperl*.$so* to install into $shrpdir.",
+           "  (Installing other things anyway.)\n";
+    } else {
+       &makedir($shrpdir);
+       -w $shrpdir     || die "$shrpdir is not writable by you\n";
+       &cmd("cp libperl*.$so* $shrpdir");
+    }
+}
+
 # First we install the version-numbered executables.
 
 &unlink("$installbin/perl$ver");
@@ -71,19 +74,13 @@ exit 0 if $versiononly;
 
 # Make links to ordinary names if installbin directory isn't current directory.
 
-($bdev,$bino) = stat($installbin);
-($ddev,$dino) = stat('.');
-
-if ($bdev != $ddev || $bino != $dino) {
+if (! &samepath($installbin, '.')) {
     &unlink("$installbin/perl", "$installbin/suidperl");
     &link("$installbin/perl$ver", "$installbin/perl");
     &link("$installbin/sperl$ver", "$installbin/suidperl") if $d_dosuid;
 }
 
-($bdev,$bino) = stat($installbin);
-($ddev,$dino) = stat('x2p');
-
-if ($bdev != $ddev || $bino != $dino) {
+if (! &samepath($installbin, 'x2p')) {
     &unlink("$installbin/a2p");
     &cmd("cp x2p/a2p $installbin/a2p");
     &chmod(0755, "$installbin/a2p");
@@ -105,8 +102,7 @@ for (@scripts) {
 if ($installmansrc ne '') {
     &makedir($installmansrc);
 
-    ($mdev,$mino) = stat($installmansrc);
-    if ($mdev != $ddev || $mino != $dino) {
+    if (! &samepath($installmansrc, '.')) {
        for (@manpages) {
            ($new = $_) =~ s/man$/$manext/;
            $new =~ s#.*/##;
@@ -131,13 +127,8 @@ $do_installarchlib = $do_installprivlib = 0;
 &makedir($installprivlib);
 &makedir($installarchlib);
 if (chdir "lib") {
-    ($pdev,$pino) = stat($installarchlib);
-    ($ldev,$lino) = stat('.');
-    $do_installarchlib = ($pdev != $ldev || $pino != $lino);
-
-    ($pdev,$pino) = stat($installprivlib);
-    ($ldev,$lino) = stat('.');
-    $do_installprivlib = ($pdev != $ldev || $pino != $lino);
+    $do_installarchlib = ! &samepath($installarchlib, '.');
+    $do_installprivlib = ! &samepath($installprivlib, '.');
 
     if ($do_installarchlib || $do_installprivlib) {
        find(\&installlib, '.');
@@ -156,24 +147,19 @@ foreach $file (<*.h libperl*.a>) {
 
 # Offer to install perl in a "standard" location
 
-($udev,$uino) = stat($mainperldir);
-
 $mainperl_is_instperl = 0;
 
-if (-w _ && ($udev != $bdev || $uino != $bino) && !$nonono) {
+if (-w $mainperldir && ! &samepath($mainperldir, $installbin) && !$nonono) {
     # First make sure $mainperldir/perl is not already the same as
     # the perl we just installed
     if (-x "$mainperldir/perl") {
-       # Use stat so we detect symbolic links transparently 
-       ($mpdev, $mpino) = stat("$mainperldir/perl");
-       ($ipdev, $ipino) = stat("$installbin/perl");
        # Try to be clever about mainperl being a symbolic link
        # to binexp/perl if binexp and installbin are different.
        $mainperl_is_instperl =
-           (($mpdev == $ipdev && $mpino == $ipino) ||
+           &samepath("$mainperldir/perl", "$installbin/perl") ||
             (($binexp ne $installbin) &&
              (-l "$mainperldir/perl") &&
-             ((readlink "$mainperldir/perl") eq "$binexp/perl")));
+             ((readlink "$mainperldir/perl") eq "$binexp/perl"));
     }
     if ((! $mainperl_is_instperl) &&
        (&yn("Many scripts expect perl to be installed as " .
index 1631477..e6b96ef 100644 (file)
@@ -1539,8 +1539,8 @@ sub new_extliblist {
            if (@fullname=<${thispth}/lib${thislib}.${so}.[0-9]*>){
                $fullname=$fullname[-1]; #ATTN: 10 looses against 9!
            } elsif (-f ($fullname="$thispth/lib$thislib.$so")){
-           } elsif (-f ($fullname="$thispth/lib${thislib}_s.a")
-               && ($thislib .= "_s") ){ # we must explicitly ask for _s version
+          } elsif (-f ($fullname="$thispth/lib${thislib}_s.a")
+              && ($thislib .= "_s") ){ # we must explicitly ask for _s version
            } elsif (-f ($fullname="$thispth/lib$thislib.a")){
            } elsif (-f ($fullname="$thispth/Slib$thislib.a")){
            } else { 
index 30389bb..e1476a3 100644 (file)
@@ -71,7 +71,7 @@ sub Tgetent {
            $entry = $1;
            $_ = $2;
            s/\\E/\033/g;
-           s/\\(\d\d\d)/pack('c',$1 & 0177)/eg;
+           s/\\(\d\d\d)/pack('c',oct($1) & 0177)/eg;
            s/\\n/\n/g;
            s/\\r/\r/g;
            s/\\t/\t/g;
diff --git a/mg.c b/mg.c
index 45016a6..98da315 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -1195,7 +1195,7 @@ char *sig;
     return 0;
 }
 
-VOIDRET
+Signal_t
 sighandler(sig)
 int sig;
 {
index 44c3d71..a17eb7f 100644 (file)
@@ -2,7 +2,7 @@
  * "The Road goes ever on and on, down from the door where it began."
  */
 
-#include "INTERN.h"
+#include "EXTERN.h"
 #include "perl.h"
 
 static void xs_init _((void));
index b075e7b..bab1d2d 100644 (file)
--- a/opcode.h
+++ b/opcode.h
@@ -2060,7 +2060,7 @@ EXT U32 opargs[] = {
        0x0111111d,     /* msgrcv */
        0x0001111d,     /* semget */
        0x0011111d,     /* semctl */
-       0x0001111d,     /* semop */
+       0x0000111d,     /* semop */
        0x000009c0,     /* require */
        0x00000140,     /* dofile */
        0x00000140,     /* entereval */
index 351f6af..1a2d5a7 100755 (executable)
--- a/opcode.pl
+++ b/opcode.pl
@@ -564,7 +564,7 @@ msgrcv              msgrcv                  ck_fun          imst    S S S S S
 
 semget         semget                  ck_fun          imst    S S S
 semctl         semctl                  ck_fun          imst    S S S S
-semop          semop                   ck_fun          imst    S S S
+semop          semop                   ck_fun          imst    S S
 
 # Eval.
 
diff --git a/perl.c b/perl.c
index 2f6ba45..ea90305 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -211,7 +211,7 @@ PerlInterpreter *sv_interp;
        return;
     Safefree(sv_interp);
 }
-#ifndef STANDARD_C
+#if !defined(STANDARD_C) && !defined(HAS_GETENV_PROTOTYPE)
 char *getenv _((char *)); /* Usually in <stdlib.h> */
 #endif
 
diff --git a/perl.h b/perl.h
index 4c3c9aa..97c5f93 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -172,7 +172,7 @@ EXT char Error[1];
 #  endif
 #else
 #   ifndef memcmp
-#      define memcmp(s1,s2,l) my_memcmp(s1,s2,l)
+#      define memcmp   my_memcmp
 #   endif
 #endif /* HAS_MEMCMP */
 
@@ -447,17 +447,17 @@ EXT char Error[1];
 #endif
 
 #if defined(cray) || defined(convex) || defined (uts) || BYTEORDER > 0xffff
-#   define QUAD
+#   define HAS_QUAD
 #endif
 
-#ifdef QUAD
+#ifdef HAS_QUAD
 #   ifdef cray
-#      define quad int
+#      define Quad_t int
 #   else
 #      if defined(convex) || defined (uts)
-#          define quad long long
+#          define Quad_t long long
 #      else
-#          define quad long
+#          define Quad_t long
 #      endif
 #   endif
 #endif
@@ -544,8 +544,8 @@ typedef FILE * (*cryptswitch_t) _((FILE *rfp));
 
 #include "handy.h"
 
-#ifdef QUAD
-typedef quad IV;
+#ifdef HAS_QUAD
+typedef Quad_t IV;
 #else
 typedef long IV;
 #endif
@@ -576,14 +576,6 @@ union any {
 #   define I286
 #endif
 
-#ifndef        STANDARD_C
-#   ifdef CHARSPRINTF
-       char *sprintf _((char *, const char *, ...));
-#   else
-       int sprintf _((char *, const char *, ...));
-#   endif
-#endif
-
 #if defined(htonl) && !defined(HAS_HTONL)
 #define HAS_HTONL
 #endif
@@ -778,6 +770,9 @@ char *strcpy(), *strcat();
 
 #if !defined(HAS_FMOD) && defined(HAS_DREM)
 #define fmod(x,y) drem((x),(y))
+#else
+#define USE_MY_FMOD
+#define fmod(x,y) my_fmod(x,y)
 #endif
 
 #ifndef __cplusplus
@@ -882,7 +877,7 @@ EXT XPV *   Xpv;
 EXT char       buf[1024];
 EXT char       tokenbuf[256];
 EXT struct stat        statbuf;
-#ifndef MSDOS
+#ifdef HAS_TIMES
 EXT struct tms timesbuf;
 #endif
 EXT STRLEN na;         /* for use in SvPV when length is Not Applicable */
index d96fd7d..077ecd1 100644 (file)
@@ -104,3 +104,4 @@ html: $(HTML)
 clean:
        rm -f $(MAN) $(HTML)
 
+realclean:     clean
diff --git a/pp.c b/pp.c
index 5c51bc5..38c9e97 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -2280,14 +2280,14 @@ PP(pp_unpack)
     I16 ashort;
     int aint;
     I32 along;
-#ifdef QUAD
-    quad aquad;
+#ifdef HAS_QUAD
+    Quad_t aquad;
 #endif
     U16 aushort;
     unsigned int auint;
     U32 aulong;
-#ifdef QUAD
-    unsigned quad auquad;
+#ifdef HAS_QUAD
+    unsigned Quad_t auquad;
 #endif
     char *aptr;
     float afloat;
@@ -2726,15 +2726,15 @@ PP(pp_unpack)
                sv_setpvn(sv, aptr, len);
            PUSHs(sv_2mortal(sv));
            break;
-#ifdef QUAD
+#ifdef HAS_QUAD
        case 'q':
            EXTEND(SP, len);
            while (len-- > 0) {
-               if (s + sizeof(quad) > strend)
+               if (s + sizeof(Quad_t) > strend)
                    aquad = 0;
                else {
-                   Copy(s, &aquad, 1, quad);
-                   s += sizeof(quad);
+                   Copy(s, &aquad, 1, Quad_t);
+                   s += sizeof(Quad_t);
                }
                sv = NEWSV(42, 0);
                sv_setiv(sv, (IV)aquad);
@@ -2744,11 +2744,11 @@ PP(pp_unpack)
        case 'Q':
            EXTEND(SP, len);
            while (len-- > 0) {
-               if (s + sizeof(unsigned quad) > strend)
+               if (s + sizeof(unsigned Quad_t) > strend)
                    auquad = 0;
                else {
-                   Copy(s, &auquad, 1, unsigned quad);
-                   s += sizeof(unsigned quad);
+                   Copy(s, &auquad, 1, unsigned Quad_t);
+                   s += sizeof(unsigned Quad_t);
                }
                sv = NEWSV(43, 0);
                sv_setiv(sv, (IV)auquad);
@@ -2929,9 +2929,9 @@ PP(pp_pack)
     unsigned int auint;
     I32 along;
     U32 aulong;
-#ifdef QUAD
-    quad aquad;
-    unsigned quad auquad;
+#ifdef HAS_QUAD
+    Quad_t aquad;
+    unsigned Quad_t auquad;
 #endif
     char *aptr;
     float afloat;
@@ -3227,22 +3227,22 @@ PP(pp_pack)
                sv_catpvn(cat, (char*)&along, sizeof(I32));
            }
            break;
-#ifdef QUAD
+#ifdef HAS_QUAD
        case 'Q':
            while (len-- > 0) {
                fromstr = NEXTFROM;
-               auquad = (unsigned quad)SvIV(fromstr);
-               sv_catpvn(cat, (char*)&auquad, sizeof(unsigned quad));
+               auquad = (unsigned Quad_t)SvIV(fromstr);
+               sv_catpvn(cat, (char*)&auquad, sizeof(unsigned Quad_t));
            }
            break;
        case 'q':
            while (len-- > 0) {
                fromstr = NEXTFROM;
-               aquad = (quad)SvIV(fromstr);
-               sv_catpvn(cat, (char*)&aquad, sizeof(quad));
+               aquad = (Quad_t)SvIV(fromstr);
+               sv_catpvn(cat, (char*)&aquad, sizeof(Quad_t));
            }
            break;
-#endif /* QUAD */
+#endif /* HAS_QUAD */
        case 'P':
            len = 1;            /* assume SV is correct length */
            /* FALL THROUGH */
index db62e3c..0b6dcd2 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -880,7 +880,7 @@ I32 cxix;
     }
 }
 
-#ifdef STANDARD_C
+#ifdef I_STDARG
 OP *
 die(char* pat, ...)
 #else
@@ -1531,14 +1531,15 @@ PP(pp_goto)
            SAVETMPS;
            if (CvXSUB(cv)) {
                if (CvOLDSTYLE(cv)) {
+                   I32 (*fp3)_((int,int,int));
                    while (sp > mark) {
                        sp[1] = sp[0];
                        sp--;
                    }
-                   items = (*(I32(*)_((int,int,int)))CvXSUB(cv))(
-                                       CvXSUBANY(cv).any_i32,
-                                       mark - stack_base + 1,
-                                       items);
+                   fp3 = (I32(*)_((int,int,int)))CvXSUB(cv);
+                   items = (*fp3)(CvXSUBANY(cv).any_i32,
+                                  mark - stack_base + 1,
+                                  items);
                    sp = stack_base + items;
                }
                else {
index 69023cf..1dcec63 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -1592,6 +1592,7 @@ PP(pp_entersub)
 
     if (CvXSUB(cv)) {
        if (CvOLDSTYLE(cv)) {
+           I32 (*fp3)_((int,int,int));
            dMARK;
            register I32 items = SP - MARK;
            while (sp > mark) {
@@ -1599,8 +1600,10 @@ PP(pp_entersub)
                sp--;
            }
            stack_sp = mark + 1;
-           items = (*(I32(*)_((int,int,int)))CvXSUB(cv))(CvXSUBANY(cv).any_i32,
-                                       MARK - stack_base + 1, items);
+           fp3 = (I32(*)_((int,int,int)))CvXSUB(cv);
+           items = (*fp3)(CvXSUBANY(cv).any_i32, 
+                          MARK - stack_base + 1,
+                          items);
            stack_sp = stack_base + items;
        }
        else {
index 78cf9d1..71ab257 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -2616,8 +2616,8 @@ PP(pp_system)
     int childpid;
     int result;
     int status;
-    VOIDRET (*ihand)();     /* place to save signal during system() */
-    VOIDRET (*qhand)();     /* place to save signal during system() */
+    Signal_t (*ihand)();     /* place to save signal during system() */
+    Signal_t (*qhand)();     /* place to save signal during system() */
 
 #if defined(HAS_FORK) && !defined(VMS)
     if (SP - MARK == 1) {
diff --git a/proto.h b/proto.h
index 39fed7f..68074f0 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -1,7 +1,7 @@
-#ifndef GNUC_ATTRIBUTE_CHECK /* disable GNUC attribute checking if not GNUC */
-#ifdef  __attribute__        /* Avoid possible redefinition errors */
+#ifndef HASATTRIBUTE       /* disable GNU-cc attribute checking? */
+#ifdef  __attribute__      /* Avoid possible redefinition errors */
 #undef  __attribute__
-#endif  
+#endif
 #define __attribute__(attr)
 #endif
 #ifdef OVERLOAD
@@ -207,6 +207,9 @@ char*       my_bcopy _((char* from, char* to, I32 len));
 char*  my_bzero _((char* loc, I32 len));
 #endif
 void   my_exit _((I32 status)) __attribute__((noreturn));
+#ifdef USE_MY_FMOD
+double my_fmod _((double x, double y));
+#endif
 I32    my_lstat _((void));
 #ifndef HAS_MEMCMP
 I32    my_memcmp _((unsigned char* s1, unsigned char* s2, I32 len));
@@ -386,7 +389,7 @@ char*       screaminstr _((SV* bigsv, SV* littlesv));
 #ifndef VMS
 I32    setenv_getix _((char* nam));
 #endif
-VOIDRET sighandler _((int sig));
+Signal_t sighandler _((int sig));
 SV**   stack_grow _((SV** sp, SV**p, int n));
 int    start_subparse _((void));
 bool   sv_2bool _((SV* sv));
diff --git a/util.c b/util.c
index 3d36097..34aa6dd 100644 (file)
--- a/util.c
+++ b/util.c
 #include <signal.h>
 #endif
 
+/* Omit this -- it causes too much grief on mixed systems.
 #ifdef I_UNISTD
 #  include <unistd.h>
 #endif
+*/
 
 #ifdef I_VFORK
 #  include <vfork.h>
@@ -97,9 +99,9 @@ unsigned long size;
 #endif /* MSDOS */
 {
     char *ptr;
-#ifndef STANDARD_C
+#if !defined(STANDARD_C) && !defined(HAS_REALLOC_PROTOTYPE)
     char *realloc();
-#endif /* ! STANDARD_C */
+#endif /* !defined(STANDARD_C) && !defined(HAS_REALLOC_PROTOTYPE) */
 
 #ifdef MSDOS
        if (size > 0xffff) {
@@ -832,7 +834,7 @@ mess(pat, args)
        return buf;
 }
 
-#ifdef STANDARD_C
+#ifdef I_STDARG
 void
 croak(char* pat, ...)
 #else
@@ -866,7 +868,7 @@ croak(pat, va_alist)
 }
 
 void
-#ifdef STANDARD_C
+#ifdef I_STDARG
 warn(char* pat,...)
 #else
 /*VARARGS0*/
@@ -1342,11 +1344,7 @@ I32
 my_pclose(ptr)
 FILE *ptr;
 {
-#ifdef VOIDSIG
-    void (*hstat)(), (*istat)(), (*qstat)();
-#else
-    int (*hstat)(), (*istat)(), (*qstat)();
-#endif
+    Signal_t (*hstat)(), (*istat)(), (*qstat)();
     int status;
     SV **svp;
     int pid;
@@ -1606,3 +1604,28 @@ I32 *retlen;
     *retlen = s - start;
     return retval;
 }
+
+/* Amazingly enough, some systems (e.g. Dynix 3) don't have fmod.
+   This is a slow, stupid, but working emulation.  (AD)
+*/
+#ifdef USE_MY_FMOD
+double
+my_fmod(x, y)
+double x, y;
+{
+    double i = 0.0;   /* Can't use int because it can overflow */
+    if ((x == 0) || (y == 0))
+       return 0;
+    /* The sign of fmod is the same as the sign of x.  */
+    if ( (x < 0 && y > 0) || (x > 0 && y < 0) )
+       y = -y;
+    if (x > 0) {
+       while (x - i*y > y)
+           i++;
+    } else {
+       while (x - i*y < y)
+           i++;
+    }
+    return x - i * y;
+}
+#endif