This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
5.002 beta 1
authorLarry Wall <lwall@scalpel.netlabs.com>
Mon, 20 Nov 1995 22:01:00 +0000 (10:01 +1200)
committerLarry <lwall@scalpel.netlabs.com>
Mon, 20 Nov 1995 22:01:00 +0000 (10:01 +1200)
If you're adventurous, have a look at

    ftp://ftp.sems.com/pub/outgoing/perl5.0/perl5.002beta1.tar.gz

Many thanks to Andy for doing the integration.

Obviously, if you consult the bugs database, you'll note there are
still plenty of buglets that need fixing, and several enhancements that
I've intended to put in still haven't made it in (Hi, Tim and Ilya).
But I think it'll be pretty stable.  And you can start to fiddle around
with prototypes (which are, of course, still totally undocumented).

Packrats, don't worry too much about readvertising this widely.
Nowadays we're on a T1 here, so our bandwidth is okay.

Have the appropriate amount of jollity.

Larry

189 files changed:
.dotest/last [deleted file]
Changes
Changes.Conf
Configure
Doc/perl5-notes [deleted file]
EXTERN.h
INSTALL
INTERN.h
MANIFEST
Makefile.SH
README.vms
Todo
XSUB.h
av.c
av.h
c2ph.PL [moved from c2ph.SH with 95% similarity, mode: 0644]
cflags.SH
config_H
config_h.SH [changed mode: 0755->0644]
configure [changed mode: 0644->0755]
cop.h
doio.c
doop.c
emacs/cperl-mode [deleted file]
emacs/cperl-mode.el [new file with mode: 0644]
emacs/emacs19 [deleted file]
emacs/perl-mode.el [deleted file]
emacs/perldb.el [deleted file]
emacs/perldb.pl [deleted file]
emacs/tedstuff [deleted file]
embed.h
embed.pl [changed mode: 0644->0755]
ext/DB_File/DB_File.pm
ext/DB_File/DB_File.xs
ext/DB_File/Makefile.PL
ext/Devel/DProf/DProf.pm [deleted file]
ext/Devel/DProf/DProf.xs [deleted file]
ext/Devel/DProf/Makefile.PL [deleted file]
ext/Devel/DProf/README [deleted file]
ext/Devel/DProf/dprofpp [deleted file]
ext/Devel/DProf/test.pl [deleted file]
ext/DynaLoader/DynaLoader.pm
ext/DynaLoader/dl_os2.xs [new file with mode: 0644]
ext/Fcntl/Fcntl.xs
ext/GDBM_File/GDBM_File.pm
ext/GDBM_File/GDBM_File.xs
ext/NDBM_File/hints/solaris.pl
ext/ODBM_File/hints/sco.pl
ext/ODBM_File/hints/solaris.pl
ext/ODBM_File/hints/svr4.pl
ext/POSIX/POSIX.pm
ext/POSIX/POSIX.xs
ext/SDBM_File/Makefile.PL
ext/SDBM_File/sdbm/Makefile.PL
ext/SDBM_File/sdbm/sdbm.c
ext/Socket/Makefile.PL
ext/Socket/Socket.pm
ext/Socket/Socket.xs
global.sym
gv.c
h2ph.PL [moved from h2ph.SH with 81% similarity, mode: 0644]
h2xs.PL [moved from h2xs.SH with 86% similarity, mode: 0644]
hints/aix.sh
hints/dec_osf.sh
hints/freebsd.sh
hints/hpux.sh
hints/irix_6_2.sh [new file with mode: 0644]
hints/netbsd.sh
hints/os2.sh [new file with mode: 0644]
hints/sco.sh [moved from hints/sco_3.sh with 100% similarity]
hints/solaris_2.sh
hints/ultrix_4.sh
hv.c
installman [changed mode: 0644->0755]
installperl
interp.sym
ioctl.pl [deleted file]
lib/AutoLoader.pm
lib/AutoSplit.pm
lib/Cwd.pm
lib/Exporter.pm
lib/ExtUtils/Liblist.pm
lib/ExtUtils/MakeMaker.pm
lib/ExtUtils/Manifest.pm
lib/ExtUtils/xsubpp
lib/File/Find.pm
lib/File/Path.pm
lib/IPC/Open3.pm
lib/Shell.pm
lib/Test/Harness.pm
lib/Text/Tabs.pm
lib/Text/Wrap.pm [new file with mode: 0644]
lib/TieHash.pm
lib/diagnostics.pm [new file with mode: 0755]
lib/dotsh.pl
lib/lib.pm
lib/overload.pm [new file with mode: 0644]
lib/perl5db.pl
lib/splain [new file with mode: 0755]
makeaperl.SH [changed mode: 0644->0755]
mg.c
minimod.PL
miniperlmain.c
op.c
op.h
opcode.h
opcode.pl
os2/Makefile.SH [new file with mode: 0644]
os2/POSIX.mkfifo [new file with mode: 0644]
os2/README [new file with mode: 0644]
os2/diff.Makefile [new file with mode: 0644]
os2/diff.configure [new file with mode: 0644]
os2/diff.installperl [new file with mode: 0644]
os2/diff.mkdep [new file with mode: 0644]
os2/diff.x2pMakefile [new file with mode: 0644]
os2/os2.c [new file with mode: 0644]
os2/os2ish.h [new file with mode: 0644]
patchlevel.h
perl.c
perl.h
perldoc.PL [new file with mode: 0644]
perldoc.SH [deleted file]
perly.c
perly.c.diff
perly.h
perly.y
pod/Makefile
pod/perl.pod
pod/perlbook.pod
pod/perlbot.pod
pod/perldata.pod
pod/perldiag.pod
pod/perldsc.pod [new file with mode: 0644]
pod/perlform.pod
pod/perlfunc.pod
pod/perlipc.pod
pod/perllol.pod [new file with mode: 0644]
pod/perlmod.pod
pod/perlop.pod
pod/perlpod.pod
pod/perlre.pod
pod/perlref.pod
pod/perlsyn.pod
pod/perltrap.pod
pod/perlvar.pod
pod/perlxs.pod
pod/perlxstut.pod [new file with mode: 0644]
pod/pod2html.PL [new file with mode: 0644]
pod/pod2html.SH [deleted file]
pod/pod2latex.PL [moved from pod/pod2latex.SH with 94% similarity, mode: 0644]
pod/pod2man.PL [moved from pod/pod2man.SH with 91% similarity, mode: 0644]
pp.c
pp_ctl.c
pp_hot.c
pp_sys.c
proto.h
regcomp.c
regexec.c
run.c
scope.c
sv.c
t/TEST
t/comp/cpp.aux [changed mode: 0644->0755]
t/lib/socket.t [deleted file]
t/op/overload.t [changed mode: 0755->0644]
t/op/stat.t
toke.c
util.c
vms/Makefile
vms/config.vms
vms/descrip.mms
vms/ext/MM_VMS.pm
vms/gen_shrfls.pl
vms/perlshr.c [deleted file]
vms/perlvms.pod
vms/perly_c.vms [new file with mode: 0644]
vms/perly_h.vms [new file with mode: 0644]
vms/sockadapt.c
vms/sockadapt.h
vms/test.com
vms/vms.c
vms/vms_yfix.pl [new file with mode: 0644]
vms/vmsish.h
writemain.SH
x2p/Makefile.SH
x2p/a2p.h
x2p/cflags.SH
x2p/find2perl.PL [moved from x2p/find2perl.SH with 90% similarity, mode: 0644]
x2p/s2p.PL [moved from x2p/s2p.SH with 90% similarity, mode: 0644]

diff --git a/.dotest/last b/.dotest/last
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/Changes b/Changes
index 0b8794d..8ae3615 100644 (file)
--- a/Changes
+++ b/Changes
 -------------
+Version 5.002
+-------------
+
+Nearly all the changes for 5.001 were bug fixes of one variety or another,
+so here's the bug list, along with the "resolution" for each of them.  If
+you wish to correspond about any of them, please include the bug number.
+
+Added APPLLIB_EXP for embedded perl library support.
+Files patched: perl.c
+
+Couldn't define autoloaded routine by assignment to typeglob.
+Files patched: pp_hot.c sv.c
+
+NETaa13399: Andy patches.
+From: Larry Wall
+Files patched: MANIFEST
+
+NETaa13399: Andy's patch 1m
+Files patched: Configure MANIFEST Makefile.SH embed.h embed.pl
+    ext/GDBM_File/GDBM_File.xs global.sym hints/freebsd.sh installman
+    installperl interp.sym keywords.h keywords.pl lib/Exporter.pm
+    lib/ExtUtils/MakeMaker.pm lib/ExtUtils/xsubpp op.c perl.c perl.h perldoc.SH
+    pod/perl.pod pod/pod2html.SH pp.c pp_ctl.c pp_ctl.c pp_hot.c proto.h
+    regcomp.c regcomp.h regexec.c toke.c x2p/util.c x2p/util.h
+
+NETaa13399: Andy's patch.1l
+Files patched: Changes.Conf Configure Makefile.SH README README.vms c2ph.SH
+    config_H config_h.SH configpm configure doio.c embed.h
+    ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs ext/DynaLoader/DynaLoader.pm
+    ext/DynaLoader/Makefile.PL ext/DynaLoader/README ext/DynaLoader/dl_dlopen.xs
+    ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs ext/GDBM_File/GDBM_File.pm
+    ext/GDBM_File/GDBM_File.xs ext/NDBM_File/hints/solaris.pl
+    ext/ODBM_File/Makefile.PL ext/ODBM_File/hints/sco.pl
+    ext/ODBM_File/hints/solaris.pl ext/ODBM_File/hints/svr4.pl
+    ext/POSIX/POSIX.pm ext/POSIX/POSIX.xs ext/SDBM_File/sdbm/sdbm.c
+    ext/Socket/Socket.pm global.sym h2ph.SH h2xs.SH handy.h hints/README.hints
+    hints/apollo.sh hints/aux.sh hints/cxux.sh hints/dynix.sh hints/epix.sh
+    hints/freebsd.sh hints/hpux_9.sh hints/irix_4.sh hints/irix_5.sh
+    hints/irix_6.sh hints/isc.sh hints/linux.sh hints/netbsd.sh hints/next_3.sh
+    hints/next_3_0.sh hints/powerunix.sh hints/sco_3.sh hints/titanos.sh
+    installman installperl lib/AnyDBM_File.pm lib/AutoLoader.pm lib/AutoSplit.pm
+    lib/Benchmark.pm lib/Carp.pm lib/Cwd.pm lib/English.pm lib/Exporter.pm
+    lib/ExtUtils/Liblist.pm lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Manifest.pm
+    lib/ExtUtils/Mkbootstrap.pm lib/ExtUtils/xsubpp lib/File/Basename.pm
+    lib/File/CheckTree.pm lib/File/Find.pm lib/FileHandle.pm lib/Getopt/Long.pm
+    lib/Getopt/Std.pm lib/I18N/Collate.pm lib/IPC/Open2.pm lib/IPC/Open3.pm
+    lib/Net/Ping.pm lib/Term/Complete.pm lib/Text/Abbrev.pm lib/Text/Tabs.pm
+    lib/ftp.pl lib/getcwd.pl lib/integer.pm lib/less.pm lib/sigtrap.pm
+    lib/strict.pm lib/subs.pm makeaperl.SH makedepend.SH myconfig perl.c perl.h
+    perldoc.SH pod/Makefile pod/perl.pod pod/perlbot.pod pod/perlcall.pod
+    pod/perlfunc.pod pod/perlguts.pod pod/perlop.pod pod/perlre.pod
+    pod/perlxs.pod pod/pod2html.SH pod/pod2latex.SH pod/pod2man.SH pp_ctl.c
+    pp_hot.c pp_sys.c proto.h scope.c sv.c sv.h t/comp/cpp.aux t/comp/cpp.t
+    t/op/misc.t toke.c unixish.h util.c vms/config.vms vms/ext/MM_VMS.pm
+    vms/ext/VMS/stdio/stdio.xs vms/perlvms.pod vms/vms.c x2p/Makefile.SH
+    x2p/find2perl.SH x2p/s2p.SH x2p/str.c
+
+NETaa13399: Jumbo Configure patch (and patch 1)
+Files patched: Changes.Conf
+
+NETaa13399: Jumbo Configure patch (and patch 1)    
+Files patched: Configure INSTALL MANIFEST Makefile.SH README config_H
+    config_h.SH configure embed.h ext/Fcntl/Fcntl.xs ext/ODBM_File/ODBM_File.xs
+    h2xs.SH hints/aix.sh hints/hpux_9.sh hints/isc.sh hints/isc_2.sh
+    hints/solaris_2.sh hints/unicos.sh hints/utekv.sh lib/ExtUtils/MakeMaker.pm
+    makedepend.SH t/README x2p/a2p.h
+
+NETaa13399: Jumbo Configure patch (patches 2 and 3)
+Files patched: Configure INSTALL config_h.SH embed.h ext/Fcntl/Fcntl.xs
+    ext/POSIX/POSIX.xs global.sym mg.c perl.h proto.h
+
+NETaa13525: doc changes
+From: Larry Wall
+Files patched: pod/perlop.pod pod/perltrap.pod
+
+NETaa13525: random cleanup
+Files patched: Configure MANIFEST Makefile.SH cop.h embed.h global.sym
+    hints/dec_osf.sh hv.c lib/dotsh.pl mg.c op.c op.c op.h perl.c perl.c perly.c
+    perly.c perly.c.diff perly.c.diff perly.h perly.y pod/perl.pod
+    pod/perldiag.pod pod/perlfunc.pod pod/perlfunc.pod pod/perlfunc.pod
+    pod/perlfunc.pod pod/perlop.pod pod/perlre.pod pod/perltrap.pod
+    pod/perlxs.pod pod/perlxs.pod pp_ctl.c pp_ctl.c pp_hot.c pp_sys.c proto.h
+    regcomp.c regexec.c sv.c sv.c sv.c toke.c vms/perly_c.vms vms/perly_h.vms
+
+NETaa13540: VMS stuff
+From: Larry Wall
+Files patched: EXTERN.h INTERN.h MANIFEST Makefile.SH README.vms av.c embed.h
+    ext/Socket/Socket.pm ext/Socket/Socket.xs global.sym gv.c lib/AutoSplit.pm
+    lib/ExtUtils/MakeMaker.pm lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Manifest.pm
+    lib/ExtUtils/xsubpp lib/File/Find.pm lib/File/Path.pm lib/lib.pm perl.c
+    perl.h pp_ctl.c pp_sys.c proto.h run.c sv.c vms/Makefile vms/Makefile
+    vms/config.vms vms/descrip.mms vms/descrip.mms vms/ext/MM_VMS.pm
+    vms/gen_shrfls.pl vms/perlvms.pod vms/perly_c.vms vms/perly_h.vms
+    vms/sockadapt.c vms/sockadapt.h vms/test.com vms/vms.c vms/vms_yfix.pl
+    vms/vmsish.h
+
+NETaa13540: VMS uses CLK_TCK for HZ
+Files patched: pp_sys.c
+
+NETaa13721: pad_findlex core dumps on bad CvOUTSIDE()
+From: Carl Witty
+Files patched: op.c sv.c toke.c
+ Each CV has a reference to the CV containing it lexically.  Unfortunately,
+ it didn't reference-count this reference, so when the outer CV was freed,
+ we ended up with a pointer to memory that got reused later as some other kind
+ of SV.
+
+NETaa13721: warning suppression
+Files patched: toke.c
+ (same)
+
+NETaa13722: walk.c had inconsistent static declarations
+From: Tim Bunce
+Files patched: x2p/walk.c
+ Consolidated the various declarations and made them consistent with
+ the actual definitions.
+
+NETaa13729: order-of-evaluation dependency in scope.c on leaving REGCONTEXT
+From: "Jason Shirk"
+Files patched: scope.c
+ Did
+                 I32 delta = SSPOPINT;
+                 savestack_ix -= delta;  /* regexp must have croaked */
+ instead.
+
+NETaa13731: couldn't assign external lexical array to itself
+From: oneill@cs.sfu.ca
+Files patched: op.c
+ The pad_findmy routine was only checking previous statements for previous
+ mention of external lexicals, so the fact that the current statement
+ already mentioned @list was not noted.  It therefore allocated another
+ reference to the outside lexical, and this didn't compare equal when
+ the assigment parsing code was trying to determine whether there was a
+ common variable on either side of the equals.  Since it didn't see the
+ same variable, it thought it could avoid making copies of the values on
+ the stack during list assignment.  Unfortunately, before using those
+ values, the list assignment has to zero out the target array, which
+ destroys the values.
+ The fix was to make pad_findmy search the current statement as well.  This
+ was actually a holdover from some old code that was trying to delay
+ introduction of "my" variables until the next statement.  This is now
+ done with a different mechanism, so the fix should not adversely affect
+ that.
+
+NETaa13733: s/// doesn't free old string when using copy mode
+From: Larry Wall
+Files patched: pp_ctl.c pp_hot.c
+ When I removed the use of sv_replace(), I simply forgot to free the old char*.
+
+NETaa13736: closures leaked memory
+From: Carl Witty
+Files patched: op.c pp.c
+ This is a specific example of a more general bug, fixed as NETaa13760, having
+ to do with reference counts on comppads.
+
+NETaa13739: XSUB interface caches gimme in case XSUB clobbers it
+From: Dean Roehrich
+Files patched: pp_hot.c
+ Applied suggest patch.  Also deleted second gimme declaration as redundant.
+
+NETaa13760: comppad reference counts were inconsistent
+From: Larry Wall
+Files patched: op.c perl.c pp_ctl.c toke.c
+ All official references to comppads are supposed to be through compcv now,
+ but the transformation was not complete, resulting in memory leakage.
+
+NETaa13761: sv_2pv() wrongly preferred IV to NV when SV was readonly
+From: "Jack R. Lawler"
+Files patched: sv.c
+ Okay, I understand how this one happened.  This is a case where a
+ beneficial fix uncovered a bug elsewhere.  I changed the constant
+ folder to prefer integer results over double if the numbers are the
+ same.  In this case, they aren't, but it leaves the integer value there
+ anyway because the storage is already allocated for it, and it *might*
+ be used in an integer context.  And since it's producing a constant, it
+ sets READONLY.  Unfortunately, sv_2pv() bogusly preferred the integer
+ value to the double when READONLY was set.  This never showed up if you
+ just said
+     print 1.4142135623731;
+ because in that case, there was already a string value.
+
+NETaa13772: shmwrite core dumps consistently
+From: Gabe Schaffer
+Files patched: opcode.h opcode.pl
+ The shmwrite operator is a list operator but neglected to push a stack
+ mark beforehand, because an 'm' was missing from opcode.pl.
+
+NETaa13773: $. was misdocumented as read-only.
+From: Inaba Hiroto
+Files patched: pod/perlvar.pod
+     <1.array-element-read-only>
+     % perl -le '$,=", "; $#w=5; for (@w) { $_=1; } print @w' 
+     Modification of a read-only value attempted at -e line 1.
+     % perl4 -le '$,=", "; $#w=5; for (@w) { $_=1; } print @w'   
+     1, 1, 1, 1, 1, 1
+ This one may stay the way it is for performance reasons.
+     <2.begin-local-RS>
+     % cat abc
+     a
+     b
+     c
+     % perl -e 'BEGIN { local $/ = ""; } print "$.:$_" while <>;' abc
+     1:a
+     b
+     c
+     % perl -e '{ local $/ = ""; } print "$.:$_" while <>;' abc
+     1:a
+     2:b
+     3:c
+ $/ wasn't initialized early enough, so local set it back to permanently
+ undefined on exit from the block.
+     <3.grep-x0-bug>
+     % perl -le 'print grep(/^-/ ? ($x=$_) x 0 : 1, "a", "-b", "c");'
+     a
+     % perl4 -le 'print grep(/^-/ ? ($x=$_) x 0 : 1, "a", "-b", "c");'
+     ac
+ An extra mark was left on the stack if (('x') x $repeat) was used in a scalar
+ context.
+     <4.input-lineno-assign>
+     # perl -w does not complain about assignment to $. (Is this just a feature?)
+     # perlvar.pod says "This variable should be considered read-only."
+     % cat abc
+     a
+     b
+     c
+     % perl -wnle '$. = 10 if $. == 2; print "$.:$_"' abc
+     1:a
+     10:b
+     11:c
+ Fixed doc.
+     <5.local-soft-ref.bug>
+     % perl -e 'local ${"a"}=1;'
+     zsh: 529 segmentation fault  perl -e 'local ${"a"}=1;'
+ Now says
+     Can't localize a reference at -e line 1.
+     <6.package-readline>
+     % perl -e 'package foo; sub foo { 1; } package main; $_ = foo::foo(); print'
+     1
+     % perl -e '
+       package readline; sub foo { 1; } package main; $_ = readline::foo(); print'
+     Undefined subroutine &main::foo called at -e line 1.
+     % perl -e '
+       package readline; sub foo { 1; } package main; $_ = &readline::foo(); print'
+     1
+ Now treats foo::bar correctly even if foo is a keyword.
+     <7.page-head-set-to-null-string>
+     % cat page-head
+     #From: russell@ccu1.auckland.ac.nz (Russell Fulton)
+     #Newsgroups: comp.lang.perl
+     #Subject: This script causes Perl 5.00 to sementation fault
+     #Date: 15 Nov 1994 00:11:37 GMT
+     #Message-ID: <3a8ubp$jrj@net.auckland.ac.nz>
+     select((select(STDOUT),  $^='')[0]);  #this is the critical line
+     $a = 'a';
+     write ;
+     exit;
+     format STDOUT =
+     @<<<<<<
+     $a
+     .
+     % perl page-head
+     zsh: 1799 segmentation fault  perl /tmp/page-head
+ Now says
+     Undefined top format "main::" called at ./try line 11.
+     <8.sub-as-index>
+     # parser bug?
+     % perl -le 'sub foo {0}; $x[0]=0;$x[foo]<=0'
+     Unterminated <> operator at -e line 1.
+     % perl -le 'sub foo {0}; $x[0]=0;$x[foo()]<=0'
+ A right square bracket now forces expectation of an operator.
+     <9.unary-minus-to-regexp-var>
+     % cat minus-reg
+     #From: Michael Cook <mcook@cognex.com>
+     #Newsgroups: comp.lang.perl
+     #Subject: bug: print -$1
+     #Date: 01 Feb 1995 15:31:25 GMT
+     #Message-ID: <MCOOK.95Feb1103125@erawan.cognex.com>
+     $_ = "123";
+     /\d+/;
+     print $&, "\n";
+     print -$&, "\n";
+     print 0-$&, "\n";
+     % perl minus-reg
+     123
+     123
+     -123
+ Apparently already fixed in my copy.
+     <10.vec-segv>
+     % cat vec-bug
+     ## Offset values are changed for my machine.
+     #From: augustin@gdstech.grumman.com (Conrad Augustin)
+     #Subject: perl5 vec() bug?
+     #Message-ID: <1994Nov22.193728.25762@gdstech.grumman.com>
+     #Date: Tue, 22 Nov 1994 19:37:28 GMT
+     #The following two statements each produce a segmentation fault in perl5:
+     #vec($a, 21406, 32) = 1;  # seg fault
+     vec($a, 42813, 16) = 1;  # seg fault
+     #When the offset values are one less, all's well:
+     #vec($a, 21405, 32) = 1;  # ok
+     #vec($a, 42812, 16) = 1;  # ok
+     #Interestingly, this is ok for all high values of N:
+     #$N=1000000; vec($a, $N, 8) = 1;
+     % perl vec-bug
+     zsh: 1806 segmentation fault  perl vec-bug
+ Can't reproduce this one.
+
+NETaa13773: $/ not correctly localized in BEGIN
+Files patched: perl.c
+ (same)
+
+NETaa13773: foo::bar was misparsed if foo was a reserved word
+Files patched: toke.c toke.c
+ (same)
+
+NETaa13773: right square bracket didn't force expectation of operator
+Files patched: toke.c
+ (same)
+
+NETaa13773: scalar ((x) x $repeat) left stack mark
+Files patched: op.c
+ (same)
+
+NETaa13778: -w coredumps on <$>
+From: Hans Mulder
+Files patched: pp_hot.c toke.c
+ Now produces suggested error message.  Also installed guard in warning code
+ that coredumped.
+
+NETaa13779: foreach didn't use savestack mechanism
+From: Hans Mulder
+Files patched: cop.h pp_ctl.c
+ The foreach mechanism saved the old scalar value on the context stack
+ rather than the savestack.  It could consequently get out of sync if
+ unexpectedly unwound.
+
+NETaa13785: GIMME sometimes used wrong context frame
+From: Greg Earle
+Files patched: embed.h global.sym op.h pp_ctl.c proto.h
+ The expression inside the return was taking its context from the immediately
+ surrounding block rather than the innermost surrounding subroutine call.
+
+NETaa13794: TieHash produces ${pack} warnings
+From: Stanley Donald Capelik x74321 24-5200 021876
+Files patched: lib/TieHash.pm
+ Changed $pack to $pkg.
+
+NETaa13797: could modify sv_undef through auto-vivification
+From: Ilya Zakharevich
+Files patched: pp.c
+ Inserted the missing check for readonly values on auto-vivification.
+
+NETaa13798: if (...) {print} treats print as quoted
+From: Larry Wall
+Files patched: toke.c
+ The trailing paren of the condition was setting expectations to XOPERATOR
+ rather than XBLOCK, so it was being treated like ${print}.
+
+NETaa13926: commonality was not detected in assignments using COND_EXPR
+From: Mark Hanson
+Files patched: opcode.h opcode.pl
+ The assignment compiler didn't check the 2nd and 3rd args of a ?:
+ for commonality.  It still doesn't, but I made ?: into a "dangerous"
+ operator so it is forced to treat it as common.
+
+NETaa13957: was marking the PUSHMARK as modifiable rather than the arg
+From: David Couture
+Files patched: op.c sv.c
+ It was marking the PUSHMARK as modifiable rather than the arg.
+
+NETaa13962: documentation of behavior of scalar <*> was unclear
+From: Tom Christiansen
+Files patched: pod/perlop.pod
+ Added the following to perlop:
+ A glob only evaluates its (embedded) argument when it is starting a new
+ list.  All values must be read before it will start over.  In a list
+ context this isn't important, because you automatically get them all
+ anyway.  In a scalar context, however, the operator returns the next value
+ each time it is called, or a FALSE value if you've just run out.  Again,
+ FALSE is returned only once.  So if you're expecting a single value from
+ a glob, it is much better to say
+     ($file) = <blurch*>;
+ than
+     $file = <blurch*>;
+ because the latter will alternate between returning a filename and
+ returning FALSE.
+
+NETaa13992: regexp comments not seen after + in non-extended regexp
+From: Mark Knutsen
+Files patched: regcomp.c
+ The code to skip regexp comments was guarded by a conditional that only
+ let it work when /x was in effect.
+
+NETaa14014: use subs should not count as definition, only as declaration
+From: Keith Thompson
+Files patched: sv.c
+ On *foo = \&bar, doesn't set GVf_IMPORTED if foo and bar are in same package.
+
+NETaa14021: sv_inc and sv_dec "upgraded" magical SV to non-magical
+From: Paul A Sand
+Also: Andreas Koenig
+Files patched: sv.c
+ The sv_inc() and sv_dec() routines "upgraded" null magical SVs to non-magical.
+
+NETaa14086: require should check tainting
+From: Karl Simon Berg
+Files patched: pp_ctl.c
+ Since we shouldn't allow tainted requires anyway, it now says:
+   Insecure dependency in require while running with -T switch at tst.pl line 1.
+
+NETaa14104: negation fails on magical variables like $1
+From: tim
+Files patched: pp.c
+ Negation was failing on magical values like $1.  It was testing the wrong
+ bits and also failed to provide a final "else" if none of the bits matched.
+
+NETaa14107: deep sort return leaked contexts
+From: Quentin Fennessy
+Files patched: pp_ctl.c
+ Needed to call dounwind() appropriately.
+
+NETaa14129: attempt to localize via a reference core dumps
+From: Michele Sardo
+Files patched: op.c pod/perldiag.pod
+ Now produces an error "Can't localize a reference", with explanation in
+ perldiag.
+
+NETaa14138: substr() and s/// can cause core dump
+From: Andrew Vignaux
+Files patched: pp_hot.c
+ Forgot to call SvOOK_off() on the SV before freeing its string.
+
+NETaa14145: ${@INC}[0] dumped core in debugger
+From: Hans Mulder
+Files patched: sv.c
+ Now croaks "Bizarre copy of ARRAY in block exit", which is better than
+ a core dump.  The fact that ${@INC}[0] means $INC[0] outside the debugger
+ is a different bug.
+
+NETaa14147: bitwise assignment ops wipe out byte of target string
+From: Jim Richardson
+Files patched: doop.c
+ The code was assuming that the target was not either of the two operands,
+ which is false for an assignment operator.
+
+NETaa14153: lexing of lexicals in patterns fooled by character class
+From: Dave Bianchi
+Files patched: toke.c
+ It never called the dwimmer, which is how it fooled it.
+
+NETaa14154: allowed autoloaded methods by recognizing sub method; declaration
+From: Larry Wall
+Files patched: gv.c
+ Made sub method declaration sufficient for autoloader to stop searching on.
+
+NETaa14156: shouldn't optimize block scope on tainting
+From: Pete Peterson
+Files patched: op.c toke.c
+ I totally disabled the block scope optimization when running tainted.
+
+NETaa14157: -T and -B only allowed 1/30 "odd" characters--changed to 1/3
+From: Tor Lillqvist
+Files patched: pp_sys.c
+ Applied suggested patch.
+
+NETaa14160: deref of null symbol should produce null list
+From: Jared Rhine
+Files patched: pp_hot.c
+ It didn't check for list context before returning undef.
+
+NETaa14162: POSIX::gensym now returns a symbol reference
+From: Josh N. Pritikin
+Also: Tim Bunce
+Files patched: ext/POSIX/POSIX.pm
+ Applied suggested patch.
+
+NETaa14164: POSIX autoloader now distinguishes non-constant "constants"
+From: Tim Bunce <Tim.Bunce@ig.co.uk>
+Files patched: ext/POSIX/POSIX.pm ext/POSIX/POSIX.xs
+ The .xs file now distinguishes non-constant "constants" by setting EAGAIN.
+ This will also let us use #ifdef within the .xs file to de-constantify
+ any other macros that happen not to be constants even if they don't use
+ an argument.
+
+NETaa14166: missing semicolon after "my" induces core dump
+From: Thomas Kofler
+Files patched: toke.c
+ The parser was left thinking it was still processing a "my", and flubbed.
+ I made it wipe out the "in_my" variable on a syntax error.
+
+NETaa14166: missing semicolon after "my" induces core dump"
+Files patched: toke.c
+ (same)
+
+NETaa14206: can now use English and strict at the same time
+From: Andrew Wilcox
+Files patched: sv.c
+ It now counts imported symbols as okay under "use strict".
+
+NETaa14206: can now use English and strict at the same time 
+Files patched: gv.c pod/perldiag.pod
+ (same)
+
+NETaa14265: elseif now produces severe warning
+From: Yutao Feng
+Files patched: pod/perldiag.pod toke.c
+ Now complains explicitly about "elseif".
+
+NETaa14279: list assignment propagated taintedness to independent scalars
+From: Tim Freeman
+Files patched: pp_hot.c
+ List assignment needed to be modified so that tainting didn't propagate
+ between independent scalar values.
+
+NETaa14312: undef in @EXPORTS core dumps
+From: William Setzer
+Files patched: lib/Exporter.pm
+ Now says:
+     Unable to create sub named "t::" at lib/Exporter.pm line 159.
+     Illegal null symbol in @t::EXPORT at -e line 1
+     BEGIN failed--compilation aborted at -e line 1.
+
+NETaa14312: undef in @EXPORTS core dumps     
+Files patched: pod/perldiag.pod sv.c
+ (same)
+
+NETaa14321: literal @array check shouldn't happen inside embedded expressions
+From: Mark H. Nodine
+Files patched: toke.c
+ The general solution to this is to disable the literal @array check within
+ any embedded expression.  For instance, this also failed bogusly:
+     print "$foo{@foo}";
+ The reason fixing this also fixes the s///e problem is that the lexer
+ effectively puts the RHS into a do {} block, making the expression
+ embedded within curlies, as far as the error message is concerned.
+
+NETaa14322: now localizes $! during POSIX::AUTOLOAD
+From: Larry Wall
+Files patched: ext/POSIX/POSIX.pm
+ Added local $! = 0.
+
+NETaa14324: defined() causes spurious sub existence
+From: "Andreas Koenig"
+Files patched: op.c pp.c
+ It called pp_rv2cv which wrongly assumed it could add any sub it referenced.
+
+NETaa14336: use Module () forces import of nothing
+From: Tim Bunce
+Files patched: op.c
+ use Module () now refrains from calling import at all.
+
+NETaa14353: added special HE allocator
+From: Larry Wall
+Files patched: global.sym
+
+NETaa14353: added special HE allocator 
+Files patched: hv.c perl.h
+
+NETaa14353: array extension now converts old memory to SV storage.
+Files patched: av.c av.h sv.c
+
+NETaa14353: hashes now convert old storage into SV arenas.
+Files patched: global.sym
+
+NETaa14353: hashes now convert old storage into SV arenas.  
+Files patched: hv.c perl.h
+
+NETaa14353: upgraded SV arena allocation
+Files patched: proto.h
+
+NETaa14353: upgraded SV arena allocation            
+Files patched: perl.c sv.c
+
+NETaa14422: added rudimentary prototypes
+From: Gisle Aas
+Files patched: Makefile.SH op.c op.c perly.c perly.c.diff perly.h perly.y proto.h sv.c toke.c
+ Message-Id: <9509290018.AA21548@scalpel.netlabs.com>
+ To: doughera@lafcol.lafayette.edu (Andy Dougherty)
+ Cc: perl5-porters@africa.nicoh.com
+ Subject: Re: Jumbo Configure patch vs. 1m. 
+ Date: Thu, 28 Sep 95 17:18:54 -0700
+ From: lwall@scalpel.netlabs.com (Larry Wall)
+ : No.  Larry's currently got the patch pumpkin for all such core perl topics.
+ I dunno whether you should let me have the patch pumpkin or not.  To fix
+ a Sev 2 I just hacked in rudimentary prototypes.  :-)
+ We can now define true unary subroutines, as well as argumentless
+ subroutines:
+     sub baz () { 12; }                        # Must not have argument
+     sub bar ($) { $_[0] * 7 }         # Must have exactly one argument
+     sub foo ($@) { print "@_\n" }     # Must have at least one argument
+     foo bar baz / 2 || "oops", "is the answer";
+ This prints "42 is the answer" on my machine.  That is, it's the same as
+     foo( bar( baz() / 2) || "oops", "is the answer");
+ Attempting to compile
+     foo;
+ results in
+     Too few arguments for main::foo at ./try line 8, near "foo;"
+ Compiling
+     bar 1,2,3;
+ results in
+     Too many arguments for main::bar at ./try line 8, near "foo;"
+     
+ But
+     @array = ('a','b','c');
+     foo @array, @array;
+     
+ prints "3 a b c" because the $ puts the first arg of foo into scalar context.
+ The main win at this point is that we can say
+     sub AAA () { 1; }
+     sub BBB () { 2; }
+ and the user can say AAA + BBB and get 3.
+ I'm not quite sure how this interacts with autoloading though.  I fear
+ POSIX.pm will need to say
+     sub E2BIG ();
+     sub EACCES ();
+     sub EAGAIN ();
+     sub EBADF ();
+     sub EBUSY ();
+     ...
+     sub _SC_STREAM_MAX ();
+     sub _SC_TZNAME_MAX ();
+     sub _SC_VERSION ();
+ unless we can figure out how to efficiently declare a default prototype
+ at import time.  Meaning, not using eval.  Currently
+     *foo = \&bar;
+ (the ordinary import mechanism) implicitly stubs &bar with no prototype if
+ &bar is not yet declared.  It's almost like you want an AUTOPROTO to
+ go with your AUTOLOAD.
+ Another thing to rub one's 5 o'clock shadow over is that there's no way
+ to apply a prototype to a method call at compile time.
+ And no, I don't want to have the
+     sub howabout ($formal, @arguments) { ... }
+ argument right now.
+ Larry
+
+NETaa14444: lexical scalar didn't autovivify
+From: Gurusamy Sarathy
+Files patched: op.c pp_hot.c
+ It didn't have code in pp_padsv to do the right thing.
+
+NETaa14448: caller could dump core when used within an eval or require
+From: Danny R. Faught
+Files patched: pp_ctl.c
+ caller() was incorrectly assuming the context stack contained a subroutine
+ context when it in fact contained an eval context.
+
+NETaa14451: improved error message on bad pipe filehandle
+From: Danny R. Faught
+Files patched: pp_sys.c
+ Now says the slightly more informative
+     Can't use an undefined value as filehandle reference at ./try line 3.
+
+NETaa14462: pp_dbstate had a scope leakage on recursion suppression
+From: Tim Bunce
+Files patched: pp_ctl.c
+ Swapped the code in question around.
+
+NETaa14482: sv_unref freed ref prematurely at times
+From: Gurusamy Sarathy
+Files patched: sv.c
+ Made sv_unref() mortalize rather than free the old reference.
+
+NETaa14484: appending string to array produced bizarre results
+From: Greg Ward
+Also: Malcolm Beattie
+Files patched: pp_hot.c
+ Will now say, "Can't coerce ARRAY to string".
+
+NETaa14525: assignment to globs didn't reset them correctly
+From: Gurusamy Sarathy
+Files patched: sv.c
+ Applied parts of patch not overridden by subsequent patch.
+
+NETaa14529: a partially matching subpattern could spoof infinity detector
+From: Wayne Berke
+Files patched: regexec.c
+ A partial match on a subpattern could fool the infinite regress detector
+ into thinking progress had been made.
+ The previous workaround prevented another bug (NETaa14529) from being fixed,
+ so I've backed it out.  I'll need to think more about how to detect failure
+ to progress.  I'm still hopeful it's not equivalent to the halting problem.
+
+NETaa14535: patches from Gurusamy Sarathy
+From: Gurusamy Sarathy
+Files patched: op.c pp.c pp_hot.c regexec.c sv.c toke.c
+ Applied most recent suggested patches.
+
+NETaa14538: method calls were treated like do {} under loop modifiers
+From: Ilya Zakharevich
+Files patched: perly.c perly.y
+ Needed to take the OPf_SPECIAL flag off of entersubs from method reductions.
+ (It was probably a cut-and-paste error from long ago.)
+
+NETaa14540: foreach (@array) no longer does extra stack copy
+From: darrinm@lmc.com
+Files patched: Todo op.c pp_ctl.c pp_hot.c
+ Fixed by doing the foreach(@array) optimization, so it iterates
+ directly through the array, and can detect the implicit shift from
+ referencing <>.
+
+NETaa14548: magic sets didn't check private OK bits
+From: W. Bradley Rubenstein
+Files patched: mg.c
+ The magic code was getting mixed up between private and public POK bits.
+
+NETaa14550: made ~ magic magical
+From: Tim Bunce
+Files patched: sv.c
+ Applied suggested patch.
+
+NETaa14551: humongous header causes infinite loop in format
+From: Grace Lee
+Files patched: pp_sys.c
+ Needed to check for page exhaustion after doing top-of-form.
+
+NETaa14558: attempt to call undefined top format core dumped
+From: Hallvard B Furuseth
+Files patched: pod/perldiag.pod pp_sys.c
+ Now issues an error on attempts to call a non-existent top format.
+
+NETaa14561: Gurusamy Sarathy's G_KEEPERR patch
+From: Andreas Koenig
+Also: Gurusamy Sarathy
+Also: Tim Bunce
+Files patched: cop.h interp.sym perl.c perl.h pp_ctl.c pp_sys.c sv.c toke.c
+ Applied latest patch.
+
+NETaa14581: shouldn't execute BEGIN when there are compilation errors
+From: Rickard Westman
+Files patched: op.c
+ Perl should not try to execute BEGIN and END blocks if there's been a
+ compilation error.
+
+NETaa14582: got SEGV sorting sparse array
+From: Rick Pluta
+Files patched: pp_ctl.c
+ Now weeds out undefined values much like Perl 4 did.
+ Now sorts undefined values to the front.
+
+NETaa14582: sort was letting unsortable values through to comparison routine
+Files patched: pp_ctl.c
+ (same)
+
+NETaa14614: now does dbmopen with perl_eval_sv()
+From: The Man
+Files patched: perl.c pp_sys.c proto.h
+ dbmopen now invokes perl_eval_sv(), which should handle error conditions
+ better.
+
+NETaa14636: Jumbo Dynaloader patch
+From: Tim Bunce
+Files patched: ext/DynaLoader/DynaLoader.pm ext/DynaLoader/dl_dld.xs
+    ext/DynaLoader/dl_dlopen.xs ext/DynaLoader/dl_hpux.xs
+    ext/DynaLoader/dl_next.xs ext/DynaLoader/dl_vms.xs ext/DynaLoader/dlutils.c
+ Applied suggested patches.
+
+NETaa14637: checkcomma routine was stupid about bareword sub calls
+From: Tim Bunce <Tim.Bunce@ig.co.uk>
+Files patched: toke.c
+ The checkcomma routine was stupid about bareword sub calls.
+
+NETaa14639: (?i) didn't reset on runtime patterns
+From: Mark A. Scheel
+Files patched: op.h pp_ctl.c toke.c
+ It didn't distinguish between permanent flags outside the pattern and
+ temporary flags within the pattern.
+
+NETaa14649: selecting anonymous globs dumps core
+From: Chip Salzenberg
+Files patched: cop.h doio.c embed.h global.sym perl.c pp_sys.c proto.h
+ Applied suggested patch, but reversed the increment and decrement to avoid
+ decrementing and freeing what we're going to increment.
+
+NETaa14655: $? returned negative value on AIX
+From: Kim Frutiger
+Also: Stephen D. Lee
+Files patched: pp_sys.c
+ Applied suggested patch.
+
+NETaa14658: infinite loop in c2ph
+From: Nick Gianniotis
+Files patched: c2ph.SH
+ Applied suggested patch.
+
+NETaa14668: {2,} could match once
+From: Hugo van der Sanden
+Files patched: regexec.c
+ When an internal pattern failed a conjecture, it didn't back off on the
+ number of times it thought it had matched.
+
+NETaa14673: open $undefined dumped core
+From: Samuli K{rkk{inen
+Files patched: pp_sys.c
+ pp_open() didn't check its argument for globness.
+
+NETaa14683: stringifies were running pad out of space
+From: Robin Barker
+Files patched: op.h toke.c
+ Increased PADOFFSET to a U32, and made lexer not put double-quoted strings
+ inside OP_STRINGIFY unless they really needed it.
+
+NETaa14689: shouldn't have . in @INC when tainting
+From: William R. Somsky
+Files patched: perl.c
+ Now does not put . into @INC when tainting.  It may still be added with a 
+     use lib ".";
+ or, to put it at the end,
+     BEGIN { push(@INC, ".") }
+ but this is not recommended unless a chdir to a known location has been done
+ first.
+
+NETaa14690: values inside tainted SVs were ignored
+From: "James M. Stern"
+Files patched: pp.c pp_ctl.c
+ It was assuming that a tainted value was a string.
+
+NETaa14692: format name required qualification under use strict
+From: Tom Christiansen
+Files patched: gv.c
+ Now treats format names the same as subroutine names.
+
+NETaa14695: added simple regexp caching
+From: John Rowe
+Files patched: pp_ctl.c
+ Applied suggested patch.
+
+NETaa14697: regexp comments were sometimes wrongly treated as literal text
+From: Tom Christiansen
+Files patched: regcomp.c
+ The literal-character grabber didn't know about extended comments.
+ (By the way, Tom, the boxed form of quoting in the previous enclosure is
+ exceeding antisocial when you want to extract the code from it.)
+
+NETaa14704: closure got wrong outer scope if outer sub was predeclared
+From: Marc Paquette
+Files patched: op.c
+ The outer scope of the anonymous sub was set to the stub rather than to
+ the actual subroutine.  I kludged it by making the outer scope of the
+ stub be the actual subroutine, if anything is depending on the stub.
+
+NETaa14705: $foo .= $foo did free memory read
+From: Gerd Knops
+Files patched: sv.c
+ Now modifies address to copy if it was reallocated.
+
+NETaa14711: added (&) and (*) prototypes for blocks and symbols
+From: Kenneth Albanowski
+Files patched: Makefile.SH op.c perly.c perly.h perly.y toke.c
+ & now means that it must have an anonymous sub as that argument.  If
+ it's the first argument, the sub may be specified as a block in the
+ indirect object slot, much like grep or sort, which have prototypes of (&@).
+ Also added * so you can do things like
+     sub myopen (*;$);
+     myopen(FOO, $filename);
+
+NETaa14713: setuid FROM root now defaults to not do tainting
+From: Tony Camas
+Files patched: mg.c perl.c pp_hot.c
+ Applied suggested patch.
+
+NETaa14714: duplicate magics could be added to an SV
+From: Yary Hluchan
+Files patched: sv.c sv.c
+ The sv_magic() routine didn't properly check to see if it already had a
+ magic of that type.  Ordinarily it would have, but it was called during
+ mg_get(), which forces the magic flags off temporarily.
+
+NETaa14734: ref should never return undef
+From: Dale Amon
+Files patched: pp.c t/op/overload.t
+ Now returns null string.
+
+NETaa14751: slice of undefs now returns null list
+From: Tim Bunce
+Files patched: pp.c pp_hot.c
+ Null list clobberation is now done in lslice, not aassign.
+
+NETaa14789: select coredumped on Linux
+From: Ulrich Kunitz
+Files patched: pp_sys.c
+ Applied suggested patches, more or less.
+
+NETaa14789: straightened out ins and out of duping
+Files patched: lib/IPC/Open3.pm
+ (same)
+
+NETaa14791: implemented internal SUPER class
+From: Nick Ing-Simmons
+Also: Dean Roehrich
+Files patched: gv.c
+ Applied suggested patch.
+
+NETaa14845: s/// didn't handle offset strings
+From: Ken MacLeod
+Files patched: pp_ctl.c
+ Needed a call to SvOOK_off(targ) in pp_substcont().
+
+NETaa14851: Use of << to mean <<"" is deprecated
+From: Larry Wall
+Files patched: toke.c
+
+NETaa14865: added HINT_BLOCK_SCOPE to "elsif"
+From: Jim Avera
+Files patched: perly.y
+ Needed to set HINT_BLOCK_SCOPE on "elsif" to prevent the do block from
+ being optimized away, which caused the statement transition in elsif
+ to reset the stack too far back.
+
+NETaa14876: couldn't delete localized GV safely
+From: John Hughes
+Files patched: pp.c scope.c
+ The reference count of the "borrowed" GV needed to be incremented while
+ there was a reference to it in the savestack.
+
+NETaa14887: couldn't negate magical scalars
+From: ian
+Also: Gurusamy Sarathy
+Files patched: pp.c
+ Applied suggested patch, more or less.  (It's not necessary to test both
+ SvNIOK and SvNIOKp, since the private bits are always set if the public
+ bits are set.)
+
+NETaa14893: /m modifier was sticky
+From: Jim Avera
+Files patched: pp_ctl.c
+ pp_match() and pp_subst() were using an improperly scoped SAVEINT to restore
+ the value of the internal variable multiline.
+
+NETaa14893: /m modifier was sticky     
+Files patched: cop.h pp_hot.c
+ (same)
+
+Needed to make install paths absolute.
+Files patched: installperl
+
+derived it
+Files patched: perly.h
+
+makedir() looped on a symlink to a directory.
+Files patched: installperl
+
+
+-------------
 Version 5.001
 -------------
 
index 0f383ce..f77944a 100644 (file)
@@ -11,6 +11,8 @@ work on a wider range of platforms.
 
 This is a brief summary of the most important changes:
 
+    Slightly changed installation directories.  See INSTALL.
+
     Include 5.000 - 5.001 upgrage notes :-) (see below).  You might
     want to read through them as well as these notes.
 
@@ -18,14 +20,15 @@ This is a brief summary of the most important changes:
     now view perl module documentation with either your system's man(1)
     program or with the supplied perldoc script.
 
-    Support Linux ELF dynamic loading.
-   
     Many hint file updates.
 
     Improve and simplify detection of local libraries and header files.
 
     Expand documentation of installation process in new INSTALL file.
 
+    Try to reduce Unixisms (such as SH file extraction) to enhance
+    portability to other platforms.  There's still a long way to go.
+
 Upgrade Traps and Pitfalls:
 
 Since a lot has changed in the build process, you are probably best off
index b9a1be8..432398c 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -20,7 +20,7 @@
 
 # $Id: Head.U,v 3.0.1.8 1995/07/25 13:40:02 ram Exp $
 #
-# Generated on Thu Oct 19 10:47:09 EDT 1995 [metaconfig 3.0 PL58]
+# Generated on Mon Nov 20 09:55:37 EST 1995 [metaconfig 3.0 PL58]
 
 cat >/tmp/c1$$ <<EOF
 ARGGGHHHH!!!!!
@@ -206,6 +206,13 @@ RCSfile=''
 Revision=''
 Source=''
 State=''
+ar=''
+archobjs=''
+exe_ext=''
+firstmakefile=''
+lib_ext=''
+obj_ext=''
+path_sep=''
 afs=''
 alignbytes=''
 archlib=''
@@ -430,6 +437,7 @@ i_float=''
 i_gdbm=''
 i_grp=''
 i_limits=''
+i_locale=''
 i_malloc=''
 i_math=''
 i_memory=''
@@ -517,12 +525,16 @@ rd_nodata=''
 groupcat=''
 hostcat=''
 passcat=''
+d_oldarchlib=''
+oldarchlib=''
+oldarchlibexp=''
 orderlib=''
 ranlib=''
 package=''
 spackage=''
 patchlevel=''
 perladmin=''
+perlpath=''
 prefix=''
 prefixexp=''
 installprivlib=''
@@ -535,18 +547,17 @@ scriptdir=''
 scriptdirexp=''
 selecttype=''
 sig_name=''
-sig_max=''
 sig_num=''
-d_sitelib=''
-installsitelib=''
-sitelib=''
-sitelibexp=''
+installsitearch=''
+sitearch=''
+sitearchexp=''
 sizetype=''
 so=''
 sharpbang=''
 shsharp=''
 spitshell=''
 ssizetype=''
+startperl=''
 startsh=''
 stdchar=''
 sysman=''
@@ -778,7 +789,8 @@ END {
 EOF
 
 : process the command line options
-set X `for arg in "$@"; do echo $arg; done | awk -f options.awk`
+set X `for arg in "$@"; do echo "X$arg"; done |
+       sed -e s/X// | awk -f options.awk`
 eval "set $*"
 shift
 rm -f options.awk
@@ -1291,7 +1303,7 @@ for dir in \$*; do
        for thisthing in \$dir/\$thing; do
                : just loop through to pick last item
        done
-       if test -f \$thisthing; then
+       if test -f \$thisthing -a -r \$thisthing; then
                echo \$thisthing
                exit 0
        elif test -f \$dir/\$thing.exe; then
@@ -1354,7 +1366,9 @@ for file in $loclist; do
                echo $file is in $xxx.
                ;;
        *)
-               echo "I don't know where $file is.  I hope it's in everyone's PATH."
+               echo "I don't know where '$file' is, and my life depends on it."
+               echo "Go find a public domain implementation or fix your PATH setting!"
+               exit 1
                ;;
        esac
 done
@@ -1530,9 +1544,18 @@ EOM
        $test -d /usr/apollo/bin && osname=apollo
        $test -f /etc/saf/_sactab && osname=svr4
        $test -d /usr/include/minix && osname=minix
-       $test -d /MachTen && osname=machten && \
-               osvers=`/usr/etc/version | $awk '{print $2}' | \
-               $sed -e 's/[A-Za-z]$//'`
+       if $test -d /MachTen; then
+               osname=machten 
+               if $test -x /sbin/version; then
+                       osvers=`/sbin/version | $awk '{print $2}' | 
+                       $sed -e 's/[A-Za-z]$//'`
+               elif $test -x /usr/etc/version; then
+                       osvers=`/usr/etc/version | $awk '{print $2}' | 
+                       $sed -e 's/[A-Za-z]$//'`
+               else
+                       osvers="$2.$3"
+               fi
+       fi
        if $test -f $uname; then
                set X $myuname
                shift
@@ -1858,371 +1881,91 @@ $test -s .temp || echo unknown > .temp
 cf_by=`$cat .temp`
 $rm -f .temp
 
-: determine where manual pages are on this system
+: determine the architecture name
 echo " "
-case "$sysman" in
-'') 
-       syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
-       syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
-       syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
-       syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
-       syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
-       sysman=`./loc . /usr/man/man1 $syspath`
+if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
+       tarch=`arch`"-$osname"
+elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
+       if uname -m > tmparch 2>&1 ; then
+               tarch=`$sed -e 's/ /_/g' -e 's/$/'"-$osname/" tmparch`
+       else
+               tarch="$osname"
+       fi
+       $rm -f tmparch
+else
+       tarch="$osname"
+fi
+case "$myarchname" in
+''|"$tarch") ;;
+*)
+       echo "(Your architecture name used to be $myarchname.)"
+       archname=''
        ;;
 esac
-if $test -d "$sysman"; then
-       echo "System manual is in $sysman." >&4
+case "$archname" in
+'') dflt="$tarch";;
+*) dflt="$archname";;
+esac
+rp='What is your architecture name'
+. ./myread
+archname="$ans"
+myarchname="$tarch"
+
+: is AFS running?
+echo " "
+if test -d /afs; then
+       echo "AFS may be running... I'll be extra cautious then..." >&4
+       afs=true
 else
-       echo "Could not find manual pages in source form." >&4
+       echo "AFS does not seem to be running..." >&4
+       afs=false
 fi
 
-: see what memory models we can support
-case "$models" in
-'')
-       $cat >pdp11.c <<'EOP'
-main() {
-#ifdef pdp11
-       exit(0);
-#else
-       exit(1);
-#endif
-}
-EOP
-       cc -o pdp11 pdp11.c >/dev/null 2>&1
-       if ./pdp11 2>/dev/null; then
-               dflt='unsplit split'
-       else
-               tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
-               case "$tans" in
-               X) dflt='none';;
-               *) if $test -d /lib/small || $test -d /usr/lib/small; then
-                               dflt='small'
-                       else
-                               dflt=''
-                       fi
-                       if $test -d /lib/medium || $test -d /usr/lib/medium; then
-                               dflt="$dflt medium"
-                       fi
-                       if $test -d /lib/large || $test -d /usr/lib/large; then
-                               dflt="$dflt large"
-                       fi
-                       if $test -d /lib/huge || $test -d /usr/lib/huge; then
-                               dflt="$dflt huge"
-                       fi
-               esac
-       fi;;
-*) dflt="$models";;
+: decide how portable to be.  Allow command line overrides.
+case "$d_portable" in
+"$undef") ;;
+*)     d_portable="$define" ;;
 esac
-$cat <<EOM
-Some systems have different model sizes.  On most systems they are called
-small, medium, large, and huge.  On the PDP11 they are called unsplit and
-split.  If your system doesn't support different memory models, say "none".
-If you wish to force everything to one memory model, say "none" here and
-put the appropriate flags later when it asks you for other cc and ld flags.
-Venix systems may wish to put "none" and let the compiler figure things out.
-(In the following question multiple model names should be space separated.)
-
-EOM
-rp="Which memory models are supported?"
-. ./myread
-models="$ans"
 
-case "$models" in
-none)
-       small=''
-       medium=''
-       large=''
-       huge=''
-       unsplit=''
-       split=''
+: set up shell script to do ~ expansion
+cat >filexp <<EOSS
+$startsh
+: expand filename
+case "\$1" in
+ ~/*|~)
+       echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
        ;;
-*split)
-       case "$split" in
-       '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
-                        $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
-                       dflt='-i'
-               else
-                       dflt='none'
-               fi;;
-       *) dflt="$split";;
-       esac
-       rp="What flag indicates separate I and D space?"
-       . ./myread
-       tans="$ans"
-       case "$tans" in
-       none) tans='';;
-       esac
-       split="$tans"
-       unsplit='';;
-*large*|*small*|*medium*|*huge*)
-       case "$models" in
-       *large*)
-               case "$large" in
-               '') dflt='-Ml';;
-               *) dflt="$large";;
-               esac
-       rp="What flag indicates large model?"
-       . ./myread
-       tans="$ans"
-       case "$tans" in
-       none) tans='';
-       esac
-       large="$tans";;
-       *) large='';;
-       esac
-       case "$models" in
-       *huge*) case "$huge" in
-               '') dflt='-Mh';;
-               *) dflt="$huge";;
-               esac
-               rp="What flag indicates huge model?"
-               . ./myread
-               tans="$ans"
-               case "$tans" in
-               none) tans='';
-               esac
-               huge="$tans";;
-       *) huge="$large";;
-       esac
-       case "$models" in
-       *medium*) case "$medium" in
-               '') dflt='-Mm';;
-               *) dflt="$medium";;
-               esac
-               rp="What flag indicates medium model?"
-               . ./myread
-               tans="$ans"
-               case "$tans" in
-               none) tans='';
-               esac
-               medium="$tans";;
-       *) medium="$large";;
-       esac
-       case "$models" in
-       *small*) case "$small" in
-               '') dflt='none';;
-               *) dflt="$small";;
-               esac
-               rp="What flag indicates small model?"
-               . ./myread
-               tans="$ans"
-               case "$tans" in
-               none) tans='';
+ ~*)
+       if $test -f /bin/csh; then
+               /bin/csh -f -c "glob \$1"
+               failed=\$?
+               echo ""
+               exit \$failed
+       else
+               name=\`$expr x\$1 : '..\([^/]*\)'\`
+               dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
+               if $test ! -d "\$dir"; then
+                       me=\`basename \$0\`
+                       echo "\$me: can't locate home directory for: \$name" >&2
+                       exit 1
+               fi
+               case "\$1" in
+               */*)
+                       echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
+                       ;;
+               *)
+                       echo \$dir
+                       ;;
                esac
-               small="$tans";;
-       *) small='';;
-       esac
+       fi
        ;;
 *)
-       echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
+       echo \$1
        ;;
 esac
-
-: make some quick guesses about what we are up against
-echo " "
-$echo $n "Hmm...  $c"
-echo exit 1 >bsd
-echo exit 1 >usg
-echo exit 1 >v7
-echo exit 1 >osf1
-echo exit 1 >eunice
-echo exit 1 >xenix
-echo exit 1 >venix
-d_bsd="$undef"
-$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
-if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
-then
-       echo "Looks kind of like an OSF/1 system, but we'll see..."
-       echo exit 0 >osf1
-elif test `echo abc | tr a-z A-Z` = Abc ; then
-       xxx=`./loc addbib blurfl $pth`
-       if $test -f $xxx; then
-       echo "Looks kind of like a USG system with BSD features, but we'll see..."
-               echo exit 0 >bsd
-               echo exit 0 >usg
-       else
-               if $contains SIGTSTP foo >/dev/null 2>&1 ; then
-                       echo "Looks kind of like an extended USG system, but we'll see..."
-               else
-                       echo "Looks kind of like a USG system, but we'll see..."
-               fi
-               echo exit 0 >usg
-       fi
-elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
-       echo "Looks kind of like a BSD system, but we'll see..."
-       d_bsd="$define"
-       echo exit 0 >bsd
-else
-       echo "Looks kind of like a Version 7 system, but we'll see..."
-       echo exit 0 >v7
-fi
-case "$eunicefix" in
-*unixtovms*)
-       $cat <<'EOI'
-There is, however, a strange, musty smell in the air that reminds me of
-something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
-EOI
-       echo exit 0 >eunice
-       d_eunice="$define"
-: it so happens the Eunice I know will not run shell scripts in Unix format
-       ;;
-*)
-       echo " "
-       echo "Congratulations.  You aren't running Eunice."
-       d_eunice="$undef"
-       ;;
-esac
-if test -f /xenix; then
-       echo "Actually, this looks more like a XENIX system..."
-       echo exit 0 >xenix
-       d_xenix="$define"
-else
-       echo " "
-       echo "It's not Xenix..."
-       d_xenix="$undef"
-fi
-chmod +x xenix
-$eunicefix xenix
-if test -f /venix; then
-       echo "Actually, this looks more like a VENIX system..."
-       echo exit 0 >venix
-else
-       echo " "
-       if ./xenix; then
-               : null
-       else
-               echo "Nor is it Venix..."
-       fi
-fi
-chmod +x bsd usg v7 osf1 eunice xenix venix
-$eunicefix bsd usg v7 osf1 eunice xenix venix
-$rm -f foo
-
-: see if we need a special compiler
-echo " "
-if ./usg; then
-       case "$cc" in
-       '') case "$Mcc" in
-               /*) dflt='Mcc';;
-               *) case "$large" in
-                       -M*) dflt='cc';;
-                       *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
-                                       if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
-                                               dflt='cc'
-                                       else
-                                               dflt='cc -M'
-                                       fi
-                               else
-                                       dflt='cc'
-                               fi;;
-                       esac;;
-               esac;;
-       *)  dflt="$cc";;
-       esac
-       $cat <<'EOM'
-On some systems the default C compiler will not resolve multiple global
-references that happen to have the same name.  On some such systems the "Mcc"
-command may be used to force these to be resolved.  On other systems a "cc -M"
-command is required.  (Note that the -M flag on other systems indicates a
-memory model to use!) If you have the Gnu C compiler, you might wish to use
-that instead.
-
-EOM
-       rp="What command will force resolution on this system?"
-       . ./myread
-       cc="$ans"
-else
-       case "$cc" in
-       '') dflt=cc;;
-       *) dflt="$cc";;
-       esac
-       rp="Use which C compiler?"
-       . ./myread
-       cc="$ans"
-fi
-echo " "
-echo "Checking for GNU cc in disguise and/or its version number..." >&4
-$cat >gccvers.c <<EOM
-#include <stdio.h>
-int main() {
-#ifdef __GNUC__
-#ifdef __VERSION__
-       printf("%s\n", __VERSION__);
-#else
-       printf("%s\n", "1");
-#endif
-#endif
-       exit(0);
-}
-EOM
-if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
-       gccversion=`./gccvers`
-       case "$gccversion" in
-       '') echo "You are not using GNU cc." ;;
-       *)  echo "You are using GNU cc $gccversion." ;;
-       esac
-else
-       echo " "
-       echo "*** WHOA THERE!!! ***" >&4
-       echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
-       case "$knowitall" in
-       '')
-       echo "    You'd better start hunting for one and let me know about it." >&4
-               exit 1
-               ;;
-       esac
-fi
-$rm -f gccvers*
-case "$gccversion" in
-1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
-esac
-
-: decide how portable to be.  Allow command line overrides.
-case "$d_portable" in
-"$undef") ;;
-*)     d_portable="$define" ;;
-esac
-
-: set up shell script to do ~ expansion
-cat >filexp <<EOSS
-$startsh
-: expand filename
-case "\$1" in
- ~/*|~)
-       echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
-       ;;
- ~*)
-       if $test -f /bin/csh; then
-               /bin/csh -f -c "glob \$1"
-               failed=\$?
-               echo ""
-               exit \$failed
-       else
-               name=\`$expr x\$1 : '..\([^/]*\)'\`
-               dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
-               if $test ! -d "\$dir"; then
-                       me=\`basename \$0\`
-                       echo "\$me: can't locate home directory for: \$name" >&2
-                       exit 1
-               fi
-               case "\$1" in
-               */*)
-                       echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
-                       ;;
-               *)
-                       echo \$dir
-                       ;;
-               esac
-       fi
-       ;;
-*)
-       echo \$1
-       ;;
-esac
-EOSS
-chmod +x filexp
-$eunicefix filexp
+EOSS
+chmod +x filexp
+$eunicefix filexp
 
 : now set up to get a file name
 cat <<'EOSC' >getfile
@@ -2428,255 +2171,25 @@ dflt="$orig_dflt"
 rm -f getfile.ok
 EOSC
 
-: What should the include directory be ?
-echo " "
-$echo $n "Hmm...  $c"
-dflt='/usr/include'
-incpath=''
-mips_type=''
-if $test -f /bin/mips && /bin/mips; then
-       echo "Looks like a MIPS system..."
-       $cat >usr.c <<'EOCP'
-#ifdef SYSTYPE_BSD43
-/bsd43
-#endif
-EOCP
-       if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
-               dflt='/bsd43/usr/include'
-               incpath='/bsd43'
-               mips_type='BSD 4.3'
-       else
-               mips_type='System V'
-       fi
-       $rm -f usr.c usr.out
-       echo "and you're compiling with the $mips_type compiler and libraries."
-       xxx_prompt=y
-       echo "exit 0" >mips
-else
-       echo "Doesn't look like a MIPS system."
-       xxx_prompt=n
-       echo "exit 1" >mips
-fi
-chmod +x mips
-$eunicefix mips
-echo " "
-case "$usrinc" in
-'') ;;
-*) dflt="$usrinc";;
-esac
-case "$xxx_prompt" in
-y)     fn=d/
-       rp='Where are the include files you want to use?'
-       . ./getfile
-       usrinc="$ans"
+: determine root of directory hierarchy where package will be installed.
+case "$prefix" in
+'')
+       dflt=`./loc . /usr/local /usr/local /local /opt /usr`
        ;;
-*)     usrinc="$dflt"
+*)
+       dflt="$prefix"
        ;;
 esac
+$cat <<EOM
 
-: see how we invoke the C preprocessor
-echo " "
-echo "Now, how can we feed standard input to your C preprocessor..." >&4
-cat <<'EOT' >testcpp.c
-#define ABC abc
-#define XYZ xyz
-ABC.XYZ
-EOT
-cd ..
-echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
-chmod 755 cppstdin
-wrapper=`pwd`/cppstdin
-ok='false'
-cd UU
-
-if $test "X$cppstdin" != "X" && \
-       $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
-then
-       echo "You used to use $cppstdin $cppminus so we'll use that again."
-       case "$cpprun" in
-       '') echo "But let's see if we can live without a wrapper..." ;;
-       *)
-               if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
-                       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
-               then
-                       echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
-                       ok='true'
-               else
-                       echo "(However, $cpprun $cpplast does not work, let's see...)"
-               fi
-               ;;
-       esac
-else
-       case "$cppstdin" in
-       '') ;;
-       *)
-               echo "Good old $cppstdin $cppminus does not seem to be of any help..."
-               ;;
-       esac
-fi
-
-if $ok; then
-       : nothing
-elif echo 'Maybe "'"$cc"' -E" will work...'; \
-       $cc -E <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "Yup, it does."
-       x_cpp="$cc -E"
-       x_minus='';
-elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
-       $cc -E - <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "Yup, it does."
-       x_cpp="$cc -E"
-       x_minus='-';
-elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
-       $cc -P <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "Yipee, that works!"
-       x_cpp="$cc -P"
-       x_minus='';
-elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
-       $cc -P - <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "At long last!"
-       x_cpp="$cc -P"
-       x_minus='-';
-elif echo 'No such luck, maybe "'$cpp'" will work...'; \
-       $cpp <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "It works!"
-       x_cpp="$cpp"
-       x_minus='';
-elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
-       $cpp - <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       echo "Hooray, it works!  I was beginning to wonder."
-       x_cpp="$cpp"
-       x_minus='-';
-elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
-       $wrapper <testcpp.c >testcpp.out 2>&1; \
-       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-       x_cpp="$wrapper"
-       x_minus=''
-       echo "Eureka!"
-else
-       dflt=''
-       rp="No dice.  I can't find a C preprocessor.  Name one:"
-       . ./myread
-       x_cpp="$ans"
-       x_minus=''
-       $x_cpp <testcpp.c >testcpp.out 2>&1
-       if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
-               echo "OK, that will do." >&4
-       else
-echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
-               exit 1
-       fi
-fi
-
-case "$ok" in
-false)
-       cppstdin="$x_cpp"
-       cppminus="$x_minus"
-       cpprun="$x_cpp"
-       cpplast="$x_minus"
-       set X $x_cpp
-       shift
-       case "$1" in
-       "$cpp")
-               echo "Perhaps can we force $cc -E using a wrapper..."
-               if $wrapper <testcpp.c >testcpp.out 2>&1; \
-                       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
-               then
-                       echo "Yup, we can."
-                       cppstdin="$wrapper"
-                       cppminus='';
-               else
-                       echo "Nope, we'll have to live without it..."
-               fi
-               ;;
-       esac
-       case "$cpprun" in
-       "$wrapper")
-               cpprun=''
-               cpplast=''
-               ;;
-       esac
-       ;;
-esac
-
-case "$cppstdin" in
-"$wrapper") ;;
-*) $rm -f $wrapper;;
-esac
-$rm -f testcpp.c testcpp.out
-
-: Set private lib path
-case "$plibpth" in
-'') if ./mips; then
-               plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
-       fi;;
-esac
-case "$libpth" in
-' ') dlist='';;
-'') dlist="$loclibpth $plibpth $glibpth";;
-*) dlist="$libpth";;
-esac
-
-: Now check and see which directories actually exist, avoiding duplicates
-libpth=''
-for xxx in $dlist
-do
-    if $test -d $xxx; then
-               case " $libpth " in
-               *" $xxx "*) ;;
-               *) libpth="$libpth $xxx";;
-               esac
-    fi
-done
-$cat <<'EOM'
-
-Some systems have incompatible or broken versions of libraries.  Among
-the directories listed in the question below, please remove any you
-know not to be holding relevant libraries, and add any that are needed.
-Say "none" for none.
-
-EOM
-case "$libpth" in
-'') dflt='none';;
-*)
-       set X $libpth
-       shift
-       dflt=${1+"$@"}
-       ;;
-esac
-rp="Directories to use for library searches?"
-. ./myread
-case "$ans" in
-none) libpth=' ';;
-*) libpth="$ans";;
-esac
-
-: determine root of directory hierarchy where package will be installed.
-case "$prefix" in
-'')
-       dflt=`./loc . /usr/local /usr/local /local /opt /usr`
-       ;;
-*)
-       dflt="$prefix"
-       ;;
-esac
-$cat <<EOM
-
-By default, $package will be installed in $dflt/bin, manual
-pages under $dflt/man, etc..., i.e. with $dflt as prefix for
-all installation directories. Typically set to /usr/local, but you
-may choose /usr if you wish to install $package among your system
-binaries. If you wish to have binaries under /bin but manual pages
-under /usr/local/man, that's ok: you will be prompted separately
-for each of the installation directories, the prefix being only used
-to set the defaults.
+By default, $package will be installed in $dflt/bin, manual
+pages under $dflt/man, etc..., i.e. with $dflt as prefix for
+all installation directories. Typically set to /usr/local, but you
+may choose /usr if you wish to install $package among your system
+binaries. If you wish to have binaries under /bin but manual pages
+under /usr/local/man, that's ok: you will be prompted separately
+for each of the installation directories, the prefix being only used
+to set the defaults.
 
 EOM
 fn=d~
@@ -2721,47 +2234,60 @@ prefixit='case "$3" in
        esac;;
 esac'
 
-: is AFS running?
-echo " "
-if test -d /afs; then
-       echo "AFS may be running... I'll be extra cautious then..." >&4
-       afs=true
-else
-       echo "AFS does not seem to be running..." >&4
-       afs=false
-fi
-
-: determine where public executables go
-echo " "
-set dflt bin bin
+: determine where private library files go
+: Usual default is /usr/local/lib/perl5.  Also allow things like 
+: /opt/perl/lib, since /opt/perl/lib/perl5 would be redundant.
+case "$prefix" in
+*perl*) set dflt privlib lib ;;
+*)      set dflt privlib lib/$package ;;
+esac
 eval $prefixit
-fn=d~
-rp='Pathname where the public executables will reside?'
+$cat <<EOM
+
+There are some auxiliary files for $package that need to be put into a
+private library directory that is accessible by everyone.
+
+EOM
+fn=d~+
+rp='Pathname where the private library files will reside?'
 . ./getfile
-if $test "X$ansexp" != "X$binexp"; then
-       installbin=''
+if $test "X$privlibexp" != "X$ansexp"; then
+       installprivlib=''
 fi
-bin="$ans"
-binexp="$ansexp"
+privlib="$ans"
+privlibexp="$ansexp"
 if $afs; then
        $cat <<EOM
 
 Since you are running AFS, I need to distinguish the directory in which
-executables reside from the directory in which they are installed (and from
+private files reside from the directory in which they are installed (and from
 which they are presumably copied to the former directory by occult means).
 
 EOM
-       case "$installbin" in
-       '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
-       *) dflt="$installbin";;
+       case "$installprivlib" in
+       '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
+       *) dflt="$installprivlib";;
        esac
        fn=de~
-       rp='Where will public executables be installed?'
+       rp='Where will private files be installed?'
        . ./getfile
-       installbin="$ans"
+       installprivlib="$ans"
 else
-       installbin="$binexp"
+       installprivlib="$privlibexp"
+fi
+
+: 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.)"
 
 : set the prefixup variable, to restore leading tilda escape
 prefixup='case "$prefixexp" in
@@ -2769,76 +2295,81 @@ prefixup='case "$prefixexp" in
 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
 esac'
 
-: determine where public executable scripts go
-set scriptdir scriptdir
+: determine where public architecture dependent libraries go
+set archlib archlib
 eval $prefixit
-case "$scriptdir" in
+case "$archlib" in
 '')
-       dflt="$bin"
-       : guess some guesses
-       $test -d /usr/share/scripts && dflt=/usr/share/scripts
-       $test -d /usr/share/bin && dflt=/usr/share/bin
-       $test -d /usr/local/script && dflt=/usr/local/script
-       $test -d $prefixexp/script && dflt=$prefixexp/script
-       set dflt
-       eval $prefixup
-       ;;
-*)  dflt="$scriptdir"
+       case "$privlib" in
+       '')
+               dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib`
+               set dflt
+               eval $prefixup
+               ;;
+       *)      version=`echo $baserev $patchlevel | $awk '{print $1 + $2/1000.0}'`
+               dflt="$privlib/$archname/$version"
+               ;;
+       esac
        ;;
+*) dflt="$archlib";;
 esac
-$cat <<EOM
-Some installations have a separate directory just for executable scripts so
-that they can mount it across multiple architectures but keep the scripts in
-one spot.  You might, for example, have a subdirectory of /usr/share for this.
-Or you might just lump your scripts in with all your other executables.
+cat <<EOM
+
+$spackage contains architecture-dependent library files.  If you are
+sharing libraries in a heterogeneous environment, you might store
+these files in a separate location.  Otherwise, you can just include
+them with the rest of the public library files.
+
 EOM
-fn=d~
-rp='Where do you keep publicly executable scripts?'
+fn=d+~
+rp='Where do you want to put the public architecture-dependent libraries?'
 . ./getfile
-if $test "X$ansexp" != "X$scriptdirexp"; then
-       installscript=''
-fi
-scriptdir="$ans"
-scriptdirexp="$ansexp"
+archlib="$ans"
+archlibexp="$ansexp"
+
 if $afs; then
        $cat <<EOM
 
 Since you are running AFS, I need to distinguish the directory in which
-scripts reside from the directory in which they are installed (and from
+private files reside from the directory in which they are installed (and from
 which they are presumably copied to the former directory by occult means).
 
 EOM
-       case "$installscript" in
-       '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
-       *) dflt="$installscript";;
+       case "$installarchlib" in
+       '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
+       *) dflt="$installarchlib";;
        esac
        fn=de~
-       rp='Where will public scripts be installed?'
+       rp='Where will architecture-dependent library files be installed?'
        . ./getfile
-       installscript="$ans"
+       installarchlib="$ans"
 else
-       installscript="$scriptdirexp"
+       installarchlib="$archlibexp"
+fi
+if $test X"$archlib" = X"$privlib"; then
+       d_archlib="$undef"
+else
+       d_archlib="$define"
 fi
 
-: determine where private executables go
-set dflt privlib lib/$package
+: determine where site specific architecture-dependent libraries go.
+
+set dflt sitearch lib/site_perl/$archname
 eval $prefixit
 $cat <<EOM
 
-There are some auxiliary files for $package that need to be put into a
-private library directory that is accessible by everyone.
+The installation process will also create a directory for
+architecture-dependent site-specific extensions and modules.
 
 EOM
-fn=d~+
-rp='Pathname where the private library files will reside?'
+fn=nd~+
+rp='Pathname for the site-specific architecture-dependent library files?'
 . ./getfile
-if $test "X$privlibexp" != "X$ansexp"; then
-       installprivlib=''
+if $test "X$sitearchexp" != "X$ansexp"; then
+       installsitearch=''
 fi
-privlib="$ans"
-privlibexp="$ansexp"
+sitearch="$ans"
+sitearchexp="$ansexp"
 if $afs; then
        $cat <<EOM
 
@@ -2847,154 +2378,132 @@ private files reside from the directory in which they are installed (and from
 which they are presumably copied to the former directory by occult means).
 
 EOM
-       case "$installprivlib" in
-       '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
-       *) dflt="$installprivlib";;
+       case "$installsitearch" in
+       '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
+       *) dflt="$installsitearch";;
        esac
        fn=de~
        rp='Where will private files be installed?'
        . ./getfile
-       installprivlib="$ans"
+       installsitearch="$ans"
 else
-       installprivlib="$privlibexp"
+       installsitearch="$sitearchexp"
 fi
 
-: determine the architecture name
+: set up the script used to warn in case of inconsistency
+cat <<'EOSC' >whoa
+dflt=y
 echo " "
-if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
-       tarch=`arch`"-$osname"
-elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
-       if uname -m > tmparch 2>&1 ; then
-               tarch=`$sed -e 's/ /_/g' -e 's/$/'"-$osname/" tmparch`
-       else
-               tarch="$osname"
-       fi
-       $rm -f tmparch
-else
-       tarch="$osname"
-fi
-case "$myarchname" in
-''|"$tarch") ;;
-*)
-       echo "(Your architecture name used to be $myarchname.)"
-       archname=''
-       ;;
-esac
-case "$archname" in
-'') dflt="$tarch";;
-*) dflt="$archname";;
-esac
-rp='What is your architecture name'
+echo "*** WHOA THERE!!! ***" >&4
+echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
+rp="    Keep the $hint value?"
 . ./myread
-archname="$ans"
-myarchname="$tarch"
+case "$ans" in
+y) td=$was; tu=$was;;
+esac
+EOSC
 
-: determine where public architecture dependent libraries go
-set archlib archlib
-eval $prefixit
-case "$archlib" in
-'')
-       case "$privlib" in
-       '')
-               dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib`
-               set dflt
-               eval $prefixup
+: function used to set $1 to $val
+setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
+case "$val$was" in
+$define$undef) . ./whoa; eval "$var=\$td";;
+$undef$define) . ./whoa; eval "$var=\$tu";;
+*) eval "$var=$val";;
+esac'
+
+: determine where old public architecture dependent libraries might be
+case "$oldarchlib" in
+'')    case "$privlib" in
+       '') ;;
+       *)      dflt="$privlib/$archname"
                ;;
-       *)  dflt="$privlib/$archname";;
        esac
        ;;
-*) dflt="$archlib";;
+*)     dflt="$oldarchlib" 
+       ;;
 esac
+if $test ! -d "$dflt/auto"; then
+       dflt=none
+fi
 cat <<EOM
 
-$spackage contains architecture-dependent library files.  If you are
-sharing libraries in a heterogeneous environment, you might store
-these files in a separate location.  Otherwise, you can just include
-them with the rest of the public library files.
+In 5.001, Perl stored architecutre-dependent library files in a library
+with a name such as $privlib/$archname, 
+and this directory contained files from the standard extensions and 
+files from any additional extensions you might have added.  Starting 
+with version 5.002, all the architecture-dependent standard extensions 
+will go into $archlib, 
+while locally-added extensions will go into
+$sitearch.
+
+If you wish Perl to continue to search the old architecture-dependent
+library for your local extensions, give the path to that directory.
+If you do not wish to use your old architecture-dependent library
+files, answer 'none'.
 
 EOM
-fn=d~
-rp='Where do you want to put the public architecture-dependent libraries?'
+fn=dn~
+rp='Directory for your old 5.001 architecture-dependent libraries?'
 . ./getfile
-archlib="$ans"
-archlibexp="$ansexp"
+oldarchlib="$ans"
+oldarchlibexp="$ansexp"
+case "$oldarchlib" in
+''|' ') val="$undef" ;;
+*) val="$define" ;;
+esac
+set d_oldarchlib
+eval $setvar
 
+: determine where public executables go
+echo " "
+set dflt bin bin
+eval $prefixit
+fn=d~
+rp='Pathname where the public executables will reside?'
+. ./getfile
+if $test "X$ansexp" != "X$binexp"; then
+       installbin=''
+fi
+bin="$ans"
+binexp="$ansexp"
 if $afs; then
        $cat <<EOM
 
 Since you are running AFS, I need to distinguish the directory in which
-private files reside from the directory in which they are installed (and from
+executables reside from the directory in which they are installed (and from
 which they are presumably copied to the former directory by occult means).
 
 EOM
-       case "$installarchlib" in
-       '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
-       *) dflt="$installarchlib";;
+       case "$installbin" in
+       '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
+       *) dflt="$installbin";;
        esac
        fn=de~
-       rp='Where will architecture-dependent library files be installed?'
+       rp='Where will public executables be installed?'
        . ./getfile
-       installarchlib="$ans"
-else
-       installarchlib="$archlibexp"
-fi
-if $test X"$archlib" = X"$privlib"; then
-       d_archlib="$undef"
+       installbin="$ans"
 else
-       d_archlib="$define"
+       installbin="$binexp"
 fi
 
-: determine whether the user wants to include a site-specific library
-: in addition to privlib.
-$cat <<EOM
-
-Some sites may wish to specify a local directory for $package
-to search by default in addition to $privlib.
-If you don't want to use such an additional directory, answer 'none'.
-
-EOM
-case "$sitelib" in
-'') dflt=none ;;
-*) dflt="$sitelib" ;;
+: determine where manual pages are on this system
+echo " "
+case "$sysman" in
+'') 
+       syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
+       syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
+       syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
+       syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
+       syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
+       sysman=`./loc . /usr/man/man1 $syspath`
+       ;;
 esac
-fn=d~+n
-rp='Local directory for additional library files?'
-. ./getfile
-if $test "X$sitelibexp" != "X$ansexp"; then
-       installsitelib=''
-fi
-sitelib="$ans"
-sitelibexp="$ansexp"
-if $afs; then
-    case "$sitelib" in
-       '') installsitelib="$sitelibexp"
-               ;;
-       *)      $cat <<EOM
-
-Since you are running AFS, I need to distinguish the directory in which
-private files reside from the directory in which they are installed (and from
-which they are presumably copied to the former directory by occult means).
-
-EOM
-               case "$installsitelib" in
-               '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
-               *) dflt="$installsitelib";;
-               esac
-               fn=de~
-               rp='Where will additional local files be installed?'
-               . ./getfile
-               installsitelib="$ans"
-               ;;
-       esac
+if $test -d "$sysman"; then
+       echo "System manual is in $sysman." >&4
 else
-       installsitelib="$sitelibexp"
+       echo "Could not find manual pages in source form." >&4
 fi
 
-case "$sitelibexp" in
-'') d_sitelib=undef ;;
-*) d_sitelib=define ;;
-esac
-
 : determine where manual pages go
 set man1dir man1dir none
 eval $prefixit
@@ -3032,7 +2541,7 @@ case "$man1dir" in
        ;;
 esac
 echo " "
-fn=dn~
+fn=dn+~
 rp="Where do the main $spackage manual pages (source) go?"
 . ./getfile
 if test "X$man1direxp" != "X$ansexp"; then
@@ -3090,27 +2599,6 @@ case "$man1dir" in
        ;;
 esac
 
-: set up the script used to warn in case of inconsistency
-cat <<'EOSC' >whoa
-dflt=y
-echo " "
-echo "*** WHOA THERE!!! ***" >&4
-echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
-rp="    Keep the $hint value?"
-. ./myread
-case "$ans" in
-y) td=$was; tu=$was;;
-esac
-EOSC
-
-: function used to set $1 to $val
-setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
-case "$val$was" in
-$define$undef) . ./whoa; eval "$var=\$td";;
-$undef$define) . ./whoa; eval "$var=\$tu";;
-*) eval "$var=$val";;
-esac'
-
 : see if we can have long filenames
 echo " "
 rmlist="$rmlist /tmp/cf$$"
@@ -3185,14 +2673,23 @@ EOM
 esac
 
 echo "If you don't want the manual sources installed, answer 'none'."
+: We dont use /usr/local/man/man3 because some man programs will
+: only show the /usr/local/man/man3 contents, and not the system ones,
+: thus man less will show the perl module less.pm, but not the system
+: less command.  We might also conflict with TCL man pages.
+: However, something like /opt/perl/man/man3 is fine.
 case "$man3dir" in
-'')    dflt="$privlib/man/man3" ;;
+'')    case "$prefix" in 
+       *perl*) dflt=`echo $man1dir | $sed 's/man1/man3/g'` ;;
+       *)      dflt="$privlib/man/man3" ;;
+       esac
+       ;;
 ' ') dflt=none;;
 *)     dflt="$man3dir" ;;
 esac
 echo " "
 
-fn=dn~
+fn=dn+~
 rp="Where do the $spackage library man pages (source) go?"
 . ./getfile
 if test "X$man3direxp" != "X$ansexp"; then
@@ -3251,742 +2748,1098 @@ case "$man3dir" in
        ;;
 esac
 
-: see if we have to deal with yellow pages, now NIS.
-if $test -d /usr/etc/yp || $test -d /etc/yp; then
-       if $test -f /usr/etc/nibindd; then
-               echo " "
-               echo "I'm fairly confident you're on a NeXT."
-               echo " "
-               rp='Do you get the hosts file via NetInfo?'
-               dflt=y
-               case "$hostcat" in
-               nidump*) ;;
-               '') ;;
-               *) dflt=n;;
-               esac
-               . ./myread
-               case "$ans" in
-               y*) hostcat='nidump hosts .';;
-               *)      case "$hostcat" in
-                       nidump*) hostcat='';;
-                       esac
-                       ;;
-               esac
-       fi
-       case "$hostcat" in
-       nidump*) ;;
-       *)
-               case "$hostcat" in
-               *ypcat*) dflt=y;;
-               '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
-                               dflt=y
-                       else
-                               dflt=n
-                       fi;;
-               *) dflt=n;;
-               esac
-               echo " "
-               rp='Are you getting the hosts file via yellow pages?'
-               . ./myread
-               case "$ans" in
-               y*) hostcat='ypcat hosts';;
-               *) hostcat='cat /etc/hosts';;
-               esac
-               ;;
-       esac
-fi
-
-: now get the host name
-echo " "
-echo "Figuring out host name..." >&4
-case "$myhostname" in
-'') cont=true
-       echo 'Maybe "hostname" will work...'
-       if tans=`sh -c hostname 2>&1` ; then
-               myhostname=$tans
-               phostname=hostname
-               cont=''
-       fi
+: determine where public executable scripts go
+set scriptdir scriptdir
+eval $prefixit
+case "$scriptdir" in
+'')
+       dflt="$bin"
+       : guess some guesses
+       $test -d /usr/share/scripts && dflt=/usr/share/scripts
+       $test -d /usr/share/bin && dflt=/usr/share/bin
+       $test -d /usr/local/script && dflt=/usr/local/script
+       $test -d $prefixexp/script && dflt=$prefixexp/script
+       set dflt
+       eval $prefixup
+       ;;
+*)  dflt="$scriptdir"
        ;;
-*) cont='';;
 esac
-if $test "$cont"; then
-       if ./xenix; then
-               echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
-               if tans=`cat /etc/systemid 2>&1` ; then
-                       myhostname=$tans
-                       phostname='cat /etc/systemid'
-                       echo "Whadyaknow.  Xenix always was a bit strange..."
-                       cont=''
-               fi
-       elif $test -r /etc/systemid; then
-               echo "(What is a non-Xenix system doing with /etc/systemid?)"
-       fi
-fi
-if $test "$cont"; then
-       echo 'No, maybe "uuname -l" will work...'
-       if tans=`sh -c 'uuname -l' 2>&1` ; then
-               myhostname=$tans
-               phostname='uuname -l'
-       else
-               echo 'Strange.  Maybe "uname -n" will work...'
-               if tans=`sh -c 'uname -n' 2>&1` ; then
-                       myhostname=$tans
-                       phostname='uname -n'
-               else
-                       echo 'Oh well, maybe I can mine it out of whoami.h...'
-                       if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
-                               myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
-                               phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
-                       else
-                               case "$myhostname" in
-                               '') echo "Does this machine have an identity crisis or something?"
-                                       phostname='';;
-                               *)
-                                       echo "Well, you said $myhostname before..."
-                                       phostname='echo $myhostname';;
-                               esac
-                       fi
-               fi
-       fi
+$cat <<EOM
+Some installations have a separate directory just for executable scripts so
+that they can mount it across multiple architectures but keep the scripts in
+one spot.  You might, for example, have a subdirectory of /usr/share for this.
+Or you might just lump your scripts in with all your other executables.
+EOM
+fn=d~
+rp='Where do you keep publicly executable scripts?'
+. ./getfile
+if $test "X$ansexp" != "X$scriptdirexp"; then
+       installscript=''
 fi
-: you do not want to know about this
-set $myhostname
-myhostname=$1
+scriptdir="$ans"
+scriptdirexp="$ansexp"
+if $afs; then
+       $cat <<EOM
 
-: verify guess
-if $test "$myhostname" ; then
-       dflt=y
-       rp='Your host name appears to be "'$myhostname'".'" Right?"
-       . ./myread
-       case "$ans" in
-       y*) ;;
-       *) myhostname='';;
+Since you are running AFS, I need to distinguish the directory in which
+scripts reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+       case "$installscript" in
+       '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
+       *) dflt="$installscript";;
        esac
+       fn=de~
+       rp='Where will public scripts be installed?'
+       . ./getfile
+       installscript="$ans"
+else
+       installscript="$scriptdirexp"
 fi
 
-: bad guess or no guess
-while $test "X$myhostname" = X ; do
-       dflt=''
-       rp="Please type the (one word) name of your host:"
-       . ./myread
-       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
-
-case "$myhostname" in
-*.*)
-       dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
-       myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
-       echo "(Trimming domain name from host name--host name is now $myhostname)"
-       ;;
-*) case "$mydomain" in
-       '')
-               $hostcat >hosts
-               dflt=.`$awk "/[0-9].*$myhostname/ {for(i=2; i<=NF;i++) print \\\$i}" \
-                       hosts | $sort | $uniq | \
-                       $sed -n -e "s/$myhostname\.\([a-zA-Z_.]\)/\1/p"`
-               case "$dflt" in
-               .) echo "(You do not have fully-qualified names in /etc/hosts)"
-                       tans=`./loc resolv.conf X /etc /usr/etc`
-                       if $test -f "$tans"; then
-                               echo "(Attempting domain name extraction from $tans)"
-                               dflt=.`egrep '^domain' $tans | $sed 's/domain[  ]*\(.*\)/\1/' \
-                                       | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
-                       fi
-                       ;;
-               esac
-               case "$dflt" in
-               .) echo "(No help from resolv.conf either -- attempting clever guess)"
-                       dflt=.`sh -c domainname 2>/dev/null`
-                       case "$dflt" in
-                       '') dflt='.';;
-                       .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
-                       esac
-                       ;;
-               esac
-               case "$dflt" in
-               .) echo "(Lost all hope -- silly guess then)"
-                       dflt='.uucp'
-                       ;;
-               esac
-               $rm -f hosts
-               ;;
-       *) dflt="$mydomain";;
-       esac;;
-esac
-echo " "
-rp="What is your domain name?"
-. ./myread
-tans="$ans"
-case "$ans" in
-'') ;;
-.*) ;;
-*) tans=".$tans";;
-esac
-mydomain="$tans"
-
-: translate upper to lower if necessary
-case "$mydomain" in
-*[A-Z]*)
-       echo "(Normalizing case in your domain name)"
-       mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
-       ;;
-esac
-
-: a little sanity check here
-case "$phostname" in
-'') ;;
-*)
-       case `$phostname | ./tr '[A-Z]' '[a-z]'` in
-       $myhostname$mydomain|$myhostname) ;;
-       *)
-               case "$phostname" in
-               sed*)
-                       echo "(That doesn't agree with your whoami.h file, by the way.)"
-                       ;;
-               *)
-                       echo "(That doesn't agree with your $phostname command, by the way.)"
-                       ;;
-               esac
-       ;;
-       esac
-       ;;
+: determine perl absolute location
+case "$perlpath" in
+'')    perlpath=$binexp/perl ;;
 esac
 
-$cat <<EOM
+: figure out how to guarantee perl startup
+case "$startperl" in
+'')
+       case "$sharpbang" in
+       *!)
+               $cat <<EOH
 
-I need to get your e-mail address in Internet format if possible, i.e.
-something like user@host.domain. Please answer accurately since I have
-no easy means to double check it. The default value provided below
-is most probably close to the reality but may not be valid from outside
-your organization...
+I can use the #! construct to start perl on your system. This will
+make startup of perl scripts faster, but may cause problems if you
+want to share those scripts and perl is not in a standard place
+($perlpath) on all your platforms. The alternative is to force
+a shell by starting the script with a single ':' character.
 
-EOM
-cont=x
-while test "$cont"; do
-       case "$cf_email" in
-       '') dflt="$cf_by@$myhostname$mydomain";;
-       *) dflt="$cf_email";;
-       esac
-       rp='What is your e-mail address?'
-       . ./myread
-       cf_email="$ans"
-       case "$cf_email" in
-       *@*.*) cont='' ;;
-       *)
-               rp='Address does not look like an Internet one.  Use it anyway?'
-               case "$fastread" in
-               yes) dflt=y ;;
-               *) dflt=n ;;
-               esac
+EOH
+               dflt=y
+               rp='Shall I use #! to start up perl?'
                . ./myread
                case "$ans" in
-               y*) cont='' ;;
-               *) echo " " ;;
+               y*|Y*) startperl="#!$perlpath";;
+               *) startperl=": # use perl";;
                esac
                ;;
+       *) startperl=": # use perl"
+               ;;
        esac
-done
-
-$cat <<EOM
-
-If you or somebody else will be maintaining perl at your site, please
-fill in the correct e-mail address here so that they may be contacted
-if necessary. Currently, the "perlbug" program included with perl
-will send mail to this address in addition to perlbug@perl.com. You may
-enter "none" for no administrator.
+       ;;
+esac
+echo "I'll use $startperl to start perl scripts."
 
-EOM
-case "$perladmin" in
-'') dflt="$cf_email";;
-*) dflt="$perladmin";;
-esac
-rp='Perl administrator e-mail address'
-. ./myread
-perladmin="$ans"
-
-
-: determine optimize, if desired, or use for debug flag also
-case "$optimize" in
-' ') dflt='none';;
-'') dflt='-O';;
-*) dflt="$optimize";;
+: see what memory models we can support
+case "$models" in
+'')
+       $cat >pdp11.c <<'EOP'
+main() {
+#ifdef pdp11
+       exit(0);
+#else
+       exit(1);
+#endif
+}
+EOP
+       cc -o pdp11 pdp11.c >/dev/null 2>&1
+       if ./pdp11 2>/dev/null; then
+               dflt='unsplit split'
+       else
+               tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
+               case "$tans" in
+               X) dflt='none';;
+               *) if $test -d /lib/small || $test -d /usr/lib/small; then
+                               dflt='small'
+                       else
+                               dflt=''
+                       fi
+                       if $test -d /lib/medium || $test -d /usr/lib/medium; then
+                               dflt="$dflt medium"
+                       fi
+                       if $test -d /lib/large || $test -d /usr/lib/large; then
+                               dflt="$dflt large"
+                       fi
+                       if $test -d /lib/huge || $test -d /usr/lib/huge; then
+                               dflt="$dflt huge"
+                       fi
+               esac
+       fi;;
+*) dflt="$models";;
 esac
-$cat <<EOH
-
-Some C compilers have problems with their optimizers, by default, $package
-compiles with the -O flag to use the optimizer.  Alternately, you might want
-to use the symbolic debugger, which uses the -g flag (on traditional Unix
-systems).  Either flag can be specified here.  To use neither flag, specify
-the word "none".
+$cat <<EOM
+Some systems have different model sizes.  On most systems they are called
+small, medium, large, and huge.  On the PDP11 they are called unsplit and
+split.  If your system doesn't support different memory models, say "none".
+If you wish to force everything to one memory model, say "none" here and
+put the appropriate flags later when it asks you for other cc and ld flags.
+Venix systems may wish to put "none" and let the compiler figure things out.
+(In the following question multiple model names should be space separated.)
 
-EOH
-rp="What optimizer/debugger flag should be used?"
+EOM
+rp="Which memory models are supported?"
 . ./myread
-optimize="$ans"
-case "$optimize" in
-'none') optimize=" ";;
-esac
+models="$ans"
 
-dflt=''
-case "$ccflags" in
-'')    
-       case "$gccversion" in
-       1*) dflt='-fpcc-struct-return' ;;
+case "$models" in
+none)
+       small=''
+       medium=''
+       large=''
+       huge=''
+       unsplit=''
+       split=''
+       ;;
+*split)
+       case "$split" in
+       '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
+                        $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
+                       dflt='-i'
+               else
+                       dflt='none'
+               fi;;
+       *) dflt="$split";;
        esac
-       case "$optimize" in
-       *-g*) dflt="$dflt -DDEBUGGING";;
+       rp="What flag indicates separate I and D space?"
+       . ./myread
+       tans="$ans"
+       case "$tans" in
+       none) tans='';;
        esac
-       case "$gccversion" in
-       2*) if test -d /etc/conf/kconfig.d &&
-                       $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
-               then
-                       dflt="$dflt -posix"
-               fi
-               ;;
+       split="$tans"
+       unsplit='';;
+*large*|*small*|*medium*|*huge*)
+       case "$models" in
+       *large*)
+               case "$large" in
+               '') dflt='-Ml';;
+               *) dflt="$large";;
+               esac
+       rp="What flag indicates large model?"
+       . ./myread
+       tans="$ans"
+       case "$tans" in
+       none) tans='';
+       esac
+       large="$tans";;
+       *) large='';;
        esac
+       case "$models" in
+       *huge*) case "$huge" in
+               '') dflt='-Mh';;
+               *) dflt="$huge";;
+               esac
+               rp="What flag indicates huge model?"
+               . ./myread
+               tans="$ans"
+               case "$tans" in
+               none) tans='';
+               esac
+               huge="$tans";;
+       *) huge="$large";;
+       esac
+       case "$models" in
+       *medium*) case "$medium" in
+               '') dflt='-Mm';;
+               *) dflt="$medium";;
+               esac
+               rp="What flag indicates medium model?"
+               . ./myread
+               tans="$ans"
+               case "$tans" in
+               none) tans='';
+               esac
+               medium="$tans";;
+       *) medium="$large";;
+       esac
+       case "$models" in
+       *small*) case "$small" in
+               '') dflt='none';;
+               *) dflt="$small";;
+               esac
+               rp="What flag indicates small model?"
+               . ./myread
+               tans="$ans"
+               case "$tans" in
+               none) tans='';
+               esac
+               small="$tans";;
+       *) small='';;
+       esac
+       ;;
+*)
+       echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
        ;;
 esac
 
-case "$mips_type" in
-*BSD*|'') inclwanted="$locincpth $usrinc";;
-*) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
-esac
-for thisincl in $inclwanted; do
-       if $test -d $thisincl; then
-               if $test x$thisincl != x$usrinc; then
-                       case "$dflt" in
-                       *$thisincl*);;
-                       *) dflt="$dflt -I$thisincl";;
-                       esac
+: make some quick guesses about what we are up against
+echo " "
+$echo $n "Hmm...  $c"
+echo exit 1 >bsd
+echo exit 1 >usg
+echo exit 1 >v7
+echo exit 1 >osf1
+echo exit 1 >eunice
+echo exit 1 >xenix
+echo exit 1 >venix
+d_bsd="$undef"
+$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
+if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
+then
+       echo "Looks kind of like an OSF/1 system, but we'll see..."
+       echo exit 0 >osf1
+elif test `echo abc | tr a-z A-Z` = Abc ; then
+       xxx=`./loc addbib blurfl $pth`
+       if $test -f $xxx; then
+       echo "Looks kind of like a USG system with BSD features, but we'll see..."
+               echo exit 0 >bsd
+               echo exit 0 >usg
+       else
+               if $contains SIGTSTP foo >/dev/null 2>&1 ; then
+                       echo "Looks kind of like an extended USG system, but we'll see..."
+               else
+                       echo "Looks kind of like a USG system, but we'll see..."
                fi
+               echo exit 0 >usg
        fi
-done
-
-inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
-       xxx=true;
-elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
-       xxx=true;
-else
-       xxx=false;
-fi;
-if $xxx; then
-       case "$dflt" in
-       *$2*);;
-       *) dflt="$dflt -D$2";;
-       esac;
-fi'
-
-if ./osf1; then
-       set signal.h __LANGUAGE_C__; eval $inctest
+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
-       set signal.h LANGUAGE_C; eval $inctest
+       echo "Looks kind of like a Version 7 system, but we'll see..."
+       echo exit 0 >v7
 fi
-set signal.h NO_PROTOTYPE; eval $inctest
-set signal.h _NO_PROTO; eval $inctest
-
-case "$dflt" in
-'') dflt=none;;
-esac
-case "$ccflags" in
-'') ;;
-*) dflt="$ccflags";;
-esac
-$cat <<EOH
-
-Your C compiler may want other flags.  For this question you should include
--I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
-but you should NOT include libraries or ld flags like -lwhatever.  If you
-want $package to honor its debug switch, you should include -DDEBUGGING here.
-Your C compiler might also need additional flags, such as -D_POSIX_SOURCE,
--DHIDEMYMALLOC or -DCRIPPLED_CC.
-
-To use no flags, specify the word "none".
-
-EOH
-set X $dflt
-shift
-dflt=${1+"$@"}
-rp="Any additional cc flags?"
-. ./myread
-case "$ans" in
-none) ccflags='';;
-*) ccflags="$ans";;
-esac
-
-: the following weeds options from ccflags that are of no interest to cpp
-cppflags="$ccflags"
-case "$gccversion" in
-1*) cppflags="$cppflags -D__GNUC__"
-esac
-case "$mips_type" in
-'');;
-*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
-esac
-case "$cppflags" in
-'');;
+case "$eunicefix" in
+*unixtovms*)
+       $cat <<'EOI'
+There is, however, a strange, musty smell in the air that reminds me of
+something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
+EOI
+       echo exit 0 >eunice
+       d_eunice="$define"
+: it so happens the Eunice I know will not run shell scripts in Unix format
+       ;;
 *)
        echo " "
-       echo "Let me guess what the preprocessor flags are..." >&4
-       set X $cppflags
-       shift
-       cppflags=''
-       $cat >cpp.c <<'EOM'
-#define BLURFL foo
-
-BLURFL xx LFRULB
-EOM
-       previous=''
-       for flag in $*
-       do
-               case "$flag" in
-               -*) ftry="$flag";;
-               *) ftry="$previous $flag";;
-               esac
-               if $cppstdin -DLFRULB=bar $ftry $cppminus <cpp.c \
-                       >cpp1.out 2>/dev/null && \
-                       $cpprun -DLFRULB=bar $ftry $cpplast <cpp.c \
-                       >cpp2.out 2>/dev/null && \
-                       $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
-                       $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
-               then
-                       cppflags="$cppflags $ftry"
-                       previous=''
-               else
-                       previous="$flag"
-               fi
-       done
-       set X $cppflags
-       shift
-       cppflags=${1+"$@"}
-       case "$cppflags" in
-       *-*)  echo "They appear to be: $cppflags";;
-       esac
-       $rm -f cpp.c cpp?.out
+       echo "Congratulations.  You aren't running Eunice."
+       d_eunice="$undef"
        ;;
 esac
-
-: flags used in final linking phase
-
-case "$ldflags" in
-'') if ./venix; then
-               dflt='-i -z'
+if test -f /xenix; then
+       echo "Actually, this looks more like a XENIX system..."
+       echo exit 0 >xenix
+       d_xenix="$define"
+else
+       echo " "
+       echo "It's not Xenix..."
+       d_xenix="$undef"
+fi
+chmod +x xenix
+$eunicefix xenix
+if test -f /venix; then
+       echo "Actually, this looks more like a VENIX system..."
+       echo exit 0 >venix
+else
+       echo " "
+       if ./xenix; then
+               : null
        else
-               dflt=''
+               echo "Nor is it Venix..."
        fi
-       case "$ccflags" in
-       *-posix*) dflt="$dflt -posix" ;;
-       esac
-       ;;
-*) dflt="$ldflags";;
-esac
-
-: Try to guess additional flags to pick up local libraries.
-for thislibdir in $libpth; do
-       case " $loclibpth " in
-       *" $thislibdir "*)
-               case "$dflt " in 
-               "-L$thislibdir ") ;;
-               *)  dflt="$dflt -L$thislibdir" ;;
-               esac
-               ;;
-       esac
-done
-
-case "$dflt" in
-'') dflt='none' ;;
-esac
-
-$cat <<EOH
-
-Your C linker may need flags.  For this question you should
-include -L/whatever and any other flags used by the C linker, but you
-should NOT include libraries like -lwhatever.
-
-Make sure you include the appropriate -L/path flags if your C linker
-does not normally search all of the directories you specified above,
-namely
-       $libpth
-To use no flags, specify the word "none".
-
-EOH
-
-rp="Any additional ld flags (NOT including libraries)?"
-. ./myread
-case "$ans" in
-none) ldflags='';;
-*) ldflags="$ans";;
-esac
-rmlist="$rmlist pdp11"
+fi
+chmod +x bsd usg v7 osf1 eunice xenix venix
+$eunicefix bsd usg v7 osf1 eunice xenix venix
+$rm -f foo
 
-: coherency check
+: see if we need a special compiler
 echo " "
-echo "Checking your choice of C compiler and flags for coherency..." >&4
-set X $cc $optimize $ccflags $ldflags try.c -o try
-shift
-$cat >try.msg <<EOM
-I've tried to compile and run a simple program with:
-
-       $*
-       ./try
-
-and I got the following output:
+if ./usg; then
+       case "$cc" in
+       '') case "$Mcc" in
+               /*) dflt='Mcc';;
+               *) case "$large" in
+                       -M*) dflt='cc';;
+                       *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
+                                       if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
+                                               dflt='cc'
+                                       else
+                                               dflt='cc -M'
+                                       fi
+                               else
+                                       dflt='cc'
+                               fi;;
+                       esac;;
+               esac;;
+       *)  dflt="$cc";;
+       esac
+       $cat <<'EOM'
+On some systems the default C compiler will not resolve multiple global
+references that happen to have the same name.  On some such systems the "Mcc"
+command may be used to force these to be resolved.  On other systems a "cc -M"
+command is required.  (Note that the -M flag on other systems indicates a
+memory model to use!) If you have the Gnu C compiler, you might wish to use
+that instead.
 
 EOM
-$cat > try.c <<'EOF'
-#include <stdio.h>
-main() { exit(0); }
-EOF
-dflt=y
-if sh -c "$cc $optimize $ccflags try.c -o try $ldflags" >>try.msg 2>&1; then
-       if sh -c './try' >>try.msg 2>&1; then
-               dflt=n
-       else
-               echo "The program compiled OK, but exited with status $?." >>try.msg
-               rp="You have a problem.  Shall I abort Configure"
-               dflt=y
-       fi
+       rp="What command will force resolution on this system?"
+       . ./myread
+       cc="$ans"
 else
-       echo "I can't compile the test program." >>try.msg
-       rp="You have a BIG problem.  Shall I abort Configure"
-       dflt=y
+       case "$cc" in
+       '') dflt=cc;;
+       *) dflt="$cc";;
+       esac
+       rp="Use which C compiler?"
+       . ./myread
+       cc="$ans"
 fi
-case "$dflt" in
-y)
-       $cat try.msg
-       case "$knowitall" in
-       '')
-               echo "(The supplied flags might be incorrect with this C compiler.)"
-               ;;
-       *) dflt=n;;
+echo " "
+echo "Checking for GNU cc in disguise and/or its version number..." >&4
+$cat >gccvers.c <<EOM
+#include <stdio.h>
+int main() {
+#ifdef __GNUC__
+#ifdef __VERSION__
+       printf("%s\n", __VERSION__);
+#else
+       printf("%s\n", "1");
+#endif
+#endif
+       exit(0);
+}
+EOM
+if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
+       gccversion=`./gccvers`
+       case "$gccversion" in
+       '') echo "You are not using GNU cc." ;;
+       *)  echo "You are using GNU cc $gccversion." ;;
        esac
+else
        echo " "
-       . ./myread
-       case "$ans" in
-       n*|N*) ;;
-       *)      echo "Ok.  Stopping Configure." >&4
+       echo "*** WHOA THERE!!! ***" >&4
+       echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
+       case "$knowitall" in
+       '')
+       echo "    You'd better start hunting for one and let me know about it." >&4
                exit 1
                ;;
        esac
-       ;;
-n) echo "OK, that should do.";;
+fi
+$rm -f gccvers*
+case "$gccversion" in
+1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
 esac
-$rm -f try try.* core
 
-: compute shared library extension
-case "$so" in
-'')
-       if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
-               dflt='sl'
-       else
-               dflt='so'
-       fi
-       ;;
-*) dflt="$so";;
-esac
-$cat <<EOM
-
-On some systems, shared libraries may be available.  Answer 'none' if
-you want to suppress searching of shared libraries for the remaining
-of this configuration.
-
-EOM
-rp='What is the file extension used for shared libraries?'
-. ./myread
-so="$ans"
-
-: Looking for optional libraries
+: What should the include directory be ?
 echo " "
-echo "Checking for optional libraries..." >&4
-case "$libs" in
-' '|'') dflt='';;
-*) dflt="$libs";;
-esac
-case "$libswanted" in
-'') libswanted='c_s';;
-esac
-for thislib in $libswanted; do
-       
-       if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then
-               echo "Found -l$thislib (shared)."
-               case " $dflt " in
-               *"-l$thislib "*);;
-               *) dflt="$dflt -l$thislib";;
-               esac
-       elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
-               echo "Found -l$thislib (shared)."
-               case " $dflt " in
-               *"-l$thislib "*);;
-               *) dflt="$dflt -l$thislib";;
-               esac
-       elif xxx=`./loc lib$thislib.a X $libpth`; $test -f "$xxx"; then
-               echo "Found -l$thislib."
-               case " $dflt " in
-               *"-l$thislib "*);;
-               *) dflt="$dflt -l$thislib";;
-               esac
-       elif xxx=`./loc $thislib.a X $libpth`; $test -f "$xxx"; then
-               echo "Found -l$thislib."
-               case " $dflt " in
-               *"-l$thislib "*);;
-               *) dflt="$dflt -l$thislib";;
-               esac
-       elif xxx=`./loc lib${thislib}_s.a X $libpth`; $test -f "$xxx"; then
-               echo "Found -l${thislib}_s."
-               case " $dflt " in
-               *"-l$thislib "*);;
-               *) dflt="$dflt -l${thislib}_s";;
-               esac
-       elif xxx=`./loc Slib$thislib.a X $xlibpth`; $test -f "$xxx"; then
-               echo "Found -l$thislib."
-               case " $dflt " in
-               *"-l$thislib "*);;
-               *) dflt="$dflt -l$thislib";;
-               esac
+$echo $n "Hmm...  $c"
+dflt='/usr/include'
+incpath=''
+mips_type=''
+if $test -f /bin/mips && /bin/mips; then
+       echo "Looks like a MIPS system..."
+       $cat >usr.c <<'EOCP'
+#ifdef SYSTYPE_BSD43
+/bsd43
+#endif
+EOCP
+       if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
+               dflt='/bsd43/usr/include'
+               incpath='/bsd43'
+               mips_type='BSD 4.3'
        else
-               echo "No -l$thislib."
+               mips_type='System V'
        fi
-done
-set X $dflt
-shift
-dflt="$*"
-case "$libs" in
-'') dflt="$dflt";;
-*) dflt="$libs";;
-esac
-case "$dflt" in
-' '|'') dflt='none';;
-esac
-
-$cat <<EOM
-Some versions of Unix support shared libraries, which make executables smaller
-but make load time slightly longer.
-
-On some systems, mostly newer Unix System V's, the shared library is included
-by putting the option "-lc_s" as the last thing on the cc command line when
-linking.  Other systems use shared libraries by default.  There may be other
-libraries needed to compile $package on your machine as well.  If your system
-needs the "-lc_s" option, include it here.  Include any other special libraries
-here as well.  Say "none" for none.
-EOM
-
+       $rm -f usr.c usr.out
+       echo "and you're compiling with the $mips_type compiler and libraries."
+       xxx_prompt=y
+       echo "exit 0" >mips
+else
+       echo "Doesn't look like a MIPS system."
+       xxx_prompt=n
+       echo "exit 1" >mips
+fi
+chmod +x mips
+$eunicefix mips
 echo " "
-rp="Any additional libraries?"
-. ./myread
-case "$ans" in
-none) libs=' ';;
-*) libs="$ans";;
+case "$usrinc" in
+'') ;;
+*) dflt="$usrinc";;
 esac
-
-: see if nm is to be used to determine whether a symbol is defined or not
-case "$usenm" in
-'')
-       dflt=`egrep 'inlibc|csym' ../Configure | wc -l 2>/dev/null`
-       if $test $dflt -gt 20; then
-               dflt=y
-       else
-               dflt=n
-       fi
+case "$xxx_prompt" in
+y)     fn=d/
+       rp='Where are the include files you want to use?'
+       . ./getfile
+       usrinc="$ans"
        ;;
-*)
-       case "$usenm" in
-       true) dflt=y;;
-       *) dflt=n;;
-       esac
+*)     usrinc="$dflt"
        ;;
 esac
-$cat <<EOM
-
-I can use 'nm' to extract the symbols from your C libraries. This is a time
-consuming task which may generate huge output on the disk (up to 3 megabytes)
-but that should make the symbols extraction faster. The alternative is to skip
-the 'nm' extraction part and to compile a small test program instead to
-determine whether each symbol is present. If you have a fast C compiler and/or
-if your 'nm' output cannot be parsed, this may be the best solution.
-
-EOM
-rp='Shall I use nm to extract C symbols from the libraries?'
-. ./myread
-case "$ans" in
-n|N) usenm=false;;
-*) usenm=true;;
-esac
-
-runnm=$usenm
-case "$reuseval" in
-true) runnm=false;;
-esac
-
-: nm options which may be necessary
-case "$nm_opt" in
-'') if $test -f /mach_boot; then
-               nm_opt=''
-       elif $test -d /usr/ccs/lib; then
-               nm_opt='-p'
-       elif $test -f /dgux; then
-               nm_opt='-p'
-       else
-               nm_opt=''
-       fi;;
-esac
 
-case "$runnm" in
-true)
-: get list of predefined functions in a handy place
+: see how we invoke the C preprocessor
 echo " "
-case "$libc" in
-'') libc=unknown
-       case "$libs" in
-       *-lc_s*) libc=`./loc libc_s.a $libc $libpth`
-       esac
-       ;;
-esac
-libnames='';
-case "$libs" in
-'') ;;
-*)  for thislib in $libs; do
-       case "$thislib" in
-       -lc|-lc_s)
-               : Handle C library specially below.
-               ;;
-       -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
-                       :
-               elif try=`./loc lib$thislib.a X $libpth`; $test -f "$try"; then
-                       :
-               elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
-                       :
-               elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
-                       :
-               elif try=`./loc Slib$thislib.a X $xlibpth`; $test -f "$try"; then
-                       :
+echo "Now, how can we feed standard input to your C preprocessor..." >&4
+cat <<'EOT' >testcpp.c
+#define ABC abc
+#define XYZ xyz
+ABC.XYZ
+EOT
+cd ..
+echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
+chmod 755 cppstdin
+wrapper=`pwd`/cppstdin
+ok='false'
+cd UU
+
+if $test "X$cppstdin" != "X" && \
+       $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+then
+       echo "You used to use $cppstdin $cppminus so we'll use that again."
+       case "$cpprun" in
+       '') echo "But let's see if we can live without a wrapper..." ;;
+       *)
+               if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
+                       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+               then
+                       echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
+                       ok='true'
                else
-                       try=''
+                       echo "(However, $cpprun $cpplast does not work, let's see...)"
                fi
-               libnames="$libnames $try"
                ;;
-       *) libnames="$libnames $thislib" ;;
        esac
-       done
-       ;;
-esac
-xxx=normal
-case "$libc" in
-unknown)
-       set /usr/ccs/lib/libc.$so
-       $test -r $1 || set /usr/lib/libc.$so
+else
+       case "$cppstdin" in
+       '') ;;
+       *)
+               echo "Good old $cppstdin $cppminus does not seem to be of any help..."
+               ;;
+       esac
+fi
+
+if $ok; then
+       : nothing
+elif echo 'Maybe "'"$cc"' -E" will work...'; \
+       $cc -E <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "Yup, it does."
+       x_cpp="$cc -E"
+       x_minus='';
+elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
+       $cc -E - <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "Yup, it does."
+       x_cpp="$cc -E"
+       x_minus='-';
+elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
+       $cc -P <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "Yipee, that works!"
+       x_cpp="$cc -P"
+       x_minus='';
+elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
+       $cc -P - <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "At long last!"
+       x_cpp="$cc -P"
+       x_minus='-';
+elif echo 'No such luck, maybe "'$cpp'" will work...'; \
+       $cpp <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "It works!"
+       x_cpp="$cpp"
+       x_minus='';
+elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
+       $cpp - <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       echo "Hooray, it works!  I was beginning to wonder."
+       x_cpp="$cpp"
+       x_minus='-';
+elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
+       $wrapper <testcpp.c >testcpp.out 2>&1; \
+       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+       x_cpp="$wrapper"
+       x_minus=''
+       echo "Eureka!"
+else
+       dflt=''
+       rp="No dice.  I can't find a C preprocessor.  Name one:"
+       . ./myread
+       x_cpp="$ans"
+       x_minus=''
+       $x_cpp <testcpp.c >testcpp.out 2>&1
+       if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+               echo "OK, that will do." >&4
+       else
+echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
+               exit 1
+       fi
+fi
+
+case "$ok" in
+false)
+       cppstdin="$x_cpp"
+       cppminus="$x_minus"
+       cpprun="$x_cpp"
+       cpplast="$x_minus"
+       set X $x_cpp
+       shift
+       case "$1" in
+       "$cpp")
+               echo "Perhaps can we force $cc -E using a wrapper..."
+               if $wrapper <testcpp.c >testcpp.out 2>&1; \
+                       $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+               then
+                       echo "Yup, we can."
+                       cppstdin="$wrapper"
+                       cppminus='';
+               else
+                       echo "Nope, we'll have to live without it..."
+               fi
+               ;;
+       esac
+       case "$cpprun" in
+       "$wrapper")
+               cpprun=''
+               cpplast=''
+               ;;
+       esac
+       ;;
+esac
+
+case "$cppstdin" in
+"$wrapper") ;;
+*) $rm -f $wrapper;;
+esac
+$rm -f testcpp.c testcpp.out
+
+: Set private lib path
+case "$plibpth" in
+'') if ./mips; then
+               plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
+       fi;;
+esac
+case "$libpth" in
+' ') dlist='';;
+'') dlist="$loclibpth $plibpth $glibpth";;
+*) dlist="$libpth";;
+esac
+
+: Now check and see which directories actually exist, avoiding duplicates
+libpth=''
+for xxx in $dlist
+do
+    if $test -d $xxx; then
+               case " $libpth " in
+               *" $xxx "*) ;;
+               *) libpth="$libpth $xxx";;
+               esac
+    fi
+done
+$cat <<'EOM'
+
+Some systems have incompatible or broken versions of libraries.  Among
+the directories listed in the question below, please remove any you
+know not to be holding relevant libraries, and add any that are needed.
+Say "none" for none.
+
+EOM
+case "$libpth" in
+'') dflt='none';;
+*)
+       set X $libpth
+       shift
+       dflt=${1+"$@"}
+       ;;
+esac
+rp="Directories to use for library searches?"
+. ./myread
+case "$ans" in
+none) libpth=' ';;
+*) libpth="$ans";;
+esac
+
+: determine optimize, if desired, or use for debug flag also
+case "$optimize" in
+' ') dflt='none';;
+'') dflt='-O';;
+*) dflt="$optimize";;
+esac
+$cat <<EOH
+
+Some C compilers have problems with their optimizers, by default, $package
+compiles with the -O flag to use the optimizer.  Alternately, you might want
+to use the symbolic debugger, which uses the -g flag (on traditional Unix
+systems).  Either flag can be specified here.  To use neither flag, specify
+the word "none".
+
+EOH
+rp="What optimizer/debugger flag should be used?"
+. ./myread
+optimize="$ans"
+case "$optimize" in
+'none') optimize=" ";;
+esac
+
+dflt=''
+case "$ccflags" in
+'')    
+       case "$gccversion" in
+       1*) dflt='-fpcc-struct-return' ;;
+       esac
+       case "$optimize" in
+       *-g*) dflt="$dflt -DDEBUGGING";;
+       esac
+       case "$gccversion" in
+       2*) if test -d /etc/conf/kconfig.d &&
+                       $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
+               then
+                       dflt="$dflt -posix"
+               fi
+               ;;
+       esac
+       ;;
+esac
+
+case "$mips_type" in
+*BSD*|'') inclwanted="$locincpth $usrinc";;
+*) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
+esac
+for thisincl in $inclwanted; do
+       if $test -d $thisincl; then
+               if $test x$thisincl != x$usrinc; then
+                       case "$dflt" in
+                       *$thisincl*);;
+                       *) dflt="$dflt -I$thisincl";;
+                       esac
+               fi
+       fi
+done
+
+inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
+       xxx=true;
+elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
+       xxx=true;
+else
+       xxx=false;
+fi;
+if $xxx; then
+       case "$dflt" in
+       *$2*);;
+       *) dflt="$dflt -D$2";;
+       esac;
+fi'
+
+if ./osf1; then
+       set signal.h __LANGUAGE_C__; eval $inctest
+else
+       set signal.h LANGUAGE_C; eval $inctest
+fi
+set signal.h NO_PROTOTYPE; eval $inctest
+set signal.h _NO_PROTO; eval $inctest
+
+case "$dflt" in
+'') dflt=none;;
+esac
+case "$ccflags" in
+'') ;;
+*) dflt="$ccflags";;
+esac
+$cat <<EOH
+
+Your C compiler may want other flags.  For this question you should include
+-I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
+but you should NOT include libraries or ld flags like -lwhatever.  If you
+want $package to honor its debug switch, you should include -DDEBUGGING here.
+Your C compiler might also need additional flags, such as -D_POSIX_SOURCE,
+-DHIDEMYMALLOC or -DCRIPPLED_CC.
+
+To use no flags, specify the word "none".
+
+EOH
+set X $dflt
+shift
+dflt=${1+"$@"}
+rp="Any additional cc flags?"
+. ./myread
+case "$ans" in
+none) ccflags='';;
+*) ccflags="$ans";;
+esac
+
+: the following weeds options from ccflags that are of no interest to cpp
+cppflags="$ccflags"
+case "$gccversion" in
+1*) cppflags="$cppflags -D__GNUC__"
+esac
+case "$mips_type" in
+'');;
+*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
+esac
+case "$cppflags" in
+'');;
+*)
+       echo " "
+       echo "Let me guess what the preprocessor flags are..." >&4
+       set X $cppflags
+       shift
+       cppflags=''
+       $cat >cpp.c <<'EOM'
+#define BLURFL foo
+
+BLURFL xx LFRULB
+EOM
+       previous=''
+       for flag in $*
+       do
+               case "$flag" in
+               -*) ftry="$flag";;
+               *) ftry="$previous $flag";;
+               esac
+               if $cppstdin -DLFRULB=bar $ftry $cppminus <cpp.c \
+                       >cpp1.out 2>/dev/null && \
+                       $cpprun -DLFRULB=bar $ftry $cpplast <cpp.c \
+                       >cpp2.out 2>/dev/null && \
+                       $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
+                       $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
+               then
+                       cppflags="$cppflags $ftry"
+                       previous=''
+               else
+                       previous="$flag"
+               fi
+       done
+       set X $cppflags
+       shift
+       cppflags=${1+"$@"}
+       case "$cppflags" in
+       *-*)  echo "They appear to be: $cppflags";;
+       esac
+       $rm -f cpp.c cpp?.out
+       ;;
+esac
+
+: flags used in final linking phase
+
+case "$ldflags" in
+'') if ./venix; then
+               dflt='-i -z'
+       else
+               dflt=''
+       fi
+       case "$ccflags" in
+       *-posix*) dflt="$dflt -posix" ;;
+       esac
+       ;;
+*) dflt="$ldflags";;
+esac
+
+: Try to guess additional flags to pick up local libraries.
+for thislibdir in $libpth; do
+       case " $loclibpth " in
+       *" $thislibdir "*)
+               case "$dflt " in 
+               "-L$thislibdir ") ;;
+               *)  dflt="$dflt -L$thislibdir" ;;
+               esac
+               ;;
+       esac
+done
+
+case "$dflt" in
+'') dflt='none' ;;
+esac
+
+$cat <<EOH
+
+Your C linker may need flags.  For this question you should
+include -L/whatever and any other flags used by the C linker, but you
+should NOT include libraries like -lwhatever.
+
+Make sure you include the appropriate -L/path flags if your C linker
+does not normally search all of the directories you specified above,
+namely
+       $libpth
+To use no flags, specify the word "none".
+
+EOH
+
+rp="Any additional ld flags (NOT including libraries)?"
+. ./myread
+case "$ans" in
+none) ldflags='';;
+*) ldflags="$ans";;
+esac
+rmlist="$rmlist pdp11"
+
+: coherency check
+echo " "
+echo "Checking your choice of C compiler and flags for coherency..." >&4
+set X $cc $optimize $ccflags $ldflags try.c -o try
+shift
+$cat >try.msg <<EOM
+I've tried to compile and run a simple program with:
+
+       $*
+       ./try
+
+and I got the following output:
+
+EOM
+$cat > try.c <<'EOF'
+#include <stdio.h>
+main() { exit(0); }
+EOF
+dflt=y
+if sh -c "$cc $optimize $ccflags try.c -o try $ldflags" >>try.msg 2>&1; then
+       if sh -c './try' >>try.msg 2>&1; then
+               dflt=n
+       else
+               echo "The program compiled OK, but exited with status $?." >>try.msg
+               rp="You have a problem.  Shall I abort Configure"
+               dflt=y
+       fi
+else
+       echo "I can't compile the test program." >>try.msg
+       rp="You have a BIG problem.  Shall I abort Configure"
+       dflt=y
+fi
+case "$dflt" in
+y)
+       $cat try.msg
+       case "$knowitall" in
+       '')
+               echo "(The supplied flags might be incorrect with this C compiler.)"
+               ;;
+       *) dflt=n;;
+       esac
+       echo " "
+       . ./myread
+       case "$ans" in
+       n*|N*) ;;
+       *)      echo "Ok.  Stopping Configure." >&4
+               exit 1
+               ;;
+       esac
+       ;;
+n) echo "OK, that should do.";;
+esac
+$rm -f try try.* core
+
+: compute shared library extension
+case "$so" in
+'')
+       if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
+               dflt='sl'
+       else
+               dflt='so'
+       fi
+       ;;
+*) dflt="$so";;
+esac
+$cat <<EOM
+
+On some systems, shared libraries may be available.  Answer 'none' if
+you want to suppress searching of shared libraries for the remaining
+of this configuration.
+
+EOM
+rp='What is the file extension used for shared libraries?'
+. ./myread
+so="$ans"
+
+: Looking for optional libraries
+echo " "
+echo "Checking for optional libraries..." >&4
+case "$libs" in
+' '|'') dflt='';;
+*) dflt="$libs";;
+esac
+case "$libswanted" in
+'') libswanted='c_s';;
+esac
+for thislib in $libswanted; do
+       
+       if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then
+               echo "Found -l$thislib (shared)."
+               case " $dflt " in
+               *"-l$thislib "*);;
+               *) dflt="$dflt -l$thislib";;
+               esac
+       elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
+               echo "Found -l$thislib (shared)."
+               case " $dflt " in
+               *"-l$thislib "*);;
+               *) dflt="$dflt -l$thislib";;
+               esac
+       elif xxx=`./loc lib$thislib.a X $libpth`; $test -f "$xxx"; then
+               echo "Found -l$thislib."
+               case " $dflt " in
+               *"-l$thislib "*);;
+               *) dflt="$dflt -l$thislib";;
+               esac
+       elif xxx=`./loc $thislib.a X $libpth`; $test -f "$xxx"; then
+               echo "Found -l$thislib."
+               case " $dflt " in
+               *"-l$thislib "*);;
+               *) dflt="$dflt -l$thislib";;
+               esac
+       elif xxx=`./loc lib${thislib}_s.a X $libpth`; $test -f "$xxx"; then
+               echo "Found -l${thislib}_s."
+               case " $dflt " in
+               *"-l$thislib "*);;
+               *) dflt="$dflt -l${thislib}_s";;
+               esac
+       elif xxx=`./loc Slib$thislib.a X $xlibpth`; $test -f "$xxx"; then
+               echo "Found -l$thislib."
+               case " $dflt " in
+               *"-l$thislib "*);;
+               *) dflt="$dflt -l$thislib";;
+               esac
+       else
+               echo "No -l$thislib."
+       fi
+done
+set X $dflt
+shift
+dflt="$*"
+case "$libs" in
+'') dflt="$dflt";;
+*) dflt="$libs";;
+esac
+case "$dflt" in
+' '|'') dflt='none';;
+esac
+
+$cat <<EOM
+Some versions of Unix support shared libraries, which make executables smaller
+but make load time slightly longer.
+
+On some systems, mostly newer Unix System V's, the shared library is included
+by putting the option "-lc_s" as the last thing on the cc command line when
+linking.  Other systems use shared libraries by default.  There may be other
+libraries needed to compile $package on your machine as well.  If your system
+needs the "-lc_s" option, include it here.  Include any other special libraries
+here as well.  Say "none" for none.
+EOM
+
+echo " "
+rp="Any additional libraries?"
+. ./myread
+case "$ans" in
+none) libs=' ';;
+*) libs="$ans";;
+esac
+
+: see if nm is to be used to determine whether a symbol is defined or not
+case "$usenm" in
+'')
+       dflt=`egrep 'inlibc|csym' ../Configure | wc -l 2>/dev/null`
+       if $test $dflt -gt 20; then
+               dflt=y
+       else
+               dflt=n
+       fi
+       ;;
+*)
+       case "$usenm" in
+       true) dflt=y;;
+       *) dflt=n;;
+       esac
+       ;;
+esac
+$cat <<EOM
+
+I can use 'nm' to extract the symbols from your C libraries. This is a time
+consuming task which may generate huge output on the disk (up to 3 megabytes)
+but that should make the symbols extraction faster. The alternative is to skip
+the 'nm' extraction part and to compile a small test program instead to
+determine whether each symbol is present. If you have a fast C compiler and/or
+if your 'nm' output cannot be parsed, this may be the best solution.
+
+EOM
+rp='Shall I use nm to extract C symbols from the libraries?'
+. ./myread
+case "$ans" in
+n|N) usenm=false;;
+*) usenm=true;;
+esac
+
+runnm=$usenm
+case "$reuseval" in
+true) runnm=false;;
+esac
+
+: nm options which may be necessary
+case "$nm_opt" in
+'') if $test -f /mach_boot; then
+               nm_opt=''
+       elif $test -d /usr/ccs/lib; then
+               nm_opt='-p'
+       elif $test -f /dgux; then
+               nm_opt='-p'
+       else
+               nm_opt=''
+       fi;;
+esac
+
+case "$runnm" in
+true)
+: get list of predefined functions in a handy place
+echo " "
+case "$libc" in
+'') libc=unknown
+       case "$libs" in
+       *-lc_s*) libc=`./loc libc_s.a $libc $libpth`
+       esac
+       ;;
+esac
+libnames='';
+case "$libs" in
+'') ;;
+*)  for thislib in $libs; do
+       case "$thislib" in
+       -lc|-lc_s)
+               : Handle C library specially below.
+               ;;
+       -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
+                       :
+               elif try=`./loc lib$thislib.a X $libpth`; $test -f "$try"; then
+                       :
+               elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
+                       :
+               elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
+                       :
+               elif try=`./loc Slib$thislib.a X $xlibpth`; $test -f "$try"; then
+                       :
+               else
+                       try=''
+               fi
+               libnames="$libnames $try"
+               ;;
+       *) libnames="$libnames $thislib" ;;
+       esac
+       done
+       ;;
+esac
+xxx=normal
+case "$libc" in
+unknown)
+       set /usr/ccs/lib/libc.$so
+       $test -r $1 || set /usr/lib/libc.$so
        $test -r $1 || set /usr/shlib/libc.$so
        $test -r $1 || \
                set `echo blurfl; echo /usr/lib/libc.$so.[0-9]* | \
@@ -5525,8 +5378,11 @@ case "$eagain" in
 #include <errno.h>
 #include <sys/types.h>
 #include <signal.h>
+#define MY_O_NONBLOCK $o_nonblock
 extern int errno;
 $signal_t blech(x) int x; { exit(3); }
+EOCP
+       $cat >> try.c <<'EOCP'
 main()
 {
        int pd[2];
@@ -5540,7 +5396,7 @@ main()
                int ret;
                close(pd[1]);   /* Parent reads from pd[0] */
                close(pu[0]);   /* Parent writes (blocking) to pu[1] */
-               if (-1 == fcntl(pd[0], F_SETFL, $o_nonblock))
+               if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
                        exit(1);
                signal(SIGALRM, blech);
                alarm(5);
@@ -6665,745 +6521,751 @@ echo " "
 if set times val -f d_times; eval $csym; $val; then
        echo 'times() found.' >&4
        d_times="$define"
-       inc=''
-       case "$i_systimes" in
-       "$define") inc='sys/times.h';;
-       esac
-       set clock_t clocktype long stdio.h sys/types.h $inc
-       eval $typedef
-       dflt="$clocktype"
-       echo " "
-       rp="What type is returned by times() on this system?"
-       . ./myread
-       clocktype="$ans"
-else
-       echo 'times() NOT found, hope that will do.' >&4
-       d_times="$undef"
-       clocktype='int'
-fi
-
-: see if truncate exists
-set truncate d_truncate
-eval $inlibc
-
-: see if tzname[] exists
-echo " "
-if set tzname val -a d_tzname; eval $csym; $val; then
-       val="$define"
-       echo 'tzname[] found.' >&4
-else
-       val="$undef"
-       echo 'tzname[] NOT found.' >&4
-fi
-set d_tzname
-eval $setvar
-
-: see if umask exists
-set umask d_umask
-eval $inlibc
-
-: see how we will look up host name
-echo " "
-if false; then
-       : dummy stub to allow use of elif
-elif set uname val -f d_uname; eval $csym; $val; then
-       if ./xenix; then
-               $cat <<'EOM'
-uname() was found, but you're running xenix, and older versions of xenix
-have a broken uname(). If you don't really know whether your xenix is old
-enough to have a broken system call, use the default answer.
-
-EOM
-               dflt=y
-               case "$d_uname" in
-               "$define") dflt=n;;
-               esac
-               rp='Is your uname() broken?'
-               . ./myread
-               case "$ans" in
-               n*) d_uname="$define"; call=uname;;
-               esac
-       else
-               echo 'uname() found.' >&4
-               d_uname="$define"
-               call=uname
-       fi
-fi
-case "$d_gethname" in
-'') d_gethname="$undef";;
-esac
-case "$d_uname" in
-'') d_uname="$undef";;
-esac
-case "$d_phostname" in
-'') d_phostname="$undef";;
-esac
-
-: backward compatibility for d_hvfork
-if test X$d_hvfork != X; then
-       d_vfork="$d_hvfork"
-       d_hvfork=''
-fi
-: see if there is a vfork
-val=''
-set vfork val
-eval $inlibc
-
-: Ok, but do we want to use it. vfork is reportedly unreliable in 
-: perl on Solaris 2.x, and probably elsewhere.
-case "$val" in
-$define)
-       echo " "
-       case "$usevfork" in
-       false) dflt='n';;
-       *) dflt='y';;
-       esac
-       rp="Some systems have problems with vfork().  Do you want to use it?"
-       . ./myread
-       case "$ans" in
-       y|Y) ;;
-       *)
-               echo "Ok, we won't use vfork()."
-               val="$undef"
-               ;;
-       esac
-       ;;
-esac
-set d_vfork
-eval $setvar
-case "$d_vfork" in
-$define) usevfork='true';;
-*) usevfork='false';;
-esac
-
-: see if this is an sysdir system
-set sys/dir.h i_sysdir
-eval $inhdr
-
-: see if this is an sysndir system
-set sys/ndir.h i_sysndir
-eval $inhdr
+       inc=''
+       case "$i_systimes" in
+       "$define") inc='sys/times.h';;
+       esac
+       set clock_t clocktype long stdio.h sys/types.h $inc
+       eval $typedef
+       dflt="$clocktype"
+       echo " "
+       rp="What type is returned by times() on this system?"
+       . ./myread
+       clocktype="$ans"
+else
+       echo 'times() NOT found, hope that will do.' >&4
+       d_times="$undef"
+       clocktype='int'
+fi
 
-: see if closedir exists
-set closedir d_closedir
+: see if truncate exists
+set truncate d_truncate
 eval $inlibc
 
-case "$d_closedir" in
-"$define")
-       echo " "
-       echo "Checking whether closedir() returns a status..." >&4
-       cat > closedir.c <<EOM
-#$i_dirent I_DIRENT            /**/
-#$i_sysdir I_SYS_DIR           /**/
-#$i_sysndir I_SYS_NDIR         /**/
-
-#if defined(I_DIRENT)
-#include <dirent.h>
-#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
-#include <sys/dir.h>
-#endif
-#else
-#ifdef I_SYS_NDIR
-#include <sys/ndir.h>
-#else
-#ifdef I_SYS_DIR
-#ifdef hp9000s500
-#include <ndir.h>      /* may be wrong in the future */
-#else
-#include <sys/dir.h>
-#endif
-#endif
-#endif
-#endif 
-int main() { return closedir(opendir(".")); }
-EOM
-       if $cc $ccflags $ldflags -o closedir closedir.c $libs > /dev/null 2>&1; then
-               if ./closedir > /dev/null 2>&1 ; then
-                       echo "Yes, it does."
-                       val="$undef"
-               else
-                       echo "No, it doesn't."
-                       val="$define"
-               fi
-       else
-               echo "(I can't seem to compile the test program--assuming it doesn't)"
-               val="$define"
-       fi
-       ;;
-*)
-       val="$undef";
-       ;;
-esac
-set d_void_closedir
-eval $setvar
-$rm -f closedir*
-: check for volatile keyword
+: see if tzname[] exists
 echo " "
-echo 'Checking to see if your C compiler knows about "volatile"...' >&4
-$cat >try.c <<'EOCP'
-main()
-{
-       typedef struct _goo_struct goo_struct;
-       goo_struct * volatile goo = ((goo_struct *)0);
-       struct _goo_struct {
-               long long_int;
-               int reg_int;
-               char char_var;
-       };
-       typedef unsigned short foo_t;
-       char *volatile foo;
-       volatile int bar;
-       volatile foo_t blech;
-       foo = foo;
-}
-EOCP
-if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
+if set tzname val -a d_tzname; eval $csym; $val; then
        val="$define"
-       echo "Yup, it does."
+       echo 'tzname[] found.' >&4
 else
        val="$undef"
-       echo "Nope, it doesn't."
+       echo 'tzname[] NOT found.' >&4
 fi
-set d_volatile
+set d_tzname
 eval $setvar
-$rm -f try.*
-
-: see if there is a wait4
-set wait4 d_wait4
-eval $inlibc
-
-: see if waitpid exists
-set waitpid d_waitpid
-eval $inlibc
-
-: see if wcstombs exists
-set wcstombs d_wcstombs
-eval $inlibc
 
-: see if wctomb exists
-set wctomb d_wctomb
+: see if umask exists
+set umask d_umask
 eval $inlibc
 
-: preserve RCS keywords in files with variable substitution, grrr
-Date='$Date'
-Id='$Id'
-Log='$Log'
-RCSfile='$RCSfile'
-Revision='$Revision'
+: see if we have to deal with yellow pages, now NIS.
+if $test -d /usr/etc/yp || $test -d /etc/yp; then
+       if $test -f /usr/etc/nibindd; then
+               echo " "
+               echo "I'm fairly confident you're on a NeXT."
+               echo " "
+               rp='Do you get the hosts file via NetInfo?'
+               dflt=y
+               case "$hostcat" in
+               nidump*) ;;
+               '') ;;
+               *) dflt=n;;
+               esac
+               . ./myread
+               case "$ans" in
+               y*) hostcat='nidump hosts .';;
+               *)      case "$hostcat" in
+                       nidump*) hostcat='';;
+                       esac
+                       ;;
+               esac
+       fi
+       case "$hostcat" in
+       nidump*) ;;
+       *)
+               case "$hostcat" in
+               *ypcat*) dflt=y;;
+               '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
+                               dflt=y
+                       else
+                               dflt=n
+                       fi;;
+               *) dflt=n;;
+               esac
+               echo " "
+               rp='Are you getting the hosts file via yellow pages?'
+               . ./myread
+               case "$ans" in
+               y*) hostcat='ypcat hosts';;
+               *) hostcat='cat /etc/hosts';;
+               esac
+               ;;
+       esac
+fi
 
-: check for alignment requirements
+: now get the host name
 echo " "
-case "$alignbytes" in
-'') echo "Checking alignment constraints..." >&4
-       $cat >try.c <<'EOCP'
-struct foobar {
-       char foo;
-       double bar;
-} try;
-main()
-{
-       printf("%d\n", (char *)&try.bar - (char *)&try.foo);
-}
-EOCP
-       if $cc $ccflags try.c -o try >/dev/null 2>&1; then
-               dflt=`./try`
+echo "Figuring out host name..." >&4
+case "$myhostname" in
+'') cont=true
+       echo 'Maybe "hostname" will work...'
+       if tans=`sh -c hostname 2>&1` ; then
+               myhostname=$tans
+               phostname=hostname
+               cont=''
+       fi
+       ;;
+*) cont='';;
+esac
+if $test "$cont"; then
+       if ./xenix; then
+               echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
+               if tans=`cat /etc/systemid 2>&1` ; then
+                       myhostname=$tans
+                       phostname='cat /etc/systemid'
+                       echo "Whadyaknow.  Xenix always was a bit strange..."
+                       cont=''
+               fi
+       elif $test -r /etc/systemid; then
+               echo "(What is a non-Xenix system doing with /etc/systemid?)"
+       fi
+fi
+if $test "$cont"; then
+       echo 'No, maybe "uuname -l" will work...'
+       if tans=`sh -c 'uuname -l' 2>&1` ; then
+               myhostname=$tans
+               phostname='uuname -l'
        else
-               dflt='8'
-               echo"(I can't seem to compile the test program...)"
+               echo 'Strange.  Maybe "uname -n" will work...'
+               if tans=`sh -c 'uname -n' 2>&1` ; then
+                       myhostname=$tans
+                       phostname='uname -n'
+               else
+                       echo 'Oh well, maybe I can mine it out of whoami.h...'
+                       if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
+                               myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
+                               phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
+                       else
+                               case "$myhostname" in
+                               '') echo "Does this machine have an identity crisis or something?"
+                                       phostname='';;
+                               *)
+                                       echo "Well, you said $myhostname before..."
+                                       phostname='echo $myhostname';;
+                               esac
+                       fi
+               fi
        fi
+fi
+: you do not want to know about this
+set $myhostname
+myhostname=$1
+
+: verify guess
+if $test "$myhostname" ; then
+       dflt=y
+       rp='Your host name appears to be "'$myhostname'".'" Right?"
+       . ./myread
+       case "$ans" in
+       y*) ;;
+       *) myhostname='';;
+       esac
+fi
+
+: bad guess or no guess
+while $test "X$myhostname" = X ; do
+       dflt=''
+       rp="Please type the (one word) name of your host:"
+       . ./myread
+       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]'`
        ;;
-*) dflt="$alignbytes"
+esac
+
+case "$myhostname" in
+*.*)
+       dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
+       myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
+       echo "(Trimming domain name from host name--host name is now $myhostname)"
        ;;
+*) case "$mydomain" in
+       '')
+               $hostcat >hosts
+               dflt=.`$awk "/[0-9].*$myhostname/ {for(i=2; i<=NF;i++) print \\\$i}" \
+                       hosts | $sort | $uniq | \
+                       $sed -n -e "s/$myhostname\.\([a-zA-Z_.]\)/\1/p"`
+               case "$dflt" in
+               .) echo "(You do not have fully-qualified names in /etc/hosts)"
+                       tans=`./loc resolv.conf X /etc /usr/etc`
+                       if $test -f "$tans"; then
+                               echo "(Attempting domain name extraction from $tans)"
+                               dflt=.`egrep '^domain' $tans | $sed 's/domain[  ]*\(.*\)/\1/' \
+                                       | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
+                       fi
+                       ;;
+               esac
+               case "$dflt" in
+               .) echo "(No help from resolv.conf either -- attempting clever guess)"
+                       dflt=.`sh -c domainname 2>/dev/null`
+                       case "$dflt" in
+                       '') dflt='.';;
+                       .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
+                       esac
+                       ;;
+               esac
+               case "$dflt" in
+               .) echo "(Lost all hope -- silly guess then)"
+                       dflt='.uucp'
+                       ;;
+               esac
+               $rm -f hosts
+               ;;
+       *) dflt="$mydomain";;
+       esac;;
 esac
-rp="Doubles must be aligned on a how-many-byte boundary?"
+echo " "
+rp="What is your domain name?"
 . ./myread
-alignbytes="$ans"
-$rm -f try.c try
+tans="$ans"
+case "$ans" in
+'') ;;
+.*) ;;
+*) tans=".$tans";;
+esac
+mydomain="$tans"
 
-: check for ordering of bytes in a long
-case "$byteorder" in
-'')
-       $cat <<'EOM'
-  
-In the following, larger digits indicate more significance.  A big-endian
-machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
-little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
-machines may have weird orders like 3412.  A Cray will report 87654321. If
-the test program works the default is probably right.
-I'm now running the test program...
-EOM
-       $cat >try.c <<'EOCP'
-#include <stdio.h>
-main()
-{
-       int i;
-       union {
-               unsigned long l;
-               char c[sizeof(long)];
-       } u;
+: translate upper to lower if necessary
+case "$mydomain" in
+*[A-Z]*)
+       echo "(Normalizing case in your domain name)"
+       mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
+       ;;
+esac
 
-       if (sizeof(long) > 4)
-               u.l = (0x08070605L << 32) | 0x04030201L;
-       else
-               u.l = 0x04030201L;
-       for (i = 0; i < sizeof(long); i++)
-               printf("%c", u.c[i]+'0');
-       printf("\n");
-       exit(0);
-}
-EOCP
-       xxx_prompt=y
-       if $cc $ccflags try.c -o try >/dev/null 2>&1 && ./try > /dev/null; then
-               dflt=`./try`
-               case "$dflt" in
-               [1-4][1-4][1-4][1-4]|12345678|87654321)
-                       echo "(The test program ran ok.)"
-                       echo "byteorder=$dflt"
-                       xxx_prompt=n
+: a little sanity check here
+case "$phostname" in
+'') ;;
+*)
+       case `$phostname | ./tr '[A-Z]' '[a-z]'` in
+       $myhostname$mydomain|$myhostname) ;;
+       *)
+               case "$phostname" in
+               sed*)
+                       echo "(That doesn't agree with your whoami.h file, by the way.)"
+                       ;;
+               *)
+                       echo "(That doesn't agree with your $phostname command, by the way.)"
                        ;;
-               ????|????????) echo "(The test program ran ok.)" ;;
-               *) echo "(The test program didn't run right for some reason.)" ;;
                esac
-       else
-               dflt='4321'
-               cat <<'EOM'
-(I can't seem to compile the test program.  Guessing big-endian...)
-EOM
-       fi
-       case "$xxx_prompt" in
-       y)
-               rp="What is the order of bytes in a long?"
-               . ./myread
-               byteorder="$ans"
-               ;;
-       *)      byteorder=$dflt
-               ;;
+       ;;
        esac
        ;;
 esac
-$rm -f try.c try
 
-: how do we catenate cpp tokens here?
+: see how we will look up host name
 echo " "
-echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
-$cat >cpp_stuff.c <<'EOCP'
-#define RCAT(a,b)a/**/b
-#define ACAT(a,b)a ## b
-RCAT(Rei,ser)
-ACAT(Cir,cus)
-EOCP
-$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
-if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
-       echo "Oh!  Smells like ANSI's been here."
-       echo "We can catify or stringify, separately or together!"
-       cpp_stuff=42
-elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
-       echo "Ah, yes!  The good old days!"
-       echo "However, in the good old days we don't know how to stringify and"
-       echo "catify at the same time."
-       cpp_stuff=1
-else
-       $cat >&4 <<EOM
-Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
-to have to edit the values of CAT[2-5] in config.h...
+if false; then
+       : dummy stub to allow use of elif
+elif set uname val -f d_uname; eval $csym; $val; then
+       if ./xenix; then
+               $cat <<'EOM'
+uname() was found, but you're running xenix, and older versions of xenix
+have a broken uname(). If you don't really know whether your xenix is old
+enough to have a broken system call, use the default answer.
+
 EOM
-       cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
+               dflt=y
+               case "$d_uname" in
+               "$define") dflt=n;;
+               esac
+               rp='Is your uname() broken?'
+               . ./myread
+               case "$ans" in
+               n*) d_uname="$define"; call=uname;;
+               esac
+       else
+               echo 'uname() found.' >&4
+               d_uname="$define"
+               call=uname
+       fi
 fi
-$rm -f cpp_stuff.*
+case "$d_gethname" in
+'') d_gethname="$undef";;
+esac
+case "$d_uname" in
+'') d_uname="$undef";;
+esac
+case "$d_phostname" in
+'') d_phostname="$undef";;
+esac
 
-: see if this is a db.h system
-set db.h i_db
-eval $inhdr
+: backward compatibility for d_hvfork
+if test X$d_hvfork != X; then
+       d_vfork="$d_hvfork"
+       d_hvfork=''
+fi
+: see if there is a vfork
+val=''
+set vfork val
+eval $inlibc
 
-case "$i_db" in
-define)
-       : Check the return type needed for hash 
+: Ok, but do we want to use it. vfork is reportedly unreliable in 
+: perl on Solaris 2.x, and probably elsewhere.
+case "$val" in
+$define)
        echo " "
-       echo "Checking return type needed for hash for Berkeley DB ..." >&4
-       $cat >try.c <<EOCP
-#$d_const HASCONST
-#ifndef HASCONST
-#define const
-#endif
-#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.*
-       echo "Your version of Berkeley DB uses $db_hashtype for hash."
-       ;;
-*)     db_hashtype=int
+       case "$usevfork" in
+       false) dflt='n';;
+       *) dflt='y';;
+       esac
+       rp="Some systems have problems with vfork().  Do you want to use it?"
+       . ./myread
+       case "$ans" in
+       y|Y) ;;
+       *)
+               echo "Ok, we won't use vfork()."
+               val="$undef"
+               ;;
+       esac
        ;;
 esac
+set d_vfork
+eval $setvar
+case "$d_vfork" in
+$define) usevfork='true';;
+*) usevfork='false';;
+esac
 
-case "$i_db" in
-define)
-       : Check the return type needed for prefix 
+: see if this is an sysdir system
+set sys/dir.h i_sysdir
+eval $inhdr
+
+: see if this is an sysndir system
+set sys/ndir.h i_sysndir
+eval $inhdr
+
+: see if closedir exists
+set closedir d_closedir
+eval $inlibc
+
+case "$d_closedir" in
+"$define")
        echo " "
-       echo "Checking return type needed for prefix for Berkeley DB ..." >&4
-       cat >try.c <<EOCP
-#$d_const HASCONST
-#ifndef HASCONST
-#define const
+       echo "Checking whether closedir() returns a status..." >&4
+       cat > closedir.c <<EOM
+#$i_dirent I_DIRENT            /**/
+#$i_sysdir I_SYS_DIR           /**/
+#$i_sysndir I_SYS_NDIR         /**/
+
+#if defined(I_DIRENT)
+#include <dirent.h>
+#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
+#include <sys/dir.h>
 #endif
-#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
+#ifdef I_SYS_NDIR
+#include <sys/ndir.h>
+#else
+#ifdef I_SYS_DIR
+#ifdef hp9000s500
+#include <ndir.h>      /* may be wrong in the future */
+#else
+#include <sys/dir.h>
+#endif
+#endif
+#endif
+#endif 
+int main() { return closedir(opendir(".")); }
+EOM
+       if $cc $ccflags $ldflags -o closedir closedir.c $libs > /dev/null 2>&1; then
+               if ./closedir > /dev/null 2>&1 ; then
+                       echo "Yes, it does."
+                       val="$undef"
                else
-                       db_prefixtype='size_t'
+                       echo "No, it doesn't."
+                       val="$define"
                fi
        else
-               echo "I can't seem to compile the test program." >&4
-               db_prefixtype='int'
+               echo "(I can't seem to compile the test program--assuming it doesn't)"
+               val="$define"
        fi
-       $rm -f try.*
-       echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
        ;;
-*)     db_prefixtype='int'
+*)
+       val="$undef";
        ;;
 esac
-
-: check for void type
-echo " "
-echo "Checking to see how well your C compiler groks the void type..." >&4
-echo " "
-$cat >&4 <<EOM
-  Support flag bits are:
-    1: basic void declarations.
-    2: arrays of pointers to functions returning void.
-    4: operations between pointers to and addresses of void functions.
-    8: generic void pointers.
-EOM
+set d_void_closedir
+eval $setvar
+$rm -f closedir*
+: check for volatile keyword
 echo " "
-case "$voidflags" in
-'')
-       $cat >try.c <<'EOCP'
-#if TRY & 1
-void main() {
-#else
-main() {
-#endif
-       extern void moo();      /* function returning void */
-       void (*goo)();          /* ptr to func returning void */
-#if TRY & 8
-       void *hue;              /* generic ptr */
-#endif
-#if TRY & 2
-       void (*foo[10])();
-#endif
-
-#if TRY & 4
-       if(goo == moo) {
-               exit(0);
-       }
-#endif
-       exit(0);
+echo 'Checking to see if your C compiler knows about "volatile"...' >&4
+$cat >try.c <<'EOCP'
+main()
+{
+       typedef struct _goo_struct goo_struct;
+       goo_struct * volatile goo = ((goo_struct *)0);
+       struct _goo_struct {
+               long long_int;
+               int reg_int;
+               char char_var;
+       };
+       typedef unsigned short foo_t;
+       char *volatile foo;
+       volatile int bar;
+       volatile foo_t blech;
+       foo = foo;
 }
 EOCP
-       if $cc -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
-               voidflags=$defvoidused
-       echo "It appears to support void to the level $package wants ($defvoidused)."
-               if $contains warning .out >/dev/null 2>&1; then
-                       echo "However, you might get some warnings that look like this:"
-                       $cat .out
-               fi
-       else
-echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
-               if $cc -c -DTRY=1 try.c >/dev/null 2>&1 ; then
-                       echo "It supports 1..."
-                       if $cc -c -DTRY=3 try.c >/dev/null 2>&1 ; then
-                               echo "It also supports 2..."
-                               if $cc -c -DTRY=7 try.c >/dev/null 2>&1 ; then
-                                       voidflags=7
-                                       echo "And it supports 4 but not 8 definitely."
-                               else
-                                       echo "It doesn't support 4..."
-                                       if $cc -c -DTRY=11 try.c >/dev/null 2>&1 ; then
-                                               voidflags=11
-                                               echo "But it supports 8."
-                                       else
-                                               voidflags=3
-                                               echo "Neither does it support 8."
-                                       fi
-                               fi
-                       else
-                               echo "It does not support 2..."
-                               if $cc -c -DTRY=13 try.c >/dev/null 2>&1 ; then
-                                       voidflags=13
-                                       echo "But it supports 4 and 8."
-                               else
-                                       if $cc -c -DTRY=5 try.c >/dev/null 2>&1 ; then
-                                               voidflags=5
-                                               echo "And it supports 4 but has not heard about 8."
-                                       else
-                                               echo "However it supports 8 but not 4."
-                                       fi
-                               fi
-                       fi
-               else
-                       echo "There is no support at all for void."
-                       voidflags=0
-               fi
-       fi
-esac
-: Only prompt user if voidflags is not 15.  If voidflags is 15, then
-: we presume all is well.
-case "$voidflags" in
-15) ;;
-*)     dflt="$voidflags";
-       rp="Your void support flags add up to what?"
-       . ./myread
-       voidflags="$ans"
-       ;;
-esac
-$rm -f try.* .out
+if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
+       val="$define"
+       echo "Yup, it does."
+else
+       val="$undef"
+       echo "Nope, it doesn't."
+fi
+set d_volatile
+eval $setvar
+$rm -f try.*
 
-: see if dbm.h is available
-: see if dbmclose exists
-set dbmclose d_dbmclose
+: see if there is a wait4
+set wait4 d_wait4
 eval $inlibc
 
-case "$d_dbmclose" in
-$define)
-       set dbm.h i_dbm
-       eval $inhdr
-       case "$i_dbm" in
-       $define)
-               val="$undef"
-               set i_rpcsvcdbm
-               eval $setvar
-               ;;
-       *)      set rpcsvc/dbm.h i_rpcsvcdbm
-               eval $inhdr
-               ;;
-       esac
+: see if waitpid exists
+set waitpid d_waitpid
+eval $inlibc
+
+: see if wcstombs exists
+set wcstombs d_wcstombs
+eval $inlibc
+
+: see if wctomb exists
+set wctomb d_wctomb
+eval $inlibc
+
+: preserve RCS keywords in files with variable substitution, grrr
+Date='$Date'
+Id='$Id'
+Log='$Log'
+RCSfile='$RCSfile'
+Revision='$Revision'
+
+: check for alignment requirements
+echo " "
+case "$alignbytes" in
+'') echo "Checking alignment constraints..." >&4
+       $cat >try.c <<'EOCP'
+struct foobar {
+       char foo;
+       double bar;
+} try;
+main()
+{
+       printf("%d\n", (char *)&try.bar - (char *)&try.foo);
+}
+EOCP
+       if $cc $ccflags try.c -o try >/dev/null 2>&1; then
+               dflt=`./try`
+       else
+               dflt='8'
+               echo"(I can't seem to compile the test program...)"
+       fi
        ;;
-*)     echo "We won't be including <dbm.h>"
-       val="$undef"
-       set i_dbm
-       eval $setvar
-       val="$undef"
-       set i_rpcsvcdbm
-       eval $setvar
+*) dflt="$alignbytes"
        ;;
 esac
+rp="Doubles must be aligned on a how-many-byte boundary?"
+. ./myread
+alignbytes="$ans"
+$rm -f try.c try
 
-: see if ndbm.h is available
-set ndbm.h t_ndbm
-eval $inhdr
-case "$t_ndbm" in
-$define)
-       : see if dbm_open exists
-       set dbm_open d_dbm_open
-       eval $inlibc
-       case "$d_dbm_open" in
-       $undef)
-               t_ndbm="$undef"
-               echo "We won't be including <ndbm.h>"
-               ;;
-       esac
-       ;;
-esac
-val="$t_ndbm"
-set i_ndbm
-eval $setvar
+: Define several unixisms.  These can be overridden in hint files.
+ar='ar'
+exe_ext=''
+lib_ext='.a'
+obj_ext='.o'
+path_sep='/'
+: Extra object files needed on this platform.
+archobjs=''
+: Which makefile gets called first.  This is used by make depend.
+firstmakefile='makefile'
 
-: see if gdbm.h is available
-set gdbm.h t_gdbm
-eval $inhdr
-case "$t_gdbm" in
-$define)
-       : see if gdbm_open exists
-       set gdbm_open d_gdbm_open
-       eval $inlibc
-       case "$d_gdbm_open" in
-       $undef)
-               t_gdbm="$undef"
-               echo "We won't be including <gdbm.h>"
+: check for ordering of bytes in a long
+case "$byteorder" in
+'')
+       $cat <<'EOM'
+  
+In the following, larger digits indicate more significance.  A big-endian
+machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
+little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
+machines may have weird orders like 3412.  A Cray will report 87654321. If
+the test program works the default is probably right.
+I'm now running the test program...
+EOM
+       $cat >try.c <<'EOCP'
+#include <stdio.h>
+main()
+{
+       int i;
+       union {
+               unsigned long l;
+               char c[sizeof(long)];
+       } u;
+
+       if (sizeof(long) > 4)
+               u.l = (0x08070605L << 32) | 0x04030201L;
+       else
+               u.l = 0x04030201L;
+       for (i = 0; i < sizeof(long); i++)
+               printf("%c", u.c[i]+'0');
+       printf("\n");
+       exit(0);
+}
+EOCP
+       xxx_prompt=y
+       if $cc $ccflags try.c -o try >/dev/null 2>&1 && ./try > /dev/null; then
+               dflt=`./try`
+               case "$dflt" in
+               [1-4][1-4][1-4][1-4]|12345678|87654321)
+                       echo "(The test program ran ok.)"
+                       echo "byteorder=$dflt"
+                       xxx_prompt=n
+                       ;;
+               ????|????????) echo "(The test program ran ok.)" ;;
+               *) echo "(The test program didn't run right for some reason.)" ;;
+               esac
+       else
+               dflt='4321'
+               cat <<'EOM'
+(I can't seem to compile the test program.  Guessing big-endian...)
+EOM
+       fi
+       case "$xxx_prompt" in
+       y)
+               rp="What is the order of bytes in a long?"
+               . ./myread
+               byteorder="$ans"
+               ;;
+       *)      byteorder=$dflt
                ;;
        esac
        ;;
 esac
-val="$t_gdbm"
-set i_gdbm
-eval $setvar
+$rm -f try.c try
 
+: how do we catenate cpp tokens here?
 echo " "
-echo "Looking for extensions..." >&4
-cd ../ext
-: If we are using the old config.sh, known_extensions may contain
-: old or inaccurate or duplicate values.
-known_extensions=''
-: We do not use find because it might not be available.
-: We do not just use MANIFEST because the user may have dropped
-: some additional extensions into the source tree and expect them
-: to be built.
-for xxx in * ; do
-       if $test -f $xxx/$xxx.xs; then
-               known_extensions="$known_extensions $xxx"
-       else
-               if $test -d $xxx; then
-                       cd $xxx
-                       for yyy in * ; do
-                               if $test -f $yyy/$yyy.xs; then
-                                       known_extensions="$known_extensions $xxx/$yyy"
-                               fi
-                       done
-                       cd ..
-               fi
-       fi
-done
-set X $known_extensions
-shift
-known_extensions="$*"
-cd ../UU
-
-: Now see which are supported on this system.
-avail_ext=''
-for xxx in $known_extensions ; do
-    case "$xxx" in
-    DB_File) case "$i_db" in 
-           $define) avail_ext="$avail_ext $xxx" ;;
-           esac
-           ;;
-    GDBM_File) case "$i_gdbm" in 
-           $define) avail_ext="$avail_ext $xxx" ;;
-           esac
-           ;;
-    NDBM_File) case "$i_ndbm" in 
-           $define) avail_ext="$avail_ext $xxx" ;;
-           esac
-           ;;
-    ODBM_File) case "${i_dbm}${i_rpcsvcdbm}" in 
-           *"${define}"*) avail_ext="$avail_ext $xxx" ;;
-           esac
-           ;;
-    POSIX) case "$useposix" in 
-           true|define|y) avail_ext="$avail_ext $xxx" ;;
-           esac
-           ;;
-    Socket) case "$d_socket" in 
-           $define) avail_ext="$avail_ext $xxx" ;;
-           esac
-           ;;
-    *)      avail_ext="$avail_ext $xxx"
-           ;;
-    esac
-done
-
-set X $avail_ext
-shift
-avail_ext="$*"
-
-case $usedl in
-$define)
-       $cat <<EOM
-A number of extensions are supplied with $package.  You may choose to
-compile these extensions for dynamic loading (the default), compile
-them into the $package executable (static loading), or not include
-them at all.  Answer "none" to include no extensions.
-
+echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
+$cat >cpp_stuff.c <<'EOCP'
+#define RCAT(a,b)a/**/b
+#define ACAT(a,b)a ## b
+RCAT(Rei,ser)
+ACAT(Cir,cus)
+EOCP
+$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
+if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
+       echo "Oh!  Smells like ANSI's been here."
+       echo "We can catify or stringify, separately or together!"
+       cpp_stuff=42
+elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
+       echo "Ah, yes!  The good old days!"
+       echo "However, in the good old days we don't know how to stringify and"
+       echo "catify at the same time."
+       cpp_stuff=1
+else
+       $cat >&4 <<EOM
+Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
+to have to edit the values of CAT[2-5] in config.h...
 EOM
-       case "$dynamic_ext" in
-       '') dflt="$avail_ext" ;;
-       *)      dflt="$dynamic_ext" ;;
-       esac
-       case "$dflt" in
-       '')     dflt=none;;
-       esac
-       rp="What extensions do you wish to load dynamically?"
-       . ./myread
-       case "$ans" in
-       none) dynamic_ext=' ' ;;
-       *) dynamic_ext="$ans" ;;
-       esac
+       cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
+fi
+$rm -f cpp_stuff.*
 
-       case "$static_ext" in
-       '')
-               : Exclude those already listed in dynamic linking
-               dflt=''
-               for xxx in $avail_ext; do
-                       case " $dynamic_ext " in
-                       *" $xxx "*) ;;
-                       *) dflt="$dflt $xxx" ;;
-                       esac
-               done
-               set X $dflt
-               shift
-               dflt="$*"
-               ;;
-       *)  dflt="$static_ext" 
-               ;;
-       esac
+: 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 " "
+       echo "Checking return type needed for hash for Berkeley DB ..." >&4
+       $cat >try.c <<EOCP
+#$d_const HASCONST
+#ifndef HASCONST
+#define const
+#endif
+#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.*
+       echo "Your version of Berkeley DB uses $db_hashtype for hash."
+       ;;
+*)     db_hashtype=int
+       ;;
+esac
 
-       case "$dflt" in
-       '')     dflt=none;;
-       esac
-       rp="What extensions do you wish to load statically?"
-       . ./myread
-       case "$ans" in
-       none) static_ext=' ' ;;
-       *) static_ext="$ans" ;;
-       esac
+case "$i_db" in
+define)
+       : Check the return type needed for prefix 
+       echo " "
+       echo "Checking return type needed for prefix for Berkeley DB ..." >&4
+       cat >try.c <<EOCP
+#$d_const HASCONST
+#ifndef HASCONST
+#define const
+#endif
+#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.*
+       echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
        ;;
-*)
-       $cat <<EOM
-A number of extensions are supplied with $package.  Answer "none" 
-to include no extensions. 
+*)     db_prefixtype='int'
+       ;;
+esac
 
+: check for void type
+echo " "
+echo "Checking to see how well your C compiler groks the void type..." >&4
+echo " "
+$cat >&4 <<EOM
+  Support flag bits are:
+    1: basic void declarations.
+    2: arrays of pointers to functions returning void.
+    4: operations between pointers to and addresses of void functions.
+    8: generic void pointers.
 EOM
-       case "$static_ext" in
-       '') dflt="$avail_ext" ;;
-       *)      dflt="$static_ext" ;;
-       esac
+echo " "
+case "$voidflags" in
+'')
+       $cat >try.c <<'EOCP'
+#if TRY & 1
+void main() {
+#else
+main() {
+#endif
+       extern void moo();      /* function returning void */
+       void (*goo)();          /* ptr to func returning void */
+#if TRY & 8
+       void *hue;              /* generic ptr */
+#endif
+#if TRY & 2
+       void (*foo[10])();
+#endif
 
-       case "$dflt" in
-       '')     dflt=none;;
-       esac
-       rp="What extensions do you wish to include?"
+#if TRY & 4
+       if(goo == moo) {
+               exit(0);
+       }
+#endif
+       exit(0);
+}
+EOCP
+       if $cc -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
+               voidflags=$defvoidused
+       echo "It appears to support void to the level $package wants ($defvoidused)."
+               if $contains warning .out >/dev/null 2>&1; then
+                       echo "However, you might get some warnings that look like this:"
+                       $cat .out
+               fi
+       else
+echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
+               if $cc -c -DTRY=1 try.c >/dev/null 2>&1 ; then
+                       echo "It supports 1..."
+                       if $cc -c -DTRY=3 try.c >/dev/null 2>&1 ; then
+                               echo "It also supports 2..."
+                               if $cc -c -DTRY=7 try.c >/dev/null 2>&1 ; then
+                                       voidflags=7
+                                       echo "And it supports 4 but not 8 definitely."
+                               else
+                                       echo "It doesn't support 4..."
+                                       if $cc -c -DTRY=11 try.c >/dev/null 2>&1 ; then
+                                               voidflags=11
+                                               echo "But it supports 8."
+                                       else
+                                               voidflags=3
+                                               echo "Neither does it support 8."
+                                       fi
+                               fi
+                       else
+                               echo "It does not support 2..."
+                               if $cc -c -DTRY=13 try.c >/dev/null 2>&1 ; then
+                                       voidflags=13
+                                       echo "But it supports 4 and 8."
+                               else
+                                       if $cc -c -DTRY=5 try.c >/dev/null 2>&1 ; then
+                                               voidflags=5
+                                               echo "And it supports 4 but has not heard about 8."
+                                       else
+                                               echo "However it supports 8 but not 4."
+                                       fi
+                               fi
+                       fi
+               else
+                       echo "There is no support at all for void."
+                       voidflags=0
+               fi
+       fi
+esac
+: Only prompt user if voidflags is not 15.  If voidflags is 15, then
+: we presume all is well.
+case "$voidflags" in
+15) ;;
+*)     dflt="$voidflags";
+       rp="Your void support flags add up to what?"
        . ./myread
-       case "$ans" in
-       none) static_ext=' ' ;;
-       *) static_ext="$ans" ;;
-       esac
+       voidflags="$ans"
        ;;
 esac
-
-set X $dynamic_ext $static_ext
-shift
-extensions="$*"
+$rm -f try.* .out
 
 : see what type file positions are declared as in the library
 set fpos_t fpostype long stdio.h sys/types.h
@@ -7478,19 +7340,6 @@ 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
@@ -7822,6 +7671,7 @@ esac
 
 : Trace out the files included by signal.h, then look for SIGxxx names.
 : Remove SIGARRAYSIZE used by HPUX.
+: Remove SIGTYP void lines used by OS2.
 xxx=`echo '#include <signal.h>' |
        $cppstdin $cppminus $cppflags 2>/dev/null |
        $grep '^[       ]*#.*include' | 
@@ -7838,10 +7688,10 @@ case "$xxxfiles" in
 '')    xxxfiles=`./findhdr signal.h` ;;
 esac
 xxx=`awk '
-$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ {
+$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $3 !~ /void/ {
        print substr($2, 4, 20)
 }
-$1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ {
+$1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
        print substr($3, 4, 20)
 }' $xxxfiles`
 : Append some common names just in case the awk scan failed.
@@ -7850,11 +7700,19 @@ xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
 : generate a few handy files for later
-echo $xxx | $tr ' ' '\012' | $awk '
-BEGIN {
-       printf "#include <signal.h>\n";
-       printf "main() {\n";
-}
+$cat > signal.c <<'EOP'
+#include <sys/types.h>
+#include <signal.h>
+int main() {
+#ifdef NSIG
+printf("NSIG %d\n", NSIG);
+#else
+#ifdef _NSIG
+printf("NSIG %d\n", _NSIG);
+#endif
+#endif
+EOP
+echo $xxx | $tr ' ' '\012' | $sort | $uniq | $awk '
 {
        printf "#ifdef SIG"; printf $1; printf "\n"
        printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
@@ -7864,12 +7722,43 @@ BEGIN {
 END {
        printf "}\n";
 }
-' >signal.c
-$cat >signal.cmd <<EOS
+' >>signal.c
+$cat >signal.awk <<'EOP'
+BEGIN { ndups = 0 }
+$1 ~ /^NSIG$/ { nsig = $2 }
+($1 !~ /^NSIG$/) && (NF == 2) {
+    if ($2 > maxsig) { maxsig = $2 }
+    if (sig_name[$2]) {
+       dup_name[ndups] = $1
+       dup_num[ndups] = $2
+       ndups++ 
+    }
+    else {
+       sig_name[$2] = $1
+       sig_num[$2] = $2
+    }
+
+}
+END { 
+    if (nsig == 0) { nsig = maxsig + 1 }
+       for (n = 1; n < nsig; n++) {
+               if (sig_name[n]) {
+                       printf("%s %d\n", sig_name[n], sig_num[n])
+               }
+               else {
+                       printf("NUM%d %d\n", n, n) 
+               }
+       }
+    for (n = 0; n < ndups; n++) {
+               printf("%s %d\n", dup_name[n], dup_num[n])
+    }
+}
+EOP
+$cat >signal_cmd <<EOS
 $startsh
 $test -s signal.lst && exit 0
 if $cc $ccflags signal.c -o signal $ldflags >/dev/null 2>&1; then
-       ./signal | $sort -n +1 | $uniq >signal.lst
+       ./signal | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
 else
        echo "(I can't seem be able to compile the test program -- Guessing)"
        echo 'kill -l' >signal
@@ -7884,17 +7773,25 @@ else
 fi
 $rm -f signal.c signal signal.o
 EOS
-chmod a+x signal.cmd
-$eunicefix signal.cmd
+chmod a+x signal_cmd
+$eunicefix signal_cmd
 
 : generate list of signal names
 echo " "
 case "$sig_name" in
+'')    sig_num='' ;;
+esac
+case "$sig_num" in
+'')    sig_name='' ;;
+esac
+case "$sig_name" in
 '')
-       echo "Generating a list of signal names..." >&4
-       ./signal.cmd
+       echo "Generating a list of signal names and numbers..." >&4
+       ./signal_cmd
        sig_name=`$awk '{printf "%s ", $1}' signal.lst`
        sig_name="ZERO $sig_name"
+       sig_num=`$awk '{printf "%d ", $2}' signal.lst`
+       sig_num="0 $sig_num"
        ;;
 esac
 echo "The following signals are available:"
@@ -7913,21 +7810,7 @@ echo $sig_name | $awk \
        }
        printf "\n"
 }'
-
-: generate list of signal numbers
-echo " "
-case "$sig_num" in
-'')
-       echo "Generating a list of signal numbers..." >&4
-       ./signal.cmd
-       sig_num=`$awk '{printf "%d ", $2}' signal.lst`
-       sig_num="0 $sig_num"
-       ;;
-esac
-case "$sig_max" in
-'')    sig_max=`$tail -1 signal.lst | $awk '{print $2}'` ;;
-esac
-echo "The maximum signal number defined is $sig_max."
+$rm -f signal signal.c signal.awk signal.lst signal_cmd 
 
 : see what type is used for size_t
 set size_t sizetype 'unsigned int' stdio.h sys/types.h
@@ -8017,12 +7900,42 @@ xxx)
        *) dflt="$1" ;;
        esac
        ;;
-*) dflt="$uidtype";;
+*) dflt="$uidtype";;
+esac
+echo " "
+rp="What is the type for user ids returned by getuid()?"
+. ./myread
+uidtype="$ans"
+
+: see if dbm.h is available
+: see if dbmclose exists
+set dbmclose d_dbmclose
+eval $inlibc
+
+case "$d_dbmclose" in
+$define)
+       set dbm.h i_dbm
+       eval $inhdr
+       case "$i_dbm" in
+       $define)
+               val="$undef"
+               set i_rpcsvcdbm
+               eval $setvar
+               ;;
+       *)      set rpcsvc/dbm.h i_rpcsvcdbm
+               eval $inhdr
+               ;;
+       esac
+       ;;
+*)     echo "We won't be including <dbm.h>"
+       val="$undef"
+       set i_dbm
+       eval $setvar
+       val="$undef"
+       set i_rpcsvcdbm
+       eval $setvar
+       ;;
 esac
-echo " "
-rp="What is the type for user ids returned by getuid()?"
-. ./myread
-uidtype="$ans"
 
 : see if this is a sys/file.h system
 val=''
@@ -8081,6 +7994,10 @@ eval $setvar
 set grp.h i_grp
 eval $inhdr
 
+: see if locale.h is available
+set locale.h i_locale
+eval $inhdr
+
 : see if this is a math.h system
 set math.h i_math
 eval $inhdr
@@ -8109,6 +8026,26 @@ esac
 set i_memory
 eval $setvar
 
+: see if ndbm.h is available
+set ndbm.h t_ndbm
+eval $inhdr
+case "$t_ndbm" in
+$define)
+       : see if dbm_open exists
+       set dbm_open d_dbm_open
+       eval $inlibc
+       case "$d_dbm_open" in
+       $undef)
+               t_ndbm="$undef"
+               echo "We won't be including <ndbm.h>"
+               ;;
+       esac
+       ;;
+esac
+val="$t_ndbm"
+set i_ndbm
+eval $setvar
+
 : see if net/errno.h is available
 val=''
 set net/errno.h val
@@ -8453,6 +8390,223 @@ case "$d_vfork" in
        ;;
 esac
 
+: see if gdbm.h is available
+set gdbm.h t_gdbm
+eval $inhdr
+case "$t_gdbm" in
+$define)
+       : see if gdbm_open exists
+       set gdbm_open d_gdbm_open
+       eval $inlibc
+       case "$d_gdbm_open" in
+       $undef)
+               t_gdbm="$undef"
+               echo "We won't be including <gdbm.h>"
+               ;;
+       esac
+       ;;
+esac
+val="$t_gdbm"
+set i_gdbm
+eval $setvar
+
+echo " "
+echo "Looking for extensions..." >&4
+cd ../ext
+: If we are using the old config.sh, known_extensions may contain
+: old or inaccurate or duplicate values.
+known_extensions=''
+: We do not use find because it might not be available.
+: We do not just use MANIFEST because the user may have dropped
+: some additional extensions into the source tree and expect them
+: to be built.
+for xxx in * ; do
+       if $test -f $xxx/$xxx.xs; then
+               known_extensions="$known_extensions $xxx"
+       else
+               if $test -d $xxx; then
+                       cd $xxx
+                       for yyy in * ; do
+                               if $test -f $yyy/$yyy.xs; then
+                                       known_extensions="$known_extensions $xxx/$yyy"
+                               fi
+                       done
+                       cd ..
+               fi
+       fi
+done
+set X $known_extensions
+shift
+known_extensions="$*"
+cd ../UU
+
+: Now see which are supported on this system.
+avail_ext=''
+for xxx in $known_extensions ; do
+    case "$xxx" in
+    DB_File) case "$i_db" in 
+           $define) avail_ext="$avail_ext $xxx" ;;
+           esac
+           ;;
+    GDBM_File) case "$i_gdbm" in 
+           $define) avail_ext="$avail_ext $xxx" ;;
+           esac
+           ;;
+    NDBM_File) case "$i_ndbm" in 
+           $define) avail_ext="$avail_ext $xxx" ;;
+           esac
+           ;;
+    ODBM_File) case "${i_dbm}${i_rpcsvcdbm}" in 
+           *"${define}"*) avail_ext="$avail_ext $xxx" ;;
+           esac
+           ;;
+    POSIX) case "$useposix" in 
+           true|define|y) avail_ext="$avail_ext $xxx" ;;
+           esac
+           ;;
+    Socket) case "$d_socket" in 
+           $define) avail_ext="$avail_ext $xxx" ;;
+           esac
+           ;;
+    *)      avail_ext="$avail_ext $xxx"
+           ;;
+    esac
+done
+
+set X $avail_ext
+shift
+avail_ext="$*"
+
+case $usedl in
+$define)
+       $cat <<EOM
+A number of extensions are supplied with $package.  You may choose to
+compile these extensions for dynamic loading (the default), compile
+them into the $package executable (static loading), or not include
+them at all.  Answer "none" to include no extensions.
+
+EOM
+       case "$dynamic_ext" in
+       '') dflt="$avail_ext" ;;
+       *)      dflt="$dynamic_ext" ;;
+       esac
+       case "$dflt" in
+       '')     dflt=none;;
+       esac
+       rp="What extensions do you wish to load dynamically?"
+       . ./myread
+       case "$ans" in
+       none) dynamic_ext=' ' ;;
+       *) dynamic_ext="$ans" ;;
+       esac
+
+       case "$static_ext" in
+       '')
+               : Exclude those already listed in dynamic linking
+               dflt=''
+               for xxx in $avail_ext; do
+                       case " $dynamic_ext " in
+                       *" $xxx "*) ;;
+                       *) dflt="$dflt $xxx" ;;
+                       esac
+               done
+               set X $dflt
+               shift
+               dflt="$*"
+               ;;
+       *)  dflt="$static_ext" 
+               ;;
+       esac
+
+       case "$dflt" in
+       '')     dflt=none;;
+       esac
+       rp="What extensions do you wish to load statically?"
+       . ./myread
+       case "$ans" in
+       none) static_ext=' ' ;;
+       *) static_ext="$ans" ;;
+       esac
+       ;;
+*)
+       $cat <<EOM
+A number of extensions are supplied with $package.  Answer "none" 
+to include no extensions. 
+
+EOM
+       case "$static_ext" in
+       '') dflt="$avail_ext" ;;
+       *)      dflt="$static_ext" ;;
+       esac
+
+       case "$dflt" in
+       '')     dflt=none;;
+       esac
+       rp="What extensions do you wish to include?"
+       . ./myread
+       case "$ans" in
+       none) static_ext=' ' ;;
+       *) static_ext="$ans" ;;
+       esac
+       ;;
+esac
+
+set X $dynamic_ext $static_ext
+shift
+extensions="$*"
+
+$cat <<EOM
+
+I need to get your e-mail address in Internet format if possible, i.e.
+something like user@host.domain. Please answer accurately since I have
+no easy means to double check it. The default value provided below
+is most probably close to the reality but may not be valid from outside
+your organization...
+
+EOM
+cont=x
+while test "$cont"; do
+       case "$cf_email" in
+       '') dflt="$cf_by@$myhostname$mydomain";;
+       *) dflt="$cf_email";;
+       esac
+       rp='What is your e-mail address?'
+       . ./myread
+       cf_email="$ans"
+       case "$cf_email" in
+       *@*.*) cont='' ;;
+       *)
+               rp='Address does not look like an Internet one.  Use it anyway?'
+               case "$fastread" in
+               yes) dflt=y ;;
+               *) dflt=n ;;
+               esac
+               . ./myread
+               case "$ans" in
+               y*) cont='' ;;
+               *) echo " " ;;
+               esac
+               ;;
+       esac
+done
+
+$cat <<EOM
+
+If you or somebody else will be maintaining perl at your site, please
+fill in the correct e-mail address here so that they may be contacted
+if necessary. Currently, the "perlbug" program included with perl
+will send mail to this address in addition to perlbug@perl.com. You may
+enter "none" for no administrator.
+
+EOM
+case "$perladmin" in
+'') dflt="$cf_email";;
+*) dflt="$perladmin";;
+esac
+rp='Perl administrator e-mail address'
+. ./myread
+perladmin="$ans"
+
 : Remove build directory name from cppstdin so it can be used from
 : either the present location or the final installed location.
 echo " "
@@ -8531,9 +8685,11 @@ State='$State'
 afs='$afs'
 alignbytes='$alignbytes'
 aphostname='$aphostname'
+ar='$ar'
 archlib='$archlib'
 archlibexp='$archlibexp'
 archname='$archname'
+archobjs='$archobjs'
 awk='$awk'
 baserev='$baserev'
 bash='$bash'
@@ -8646,6 +8802,7 @@ d_msgrcv='$d_msgrcv'
 d_msgsnd='$d_msgsnd'
 d_mymalloc='$d_mymalloc'
 d_nice='$d_nice'
+d_oldarchlib='$d_oldarchlib'
 d_oldsock='$d_oldsock'
 d_open3='$d_open3'
 d_pathconf='$d_pathconf'
@@ -8695,7 +8852,6 @@ d_shmctl='$d_shmctl'
 d_shmdt='$d_shmdt'
 d_shmget='$d_shmget'
 d_shrplib='$d_shrplib'
-d_sitelib='$d_sitelib'
 d_socket='$d_socket'
 d_sockpair='$d_sockpair'
 d_statblks='$d_statblks'
@@ -8749,9 +8905,11 @@ echo='$echo'
 egrep='$egrep'
 emacs='$emacs'
 eunicefix='$eunicefix'
+exe_ext='$exe_ext'
 expr='$expr'
 extensions='$extensions'
 find='$find'
+firstmakefile='$firstmakefile'
 flex='$flex'
 fpostype='$fpostype'
 freetype='$freetype'
@@ -8780,6 +8938,7 @@ i_float='$i_float'
 i_gdbm='$i_gdbm'
 i_grp='$i_grp'
 i_limits='$i_limits'
+i_locale='$i_locale'
 i_malloc='$i_malloc'
 i_math='$i_math'
 i_memory='$i_memory'
@@ -8823,7 +8982,7 @@ installman1dir='$installman1dir'
 installman3dir='$installman3dir'
 installprivlib='$installprivlib'
 installscript='$installscript'
-installsitelib='$installsitelib'
+installsitearch='$installsitearch'
 intsize='$intsize'
 known_extensions='$known_extensions'
 ksh='$ksh'
@@ -8832,6 +8991,7 @@ ld='$ld'
 lddlflags='$lddlflags'
 ldflags='$ldflags'
 less='$less'
+lib_ext='$lib_ext'
 libc='$libc'
 libpth='$libpth'
 libs='$libs'
@@ -8875,6 +9035,9 @@ n='$n'
 nm_opt='$nm_opt'
 nroff='$nroff'
 o_nonblock='$o_nonblock'
+obj_ext='$obj_ext'
+oldarchlib='$oldarchlib'
+oldarchlibexp='$oldarchlibexp'
 optimize='$optimize'
 orderlib='$orderlib'
 osname='$osname'
@@ -8882,8 +9045,10 @@ osvers='$osvers'
 package='$package'
 passcat='$passcat'
 patchlevel='$patchlevel'
+path_sep='$path_sep'
 perl='$perl'
 perladmin='$perladmin'
+perlpath='$perlpath'
 pg='$pg'
 phostname='$phostname'
 plibpth='$plibpth'
@@ -8911,12 +9076,11 @@ sharpbang='$sharpbang'
 shmattype='$shmattype'
 shrpdir='$shrpdir'
 shsharp='$shsharp'
-sig_max='$sig_max'
 sig_name='$sig_name'
 sig_num='$sig_num'
 signal_t='$signal_t'
-sitelib='$sitelib'
-sitelibexp='$sitelibexp'
+sitearch='$sitearch'
+sitearchexp='$sitearchexp'
 sizetype='$sizetype'
 sleep='$sleep'
 smail='$smail'
@@ -8929,6 +9093,7 @@ spackage='$spackage'
 spitshell='$spitshell'
 split='$split'
 ssizetype='$ssizetype'
+startperl='$startperl'
 startsh='$startsh'
 static_ext='$static_ext'
 stdchar='$stdchar'
diff --git a/Doc/perl5-notes b/Doc/perl5-notes
deleted file mode 100644 (file)
index c8bb4ba..0000000
+++ /dev/null
@@ -1,345 +0,0 @@
-#!/usr/local/bin/perl5
-# perl5 -x notes 2> expected > actual ; diff expected actual
-open(EVAL, "| perl5 -x") || die "Can't pipe to perl5\n";
-while (<DATA>) {
-    m/prints ``(.*)''$/ && print STDERR $1,"\n";
-    print EVAL $_;
-}
-__END__
-#!/usr/local/bin/perl5
-#
-# Perl5a6 notes: Patchlevel 3
-#
-# This document is in the public domain.
-#
-# Written by Tony Sanders <sanders@bsdi.com>
-#
-# Quick examples of the new Perl5 features as of alpha6.  Look in the
-# file Changes, the man page, and in the test suite (esp t/op/ref.t)
-# for more information.  There are also a number of files in the alpha6
-# release (e.g., tie*) that show how to use various features.  Also, there
-# are a number of package modules in lib/*.pm that are of interest.
-#
-# Thanks to the following for their input:
-#     Johan.Vromans@NL.net
-#     Daniel Faken <absinthe@viva.chem.washington.edu>
-#     Tom Christiansen <tchrist@wraeththu.cs.colorado.edu>
-#     Dean Roehrich <roehrich@ferrari.cray.com>
-#     Larry Wall <lwall@netlabs.com>
-#     Lionel Cons <Lionel.Cons@cern.ch>
-#
-
-# BEGIN { }
-       # executed at load time
-       print "doody\n";
-       BEGIN { print "howdy\n"; }              # prints ``howdy''
-                                               # then prints ``doody''
-# END { }
-       # executed at exit time in reverse order of definition
-       END { print "blue sky\n"; }             # will print ``blue sky''
-       END { print "goodbye\n"; }              # will print ``goodbye''
-
-# (expr?lval:lval) = value;
-       # The (?:) operator can be used as an lvalue.
-       $a = 1; $b = 2;
-       (defined $b ? $a : $b) = 10;
-       print "$a:$b\n";                        # prints ``10:2''
-
-# new functions: abs, chr, uc, ucfirst, lc, lcfirst
-       print abs(-10), "\n";                   # prints ``10''
-       print chr(64), "\n";                    # prints ``@''
-       print uc("the"), "\n";                  # prints ``THE''
-       print ucfirst("the"), "\n";             # prints ``The''
-       print lc("THE"), "\n";                  # prints ``the''
-       print lcfirst("THE"), "\n";             # prints ``tHE''
-
-# references
-       # references
-       $thing1 = "testing";
-       $ref = \$thing1;                        # \ creates a reference
-       print $$ref,"\n" if ${$ref} eq $$ref;   # deref, prints ``testing''
-
-       # symbolic references
-       sub bat { "baz"; }
-       sub baz { print "foobar\n" };
-       &{&bat};                                # prints ``foobar''
-
-# symbol table assignment: *foo = \&func;
-       # replaces an item in the symbol table (function, scalar, array, hash)
-       # *foo = \$bar          replaces the scalar
-       # *foo = \%bar          replaces the hash table
-       # *foo = \@bar          replaces the array
-       # *foo = \&bar          replaces the function
-       # *foo = *bar           all of the above (including FILEHANDLE!)
-       # XXX: can't do just filehandles (yet)
-       #
-       # This can be used to import and rename a symbol from another package:
-       #     *myfunc = \&otherpack::otherfunc;
-
-# AUTOLOAD { ...; }
-       # called if method not found, passed function name in $AUTOLOAD
-       # @_ are the arguments to the function.
-# goto &func;
-       # goto's a function, used by AUTOLOAD to jump to the function
-# qw/arg list/;   qw(arg list);
-       # quoted words, yields a list; works like split(' ', 'arg list')
-       # not a function, more like q//;
-       {
-           package AutoLoader;
-           AUTOLOAD {
-               eval "sub $AUTOLOAD" . '{ print "@_\n"}';
-               goto &$AUTOLOAD }
-           package JAPH;
-           @ISA = (AutoLoader);
-           sub foo2 { &bar }
-           foo2 qw(Just another Perl hacker,);
-           # prints ``Just another Perl hacker,''
-       }
-# Larry notes:
-# You might point out that there's a canned Autoloader base class in the
-# library.  Another subtlety is that $AUTOLOAD is always in the same
-# package as the AUTOLOAD routine, so if you call another package's
-# AUTOLOAD explicitly you have to set $AUTOLOAD in that package first.
-
-# my
-       # lexical scoping
-       sub samp1 { print $z,"\n" }
-       sub samp2 { my($z) = "world"; &samp1 }
-       $z = "hello";
-       &samp2;                         # prints ``hello''
-
-# package;
-       # empty package; for catching non-local variable references
-       sub samp3 {
-           my $x = shift;              # local() would work also
-           package;                    # empty package
-           $main::count += $x;         # this is ok.
-           # $y = 1;                   # would be a compile time error
-       }
-
-# =>
-       # works like comma (,); use for key/value pairs
-        # sometimes used to disambiguate the final expression in a block
-       # might someday supply warnings if you get out of sync
-       %foo = ( abc => foo );
-       print $foo{abc},"\n";           # prints ``foo''
-
-# ::
-       # works like tick (') (use of ' is deprecated in perl5)
-        print $main::foo{abc},"\n";    # prints ``foo''
-
-# bless ref;
-       # Bless takes a reference and returns an "object"
-       $oref = bless \$scalar;
-
-# ->
-       # dereferences an "object"
-       $x = { def => bar };            # $x is ref to anonymous hash
-       print $x->{def},"\n";           # prints ``bar''
-
-       # method derefs must be bless'ed
-       {
-           # initial cap is encouraged to avoid naming conflicts
-           package Sample;
-           sub samp4 { my($this) = shift; print $this->{def},"\n"; }
-           sub samp5 { print "samp5: ", $_[1], "\n"; }
-           $main::y = bless $main::x;  # $x is ref, $y is "object"
-       }
-       $y->samp4();                    # prints ``bar''
-
-       # indirect object calls (same as $y->samp5(arglist))
-       samp5 $y arglist;               # prints ``samp5: arglist''
-
-       # static method calls (often used for constructors, see below)
-       samp5 Sample arglist;           # prints ``samp5: arglist''
-
-# function calls without &
-       sub samp6 { print "look ma\n"; }
-       samp6;                          # prints ``look ma''
-
-       # "forward" decl
-       sub samp7;
-       samp7;                          # prints ``look pa''
-       sub samp7 { print "look pa\n"; }
-
-       # no decl requires ()'s or initial &
-       &samp8;                         # prints ``look da''
-       samp8();                        # prints ``look da''
-       sub samp8 { print "look da\n"; }
-
-# ref
-       # returns "object" type
-       {
-           package OBJ1;
-           $x = bless \$y;             # returns "object" $x in "class" OBJ1
-           print ref $x,"\n";          # prints ``OBJ1''
-       }
-
-       # and non-references return undef.
-       $z = 1;
-       print "non-ref\n" unless ref $z;        # prints ``non-ref''
-
-       # ref's to "builtins" return type
-       print ref \$ascalar,"\n";               # prints ``SCALAR''
-       print ref \@array,"\n";                 # prints ``ARRAY''
-       print ref \%hash,"\n";                  # prints ``HASH''
-       sub func { print shift,"\n"; }
-       print ref \&func,"\n";                  # prints ``CODE''
-       print ref \\$scalar,"\n";               # prints ``REF''
-
-# tie
-       # bind a variable to a package with magic functions:
-        #     new, DESTROY, fetch, store, delete, firstkey, nextkey
-       # The exact function list varies with the variable type,
-       # see the man page and tie* for more details.
-       # Usage: tie variable, PackageName, ARGLIST
-       {
-           package TIEPACK;
-           sub new { print "NEW: @_\n"; local($x) = $_[1]; bless \$x }
-           sub fetch { print "fetch ", ref $_[0], "\n"; ${$_[0]} }
-           sub store { print "store $_[1]\n"; ${$_[0]} = $_[1] }
-           DESTROY { print "DESTROY ", ref $_[0], "\n" }
-       }
-       tie $h, TIEPACK, "black_tie";   # prints ``NEW: TIEPACK black_tie''
-       print $h, "\n";                 # prints ``fetch TIEPACK''
-                                       # prints ``black_tie''
-       $h = 'bar';                     # prints ``store bar''
-       untie $h;                       # prints ``DESTROY SCALAR''
-
-# References
-       $sref = \$scalar;               # $$sref is scalar
-       $aref = \@array;                # @$aref is array
-       $href = \%hash;                 # %$href is hash table
-       $fref = \&func;                 # &$fref is function
-       $refref = \$fref;               # ref to ref to function
-       &$$refref("call the function"); # prints ``call the function''
-
-# Anonymous data-structures
-       %hash = ( abc => foo );         # hash in perl4 (works in perl5 also)
-       print $hash{abc},"\n";          # prints ``foo''
-       $ref = { abc => bar };          # reference to anon hash
-       print $ref->{abc},"\n";         # prints ``bar''
-
-       @ary = ( 0, 1, 2 );             # array in perl4 (works in perl5 also)
-       print $ary[1],"\n";             # prints ``1''
-       $ref = [ 3, 4, 5 ];             # reference to anon array
-       print $ref->[1],"\n";           # prints ``4''
-
-# Nested data-structures
-       @foo = ( 0, { name => foobar }, 2, 3 );         # $#foo == 3
-       $aref = [ 0, { name => foobar }, 2, 3 ];        # ref to anon array
-       $href = {                                       # ref to hash of arrays
-           John => [ Mary, Pat, Blanch ],
-           Paul => [ Sally, Jill, Jane ],
-           Mark => [ Ann, Bob, Dawn ],
-       };
-       print $href->{Paul}->[0], "\n"; # prints ``Sally''
-       print $href->{Paul}[0],"\n";    # shorthand version, prints ``Sally''
-       print @{$href->{Mark}},"\n";    # prints ``AnnBobDawn''
-
-# @ISA
-       # Multiple Inheritance (get rich quick)
-       {
-           package OBJ2; sub abc { print "abc\n"; }
-           package OBJ3; sub def { print "def\n"; }
-           package OBJ4; @ISA = ("OBJ2", "OBJ3");
-           $x = bless { foo => bar };
-           $x->abc;                                    # prints ``abc''
-           $x->def;                                    # prints ``def''
-       }
-
-# Packages, Classes, Objects, Methods, Constructors, Destructors, etc.
-       # XXX: need more explinations and samples
-       {
-           package OBJ5;
-           sub new { print "NEW: @_\n"; my($x) = "empty"; bless \$x }
-           sub output { my($this) = shift; print "value = $$this\n"; }
-           DESTROY { print "OBJ5 DESTROY\n" }
-       }
-       # Constructors are often written as static method calls:
-       $x = new OBJ5;          # prints ``NEW: OBJ5''
-       $x->output;             # prints ``value = empty''
-       # The destructor is responsible for calling any base class destructors.
-       undef $x;               # prints ``OBJ5 DESTROY''
-
-# require Package;
-       # same as:  BEGIN { require 'Package.pm'; }
-# require <float>;
-       # checks against the perl version number
-       require 5.000;          # requires perl 5.0 or better
-
-# Package Modules
-# ===============
-# Yes, these are all very sketchy.  See the .pm file for details.
-
-# DynamicLoader (builtin)
-       # Public: &bootstrap
-       # Load a shared library package on systems that support it
-       # This incomplete example was extracted from lib/POSIX.pm
-       #
-       # package POSIX;
-       # requires Exporter; require AutoLoader;
-       # @ISA = (Exporter, AutoLoader, DynamicLoader);
-       # @EXPORT = qw(closedir, opendir, [..., lots of functions]);
-       # bootstrap POSIX;
-
-# Larry notes:
-# The gist of it is that DynamicLoader::bootstrap is only called if main.c
-# didn't already define MYPACKAGE::bootstrap.  So the .pm file doesn't know
-# (or care) whether the module is statically or dynamically loaded.
-
-# AutoLoader.pm
-       # Public: &AUTOLOAD
-       # Causes functions from .../lib/perl/auto/PACKAGE/*.al to autoload
-       # when used but not defined.
-
-# Config.pm
-       # Exports: %Config
-       # The data from the Configure script for perl programs (yeah)
-
-# English.pm
-       # Exports: (lots of verbose variables)
-       # The "english" versions of things like $_ $| $=
-
-# Exporter.pm
-       # Public: &import
-       # import PACKAGE [@symbols]
-       # requires PACKAGE to define @EXPORT
-       {
-           package FOOBAR;  
-           require Exporter;
-           @ISA = (Exporter);
-           @EXPORT = (foo, bar);
-           sub foo { print "FOO\n" };
-           sub bar { print "BAR\n" };
-           1;
-           package BAT;
-           # require FOOBAR;   # not in this example
-           import FOOBAR;
-           @ISA = ();
-           &foo;                       # prints ``FOO''
-       }
-
-# FileHandle.pm
-       # Exports: (lots of filehandle functions)
-       # English versions of various filehandle operations
-
-# Hostname.pm
-       # Exports: &hostname
-       # Routine to get hostname
-       # {
-       #    require Hostname; import Hostname;
-       #    print &hostname,"\n";      # prints your hostname
-       # }
-
-# POSIX.pm
-       # Exports: (posix functions and defines)
-       # POSIX.1 bindings
-
-# SDBM_File.pm
-       # SDBM interfaces (use with `tie')
-       # Other DBM interfaces work the same way
-
-# when the script exits the END section gets executed and prints ``goodbye''
-# ENDs are executed in reverse order of definition. prints ``blue sky''
-__END__
index 765c558..dedd379 100644 (file)
--- a/EXTERN.h
+++ b/EXTERN.h
@@ -7,8 +7,21 @@
  *
  */
 
+/*
+ * EXT  designates a global var which is defined in perl.h
+ * dEXT designates a global var which is defined in another
+ *      file, so we can't count on finding it in perl.h
+ *      (this practice should be avoided).
+ */
 #undef EXT
-#define EXT extern
+#undef dEXT
+#if defined(VMS) && !defined(__GNUC__)
+#  define EXT globalref
+#  define dEXT globaldef {"$GLOBAL_RW_VARS"} noshare
+#else
+#  define EXT extern
+#  define dEXT
+#endif
 
 #undef INIT
 #define INIT(x)
diff --git a/INSTALL b/INSTALL
index b72e43c..de7ca20 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -25,7 +25,7 @@ experiencing difficulties building perl, you should probably I<not>
 re-use your old config.sh.  Simply remove it or rename it, e.g.
 
        mv config.sh config.sh.old
-       
+
 Then run Configure.
 
 =head1 Run Configure.
@@ -46,6 +46,9 @@ to get a listing.  To compile with gcc, for example, you can run
 This is the preferred way to specify gcc (or another alternative
 compiler) so that the hints files can set appropriate defaults.
 
+If you want to use your old config.sh but override some of the items
+with command line options, you need to use B<Configure -O>.
+
 If you are willing to accept all the defaults, and you want terse
 output, you can run
 
@@ -57,7 +60,12 @@ the default installation directory, when Configure prompts you or by
 using the Configure command line option -Dprefix='/some/directory',
 e.g.
 
-       Configure -Dprefix=/opt/local
+       Configure -Dprefix=/opt/perl
+
+If your prefix contains the string "perl", then the directories
+are simplified.  For example, if you use prefix=/opt/perl,
+then Configure will suggest /opt/perl/lib instead of
+/usr/local/lib/perl5/.
 
 By default, Configure will compile perl to use dynamic loading, if
 your system supports it.  If you want to force perl to be compiled
@@ -82,10 +90,12 @@ Cross compiling is currently not supported.
 
 =head2 Including locally-installed libraries
 
-Perl5 comes with a number of database extensions, including interfaces
-to dbm, ndbm, gdbm, and Berkeley db.  For each extension, if Configure
-can find the appropriate header files and libraries, it will automatically
-include that extension.
+Perl5 comes with interfaces to number of database extensions, including
+dbm, ndbm, gdbm, and Berkeley db.  For each extension, if
+Configure can find the appropriate header files and libraries, it will
+automatically include that extension.  The gdbm and db libraries
+are B<not> included with perl.  See the library documentation for
+how to obtain the libraries.
 
 I<Note:>  If your database header (.h) files are not in a
 directory normally searched by your C compiler, then you will need to
@@ -159,6 +169,66 @@ F</usr/you>, then you have to include both, namely
 
 =back
 
+=head2 Installation Directories.
+
+The installation directories can all be changed by answering the
+appropriate questions in Configure.  For convenience, all the
+installation questions are near the beginning of Configure.
+
+By default, Configure uses the following directories for
+library files  (archname is a string like sun4-sunos, determined
+by Configure)
+
+       /usr/local/lib/perl5/archname/5.002
+       /usr/local/lib/perl5/
+       /usr/local/lib/site_perl/archname
+       /usr/local/lib/site_perl
+
+and the following directories for manual pages:
+
+       /usr/local/man/man1
+       /usr/local/lib/perl5/man/man3
+
+(Actually, Configure recognizes the SVR3-style
+/usr/local/man/l_man/man1 directories, if present, and uses those
+instead.) The module man pages are stuck in that strange spot so that
+they don't collide with other man pages stored in /usr/local/man/man3,
+and so that Perl's man pages don't hide system man pages.  On some
+systems, B<man less> would end up calling up Perl's less.pm module man
+page, rather than the B<less> program.
+
+If you specify a prefix that contains the string "perl", then the
+directory structure is simplified.  For example, if you Configure
+with -Dprefix=/opt/perl, then the defaults are
+
+       /opt/perl/lib/archname/5.002
+       /opt/perl/lib
+       /opt/perl/lib/site_perl/archname
+       /opt/perl/lib/site_perl
+
+       /opt/perl/man/man1
+       /opt/perl/man/man3
+
+The perl executable will search the libraries in the order given
+above.
+
+The  directories site_perl and site_perl/archname are empty, but are
+intended to be used for installing local or site-wide extensions.  Perl
+will automatically look in these directories.  Previously, most sites
+just put their local extensions in with the standard distribution.
+
+In order to support using things like #!/usr/local/bin/perl5.002 after
+a later version is released, architecture-dependent libraries are
+stored in a version-specific directory, such as
+/usr/local/lib/perl5/archname/5.002/.  In 5.000 and 5.001, these files
+were just stored in /usr/local/lib/perl5/archname/.  If you will not be
+using 5.001 binaries, you can delete the standard extensions from the
+/usr/local/lib/perl5/archname/ directory.  Locally-added extensions can
+be moved to the site_perl and site_perl/archname directories.
+
+Again, these are just the defaults, and can be changed as you run
+Configure.
+
 =head2 Changing the installation directory
 
 Configure distinguishes between the directory in which perl (and its
@@ -189,6 +259,7 @@ directory of your choice):
     installprivlib=`echo $installprivlib | sed "s!$prefix!$installprefix!"`
     installscript=`echo $installscript | sed "s!$prefix!$installprefix!"`
     installsitelib=`echo $installsitelib | sed "s!$prefix!$installprefix!"`
+    installsitearch=`echo $installsitearch | sed "s!$prefix!$installprefix!"`
 
 Then, you can Configure and install in the usual way:
 
@@ -291,7 +362,7 @@ The output is stored in F<makefile>.  The only difference between
 F<Makefile> and F<makefile> is the dependencies at the bottom of
 F<makefile>.  If you have to make any changes, you should edit
 F<makefile>, not F<Makefile> since the Unix B<make> command reads
-F<makefile>.
+F<makefile> first.
 
 Configure will offer to do this step for you, so it isn't listed
 explicitly above.
@@ -401,7 +472,7 @@ ignore any messages about chown not working.
 
 If you want to see exactly what will happen without installing
 anything, you can run
-       
+
        ./perl installperl -n
        ./perl installman -n
 
@@ -432,6 +503,13 @@ B<make install> will install the following:
        man pages       under /usr/local/lib/perl5/man/man3.
        pod/*.pod       in $privlib/pod/.
 
+Installperl will also create the library directories $siteperl and
+$sitearch listed in config.sh.  Usually, these are something like
+       /usr/local/lib/site_perl/
+       /usr/local/lib/site_perl/$archname
+where $archname is something like sun4-sunos.  These directories
+will be used for installing extensions.
+
 Perl's *.h header files and the libperl.a library are also
 installed under $archlib so that any user may later build new
 extensions even if the Perl source is no longer available.
@@ -454,6 +532,32 @@ to generate the html versions, and
 
 to generate the LaTeX versions.
 
+=head1 Coexistence with earlier versions of perl5.
+
+You can safely install the current version of perl5 and still run
+scripts under the old binaries.  Instead of starting your script with
+#!/usr/local/bin/perl, just start it with #!/usr/local/bin/perl5.001
+(or whatever version you want to run.)
+
+The architecture-dependent files are stored in a version-specific
+directory (such as F</usr/local/lib/perl5/sun4-sunos/5.002>) so that
+they are still accessible.  I<Note:> perl5.000 and perl5.001 did not
+put their architecture-dependent libraries in a version-specific
+directory.  They are simply in F</usr/local/lib/perl5/$archname>.  If
+you will not be using 5.000 or 5.001, you may safely remove those
+files.
+
+The standard library files in F</usr/local/lib/perl5>
+should be useable by all versions of perl5.
+
+Most extensions will not need to be recompiled to use with a newer
+version of perl.  If you do run into problems, and you want to continue
+to use the old version of perl along with your extension, simply move
+those extension files to the appropriate version directory, such as
+F</usr/local/lib/perl/archname/5.002>.  Then perl5.002 will find your
+files in the 5.002 directory, and newer versions of perl will find your
+newer extension in the site_perl directory.
+
 =head1 Coexistence with perl4
 
 You can safely install perl5 even if you want to keep perl4 around.
index 7a9d475..d89d2e6 100644 (file)
--- a/INTERN.h
+++ b/INTERN.h
@@ -7,8 +7,21 @@
  *
  */
 
+/*
+ * EXT  designates a global var which is defined in perl.h
+ * dEXT designates a global var which is defined in another
+ *      file, so we can't count on finding it in perl.h
+ *      (this practice should be avoided).
+ */
 #undef EXT
-#define EXT
+#undef dEXT
+#if defined(VMS) && !defined(__GNUC__)
+#  define EXT globaldef {"$GLOBAL_RW_VARS"} noshare
+#  define dEXT globaldef {"$GLOBAL_RW_VARS"} noshare
+#else
+#  define EXT
+#  define dEXT
+#endif
 
 #undef INIT
 #define INIT(x) = x
index 690f9f1..ca4e99c 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -4,7 +4,6 @@ Changes.Conf            Recent changes in the Configure & build process
 configure              Crude emulation of GNU configure
 Configure              Portability tool
 Copying                        The GNU General Public License
-Doc/perl5-notes                Samples of new functionality
 EXTERN.h               Included before foreign .h files
 INSTALL                        Detailed installation instructions.
 INTERN.h               Included before domestic .h files
@@ -16,7 +15,7 @@ Todo                  The Wishlist
 XSUB.h                 Include file for extension subroutines
 av.c                   Array value code
 av.h                   Array value header
-c2ph.SH                        program to translate dbx stabs to perl
+c2ph.PL                        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
@@ -73,12 +72,7 @@ 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
+emacs/cperl-mode.el    An alternate perl-mode
 embed.h                        Maps symbols to safer names
 embed.pl               Produces embed.h
 ext/DB_File/DB_File.pm         Berkeley DB extension Perl module
@@ -86,12 +80,6 @@ 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/Devel/DProf/DProf.pm       Perl Profiler extension Perl module
-ext/Devel/DProf/DProf.xs       Perl Profiler extension external subroutines
-ext/Devel/DProf/Makefile.PL    Perl Profiler extension makefile writer
-ext/Devel/DProf/README         Perl Profiler extension info
-ext/Devel/DProf/dprofpp                Perl Profiler extension utility
-ext/Devel/DProf/test.pl                Perl Profiler extension test
 ext/DynaLoader/DynaLoader.pm   Dynamic Loader perl module
 ext/DynaLoader/Makefile.PL     Dynamic Loader makefile writer
 ext/DynaLoader/README          Dynamic Loader notes and intro
@@ -101,6 +89,7 @@ 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_os2.xs       OS/2 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
@@ -167,7 +156,7 @@ 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
+h2ph.PL                        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
@@ -180,7 +169,7 @@ 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.SH                        Program to make .xs files from C header files
+h2xs.PL                        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
@@ -207,6 +196,7 @@ 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/irix_6_2.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
@@ -219,13 +209,14 @@ hints/netbsd.sh           Hints for named architecture
 hints/next_3.sh                Hints for named architecture
 hints/next_3_0.sh      Hints for named architecture
 hints/opus.sh          Hints for named architecture
+hints/os2.sh           Hints for named architecture
 hints/powerunix.sh     Hints for named architecture
+hints/sco.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
@@ -243,7 +234,6 @@ hv.h                        Hash value header
 installman             Perl script to install man pages for pods.
 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
@@ -287,6 +277,7 @@ 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/Text/Wrap.pm       Paragraph formatter
 lib/TieHash.pm         Base class for tied hashes
 lib/Time/Local.pm      Reverse translation of localtime, gmtime
 lib/abbrev.pl          An abbreviation table builder
@@ -299,6 +290,7 @@ 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/diagnostics.pm     Print verbose diagnostics
 lib/dotsh.pl           Code to "dot" in a shell script
 lib/dumpvar.pl         A variable dumper
 lib/exceptions.pl      catch and throw routines
@@ -319,10 +311,12 @@ 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/overload.pm                Module for overloading perl operators.
 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/splain             Standalone program to print verbose diagnostics.
 lib/stat.pl            Perl library supporting stat function
 lib/strict.pm          For "use strict"
 lib/subs.pm            Declare overriding subs
@@ -345,11 +339,21 @@ op.c                      Opcode syntax tree code
 op.h                   Opcode syntax tree header
 opcode.h               Automatically generated opcode header
 opcode.pl              Opcode header generatore
+os2/Makefile.SH                Shared library generation for OS/2
+os2/POSIX.mkfifo       POSIX.xs patch.
+os2/README             OS/2 info.
+os2/diff.Makefile      Patches to Makefile.SH
+os2/diff.configure     Patches to Makefile.SH
+os2/diff.installperl   Patches to installperl
+os2/diff.mkdep         Patches to makedepend.SH
+os2/diff.x2pMakefile   Patches to x2p/Makefile.SH
+os2/os2.c              Missing code for OS/2
+os2/os2ish.h           Header for OS/2
 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.
-perldoc.SH             A simple tool to find & display perl's documentation
+perldoc.PL             A simple tool to find & display perl's documentation
 perlsh                 A poor man's perl shell
 perly.c                        A byacc'ed perly.y
 perly.c.diff           Fixup perly.c to allow recursion
@@ -365,11 +369,13 @@ pod/perlcall.pod  Callback info
 pod/perldata.pod       Data structure info
 pod/perldebug.pod      Debugger info
 pod/perldiag.pod       Diagnostic info
+pod/perldsc.pod                Data Structures Cookbook
 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/perllol.pod                How to use lists of lists.
 pod/perlmod.pod                Module info
 pod/perlobj.pod                Object info
 pod/perlop.pod         Operator info
@@ -385,9 +391,10 @@ pod/perlsyn.pod            Syntax info
 pod/perltrap.pod       Trap info
 pod/perlvar.pod                Variable info
 pod/perlxs.pod         XS api info
-pod/pod2html.SH                Precursor for translator to turn pod into HTML
-pod/pod2latex.SH       Precursor for translator to turn pod into LaTeX
-pod/pod2man.SH         Precursor for translator to turn pod into manpage
+pod/perlxstut.pod      XS tutorial
+pod/pod2html.PL                Precursor for translator to turn pod into HTML
+pod/pod2latex.PL       Precursor for translator to turn pod into LaTeX
+pod/pod2man.PL         Precursor for 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
@@ -444,7 +451,6 @@ 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/socket.t         See if Socket 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
@@ -506,25 +512,27 @@ unixish.h         Defines that are assumed on Unix
 util.c                 Utility routines
 util.h                 Public declarations for the above
 vms/Makefile           VMS port
-vms/config.vms         VMS port
-vms/descrip.mms                VMS port
+vms/config.vms         default config.h for VMS
+vms/descrip.mms                MM[SK] description file for build
 vms/ext/Filespec.pm    VMS-Unix file syntax interconversion
 vms/ext/MM_VMS.pm      VMS-specific methods for MakeMaker
 vms/ext/VMS/stdio/Makefile.PL  MakeMaker driver for VMS::stdio
 vms/ext/VMS/stdio/stdio.pm     VMS options to stdio routines
 vms/ext/VMS/stdio/stdio.xs     VMS options to stdio routines
-vms/gen_shrfls.pl      VMS port
-vms/genconfig.pl       VMS port
-vms/genopt.com         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
+vms/gen_shrfls.pl      generate options files and glue for shareable image
+vms/genconfig.pl       retcon config.sh from config.h
+vms/genopt.com         hack to write options files in case of broken makes
+vms/mms2make.pl                convert descrip.mms to make syntax
+vms/perlvms.pod                VMS-specific additions to Perl documentation
+vms/perly_c.vms                perly.c with fixed declarations for global syms
+vms/perly_h.vms                perly.h with fixed declarations for global syms
+vms/sockadapt.c                glue for SockshShr socket support
+vms/sockadapt.h                glue for SockshShr socket support
+vms/test.com           DCL driver for regression tests
+vms/vms.c              VMS-specific C code for Perl core
+vms/vms_yfix.pl                convert Unix perly.[ch] to VMS perly_[ch].vms
+vms/vmsish.h           VMS-specific C header for Perl core
+vms/writemain.pl       Generate perlmain.c from miniperlmain.c+extensions
 writemain.SH           Generate perlmain.c from miniperlmain.c+extensions
 x2p/EXTERN.h           Same as above
 x2p/INTERN.h           Same as above
@@ -535,11 +543,11 @@ 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/find2perl.PL       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.PL             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
index 1f1b11b..b3ac78b 100644 (file)
@@ -126,6 +126,20 @@ shellflags = $shellflags
 
 ## To use an alternate make, set \$altmake in config.sh.
 MAKE = ${altmake-make}
+
+# These variables will be used in a future version to make
+# the make file more portable to non-unix systems.
+AR = $ar
+EXE_EXT = $exe_ext
+LIB_EXT = $lib_ext
+OBJ_EXT = $obj_ext
+PATH_SEP = $path_sep
+
+FIRSTMAKEFILE = $firstmakefile
+
+# Any special object files needed by this architecture, e.g. os2/os2.obj
+ARCHOBJS = $archobjs
+
 !GROK!THIS!
 
 ## In the following dollars and backticks do not need the extra backslash.
@@ -135,11 +149,24 @@ CCCMD = `sh $(shellflags) cflags $(perllib) $@`
 
 private = preplibrary lib/ExtUtils/Miniperl.pm lib/Config.pm
 
-sh = Makefile.SH c2ph.SH cflags.SH config_h.SH h2ph.SH h2xs.SH makeaperl.SH \
-       makedepend.SH makedir.SH perl_exp.SH perldoc.SH writemain.SH
+# Files to be built with variable substitution before miniperl
+# is available.
+sh = Makefile.SH cflags.SH config_h.SH makeaperl.SH makedepend.SH \
+       makedir.SH perl_exp.SH writemain.SH
+
+shextract = Makefile cflags config.h makeaperl makedepend \
+       makedir perl_exp writemain
+
+# Files to be built with variable substitution after miniperl is
+# available.  Dependencies handled manually below (for now).
 
-addedbyconf = UU Makefile c2ph cflags config.h h2ph h2xs makeaperl \
-       makedepend makedir perl_exp perldoc writemain
+pl = c2ph.PL h2ph.PL h2xs.PL perldoc.PL \
+       pod/pod2html.PL pod/pod2latex.PL pod/pod2man.PL
+
+plextract = c2ph h2ph h2xs perldoc \
+       pod/pod2html pod/pod2latex pod/pod2man
+
+addedbyconf = UU $(shextract) $(plextract) pstruct
 
 h1 = EXTERN.h INTERN.h XSUB.h av.h config.h cop.h cv.h dosish.h
 h2 = embed.h form.h gv.h handy.h hv.h keywords.h mg.h op.h
@@ -157,7 +184,8 @@ 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 globals.o
 
-obj = $(obj1) $(obj2) $(obj3)
+
+obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
 
 # Once perl has been Configure'd and built ok you build different
 # perl variants (Debugging, Embedded, Multiplicity etc) by saying:
@@ -178,7 +206,7 @@ SHELL = /bin/sh
 .c.o:
        $(CCCMD) $(PLDLFLAGS) $*.c
 
-all: makefile miniperl $(private) $(public) $(dynamic_ext)
+all: makefile miniperl $(private) $(plextract) $(public) $(dynamic_ext)
        @echo " "; echo "       Making x2p stuff"; cd x2p; $(MAKE) all
 
 # This is now done by installman only if you actually want the man pages.
@@ -187,7 +215,7 @@ all: makefile miniperl $(private) $(public) $(dynamic_ext)
 # Phony target to force checking subdirectories.
 # Apparently some makes require an action for the FORCE target.
 FORCE:
-       @true
+       @sh -c true
 
 # The $& notation tells Sequent machines that it can do a parallel make,
 # and is harmless otherwise.
@@ -232,7 +260,7 @@ $spitshell >>Makefile <<'!NO!SUBS!'
 *)
 $spitshell >>Makefile <<'!NO!SUBS!'
        rm -f $(perllib)
-       ar rcu $(perllib) perl.o $(obj)
+       $(AR) rcu $(perllib) perl.o $(obj)
        @$(ranlib) $(perllib)
 !NO!SUBS!
 ;;
@@ -257,7 +285,7 @@ sperl.o: perl.c perly.h patchlevel.h $(h)
 # We have to call our ./makedir because Ultrix 4.3 make can't handle the line
 #      test -d lib/auto || mkdir lib/auto
 #
-preplibrary: miniperl lib/Config.pm
+preplibrary: miniperl lib/Config.pm $(plextract)
        @./makedir lib/auto
        @echo " AutoSplitting perl library"
        @./miniperl -Ilib -e 'use AutoSplit; \
@@ -271,6 +299,9 @@ lib/Config.pm: config.sh miniperl
 lib/ExtUtils/Miniperl.pm: miniperlmain.c miniperl minimod.PL lib/Config.pm
        ./miniperl minimod.PL > tmp && mv tmp $@
 
+$(plextract):  miniperl lib/Config.pm
+       ./miniperl -Ilib $@.PL
+
 install: all install.perl install.man
 
 install.perl:  all
@@ -291,11 +322,12 @@ install.man:      all
 # normally shouldn't remake perly.[ch].
 
 run_byacc:     FORCE
-       @ echo 'Expect' 109 shift/reduce and 1 reduce/reduce conflict
+       @ echo 'Expect' 129 shift/reduce and 1 reduce/reduce conflict
        $(BYACC) -d perly.y
        sh $(shellflags) ./perly.fixer y.tab.c perly.c
        mv y.tab.h perly.h
        echo 'extern YYSTYPE yylval;' >>perly.h
+       - perl vms/vms_yfix.pl perly.c perly.h vms/perly_c.vms vms/perly_h.vms
 
 # We don't want to regenerate perly.c and perly.h, but they might
 # appear out-of-date after a patch is applied or a new distribution is
@@ -351,6 +383,7 @@ clean:
 realclean: clean
        -cd x2p; $(MAKE) realclean
        -cd pod; $(MAKE) realclean
+       -cd os2; rm -f Makefile
        -@for x in $(DYNALOADER) $(dynamic_ext) $(static_ext) ; do \
        sh ext/util/make_ext realclean $$x ; \
        done
@@ -407,6 +440,9 @@ hlist:  $(h)
 shlist: $(sh)
        echo $(sh) | tr ' ' '\012' >.shlist
 
+pllist: $(pl)
+       echo $(pl) | tr ' ' '\012' >.pllist
+
 # AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE
 # If this runs make out of memory, delete /usr/include lines.
 !NO!SUBS!
index e68d32d..c0da401 100644 (file)
@@ -1,4 +1,4 @@
-Last revised: 08-Feb-1995 by Charles Bailey  bailey@genetics.upenn.edu
+Last revised: 12-Jun-1995 by Charles Bailey  bailey@genetics.upenn.edu
 
 The VMS port of Perl is still under development.  At this time, the Perl
 binaries built under VMS handle internal operations properly, for the most
@@ -20,12 +20,15 @@ which affect Perl performance:
     - Newlines are lost on I/O through pipes, causing lines to run together.
       This shows up as RMS RTB errors when reading from a pipe.  You can
       work around this by having one process write data to a file, and
-      then having the other read the file, instead of the pipe.
+      then having the other read the file, instead of the pipe.  This is
+      fixed in version 4 of DECC.
     - The modf() routine returns a non-integral value for some values above
       INT_MAX; the Perl "int" operator will return a non-integral value in
-      these cases.
-Both of these bugs have been fixed in later releases of the DECCRTL, but some
-systems running AXP/VMS 1.5 still have the old RTLs.  
+      these cases.  This is fixed in version 4 of DECC.
+    - On the AXP, if SYSNAM privilege is enabled, the CRTL chdir() routine 
+      changes the process default device and directory permanently, even
+      though the call specified that the change should not persist after
+      Perl exited.  This is fixed by DEC CSC patch AXPACRT04_061.
 
 * Other software required
 
@@ -50,27 +53,33 @@ SOCKET when invoking MMS, however, socket support will be included.  As
 distributed, Perl for VMS includes support for the SOCKETSHR socket library,
 which is layered on MadGoat software's vendor-independent NETLIB interface. 
 This provides support for all socket calls used by Perl except the
-[g|s]et*ent() routines, which are replaced for the moment by stubs which
+[g|s]etnet*() routines, which are replaced for the moment by stubs which
 generate a fatal error if a Perl script attempts to call one of these routines. 
-If you'd like to link Perl directly to your IP stack to take advantage of these
-routines or to eliminate the intermediate NETLIB, then make the following
-changes:
+You can link Perl directly to your TCP/IP stack's library, *as long as* it
+supplies shims for stdio routines which will properly handle both sockets and
+normal file descriptors.  This is necessary because Perl does not distinguish
+between the two, and will try to make normal stdio calls such as read() and
+getc() on socket file descriptors.  If you'd like to link Perl directly to
+your IP stack, then make the following changes:
   - In Descrip.MMS, locate the section beginning with .ifdef SOCKET, and
     change the SOCKLIB macro so that it translates to  the filespec of your
     IP stack's socket library.  This will be added to the RTL options file.
   - Edit the file SockAdapt.H in the [.VMS] subdirectory so that it
-    includes the In.H, NetDb.H, and, if necessary, Errno.H header files
-    for your IP stack, or so that it declares the standard TCP/IP data
-    structures appropriately (see the distributed copy of SockAdapt.H
-    for a collection of the structures needed by Perl.)  You should also
-    define any logical names necessary to find these files before invoking
-    MMS to build Perl.
+    includes the Socket.h, In.H, Inet.H, NetDb.H, and, if necessary,
+    Errno.H header files for your IP stack, or so that it declares the
+    standard TCP/IP constants and data structures appropriately.  (See
+    the distributed copy of SockAdapt.H for a collection of the structures
+    needed by Perl itself, and [.ext.Socket]Socket.xs for a list of the
+    constants used by the Socket extension, if you elect to built it.)
+    You should also define any logical names necessary for your C compiler
+    to find these files before invoking MM[KS] to build Perl.
   - Edit the file SockAdapt.C in the [.VMS] subdirectory so that it
     contains routines which substitute for any IP library routines
     required by Perl which your IP stack does not provide.  This may
     require a little trial and error; we'll try to compile a complete
     list soon of socket routines required by Perl.
 
+
 * Building Perl under VMS
 
 Since you're reading this, presumably you've unpacked the Perl distribution
@@ -189,8 +198,9 @@ Once the build is complete, you'll need to do the following:
   - Define the logical name PERLSHR as the full file specification of
     PERLSHR.EXE, so executable images linked to it can find it.  Alternatively,
     you can justput PERLSHR.EXE int SYS$SHARE.
-  - Place the files from the [.lib] subdirectory in the distribution package
-    into a [.lib] subdirectory off the root directory described above.
+  - Place the files from the [.lib...] directory tree in the distribution
+    package into a [.lib...] directory tree off the root directory described
+    above.
   - Most of the Perl documentation lives in the [.pod] subdirectory, and
     is written in a simple markup format which can be easily read.  In this
     directory as well are pod2man and pod2html translators to reformat the
@@ -214,13 +224,24 @@ the single line
 subscribe perl5-porters
 This is a moderately high-volume list at the moment (25-50 messages/day).
 
-Finally, if you're interested in ongoing information about the VMS port, you
-can subscribe to the VMSperl mailing list by sending a request to
+If you're interested in ongoing information about the VMS port, you can
+subscribe to the VMSperl mailing list by sending a request to
 bailey@genetics.upenn.edu (it's to a human, not a list server - this is a small
 operation at the moment).  And, as always, we welcome any help or code you'd
 like to offer - you can send mail to bailey@genetics.upenn.edu or directly to
 the VMSperl list at vmsperl@genetics.upenn.edu.
 
+Finally, if you'd like to try out the latest changes to VMS Perl, you can
+retrieve a test distribution kit by anonymous ftp from genetics.upenn.edu, in
+the file [.perl5]perl5_ppp_yymmddx.zip, where "ppp" is the current Perl
+patchlevel, and "yymmddx" is a sequence number indicating the date that
+particular kit was assembled.  These test kits contain "unofficial" patches
+from the perl5-porters group, test patches for important bugs, and VMS-specific
+fixes and improvements which have occurred since the last Perl release.  Most
+of these changes will be incorporated in the next release of Perl, but until
+Larry Wall's looked at them and said they're OK, none of them should be
+considered official.
+
 Good luck using Perl.  Please let us know how it works for you - we can't
 guarantee that we'll be able to fix bugs quickly, but we'll try, and we'd
 certainly like to know they're out there.
diff --git a/Todo b/Todo
index 595725a..114a488 100644 (file)
--- a/Todo
+++ b/Todo
@@ -34,7 +34,7 @@ Possible pragmas
 Optimizations
        constant function cache
        switch structures
-       foreach(@array)
+       eval qw() at compile time
        foreach (1..1000000)
        foreach(reverse...)
        Set KEEP on constant split
@@ -51,7 +51,6 @@ Optimizations
 Vague possibilities
        ref function in list context
        Populate %SIG at startup if appropriate
-       sub mysplice(@, $, $, ...)
        data prettyprint function?  (or is it, as I suspect, a lib routine?)
        make tr/// return histogram in list context?
        undef wantarray in void context
diff --git a/XSUB.h b/XSUB.h
index a8c2c26..4792d22 100644 (file)
--- a/XSUB.h
+++ b/XSUB.h
@@ -1,4 +1,4 @@
-#define ST(off) stack_base[ax + off]
+#define ST(off) stack_base[ax + (off)]
 
 #ifdef CAN_PROTOTYPE
 #define XS(name) void name(CV* cv)
 
 /* Simple macros to put new mortal values onto the stack.   */
 /* Typically used to return values from XS functions.       */
-#define XST_mIV(i,v)  ST(i)=sv_2mortal(newSViv(v));
-#define XST_mNV(i,v)  ST(i)=sv_2mortal(newSVnv(v));
-#define XST_mPV(i,v)  ST(i)=sv_2mortal(newSVpv(v,0));
-#define XST_mNO(i)    ST(i)=sv_mortalcopy(&sv_no);
-#define XST_mYES(i)   ST(i)=sv_mortalcopy(&sv_yes);
-#define XST_mUNDEF(i) ST(i)=sv_newmortal();
+#define XST_mIV(i,v)  (ST(i) = sv_2mortal(newSViv(v))  )
+#define XST_mNV(i,v)  (ST(i) = sv_2mortal(newSVnv(v))  )
+#define XST_mPV(i,v)  (ST(i) = sv_2mortal(newSVpv(v,0)))
+#define XST_mNO(i)    (ST(i) = &sv_no   )
+#define XST_mYES(i)   (ST(i) = &sv_yes  )
+#define XST_mUNDEF(i) (ST(i) = &sv_undef)
  
-#define XSRETURN_IV(v) XST_mIV(0,v);  XSRETURN(1)
-#define XSRETURN_NV(v) XST_mNV(0,v);  XSRETURN(1)
-#define XSRETURN_PV(v) XST_mPV(0,v);  XSRETURN(1)
-#define XSRETURN_NO    XST_mNO(0);    XSRETURN(1)
-#define XSRETURN_YES   XST_mYES(0);   XSRETURN(1)
-#define XSRETURN_UNDEF XST_mUNDEF(0); XSRETURN(1)
+#define XSRETURN_IV(v) do { XST_mIV(0,v);  XSRETURN(1); } while (0)
+#define XSRETURN_NV(v) do { XST_mNV(0,v);  XSRETURN(1); } while (0)
+#define XSRETURN_PV(v) do { XST_mPV(0,v);  XSRETURN(1); } while (0)
+#define XSRETURN_NO    do { XST_mNO(0);    XSRETURN(1); } while (0)
+#define XSRETURN_YES   do { XST_mYES(0);   XSRETURN(1); } while (0)
+#define XSRETURN_UNDEF do { XST_mUNDEF(0); XSRETURN(1); } while (0)
+#define XSRETURN_EMPTY do {                XSRETURN(0); } while (0)
diff --git a/av.c b/av.c
index 7116cc4..0e20af8 100644 (file)
--- a/av.c
+++ b/av.c
@@ -64,9 +64,30 @@ I32 key;
        }
        else {
            if (AvALLOC(av)) {
+               U32 bytes;
+
                newmax = key + AvMAX(av) / 5;
              resize:
+#ifdef STRANGE_MALLOC
                Renew(AvALLOC(av),newmax+1, SV*);
+#else
+               bytes = (newmax + 1) * sizeof(SV*);
+#define MALLOC_OVERHEAD 16
+               tmp = MALLOC_OVERHEAD;
+               while (tmp - MALLOC_OVERHEAD < bytes)
+                   tmp += tmp;
+               tmp -= MALLOC_OVERHEAD;
+               tmp /= sizeof(SV*);
+               assert(tmp > newmax);
+               newmax = tmp - 1;
+               New(2,ary, newmax+1, SV*);
+               Copy(AvALLOC(av), ary, AvMAX(av)+1, SV*);
+               if (AvMAX(av) > 64 && !AvREUSED(av))
+                   sv_add_arena((char*)AvALLOC(av), AvMAX(av) * sizeof(SV*),0);
+               else
+                   Safefree(AvALLOC(av));
+               AvALLOC(av) = ary;
+#endif
                ary = AvALLOC(av) + AvMAX(av) + 1;
                tmp = newmax - AvMAX(av);
                if (av == stack) {      /* Oops, grew stack (via av_store()?) */
@@ -305,6 +326,7 @@ register AV *av;
     AvALLOC(av) = 0;
     SvPVX(av) = 0;
     AvMAX(av) = AvFILL(av) = -1;
+    AvREUSED_on(av);   /* Avoid leak of making SVs out of old memory again. */
     if (AvARYLEN(av)) {
        SvREFCNT_dec(AvARYLEN(av));
        AvARYLEN(av) = 0;
diff --git a/av.h b/av.h
index 082a8ab..93dcc0c 100644 (file)
--- a/av.h
+++ b/av.h
@@ -23,6 +23,7 @@ struct xpvav {
 
 #define AVf_REAL 1     /* free old entries */
 #define AVf_REIFY 2    /* can become real */
+#define AVf_REUSED 4   /* got undeffed--don't turn old memory into SVs now */
 
 #define Nullav Null(AV*)
 
@@ -39,6 +40,9 @@ struct xpvav {
 #define AvREIFY(av)    (AvFLAGS(av) & AVf_REIFY)
 #define AvREIFY_on(av) (AvFLAGS(av) |= AVf_REIFY)
 #define AvREIFY_off(av)        (AvFLAGS(av) &= ~AVf_REIFY)
+#define AvREUSED(av)   (AvFLAGS(av) & AVf_REUSED)
+#define AvREUSED_on(av)        (AvFLAGS(av) |= AVf_REUSED)
+#define AvREUSED_off(av) (AvFLAGS(av) &= ~AVf_REUSED)
 
 #define AvREALISH(av)  AvFLAGS(av)     /* REAL or REIFY -- shortcut */
 
diff --git a/c2ph.SH b/c2ph.PL
old mode 100755 (executable)
new mode 100644 (file)
similarity index 95%
rename from c2ph.SH
rename to c2ph.PL
index 1802743..b5049b3
--- a/c2ph.SH
+++ b/c2ph.PL
@@ -1,32 +1,40 @@
-case $CONFIG in
-'')
-    if test ! -f config.sh; then
-       ln ../config.sh . || \
-       ln ../../config.sh . || \
-       ln ../../../config.sh . || \
-       (echo "Can't find config.sh."; exit 1)
-    fi
-    . config.sh
-    ;;
-esac
-: This forces SH files to create target in same directory as SH file.
-: This is so that make depend always knows where to find SH derivatives.
-case "$0" in
-*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
-esac
-echo "Extracting c2ph (with variable substitutions)"
-: This section of the file will have variable substitutions done on it.
-: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
-: Protect any dollar signs and backticks that you do not want interpreted
-: by putting a backslash in front.  You may delete these comments.
-rm -f c2ph
-$spitshell >c2ph <<!GROK!THIS!
-#!$binexp/perl
-#
+#!/usr/local/bin/perl
+
+use Config;
+use File::Basename qw(&basename &dirname);
+
+# List explicitly here the variables you want Configure to
+# generate.  Metaconfig only looks for shell variables, so you
+# have to mention them as if they were shell variables, not
+# %Config entries.  Thus you write
+#  $startperl
+# to ensure Configure will look for $Config{startperl}.
+
+# This forces PL files to create target in same directory as PL file.
+# This is so that make depend always knows where to find PL derivatives.
+chdir(dirname($0));
+($file = basename($0)) =~ s/\.PL$//;
+$file =~ s/\.pl$//
+       if ($Config{'osname'} eq 'VMS' or
+           $Config{'osname'} eq 'OS2');  # "case-forgiving"
+
+open OUT,">$file" or die "Can't create $file: $!";
+
+print "Extracting $file (with variable substitutions)\n";
+
+# In this section, perl variables will be expanded during extraction.
+# You can use $Config{...} to use Configure variables.
+
+print OUT <<"!GROK!THIS!";
+$Config{'startperl'}
+    eval 'exec perl -S \$0 "\$@"'
+       if 0;
 !GROK!THIS!
 
-: In the following dollars and backticks do not need the extra backslash.
-$spitshell >>c2ph <<'!NO!SUBS!'
+# In the following, perl variables are not expanded during extraction.
+
+print OUT <<'!NO!SUBS!';
+#
 #
 #   c2ph (aka pstruct)
 #   Tom Christiansen, <tchrist@convex.com>
@@ -977,7 +985,7 @@ sub scrunch {
 sub buildscrunchlist {
     $scrunch_code = "sub quick_scrunch {\n";
     for (values %intrinsics) {
-        $scrunch_code .= "\ts/($_\{2,})/'$_' . length(\$1)/ge;\n";
+        $scrunch_code .= "\ts/(${_}{2,})/'$_' . length(\$1)/ge;\n";
     } 
     $scrunch_code .= "}\n";
     print "$scrunch_code" if $debug;
@@ -1167,3 +1175,10 @@ sub repeat_template {
        }
     }
 }
+!NO!SUBS!
+
+close OUT or die "Can't close $file: $!";
+chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
+unlink 'pstruct';
+link c2ph, pstruct;
+exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
index bb0f216..9dc5c90 100755 (executable)
--- a/cflags.SH
+++ b/cflags.SH
@@ -64,7 +64,7 @@ case $# in
 0) set *.c; echo "The current C flags are:" ;;
 esac
 
-set `echo "$* " | sed 's/\.[oc] / /g'`
+set `echo "$* " | sed -e 's/\.[oc] / /g' -e 's/\.obj / /g'`
 
 for file do
 
index b20821f..03d71d2 100644 (file)
--- a/config_H
+++ b/config_H
  * 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.
  *
- * $Id: Config_h.U,v 3.0.1.3 1995/01/30 14:25:39 ram Exp $
+ * $Id: Config_h.U,v 3.0.1.4 1995/09/25 09:10:49 ram Exp $
  */
 
-/* Configuration time: Tue Jul 25 15:36:03 EDT 1995
- * Configured by: andy
- * Target system: crystal crystal 3.2 2 i386 
+/* Configuration time: Mon Nov 20 15:21:41 EST 1995
+ * Configured by: doughera
+ * Target system: sunos fractal 5.4 generic_101946-29 i86pc i386 
  */
 
 #ifndef _config_h_
  */
 #define MEM_ALIGNBYTES 4       /**/
 
-/* ARCHLIB_EXP:
- *     This symbol contains the ~name expanded version of ARCHLIB, to be used
- *     in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define ARCHLIB_EXP "/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 BIN "/usr/local/bin"   /**/
-
-/* BYTEORDER:
- *     This symbol hold the hexadecimal constant defined in byteorder,
- *     i.e. 0x1234 or 0x4321, etc...
- */
-#define BYTEORDER 0x1234       /* large digits for MSB */
+#define BIN "/opt/perl/bin"    /**/
 
 /* CAT2:
  *     This macro catenates 2 tokens together.
  */
-/* STRINGIFY:
- *     This macro surrounds its token with double quotes.
- */
-#if 1 == 1
+#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
@@ -60,7 +45,7 @@
 #define STRINGIFY(a)"a"
                /* If you can get stringification with catify, tell me how! */
 #endif
-#if 1 == 42
+#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
@@ -88,7 +73,7 @@
  *     output.  This symbol will have the value "-" if CPPSTDIN needs a minus
  *     to specify standard input, otherwise the value is "".
  */
-#define CPPSTDIN "cc -E"
+#define CPPSTDIN "gcc -E"
 #define CPPMINUS "-"
 
 /* HAS_ALARM:
  *     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         /**/
+#define HASATTRIBUTE   /**/
 #ifndef HASATTRIBUTE
 #define __attribute__(_arg_)
 #endif
  *     This symbol is defined if the bcmp() routine is available to
  *     compare blocks of memory.
  */
-#define HAS_BCMP       /**/
+/*#define HAS_BCMP     /**/
 
 /* HAS_BCOPY:
  *     This symbol is defined if the bcopy() routine is available to
  *     copy blocks of memory.
  */
-#define HAS_BCOPY      /**/
+/*#define HAS_BCOPY    /**/
 
 /* HAS_BZERO:
  *     This symbol is defined if the bzero() routine is available to
  *     set a memory block to 0.
  */
-#define HAS_BZERO      /**/
+/*#define HAS_BZERO    /**/
 
 /* CASTI32:
  *     This symbol is defined if the C compiler can cast negative
  *     or large floating point numbers to 32-bit ints.
  */
-/*#define      CASTI32         /**/
+#define        CASTI32         /**/
 
 /* CASTNEGFLOAT:
  *     This symbol is defined if the C compiler can cast negative
  *             2 = couldn't cast >= 0x80000000
  *             4 = couldn't cast in argument expression list
  */
-/*#define      CASTNEGFLOAT            /**/
-#define CASTFLAGS 7            /**/
+#define        CASTNEGFLOAT            /**/
+#define CASTFLAGS 0            /**/
 
 /* HAS_CHOWN:
  *     This symbol, if defined, indicates that the chown routine is
  *     within your programs. The mere use of the "const" keyword will
  *     trigger the necessary tests.
  */
-/*#define HASCONST     /**/
+#define HASCONST       /**/
 #ifndef HASCONST
 #define const
 #endif
  *     available to return a string describing the last error that
  *     occurred from a call to dlopen(), dlclose() or dlsym().
  */
-/*#define HAS_DLERROR  /**/
+#define HAS_DLERROR    /**/
 
 /* SETUID_SCRIPTS_ARE_SECURE_NOW:
  *     This symbol, if defined, indicates that the bug that prevents
  *     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 SETUID_SCRIPTS_ARE_SECURE_NOW  /**/
 /*#define DOSUID               /**/
 
 /* HAS_DUP2:
  *     This symbol, if defined, indicates that the fchmod routine is available
  *     to change mode of opened files.  If unavailable, use chmod().
  */
-/*#define HAS_FCHMOD           /**/
+#define HAS_FCHMOD             /**/
 
 /* HAS_FCHOWN:
  *     This symbol, if defined, indicates that the fchown routine is available
  *     to change ownership of opened files.  If unavailable, use chown().
  */
-/*#define HAS_FCHOWN           /**/
+#define HAS_FCHOWN             /**/
 
 /* HAS_FCNTL:
  *     This symbol, if defined, indicates to the C program that
  *     This symbol, if defined, indicates that the fgetpos routine is
  *     available to get the file position indicator, similar to ftell().
  */
-/*#define HAS_FGETPOS  /**/
+#define HAS_FGETPOS    /**/
 
 /* FLEXFILENAMES:
  *     This symbol, if defined, indicates that the system supports filenames
  *     longer than 14 characters.
  */
-/*#define      FLEXFILENAMES           /**/
+#define        FLEXFILENAMES           /**/
 
 /* HAS_FLOCK:
  *     This symbol, if defined, indicates that the flock routine is
  *     This symbol, if defined, indicates that the fsetpos routine is
  *     available to set the file position indicator, similar to fseek().
  */
-/*#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.
- *     Possible values are:
- *             d_Gconvert='gconvert((x),(n),(t),(b))'
- *             d_Gconvert='gcvt((x),(n),(b))'
- *             d_Gconvert='sprintf((b),"%.*g",(n),(x))'
- *     The last two assume trailing zeros should not be kept.
- */
-#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
+#define HAS_FSETPOS    /**/
 
 /* HAS_GETGROUPS:
  *     This symbol, if defined, indicates that the getgroups() routine is
  *     This symbol, if defined, indicates that the gethostent routine is
  *     available to lookup host names in some data base or other.
  */
-/*#define HAS_GETHOSTENT               /**/
+#define HAS_GETHOSTENT         /**/
 
 /* HAS_UNAME:
  *     This symbol, if defined, indicates that the C program may use the
  *     This symbol, if defined, indicates that the mblen routine is available
  *     to find the number of bytes in a multibye character.
  */
-/*#define HAS_MBLEN            /**/
+#define HAS_MBLEN              /**/
 
 /* HAS_MBSTOWCS:
  *     This symbol, if defined, indicates that the mbstowcs routine is
  *     available to covert a multibyte string into a wide character string.
  */
-/*#define      HAS_MBSTOWCS            /**/
+#define        HAS_MBSTOWCS            /**/
 
 /* HAS_MBTOWC:
  *     This symbol, if defined, indicates that the mbtowc routine is available
  *     to covert a multibyte to a wide character.
  */
-/*#define HAS_MBTOWC           /**/
+#define HAS_MBTOWC             /**/
 
 /* HAS_MEMCMP:
  *     This symbol, if defined, indicates that the memcmp routine is available
  *     only when HAS_SAFE_BCOPY is not defined. If neither is there, roll your
  *     own version.
  */
-/*#define HAS_MEMMOVE  /**/
+#define HAS_MEMMOVE    /**/
 
 /* HAS_MEMSET:
  *     This symbol, if defined, indicates that the memset routine is available
  */
 #define HAS_PIPE               /**/
 
+/* HAS_POLL:
+ *     This symbol, if defined, indicates that the poll routine is
+ *     available to poll active file descriptors.
+ */
+#define HAS_POLL               /**/
+
 /* HAS_READDIR:
  *     This symbol, if defined, indicates that the readdir routine is
  *     available to read directory entries. You may have to include
  *     probably use memmove() or memcpy(). If neither is defined, roll your
  *     own version.
  */
-#define HAS_SAFE_BCOPY /**/
+/*#define HAS_SAFE_BCOPY       /**/
 
 /* HAS_SAFE_MEMCPY:
  *     This symbol, if defined, indicates that the memcpy routine is available
  *     available to change the real, effective and saved gid of the current
  *     process.
  */
-#define HAS_SETREGID           /**/
+/*#define HAS_SETREGID         /**/
 /*#define HAS_SETRESGID                /**/
 
 /* HAS_SETREUID:
  *     available to change the real, effective and saved uid of the current
  *     process.
  */
-#define HAS_SETREUID           /**/
+/*#define HAS_SETREUID         /**/
 /*#define HAS_SETRESUID                /**/
 
 /* HAS_SETRGID:
  *     but not always right so it should be emitted by the program only
  *     when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs.
  */
-#define Shmat_t char * /**/
-/*#define HAS_SHMAT_PROTOTYPE  /**/
+#define Shmat_t void * /**/
+#define HAS_SHMAT_PROTOTYPE    /**/
 
 /* HAS_SOCKET:
  *     This symbol, if defined, indicates that the BSD socket interface is
  *     supported.
  */
 #define HAS_SOCKET             /**/
-/*#define HAS_SOCKETPAIR       /**/
+#define HAS_SOCKETPAIR /**/
 
 /* USE_STAT_BLOCKS:
  *     This symbol is defined if this system has a stat structure declaring
  *     st_blksize and st_blocks.
  */
-/*#define USE_STAT_BLOCKS      /**/
+#define USE_STAT_BLOCKS        /**/
 
 /* USE_STDIO_PTR:
  *     This symbol is defined if the _ptr and _cnt fields (or similar)
  *     This symbol, if defined, indicates that the truncate routine is
  *     available to truncate files.
  */
-/*#define HAS_TRUNCATE /**/
+#define HAS_TRUNCATE   /**/
 
 /* HAS_TZNAME:
  *     This symbol, if defined, indicates that the tzname[] array is
  *     This symbol, if defined, indicates that this C compiler knows about
  *     the volatile declaration.
  */
-/*#define      HASVOLATILE     /**/
+#define        HASVOLATILE     /**/
 #ifndef HASVOLATILE
 #define volatile
 #endif
  *     This symbol, if defined, indicates that the wcstombs routine is
  *     available to convert wide character strings to multibyte strings.
  */
-/*#define HAS_WCSTOMBS /**/
+#define HAS_WCSTOMBS   /**/
 
 /* HAS_WCTOMB:
  *     This symbol, if defined, indicates that the wctomb routine is available
  *     to covert a wide character to a multibyte.
  */
-/*#define HAS_WCTOMB           /**/
+#define HAS_WCTOMB             /**/
 
 /* Fpos_t:
  *     This symbol holds the type used to declare file positions in libc.
  *     This symbol, if defined, indicates that <dlfcn.h> exists and should
  *     be included.
  */
-/*#define I_DLFCN              /**/
+#define I_DLFCN                /**/
 
 /* I_FCNTL:
  *     This manifest constant tells the C program to include <fcntl.h>.
  *     This symbol, if defined, indicates that <net/errno.h> exists and 
  *     should be included.
  */
-#define I_NET_ERRNO            /**/
+/*#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 <sys/dir.h>.
  */
-#define I_SYS_DIR              /**/
+/*#define I_SYS_DIR            /**/
 
 /* I_SYS_FILE:
  *     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 <sys/select.h> in order to get definition of struct timeval.
  */
-/*#define I_SYS_SELECT /**/
+#define I_SYS_SELECT   /**/
 
 /* I_SYS_TIMES:
  *     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 I_VFORK      /**/
 
-/* INTSIZE:
- *     This symbol contains the size of an int, so that the C preprocessor
- *     can make decisions based on it.
- */
-#define INTSIZE 4              /**/
-
 /* Off_t:
  *     This symbol holds the type used to declare offsets in the kernel.
  *     It can be int, long, off_t, etc... It may be necessary to include
  */
 #define Mode_t mode_t   /* file mode parameter for system calls */
 
-/* PRIVLIB_EXP:
- *     This symbol contains the ~name expanded version of PRIVLIB, to be used
- *     in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define PRIVLIB_EXP "/usr/local/lib/perl5"             /**/
+/* VAL_O_NONBLOCK:
+ *     This symbol is to be used during open() or fcntl(F_SETFL) to turn on
+ *     non-blocking I/O for the file descriptor. Note that there is no way
+ *     back, i.e. you cannot turn it blocking again this way. If you wish to
+ *     alternatively switch between blocking and non-blocking, use the
+ *     ioctl(FIOSNBIO) call instead, but that is not supported by all devices.
+ */
+/* VAL_EAGAIN:
+ *     This symbol holds the errno error code set by read() when no data was
+ *     present on the non-blocking file descriptor.
+ */
+/* RD_NODATA:
+ *     This symbol holds the return code from read() when no data is present
+ *     on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is
+ *     not defined, then you can't distinguish between no data and EOF by
+ *     issuing a read(). You'll have to find another way to tell for sure!
+ */
+/* EOF_NONBLOCK:
+ *     This symbol, if defined, indicates to the C program that a read() on
+ *     a non-blocking file descriptor will return 0 on EOF, and not the value
+ *     held in RD_NODATA (-1 usually, in that case!).
+ */
+#define VAL_O_NONBLOCK O_NONBLOCK
+#define VAL_EAGAIN EAGAIN
+#define RD_NODATA -1
+#define EOF_NONBLOCK
 
 /* CAN_PROTOTYPE:
  *     If defined, this macro indicates that the C compiler can handle
  *
  *             int main _((int argc, char *argv[]));
  */
-/*#define      CAN_PROTOTYPE   /**/
+#define        CAN_PROTOTYPE   /**/
 #ifdef CAN_PROTOTYPE
 #define        _(args) args
 #else
  *     is often a directory that is mounted across diverse architectures.
  *     Programs must be prepared to deal with ~name expansion.
  */
-#define SCRIPTDIR "/usr/local/bin"     /**/
+#define SCRIPTDIR "/opt/perl/bin"      /**/
 
 /* Select_fd_set_t:
  *     This symbol holds the type used for the 2nd, 3rd, and 4th
  */
 #define Select_fd_set_t        fd_set *        /**/
 
-/* SIG_NAME:
- *     This symbol contains a list of signal names in order. This is intended
- *     to be used as a static array initialization, like this:
- *             char *sig_name[] = { SIG_NAME };
- *     The signals in the list are separated with commas, and each signal
- *     is surrounded by double quotes. There is no leading SIG in the signal
- *     name, i.e. SIGQUIT is known as "QUIT".
- */
-#define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","ABRT","EMT","FPE","KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM","USR1","USR2","CLD","PWR","WINCH","21","POLL","CONT","STOP","TSTP","TTIN","TTOU"     /**/
-
 /* Size_t:
  *     This symbol holds the type used to declare length parameters
  *     for string functions.  It is usually size_t, but may be
  *     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 */
+#define SSize_t ssize_t         /* signed count of bytes */
 
 /* STDCHAR:
  *     This symbol is defined to be the type of char used in stdio.h.
  */
 #define Uid_t uid_t            /* UID type */
 
-/* VOIDFLAGS:
- *     This symbol indicates how much support of the void type is given by this
- *     compiler.  What various bits mean:
- *
- *         1 = supports declaration of void
- *         2 = supports arrays of pointers to functions returning void
- *         4 = supports comparisons between pointers to void functions and
- *                 addresses of void functions
- *         8 = suports declaration of generic void pointers
- *
- *     The package designer should define VOIDUSED to indicate the requirements
- *     of the package.  This can be done either by #defining VOIDUSED before
- *     including config.h, or by defining defvoidused in Myinit.U.  If the
- *     latter approach is taken, only those flags will be tested.  If the
- *     level of void support necessary is not present, defines void to int.
- */
-#ifndef VOIDUSED
-#define VOIDUSED 15
-#endif
-#define VOIDFLAGS 15
-#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
-#define void int               /* is void to be avoided? */
-#define M_VOID                 /* Xenix strikes again */
-#endif
-
 /* VMS:
  *     This symbol, if defined, indicates that the program is running under
  *     VMS.  It is currently only set in conjunction with the EUNICE symbol.
  */
 #define LOC_SED        "/bin/sed"      /**/
 
+/* ARCHLIB_EXP:
+ *     This symbol contains the ~name expanded version of ARCHLIB, to be used
+ *     in programs that are not prepared to deal with ~ expansion at run-time.
+ */
+#define ARCHLIB_EXP "/opt/perl/lib/i86pc-solaris/5.002"                /**/
+
+/* BYTEORDER:
+ *     This symbol hold the hexadecimal constant defined in byteorder,
+ *     i.e. 0x1234 or 0x4321, etc...
+ */
+#define BYTEORDER 0x1234       /* large digits for MSB */
+
 /* CSH:
  *     This symbol, if defined, indicates that the C-shell exists.
  *     If defined, contains the full pathname of csh.
  */
 /*#define      DLSYM_NEEDS_UNDERSCORE  /* */
 
+/* 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.
+ *     Possible values are:
+ *             d_Gconvert='gconvert((x),(n),(t),(b))'
+ *             d_Gconvert='gcvt((x),(n),(b))'
+ *             d_Gconvert='sprintf((b),"%.*g",(n),(x))'
+ *     The last two assume trailing zeros should not be kept.
+ */
+#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
+
 /* USE_DYNAMIC_LOADING:
  *     This symbol, if defined, indicates that dynamic loading of
  *     some sort is available.
  */
-/*#define USE_DYNAMIC_LOADING          /**/
+#define USE_DYNAMIC_LOADING            /**/
+
+/* I_DBM:
+ *     This symbol, if defined, indicates that <dbm.h> exists and should
+ *     be included.
+ */
+/* I_RPCSVC_DBM:
+ *     This symbol, if defined, indicates that <rpcsvc/dbm.h> exists and
+ *     should be included.
+ */
+/*#define I_DBM        /**/
+#define I_RPCSVC_DBM   /**/
+
+/* I_LOCALE:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <locale.h>.
+ */
+#define        I_LOCALE                /**/
 
 /* I_SYS_STAT:
  *     This symbol, if defined, indicates to the C program that it should
  */
 #define        I_SYS_STAT              /**/
 
+/* INTSIZE:
+ *     This symbol contains the size of an int, so that the C preprocessor
+ *     can make decisions based on it.
+ */
+#define INTSIZE 4              /**/
+
 /* Free_t:
  *     This variable contains the return type of free().  It is usually
  * void, but occasionally int.
 /* Malloc_t:
  *     This symbol is the type of pointer returned by malloc and realloc.
  */
-#define Malloc_t char *                        /**/
+#define Malloc_t void *                        /**/
 #define Free_t void                    /**/
 
 /* MYMALLOC:
  */
 #define MYMALLOC                       /**/
 
-/* SITELIB_EXP:
- *     This symbol contains the ~name expanded version of SITELIB, to be used
+/* OLDARCHLIB_EXP:
+ *     This symbol contains the ~name expanded version of OLDARCHLIB, to be
+ *     used in programs that are not prepared to deal with ~ expansion at 
+ *     run-time.
+ */
+/*#define OLDARCHLIB_EXP ""            /**/
+
+/* PRIVLIB_EXP:
+ *     This symbol contains the ~name expanded version of PRIVLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-/*#define SITELIB_EXP ""               /**/
+#define PRIVLIB_EXP "/opt/perl/lib"            /**/
+
+/* SIG_NAME:
+ *     This symbol contains a list of signal names in order of
+ *     signal number. This is intended
+ *     to be used as a static array initialization, like this:
+ *             char *sig_name[] = { SIG_NAME };
+ *     The signals in the list are separated with commas, and each signal
+ *     is surrounded by double quotes. There is no leading SIG in the signal
+ *     name, i.e. SIGQUIT is known as "QUIT".
+ *     Gaps in the signal numbers (up to NSIG) are filled in with NUMnn,
+ *     etc., where nn is the actual signal number (e.g. NUM37).
+ *     The signal number for sig_name[i] is stored in sig_num[i].
+ *     The last element is 0 to terminate the list with a NULL.  This
+ *     corresponds to the 0 at the end of the sig_num list.
+ */
+/* SIG_NUM:
+ *     This symbol contains a list of signal numbers, in the same order as the
+ *     SIG_NAME list. It is suitable for static array initialization, as in:
+ *             int sig_num[] = { SIG_NUM };
+ *     The signals in the list are separated with commas, and the indices
+ *     within that list and the SIG_NAME list match, so it's easy to compute
+ *     the signal name from a number or vice versa at the price of a small
+ *     dynamic linear lookup. 
+ *     Duplicates are allowed, but are moved to the end of the list.
+ *     The signal number corresponding to sig_name[i] is sig_number[i].
+ *     if (i < NSIG) then sig_number[i] == i.  
+ *     The last element is 0, corresponding to the 0 at the end of
+ *     the sig_name list.
+ */
+#define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","ABRT","EMT","FPE","KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM","USR1","USR2","CHLD","PWR","WINCH","URG","IO","STOP","TSTP","CONT","TTIN","TTOU","VTALRM","PROF","XCPU","XFSZ","WAITING","LWP","FREEZE","THAW","RTMIN","NUM37","NUM38","NUM39","NUM40","NUM41","NUM42","RTMAX","IOT","CLD","POLL",0  /**/
+#define SIG_NUM 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,6,18,22,0    /**/
+
+/* SITEARCH_EXP:
+ *     This symbol contains the ~name expanded version of SITEARCH, to be used
+ *     in programs that are not prepared to deal with ~ expansion at run-time.
+ */
+#define SITEARCH_EXP "/opt/perl/lib/site_perl/i86pc-solaris"           /**/
+
+/* VOIDFLAGS:
+ *     This symbol indicates how much support of the void type is given by this
+ *     compiler.  What various bits mean:
+ *
+ *         1 = supports declaration of void
+ *         2 = supports arrays of pointers to functions returning void
+ *         4 = supports comparisons between pointers to void functions and
+ *                 addresses of void functions
+ *         8 = suports declaration of generic void pointers
+ *
+ *     The package designer should define VOIDUSED to indicate the requirements
+ *     of the package.  This can be done either by #defining VOIDUSED before
+ *     including config.h, or by defining defvoidused in Myinit.U.  If the
+ *     latter approach is taken, only those flags will be tested.  If the
+ *     level of void support necessary is not present, defines void to int.
+ */
+#ifndef VOIDUSED
+#define VOIDUSED 15
+#endif
+#define VOIDFLAGS 15
+#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
+#define void int               /* is void to be avoided? */
+#define M_VOID                 /* Xenix strikes again */
+#endif
 
 #endif
old mode 100755 (executable)
new mode 100644 (file)
index f76b044..1d17167
@@ -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.
  *
- * \$Id: Config_h.U,v 3.0.1.3 1995/01/30 14:25:39 ram Exp $
+ * \$Id: Config_h.U,v 3.0.1.4 1995/09/25 09:10:49 ram Exp $
  */
 
 /* Configuration time: $cf_time
@@ -42,12 +42,6 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #define MEM_ALIGNBYTES $alignbytes     /**/
 
-/* ARCHLIB_EXP:
- *     This symbol contains the ~name expanded version of ARCHLIB, to be used
- *     in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#$d_archlib ARCHLIB_EXP "$archlibexp"          /**/
-
 /* 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.
@@ -57,9 +51,6 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
 /* 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
@@ -1299,12 +1290,6 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
 #define RD_NODATA $rd_nodata
 #$d_eofnblk EOF_NONBLOCK
 
-/* PRIVLIB_EXP:
- *     This symbol contains the ~name expanded version of PRIVLIB, to be used
- *     in programs that are not prepared to deal with ~ expansion at run-time.
- */
-#define PRIVLIB_EXP "$privlibexp"              /**/
-
 /* CAN_PROTOTYPE:
  *     If defined, this macro indicates that the C compiler can handle
  *     function prototypes.
@@ -1387,6 +1372,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #define LOC_SED        "$full_sed"     /**/
 
+/* ARCHLIB_EXP:
+ *     This symbol contains the ~name expanded version of ARCHLIB, to be used
+ *     in programs that are not prepared to deal with ~ expansion at run-time.
+ */
+#$d_archlib ARCHLIB_EXP "$archlibexp"          /**/
+
 /* BYTEORDER:
  *     This symbol hold the hexadecimal constant defined in byteorder,
  *     i.e. 0x1234 or 0x4321, etc...
@@ -1441,6 +1432,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
 #$i_dbm I_DBM  /**/
 #$i_rpcsvcdbm I_RPCSVC_DBM     /**/
 
+/* I_LOCALE:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <locale.h>.
+ */
+#$i_locale     I_LOCALE                /**/
+
 /* I_SYS_STAT:
  *     This symbol, if defined, indicates to the C program that it should
  *     include <sys/stat.h>.
@@ -1468,40 +1465,55 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #$d_mymalloc MYMALLOC                  /**/
 
+/* OLDARCHLIB_EXP:
+ *     This symbol contains the ~name expanded version of OLDARCHLIB, to be
+ *     used in programs that are not prepared to deal with ~ expansion at 
+ *     run-time.
+ */
+#$d_oldarchlib OLDARCHLIB_EXP "$oldarchlibexp"         /**/
+
+/* PRIVLIB_EXP:
+ *     This symbol contains the ~name expanded version of PRIVLIB, to be used
+ *     in programs that are not prepared to deal with ~ expansion at run-time.
+ */
+#define PRIVLIB_EXP "$privlibexp"              /**/
+
 /* SIG_NAME:
- *     This symbol contains a list of signal names in order. This is intended
+ *     This symbol contains a list of signal names in order of
+ *     signal number. This is intended
  *     to be used as a static array initialization, like this:
  *             char *sig_name[] = { SIG_NAME };
  *     The signals in the list are separated with commas, and each signal
  *     is surrounded by double quotes. There is no leading SIG in the signal
- *