# This is a patch for perl5.004_04 to update it to perl5.004_05 # # To apply this patch: # STEP 1: Chdir to the source directory. # STEP 2: Run the 'applypatch' program with this patch file as input. # # If you do not have 'applypatch', it is part of the 'makepatch' package # that you can fetch from the Comprehensive Perl Archive Network: # http://www.perl.com/CPAN/authors/Johan_Vromans/makepatch-x.y.tar.gz # In the above URL, 'x' should be 2 or higher. # # To apply this patch without the use of 'applypatch': # STEP 1: Chdir to the source directory. # If you have a decent Bourne-type shell: # STEP 2: Run the shell with this file as input. # If you don't have such a shell, you may need to manually create/delete # the files/directories as shown below. # STEP 3: Run the command 'patch -p0' with this file as input. # # These are the commands needed to create/delete files/directories: # mkdir 'beos' chmod 0755 'beos' mkdir 'lib/File/Spec' chmod 0755 'lib/File/Spec' rm -f 'win32/win32io.h' rm -f 'win32/win32io.c' rm -f 'win32/bin/www.pl' rm -f 'win32/bin/webget.pl' rm -f 'win32/bin/network.pl' rm -f 'ext/DynaLoader/DynaLoader.pm' touch 'Porting/Contract' chmod 0444 'Porting/Contract' touch 'Porting/genlog' chmod 0555 'Porting/genlog' touch 'Porting/p4d2p' chmod 0555 'Porting/p4d2p' touch 'Porting/p4desc' chmod 0555 'Porting/p4desc' touch 'Porting/patching.pod' chmod 0444 'Porting/patching.pod' touch 'README.beos' chmod 0444 'README.beos' touch 'beos/nm.c' chmod 0444 'beos/nm.c' touch 'eg/cgi/caution.xbm' chmod 0444 'eg/cgi/caution.xbm' touch 'eg/cgi/dna.small.gif.uu' chmod 0444 'eg/cgi/dna.small.gif.uu' touch 'eg/cgi/nph-multipart.cgi' chmod 0444 'eg/cgi/nph-multipart.cgi' touch 'emacs/e2ctags.pl' chmod 0444 'emacs/e2ctags.pl' touch 'emacs/ptags' chmod 0555 'emacs/ptags' touch 'ext/DynaLoader/DynaLoader_pm.PL' chmod 0444 'ext/DynaLoader/DynaLoader_pm.PL' touch 'ext/POSIX/hints/bsdos.pl' chmod 0444 'ext/POSIX/hints/bsdos.pl' touch 'ext/POSIX/hints/freebsd.pl' chmod 0444 'ext/POSIX/hints/freebsd.pl' touch 'ext/POSIX/hints/linux.pl' chmod 0444 'ext/POSIX/hints/linux.pl' touch 'ext/POSIX/hints/netbsd.pl' chmod 0444 'ext/POSIX/hints/netbsd.pl' touch 'ext/POSIX/hints/openbsd.pl' chmod 0444 'ext/POSIX/hints/openbsd.pl' touch 'ext/POSIX/hints/sunos_4.pl' chmod 0444 'ext/POSIX/hints/sunos_4.pl' touch 'hints/beos.sh' chmod 0444 'hints/beos.sh' touch 'hints/openbsd.sh' chmod 0444 'hints/openbsd.sh' touch 'lib/CGI/Cookie.pm' chmod 0444 'lib/CGI/Cookie.pm' touch 'lib/File/Spec.pm' chmod 0444 'lib/File/Spec.pm' touch 'lib/File/Spec/Mac.pm' chmod 0444 'lib/File/Spec/Mac.pm' touch 'lib/File/Spec/OS2.pm' chmod 0444 'lib/File/Spec/OS2.pm' touch 'lib/File/Spec/Unix.pm' chmod 0444 'lib/File/Spec/Unix.pm' touch 'lib/File/Spec/VMS.pm' chmod 0444 'lib/File/Spec/VMS.pm' touch 'lib/File/Spec/Win32.pm' chmod 0444 'lib/File/Spec/Win32.pm' touch 'lib/Test.pm' chmod 0444 'lib/Test.pm' touch 'lib/Tie/Handle.pm' chmod 0444 'lib/Tie/Handle.pm' touch 'lib/attrs.pm' chmod 0444 'lib/attrs.pm' touch 'lib/re.pm' chmod 0444 'lib/re.pm' touch 'pod/perlhist.pod' chmod 0444 'pod/perlhist.pod' touch 'pod/perlmodinstall.pod' chmod 0444 'pod/perlmodinstall.pod' touch 'pod/perlport.pod' chmod 0444 'pod/perlport.pod' touch 't/comp/require.t' chmod 0555 't/comp/require.t' touch 't/lib/filespec.t' chmod 0555 't/lib/filespec.t' touch 't/lib/h2ph.h' chmod 0444 't/lib/h2ph.h' touch 't/lib/h2ph.pht' chmod 0444 't/lib/h2ph.pht' touch 't/lib/h2ph.t' chmod 0555 't/lib/h2ph.t' touch 't/lib/ph.t' chmod 0555 't/lib/ph.t' touch 't/op/defins.t' chmod 0555 't/op/defins.t' touch 't/op/die.t' chmod 0555 't/op/die.t' touch 't/op/die_exit.t' chmod 0555 't/op/die_exit.t' touch 't/op/goto_xs.t' chmod 0555 't/op/goto_xs.t' touch 't/op/hashwarn.t' chmod 0555 't/op/hashwarn.t' touch 't/op/pos.t' chmod 0555 't/op/pos.t' touch 't/op/tiehandle.t' chmod 0555 't/op/tiehandle.t' touch 'win32/bin/perlglob.pl' chmod 0444 'win32/bin/perlglob.pl' touch 'win32/des_fcrypt.patch' chmod 0444 'win32/des_fcrypt.patch' # # Permissions changes to existing files # chmod 0555 'lib/diagnostics.pm' chmod 0444 'minimod.pl' chmod 0444 't/harness' # # This command terminates the shell and need not be executed manually. exit # #### End of Preamble #### #### Patch data follows #### diff -c 'perl5.004_04/patchlevel.h' 'perl5.004_05/patchlevel.h' Index: ./patchlevel.h *** ./patchlevel.h Wed Oct 15 05:55:19 1997 --- ./patchlevel.h Thu Apr 29 10:54:58 1999 *************** *** 1,5 **** #define PATCHLEVEL 4 ! #define SUBVERSION 4 /* local_patches -- list of locally applied less-than-subversion patches. --- 1,5 ---- #define PATCHLEVEL 4 ! #define SUBVERSION 5 /* local_patches -- list of locally applied less-than-subversion patches. diff -c 'perl5.004_04/Changes' 'perl5.004_05/Changes' Index: ./Changes *** ./Changes Wed Oct 15 09:43:40 1997 --- ./Changes Thu Apr 29 11:43:52 1999 *************** *** 5,11 **** release of Perl is based. (Patches can be found on any CPAN site, in the .../src/5.0 directory for full version releases, or in the .../src/5/0/unsupported directory for sub-version ! releases.) --------------- --- 5,11 ---- release of Perl is based. (Patches can be found on any CPAN site, in the .../src/5.0 directory for full version releases, or in the .../src/5/0/unsupported directory for sub-version ! development releases.) --------------- *************** *** 44,51 **** Charles Bailey Tim Bunce Andy Dougherty ! Chip Salzenberg ---------------- Version 5.004_04 Maintenance release 4 for 5.004 --- 44,4095 ---- Charles Bailey Tim Bunce Andy Dougherty ! Gurusamy Sarathy ! Chip Salzenberg ! ! And, of course, the Author of Perl: ! ! Larry Wall ! ! ! ! ---------------- ! Version 5.004_05 Maintenance release 5 for 5.004 ! ---------------- ! ! "I said to my soul, be still, and wait without hope ! For hope would hope for the wrong thing; wait without love ! For love would be love of the wrong thing; there is yet faith ! But the faith and the love and the hope are all in the waiting. ! Wait without thought, for you are not ready for thought: ! So the darkness shall be light, and the stillness the dancing." ! -- T.S.Eliot, East Coker ! ! ! HEADLINES FOR THIS MAINTENANCE RELEASE + Better security + - Tainting bugs fixed. + - Mount options that disallow set[ug]id honored. + - Temporary file not created for "perl -e". + Better documentation + - Many significant updates and clarifications. + Better performance + - Many improvements including a very fast/safe built-in qsort. + Better perl portability + - Easier builds on more systems. + Better script portability + - Scripts with CR LF line endings (Win32) work on UNIX. + Better version portability + - Some 5.005 script features added such as "STMT foreach LIST", + stub attrs pragma, foo:: package bearword. + - Some 5.005 internals/XS features added such as + new ERRSV, ERRHV, DEFSV, SAVE_DEFSV and dTHR macros. + Better utilities + - Many enhancements for h2ph, perldoc, perlbug etc. + Better warnings / fewer warnings + - No more warnings on $x{shift}, ne => 1, or -f => 1. + - Implicit defined() added in while($x=<>). + Better code + - Almost all known run-time memory leaks fixed. + - Many other bugs fixed. + + + Change 3296 by chip@perlsupport.com on 1999/04/29 19:01:36 + + Fix a few scripts' permissions. + Update MANIFEST and, yet again, Changes. + + Change 3295 by chip@perlsupport.com on 1999/04/29 18:53:45 + + Final release: Update patchlevel.h and Changes. + + Change 3294 by chip@perlsupport.com on 1999/04/29 18:52:16 + + Refresh emacs/*. + + Change 3293 by chip@perlsupport.com on 1999/04/29 18:50:49 + + Fix shebang lines. + + Change 3290 by chip@perlsupport.com on 1999/04/29 18:16:45 + + Eliminate SysV IPC tests that don't work reliably. + Maybe the next patch will include IPC::SysV. + + Change 3288 by chip@perlsupport.com on 1999/04/27 17:12:38 + + Fix non-core-XS bug in MM_VMS.pm. + (from Dan Sugalski ) + + Change 3287 by chip@perlsupport.com on 1999/04/27 13:36:27 + + Fix SysV IPC tests to allow for ids of zero. + + Change 3286 by chip@perlsupport.com on 1999/04/27 13:16:07 + + Update Solaris 2.x hints. + (from Andy Dougherty ) + + Change 3285 by chip@perlsupport.com on 1999/04/27 13:02:43 + + Add 'okfile' target to makefile. + (from Hugo van der Sanden ) + + Change 3283 by chip@perlsupport.com on 1999/04/26 23:20:47 + + Tweak ordering of Porting/makerel. + Update MANIFEST and, yet again, Changes. + + Change 3282 by chip@perlsupport.com on 1999/04/26 23:13:39 + + Update Changes again for last few patches. + + Change 3281 by chip@perlsupport.com on 1999/04/26 23:12:28 + + Update OpenBSD hints. + (from Todd Miller ) + + Change 3280 by chip@perlsupport.com on 1999/04/26 23:11:10 + + Allow AIX to use Perl's malloc if user insists on it. + (from Kurt Starsinic) + + Change 3279 by chip@perlsupport.com on 1999/04/26 23:09:26 + + Make &AutoLoad::AUTOLOAD reentrant. + + Change 3278 by chip@perlsupport.com on 1999/04/26 23:08:29 + + Refresh AutoLoader to 5.55. + + Change 3277 by chip@perlsupport.com on 1999/04/26 22:54:27 + + Update Changes and patchlevel.h for maint trial 9. + + Change 3276 by chip@perlsupport.com on 1999/04/26 22:34:36 + + Make porting scripts executable. + + Change 3275 by chip@perlsupport.com on 1999/04/26 22:21:43 + + Merge most of Porting directory from mainline. + + Change 3253 by chip@perlsupport.com on 1999/04/13 04:57:52 + + Explain next/last/redo a bit more in perlfunc. + (from M.J.T. Guy ) + + Change 3252 by chip@perlsupport.com on 1999/04/13 04:33:25 + + Rebuild embed.h. (Forgot.) + + Change 3251 by chip@perlsupport.com on 1999/04/13 04:31:50 + + Eliminate false Configure warning about LD_LIBRARY_PATH. + (It's now set automatically during the build process.) + + Change 3250 by chip@perlsupport.com on 1999/04/13 04:30:57 + + Fix check for glibc, so it'll work with 2.1. + (back-formation from 5.006-to-be) + + Change 3249 by chip@perlsupport.com on 1999/04/13 04:30:22 + + Refresh hints for FreeBSD. + + Change 3248 by chip@perlsupport.com on 1999/04/13 04:29:59 + + Automatically set LD_LIBRARY_PATH (or equivalent) during the + build process. (back-formation from 5.006-to-be) + + Change 3247 by chip@perlsupport.com on 1999/04/13 04:29:08 + + New config variable $ignore_versioned_solibs, for Linux. + + Change 3246 by chip@perlsupport.com on 1999/04/13 04:28:17 + + Don't use 'nm' under AIX. + + Change 3245 by chip@perlsupport.com on 1999/04/13 04:27:49 + + Make AutoSplit harder to fool. + + Change 3244 by chip@perlsupport.com on 1999/04/13 04:27:17 + + Fix some broken document links. (from Tom Christiansen) + + Change 3243 by chip@perlsupport.com on 1999/04/13 04:26:21 + + Refresh Text::Wrap to 98.112902. + + Change 3242 by chip@perlsupport.com on 1999/04/13 04:25:10 + + Use locale in Pod::Html and Pod::Text. + Fix typos in Pod::Text. + + Change 3241 by chip@perlsupport.com on 1999/04/13 04:21:49 + + Revert argument list change in export_to_level. + + Change 3240 by chip@perlsupport.com on 1999/04/13 04:21:18 + + Add 'no_modify' to list of variables in 5.005. + + Change 3239 by chip@perlsupport.com on 1999/04/13 04:20:23 + + Refresh perlport to 1.39. (from Chris Nandor) + + Change 3238 by chip@perlsupport.com on 1999/04/13 04:19:38 + + Fix typo in perlxstut. + + Change 3237 by chip@perlsupport.com on 1999/04/13 04:19:10 + + Clear errno on successful C. + + Change 3236 by chip@perlsupport.com on 1999/04/13 04:17:50 + + Add test of C interaction with AUTOLOAD. + + Change 3235 by chip@perlsupport.com on 1999/04/13 04:15:51 + + Make Text::ParseWords handle some delimiters with spaces. + (The full fix, using /(?-x:$foo)/, can't work in 5.004.) + + Change 3234 by chip@perlsupport.com on 1999/04/13 04:14:22 + + Properly handle tainted operations when -U is set. + + Change 3233 by chip@perlsupport.com on 1999/04/13 04:13:02 + + New config variable $installusrbinperl, defaulting 'undef' + for NetBSD. (from Jarkko) + + Change 3232 by chip@perlsupport.com on 1999/04/13 04:09:05 + + Update NetBSD hints. + + Change 3231 by chip@perlsupport.com on 1999/04/13 04:07:41 + + Refresh Getopt::Long to 2.19. + + Change 3230 by chip@perlsupport.com on 1999/04/13 04:06:19 + + Properly diagnose missing roots in rmtree(). + + Change 3229 by chip@perlsupport.com on 1999/04/13 04:04:14 + + Preserve errno from importunities of sfio. + + Change 3228 by chip@perlsupport.com on 1999/04/13 04:02:33 + + Fix longstanding bug: searches for lexicals originating within + eval'' weren't stopping at the subroutine boundary correctly. + (back-formation from change 3037) + + Change 3227 by chip@perlsupport.com on 1999/04/13 04:00:47 + + Record Linux libc version. + + Change 3222 by chip@perlsupport.com on 1999/04/06 19:32:40 + + Disable setuid execution if 'nosuid' mount option specified. + (Original fix from Jarkko; hand-hackery of Configure by Chip.) + + Change 3221 by chip@perlsupport.com on 1999/04/06 19:27:50 + + Set CDPATH="." only if it's already set to something else. + + Change 2447 by gsar@aatma on 1998/12/04 03:47:42 + + Update README.win32 in maint-5.004. + + Change 2446 by TimBunce@ig.co.uk on 1998/12/03 15:52:59 + + Update MANIFEST for dna.small.gif.uu (change 2445) + + Change 2445 by TimBunce@ig.co.uk on 1998/12/03 15:49:32 + + Ship dna.small.gif uuencoded. + Update Changes and patchlevel.h for maint trial 8. + + Change 2442 on 1998/12/03 by TimBunce@ig.co.uk + + Configure supplies bad ccflags for Irix/GCC combo + From: "Kurt D. Starsinic" + + Change 2439 on 1998/12/03 by TimBunce@ig.co.uk + + Title: "hints/freebsd.sh signal handler type" + From: Anton Berezin + Msg-ID: <864srhhvcv.fsf@lion.plab.ku.dk> + Files: hints/freebsd.sh + + Change 2438 on 1998/12/03 by TimBunce@ig.co.uk + + Title: "erroneous 'none' in lddlflags" + From: Andy Dougherty + Files: Configure + + Change 2422 on 1998/11/30 by TimBunce@ig.co.uk + + Title: "defined and tie'ed hashes" + From: Gurusamy Sarathy + Msg-ID: <199811281759.MAA11474@aatma.engin.umich.edu> + Files: pp.c + + Change 2421 on 1998/11/30 by TimBunce@ig.co.uk + + Title: "Problems with ExtUtils::Liblist on Win32: -L -> -libpath -> -l(ibpath)" + From: Gurusamy Sarathy , Swen Thuemmler + Msg-ID: <199811280515.AAA18658@aatma.engin.umich.edu> + Files: lib/ExtUtils/Liblist.pm + + Change 2420 on 1998/11/30 by TimBunce@ig.co.uk + + Apply MachTen malloc allignment work-around to NeXT. + + Change 2419 on 1998/11/30 by TimBunce@ig.co.uk + + Add Configure config.msg warning mechanism from 5.005. Use it to warn + about LD_LIBRARY_PATH if appropriate (eg Digital UNIX aka DEC OSF/1) + From: Jarkko Hietaniemi + + Change 2418 on 1998/11/30 by TimBunce@ig.co.uk + + Copied change 2353 by Jarkko Hietaniemi. + Locale collation, ctype, and numeric, were initialized wrong + (if LC_ALL or LANG were unset, so were the collation/ctype/numeric), + as reported by Ilya.Sandler@etak.com (Ilya Sandler) + + Change 2331 on 1998/11/27 by TimBunce@ig.co.uk + + Title: "Fix noises from the VC linker on RunPerl()" + From: Gurusamy Sarathy + Msg-ID: <199811210900.EAA07670@aatma.engin.umich.edu> + Files: win32/perllib.c + + Change 2330 on 1998/11/27 by TimBunce@ig.co.uk + + win32 portability fix: make sysread() and syswrite() work on sockets + win32_recvfrom() compatibility fix + [Changes 2254 and 2255 by gsar] + + Change 2329 on 1998/11/27 by TimBunce@ig.co.uk + + fix C misoptimization that fails + to set the package for the block properly + [Change 2299 by gsar@aatma on 1998/11/26 06:51:16] + + Change 2328 on 1998/11/27 by TimBunce@ig.co.uk + + Assorted (5.004 specific) fixes: + + Title: "Improve test for failed csh glob (-w warn on core dump)" + From: Gurusamy Sarathy + Msg-ID: <199811230134.UAA07516@aatma.engin.umich.edu> + Files: pp_hot.c + + Title: "Fix K&R compiler error on pad_findlex 'prototype'" + From: Paul Marquess + Msg-ID: <199811231209.MAA23125@zog.bfsec.bt.co.uk> + Files: op.c + + Title: "Reversed embedvar (PL_foo) required for 5.004_0x" + From: Nick Ing-Simmons + Msg-ID: <199810171143.MAA11663@ni-s.u-net.com> + Files: embed.pl + + Change 2291 on 1998/11/22 by TimBunce@ig.co.uk + + Updated Porting/patchls utility. + + Change 2290 on 1998/11/22 by TimBunce@ig.co.uk + + Fix "<-l>" typo reported by pod2man warning. + + Change 2289 on 1998/11/22 by TimBunce@ig.co.uk + + Title: "pod2man bug in date generated line" + From: "Kurt D. Starsinic" , Albert Dvornik + + Msg-ID: <19981120131523.A464@O2.chapin.edu>, + + Files: pod/pod2man.PL + + Change 2288 on 1998/11/22 by TimBunce@ig.co.uk + + Title: "Buglet in Sys::Syslog.pm (with fix)" + From: Henrik Tougaard + Msg-ID: + Files: lib/Sys/Syslog.pm + + Change 2287 on 1998/11/22 by TimBunce@ig.co.uk + + Updated CPAN and CGI versions to CPAN-1.40 and CGI-2.42. + + Change 2283 on 1998/11/22 by TimBunce@ig.co.uk + + Title: "(5.005_02) a2p should use `chomp' instead of `chop'" + From: Mark-Jason Dominus + Msg-ID: <19981030192423.27276.qmail@plover.com> + Files: x2p/walk.c + + Change 2282 on 1998/11/22 by TimBunce@ig.co.uk + + Title: "the 4_05-MT6 UNICOS 9.0.1ai C90 miniperl crash" + From: Jarkko Hietaniemi + Msg-ID: <199810121203.PAA26999@alpha.hut.fi> + Files: hints/unicos.sh + + Change 2281 on 1998/11/22 by TimBunce@ig.co.uk + + Title: "groups test needs to use id command on some systems" + From: Jarkko Hietaniemi + Msg-ID: + Files: t/op/groups.t + + Change 2280 on 1998/11/22 by TimBunce@ig.co.uk + + Title: "die with a reference should use overload "" operator" + From: Graham Barr + Msg-ID: <19981024214550.C508@pobox.com> + Files: pp_ctl.c + + Change 2279 on 1998/11/22 by TimBunce@ig.co.uk + + Title: "bugfix: hv_delete and ~ magic" + From: Alan Burlison , Albert Dvornik + + Msg-ID: <363A0850.293FFE13@uk.sun.com>, + + Files: hv.c + + Change 2278 on 1998/11/22 by TimBunce@ig.co.uk + + Title: "Auto-incrementing tied scalar causes SEGV" + From: Graham Barr + Msg-ID: <19981024124521.C512@pobox.com> + Files: sv.c + + Change 2277 on 1998/11/22 by TimBunce@ig.co.uk + + Title: "[PATCH 5.005_02, 5.004_04] hints/sco.sh update" + From: Andy Dougherty + Msg-ID: + Files: hints/sco.sh + + Change 2276 on 1998/11/22 by TimBunce@ig.co.uk + + Title: "Remove spurious /* dTHR; */" + From: Andy Dougherty , Gurusamy Sarathy + , Nick Ing-Simmons + Msg-ID: + Files: mg.c sv.c + + Change 2275 on 1998/11/22 by TimBunce@ig.co.uk + + Title: "[PATCH 5.004/5.005/5.006]Doc patch to VMS::Stdio module" + From: Dan Sugalski + Msg-ID: <3.0.6.32.19981013151057.00a947a0@ous.edu> + Files: vms/ext/Stdio/Stdio.pm + + Change 2274 on 1998/11/22 by TimBunce@ig.co.uk + + Preserve errno around fcntl(fd,F_SETFD,fd > maxsysfd) in do_open() + + Change 2273 on 1998/11/22 by TimBunce@ig.co.uk + + Improve op/die_exit.t test for implicit close changing $! + + Change 2272 on 1998/11/22 by TimBunce@ig.co.uk + + Update perlhit.pod to 1.53 + + Change 2271 on 1998/11/22 by TimBunce@ig.co.uk + + Title: "Complete.pm patch (version 1.1)" + From: Brian Callaghan + Msg-ID: <3654CA96.B64FCAEB@itginc.com> + Files: lib/Term/Complete.pm + + Change 2270 on 1998/11/22 by TimBunce@ig.co.uk + + Revert to 5.004_04 glob error check (too many csh's give bad status) + + Change 2269 on 1998/11/22 by TimBunce@ig.co.uk + + Jumbo patch from Sarathy based on the following changes + (together with a few other assorted fixes) + + Parent change 1072 by gsar@aatma on 1998/06/04 01:49:24 + + [win32] document CORE::GLOBAL:: and global overriding, fix up + File::DosGlob, testsuited and all + + Parent change 1131 by gsar@aatma on 1998/06/14 19:33:36 + + Message-ID: + From: Roderick Schertler + Subject: [PATCH] Re: Exceptions in IPC::Open2 + Date: 12 Jun 1998 13:24:15 -0400 + + Parent change 1134 by gsar@aatma on 1998/06/15 04:07:18 + + various win32 odds and ends + - added support for waitpid(), open2/open3, and a bugfix for kill() + from Ronald Schmidt + - tweak testsuite mods of above + - regenerate win32/config_H.?c + - change kill() to win32_kill() and export it + - coalesce common code in win32.c + - add PerlProc_waitpid() and export win32_waitpid() + result builds and passes on the three win32 compilers + + Parent change 1226 by gsar@aatma on 1998/06/28 17:12:56 + + Date: Tue, 23 Jun 1998 05:37:09 -0700 (PDT) + From: Tom Phoenix + Subject: Better diags for vars.pm + Message-ID: + + Parent change 1678 by gsar@aatma on 1998/08/02 03:24:29 + + fix MM_Win32::maybe_command() + + Parent change 1679 by gsar@aatma on 1998/08/02 03:29:41 + + MM_Win32::maybe_command() case-insesitivity tweak + + Parent change 1738 by gsar@aatma on 1998/08/05 09:08:33 + + support :nosearch in ExtUtils::Liblist for win32, and make -lfoo + processing (somewhat) compiler-specific + + Parent change 1740 by gsar@aatma on 1998/08/05 10:05:46 + + update Changes, patchlevel, tweak Liblist.pm + + Parent change 1746 by gsar@aatma on 1998/08/05 22:55:59 + + MM_Win32.pm and Liblist.pm tweaks + + Parent change 1750 by gsar@aatma on 1998/08/07 21:51:52 + + allow more compatible interpretation of spaces File::DosGlob::glob() + patterns + + Parent change 1796 by gsar@aatma on 1998/09/23 01:31:32 + + perl.pod tweak + + Parent change 1806 by gsar@aatma on 1998/09/23 03:36:08 + + support make written in perl (aka "pmake") on win32 + + Parent change 1831 by gsar@aatma on 1998/09/23 07:19:30 + + document 'U' magic with examples + From: Alan Burlison + Date: Tue, 1 Sep 1998 15:54:06 +0100 (BST) + Message-Id: <199809011455.PAA00631@sale-wts> + Subject: Re: Looking for some XS MAGIC examples... + + Parent change 1848 by gsar@aatma on 1998/09/23 10:25:24 + + From: Roderick Schertler + Date: 11 Sep 1998 16:19:21 -0400 + Message-ID: + Subject: Re: Open2 and memory leaks + + Parent change 1853 by gsar@aatma on 1998/09/23 10:46:06 + + make Pod/Html.pm handle the --title option properly (as suggested + by gml4410@ggr.co.uk) + + Parent change 1857 by gsar@aatma on 1998/09/23 10:58:36 + + From: Ilya Zakharevich + Date: Tue, 22 Sep 1998 17:30:16 -0400 (EDT) + Message-Id: <199809222130.RAA17034@monk.mps.ohio-state.edu> + Subject: More verbose Test::Harness [PATCH] + + Parent change 1871 by gsar@aatma on 1998/09/24 07:26:37 + + correct FSF address in various places + + Parent change 1886 by gsar@aatma on 1998/09/25 04:47:32 + + s/MAKEMAKEROPT/PERL_MM_OPT/ + + Parent change 1914 by gsar@aatma on 1998/10/02 04:05:36 + + normalize tm struct passed to strftime() with mktime() + From: Spider Boardman + Date: Wed, 30 Sep 1998 15:12:09 -0400 + Message-Id: <199809301912.PAA26119@Orb.Nashua.NH.US> + Subject: [PATCH 5.005_52] Re: POSIX::strftime returns incorrect date + + Parent change 1943 by gsar@aatma on 1998/10/13 02:06:09 + + ensure recursive attempts to findlex()icals know enough about where + the last eval'' context was encountered + + Parent change 1944 by gsar@aatma on 1998/10/13 03:15:50 + + change#1614 merely disabled earlier fix (doh!); undo it and properly + fixup the cop_seq value that must be seen by lexical lookups that + emanate within eval'' + + Parent change 1945 by gsar@aatma on 1998/10/13 03:32:02 + + defer "deep recursion" warnings until CXt_SUB context is properly + set up + + Parent change 1948 by gsar@aatma on 1998/10/14 05:38:01 + + two typos + + Parent change 1966 by gsar@aatma on 1998/10/15 02:19:03 + + tweak to make fix in change#1944 behave correctly for closures + created within eval'' + + Parent change 1974 by gsar@aatma on 1998/10/15 23:53:25 + + s/last/first/ typo in append_list() + + Parent change 1988 by gsar@aatma on 1998/10/17 01:49:05 + + stray typo found by Hugo van der Sanden + + Parent change 1998 by gsar@aatma on 1998/10/17 03:00:40 + + skip readonly vars and unref references when doing a reset() + + Parent change 2003 by gsar@aatma on 1998/10/17 04:11:40 + + silence -w noises (suggested by Greg Bacon) + + Parent change 2014 by gbarr@monty on 1998/10/17 20:31:42 + + Fix POSIX::sigprocmask not to check type of $old parameter + as it is output only + + Parent change 2030 by gsar@aatma on 1998/10/21 04:22:53 + + fix handling of mayhaps-extended @_ in goto &sub + (including later followup fix) + + Parent change 2057 by gsar@aatma on 1998/10/25 05:40:40 + + integrate change#2053 from maint-5.005 + + Parent change 2060 by gsar@aatma on 1998/10/25 06:37:34 + + handle '::' in section names properly + From: Graham Barr + Date: Sat, 17 Oct 1998 12:57:54 -0500 + Message-ID: <19981017125754.C510@pobox.com> + Subject: Re: pod2html + + Parent change 2067 by gsar@aatma on 1998/10/25 06:50:19 + + From: jan.dubois@ibm.net (Jan Dubois) + Date: Wed, 21 Oct 1998 00:55:51 +0200 + Message-ID: <36380269.55370608@smtp1.ibm.net> + Subject: Make _really_ sure Dynaloader.xs code is initialized only once + + Parent change 2068 by gsar@aatma on 1998/10/25 06:54:43 + + From: Zachary Miller + Date: Tue, 20 Oct 1998 20:52:20 -0500 + Message-Id: <199810210152.UAA07792@simon.er.usgs.gov> + Subject: Exporter.pm's export_to_level() argument handling buggy + + Parent change 2069 by gsar@aatma on 1998/10/25 06:59:03 + + From: Martijn Koster + Date: Wed, 21 Oct 1998 13:12:03 +0100 + Message-ID: <19981021131203.A15661@excitecorp.com> + Subject: File::Path::mkpath reports the wrong error + + Parent change 2149 by gsar@aatma on 1998/10/30 19:38:15 + + From: Roderick Schertler + Date: Thu, 29 Oct 1998 14:50:18 -0500 + Message-ID: <17625.909690618@eeyore.ibcinc.com> + Subject: patch for daemonization docs in perlipc + + Parent change 2152 by gsar@aatma on 1998/10/30 21:08:11 + + mention the C<$SIG{CHLD} = 'IGNORE'> special case + + Parent change 2210 by gsar@aatma on 1998/11/06 20:36:50 + + fix AvREALISH bogusness + + Parent change 2224 by gsar@aatma on 1998/11/09 03:13:14 + + avoid endless loops in Text::Wrap (from a suggestion by Lupe + Christoph ) + + Parent change 2233 by gsar@aatma on 1998/11/13 09:43:03 + + doc tweak + + Title: "v5.4.6.2b odds and ends" + From: Gurusamy Sarathy + Msg-ID: <199811142210.RAA12455@aatma.engin.umich.edu> + Files: perl.c win32/Makefile win32/config.bc win32/config.vc + win32/makefile.mk + + Change 1938 on 1998/10/09 by TimBunce@ig.co.uk + + Assorted patches: + + ------ CORE LANGUAGE ------ + + Title: "glob with non-existent directory -> make warning non-mandatory" + From: Gurusamy Sarathy , Jim Avera + Msg-ID: <199810012224.PAA29890@membrane.ssd.hal.com>, + <199810020402.AAA11686@aatma.engin.umich.edu> + Files: pod/perldiag.pod pp_hot.c + + Title: "perl does not build on Cray T90" + From: Mark P Lutz + Msg-ID: <199808312113.VAA53356@triton.ca.boeing.com> + Files: toke.c + + Title: "pp_require clobbers compiling.cop_line" + From: larry@wall.org (Larry Wall) + Msg-ID: <199808300005.RAA23473@wall.org> + Files: pp_ctl.c + + ------ DOCUMENTATION ------ + + Title: "Update perlform.pod to clarify \n\t\f and \r in formats" + From: Colin Kuskie + Msg-ID: + Files: pod/perlform.pod + + ------ LIBRARY ------ + + Title: "Fix File::Find to work in tainted mode" + From: Ed Jordan , Jochen Wiedmann , Randal + Schwartz + Msg-ID: <35F3DF42.CCEA269D@ispsoft.de>, <8cemtmkwgb.fsf@gadget.cscaper.com>, + + Files: lib/File/Find.pm + + Title: "Make File::Find work when wanted() is autoloaded or a symbolic ref" + From: Gurusamy Sarathy + Msg-ID: <199810020248.WAA10478@aatma.engin.umich.edu> + Files: lib/File/Find.pm + + ------ PORTABILITY - GENERAL ------ + + Title: "Further refine hint/hpux.sh fix for cppstdin and cpprun" + From: Jeff Okamoto + Msg-ID: <199809021706.KAA26349@xfiles.intercon.hp.com> + Files: hints/hpux.sh + + Title: "Allow dlerror to be a macro when HAS_DLERROR is undefined", "broken + wait.ph causes problems for Test::Harness" + From: Tim Bunce + Files: ext/DynaLoader/dl_dlopen.xs lib/Test/Harness.pm + + Change 1894 on 1998/09/25 by TimBunce@ig.co.uk + + Major docs update to 5.005_02 (where appropriate) + + Change 1893 on 1998/09/25 by TimBunce@ig.co.uk + + Assorted patches: + + ------ CORE LANGUAGE ------ + + Title: "ensure implicit close on local(*FH) doesn't affect $! and thence $?" + From: Gurusamy Sarathy + Msg-ID: <199807312350.TAA17104@aatma.engin.umich.edu> + Files: sv.c t/op/die_exit.t + + Title: "Fixes for pre-ANSI compilers (eg SunOS 4)" + From: Andy Dougherty + Msg-ID: + Files: mg.c op.c pp_ctl.c sv.c + + ------ DOCUMENTATION ------ + + Title: "Update pod/perlhist.pod" + From: Jarkko Hietaniemi + Msg-ID: <199808030850.LAA04656@alpha.hut.fi> + Files: pod/perlhist.pod + + ------ EXTENSIONS ------ + + Title: "use $ENV{MAKEMAKEROPT} to set default command line args" + From: Gurusamy Sarathy + Msg-ID: <199809240804.EAA17332@aatma.engin.umich.edu> + Files: lib/ExtUtils/MakeMaker.pm + + Title: "Fix POSIX::ELOOP and _POSIX_STREAM_MAX" + From: Nicholas Clark + Msg-ID: <199807281540.QAA04640@flirble.org> + Files: ext/POSIX/POSIX.pm ext/POSIX/POSIX.xs + + ------ PORTABILITY - GENERAL ------ + + Title: "Fixup patches for VMS" + From: Dan Sugalski + Msg-ID: <3.0.5.32.19980727114541.00af5730@ous.edu> + Files: t/lib/filecopy.t t/op/defins.t vms/descrip.mms + + ------ TESTS ------ + + Title: "Add tests for C" + From: Gurusamy Sarathy + Msg-ID: <199809181818.OAA09898@aatma.engin.umich.edu> + Files: t/cmd/for.t + + ------ UTILITIES ------ + + Title: "h2ph misquotes #error directives" + From: "Kurt D. Starsinic" + Msg-ID: <19980820205903.A12908@O2.chapin.edu> + Files: t/lib/h2ph.pht utils/h2ph.PL + + Change 1892 on 1998/09/25 by TimBunce@ig.co.uk + + Assorted patches: + + ------ CORE LANGUAGE ------ + + Title: "Fix off-by-one in change#623 that broke lexical lookups in eval''" + From: Gurusamy Sarathy + Msg-ID: <199807211951.PAA01022@aatma.engin.umich.edu> + Files: pp_ctl.c + + Title: "NetBSD patches" + From: Hubert Feyrer , Jarkko Hietaniemi + + Msg-ID: , + + Files: hints/netbsd.sh makedepend.SH pod/perldiag.pod perl.h perl.c + + Title: "Fix memory corruption in select" + From: Gurusamy Sarathy , Lupe Christoph + + Msg-ID: <199807251749.TAA22347@alanya.m.isar.de>, + <199807251928.PAA03667@aatma.engin.umich.edu> + Files: pp_sys.c + + Title: "Better CR-handling on shebang line and in formats" + From: Gurusamy Sarathy , Igor Sysoev + Msg-ID: <199808191352.RAA23006@mail.nitek.ru>, + <199809232221.SAA08153@aatma.engin.umich.edu> + Files: perl.c toke.c + + Title: "make C AUTOLOAD-aware" + From: Gurusamy Sarathy + Msg-ID: <199809240701.DAA16223@aatma.engin.umich.edu> + Files: pp_ctl.c + + Title: "check ferror() only if read() returned 0" + From: Gurusamy Sarathy + Msg-ID: <199807180224.WAA23107@aatma.engin.umich.edu> + Files: pp_sys.c + + Title: "fix memory leak in C" + From: Gurusamy Sarathy + Msg-ID: <199807210049.UAA27342@aatma.engin.umich.edu> + Files: scope.c + + Title: "no csh, no globbing, no error - fixed" + From: Gurusamy Sarathy + Msg-ID: <199808011809.OAA00528@aatma.engin.umich.edu> + Files: pp_hot.c + + Title: "warn on C" + From: Gurusamy Sarathy + Msg-ID: <199809230824.EAA27936@aatma.engin.umich.edu> + Files: pod/perldiag.pod op.c + + Title: "end pod processing when source file is closed" + From: Gurusamy Sarathy + Msg-ID: <199808050106.VAA08668@aatma.engin.umich.edu> + Files: t/comp/require.t toke.c + + Title: "fix small memory leak when mess_sv happens to be touched by magic" + From: Gurusamy Sarathy + Msg-ID: <199807210053.UAA27374@aatma.engin.umich.edu> + Files: perl.c t/op/local.t t/op/pat.t t/op/regexp.t + + Title: "Fix problems with unpack u, q and Q formats. Add tests." + From: "M.J.T. Guy" , Jarkko Hietaniemi + Msg-ID: <199808030826.LAA12262@alpha.hut.fi>, + + Files: pp.c t/op/pack.t + + ------ DOCUMENTATION ------ + + Title: "Doc bug in perldelta.pod for "Explicit blessing to ''"" + From: Christopher Masto , Tom Christiansen + + Msg-ID: <199809181852.OAA08231@tinky-winky.netmonger.net>, + <199809182017.OAA22781@jhereg.perl.com> + Files: pod/perldiag.pod + + Title: "Doc fix for split." + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perlfunc.pod + + Title: "Remove duplicate diagnostic" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perldiag.pod + + Title: "Clarify sub return context" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perlsub.pod + + ------ PORTABILITY - GENERAL ------ + + Title: "Update hints/README.hints" + From: Andy Dougherty + Msg-ID: + Files: hints/README.hints + + Change 1858 on 1998/09/23 by TimBunce@ig.co.uk + + Assorted patches: + + ------ BUILD PROCESS ------ + + Title: "Fix AIX pwgecos glitch" + From: Jarkko Hietaniemi + Msg-ID: <199807281243.PAA88818@vipunen.hut.fi> + Files: Configure + + ------ CORE LANGUAGE ------ + + Title: "Minor nit in glob notation" + From: Stephen McCamant + Msg-ID: <13764.54929.60137.104838@alias-2.pr.mcs.net> + Files: op.c + + Title: "Fix for command line use of source filters" + From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + Msg-ID: <9808070959.AA28190@claudius.bfsec.bt.co.uk> + Files: perl.c + + ------ DOCUMENTATION ------ + + Title: "perlfunc.pod: improve umask entry" + From: Nathan Torkington + Msg-ID: <199808131659.KAA06179@prometheus.frii.com> + Files: pod/perlfunc.pod + + Title: "Add some XS MAGIC examples to perlguts.pod" + From: Alan Burlison + Msg-ID: <199809011455.PAA00631@sale-wts> + Files: pod/perlguts.pod + + ------ EXTENSIONS ------ + + Title: "Fixes for localeconv and improved locale documentation" + From: Jarkko Hietaniemi + Msg-ID: <199807292202.BAA32156@alpha.hut.fi> + Files: pod/perllocale.pod ext/POSIX/POSIX.xs + + Title: "Fix Liblist.pm to find entries that are plain pathnames on win32" + From: Gurusamy Sarathy + Msg-ID: <199807220613.CAA05655@aatma.engin.umich.edu> + Files: lib/ExtUtils/Liblist.pm + + Title: "Make MakeMaker handle EXE_FILES before 'test'" + From: andreas.koenig@kulturbox.de (Andreas J. Koenig) + Msg-ID: + Files: lib/ExtUtils/MM_Unix.pm + + ------ LIBRARY ------ + + Title: "Remove commented version number in Getopt::Long" + From: Johan Vromans + Msg-ID: <13748.55168.397720.564438@phoenix.squirrel.nl> + Files: lib/Getopt/Long.pm + + Title: "Math::BigInt <=> op is not correct." + From: "M.J.T. Guy" + Msg-ID: + Files: lib/Math/BigInt.pm t/lib/bigintpm.t + + Title: "Upgraded assorted files to 5.005_02 versions" + Files: Porting/pumpkin.pod lib/AutoLoader.pm lib/Benchmark.pm + lib/SelfLoader.pm lib/Test.pm lib/File/Spec.pm + lib/Getopt/Std.pm lib/Pod/Html.pm lib/Sys/Syslog.pm + lib/Term/ReadLine.pm lib/Test/Harness.pm + lib/Text/ParseWords.pm + + ------ PORTABILITY - GENERAL ------ + + Title: "issues with sort in 'make test' on IRIX 6.3 IP32" + From: Andy Dougherty + Msg-ID: + Files: hints/irix_6.sh + + Title: "Update hints, Configure for MachTen 4.1.1" + From: Dominic Dunlop + Msg-ID: + Files: Configure hints/machten.sh + + Title: "Updated patchls utility" + Files: Porting/patchls + + ------ TESTS ------ + + Title: "t/op/eval.t test for eval & scoping of lexicals" + From: Anton Berezin + Msg-ID: <199807211946.VAA01301@lion.plab.ku.dk> + Files: t/op/eval.t + + Change 1580 on 1998/07/20 by TimBunce@ig.co.uk + + Assorted patches: + + Title: "Clean up hash array allocation" + From: Gurusamy Sarathy + Msg-ID: <199807201052.GAA13336@aatma.engin.umich.edu> + Files: hv.c + + Title: "Further fixes for cppstdin on HP-UX 11" + From: Andy Dougherty + Msg-ID: + Files: hints/hpux.sh + + Change 1579 on 1998/07/20 by TimBunce@ig.co.uk + + Assorted patches: + + Title: "Fix C<$1 .. $2> coredump under debugger" + From: Gurusamy Sarathy + Msg-ID: <199807200042.UAA23288@aatma.engin.umich.edu> + Files: pp_ctl.c + + Title: "Fix lvalue leaks stemming from failure to free LvTARG(sv)" + From: Gurusamy Sarathy + Msg-ID: <199807191829.OAA12433@aatma.engin.umich.edu> + Files: embed.h perl.h proto.h global.sym mg.c sv.c t/op/substr.t t/op/vec.t + + Title: "fix major bug (from 5.003_96); void contexts were using the context + of the enclosing sub!" + From: Francois Desarmenien , Gurusamy Sarathy + + Msg-ID: <199807180927.FAA08032@aatma.engin.umich.edu>, + <35B1CA51.A606AD27@club-internet.fr> + Files: op.h + + Title: "Update lib/Getopt/Long.pm (from perl5.005 beta 1)" + From: Johan Vromans + Msg-ID: <13745.47704.943964.34613@phoenix.squirrel.nl> + Files: lib/Getopt/Long.pm + + Title: "Add Porting/p4d2p utility for converting perforce diffs" + From: Gurusamy Sarathy + Msg-ID: <199807200002.UAA21398@aatma.engin.umich.edu> + Files: MANIFEST Porting/p4d2p + + Change 1577 on 1998/07/20 by TimBunce@ig.co.uk + + Title: "Make failed matches return empty list in list context" + From: "Paul E. Maisano" , Gurusamy Sarathy + , Paul Maisano + Msg-ID: <199807200002.UAA21398@aatma.engin.umich.edu>, + <199807200027.KAA27815@ironbark-ridge.aaii.oz.au>, + <35B156FB.504E66E@aaii.oz.au> + Files: pod/perlop.pod pp_hot.c t/op/pat.t + + Change 1576 on 1998/07/20 by TimBunce@ig.co.uk + + Title: "win32 update from 5.005 beta 2 for 5.004_05" + From: Gurusamy Sarathy + Msg-ID: <199807192332.TAA20905@aatma.engin.umich.edu> + Files: win32/include/dirent.h win32/include/sys/socket.h proto.h + lib/ExtUtils/Liblist.pm lib/ExtUtils/Mksymlists.pm + win32/win32.h win32/win32iop.h README.win32 installperl + pp_ctl.c win32/Makefile win32/config.bc win32/config.vc + win32/config_H.bc win32/config_H.vc win32/config_h.PL + win32/config_sh.PL win32/dl_win32.xs win32/makedef.pl + win32/makefile.mk win32/pod.mak win32/win32.c + win32/win32sck.c win32/bin/pl2bat.pl + + Change 1539 on 1998/07/18 by TimBunce@ig.co.uk + + Assorted patches: + + Title: "Minor fixes to MakeMaker docs re ExtUtils::Embed" + From: Paul Johnson + Msg-ID: <19980718155847.D903@west-tip.transeda.com> + Files: lib/ExtUtils/MakeMaker.pm + + Title: "Update t/op/array.t (from 5.005 beta 1)" + Files: t/op/array.t + + Change 1538 on 1998/07/18 by TimBunce@ig.co.uk + + Title: "Remove flawed '// with parens or $&' performance patch (Change 662)" + From: "M.J.T. Guy" , Tim Bunce , + larry@wall.org (Larry Wall) + Msg-ID: <19980717015308.E6244@ig.co.uk>, <199807171819.LAA13771@wall.org>, + + Files: cop.h embed.h perl.h proto.h regexp.h gv.c interp.sym perl.c pp.c + pp_ctl.c pp_hot.c regexec.c scope.c + + Change 1525 on 1998/07/18 by TimBunce@ig.co.uk + + Assorted patches: + + Title: "Fix @a=@a=qw(...) properly" + From: Stephen McCamant + Msg-ID: <13742.49404.367751.437966@alias-2.pr.mcs.net> + Files: opcode.h + + Title: "Larry's patch to support CR LF in scripts (updated)" + From: Gisle Aas , larry@wall.org (Larry Wall) + Msg-ID: <199807120054.RAA19550@wall.org>, + Files: t/comp/multiline.t toke.c + + Title: "Change getc() docs to match behaviour. Make read() return undef on + error." + From: Gurusamy Sarathy + Msg-ID: <199807052257.SAA10004@aatma.engin.umich.edu> + Files: pod/perlfunc.pod pp_sys.c + + Title: "Update patchls utility" + Files: Porting/patchls + + Change 1521 on 1998/07/16 by TimBunce@ig.co.uk + + Assorted patches: + + Title: "Allow $SIG{CHLD}='IGNORE' to work (reap zombies) on Solaris" + From: Albert Dvornik , + Chip Salzenberg + Msg-ID: <19980708181055.A8005@perlsupport.com>, + + Files: util.c + + Title: "Document perltrap on precedence of keys/values/each" + From: Gurusamy Sarathy + Msg-ID: <199807151857.OAA04704@aatma.engin.umich.edu> + Files: pod/perltrap.pod + + Title: "perlbook.pod patch" + From: Tom Christiansen + Msg-ID: <199807140037.SAA04556@chthon.perl.com> + Files: pod/perlbook.pod + + Title: "perlmod.pod patch" + From: Tom Christiansen + Msg-ID: <199807140109.TAA04678@chthon.perl.com> + Files: pod/perlmod.pod + + Title: "Fix bug in IO::Handle->input_record_separator" + From: Robin Barker , Swen Thuemmler + + Msg-ID: <199807161400.PAA25532@tempest.cise.npl.co.uk>, + + Files: ext/IO/lib/IO/Handle.pm + + Title: "update h2ph, Math::Complex and Math::Trig (from 5.005 beta 1)" + Files: lib/Math/Complex.pm lib/Math/Trig.pm t/lib/complex.t t/lib/h2ph.t + t/lib/trig.t utils/h2ph.PL + + Title: "Update hints/irix_6.sh" + From: Scott Henry + Msg-ID: + Files: hints/irix_6.sh + + Title: "Configure misses preprocessor on HP-UX (further fix)" + From: Andy Dougherty + Msg-ID: + Files: hints/hpux.sh + + Title: "update perlbug to v1.26 (from 5.005 beta 1)" + Files: utils/perlbug.PL + + Change 1520 on 1998/07/15 by TimBunce@ig.co.uk + + Assorted patches: + + Title: "Add stub attrs.pm" + From: Graham Barr , Gurusamy Sarathy + Msg-ID: <19980713163312.A18222@asic.sc.ti.com>, + <199807132140.RAA09583@aatma.engin.umich.edu> + Files: MANIFEST lib/attrs.pm + + Title: "Fix @a=@a=qw(...)" + From: Gurusamy Sarathy , Stephen McCamant + + Msg-ID: <13737.12300.950886.821143@alias-2.pr.mcs.net>, + <199807122351.TAA05649@aatma.engin.umich.edu> + Files: op.c opcode.pl t/op/array.t + + Title: "Fix 'PERL_DESTRUCT_LEVEL=2 ./perl -DD -e 1' loop" + From: Gisle Aas , Stephen McCamant + Msg-ID: <13739.55551.205810.338648@alias-2.pr.mcs.net>, + + Files: sv.c + + Title: "Make Power MachTen use vfork() and system malloc()" + From: Dominic Dunlop , Jarkko Hietaniemi + Msg-ID: + Files: hints/machten.sh malloc.c + + Title: "Use REG_INFTY in place of hardwired constant" + From: Dominic Dunlop + Msg-ID: + Files: regcomp.h regcomp.c regexec.c + + Title: "Minor debugger fix (history adds an extra newline)" + From: Tye McQueen + Msg-ID: <199807151846.AA12653@metronet.com> + Files: lib/perl5db.pl + + Title: "Protect Term::ReadLine against non-default $/ value" + From: Ilya Zakharevich , + kstar@chapin.edu@ig.co.uk () + Msg-ID: <19980713151749.G8596@O2.chapin.edu>, + <199807132139.RAA11270@monk.mps.ohio-state.edu> + Files: lib/Term/ReadLine.pm + + Title: "Fix HP-UX 11 build (cppstdin)" + From: Andy Dougherty + Msg-ID: + Files: Configure hints/hpux.sh + + Title: "VMS filetest operator fixup (SS$_ACCONFLICT)" + From: Dan Sugalski + Msg-ID: <3.0.5.32.19980702135255.00a6ad90@ous.edu> + Files: vms/vms.c + + Change 1465 on 1998/07/13 by TimBunce@ig.co.uk + + Assorted patches: + + Title: "Fix string substitution returncode problem" + From: Dominic Dunlop , Gurusamy Sarathy + Msg-ID: <199805271236.IAA28213@aatma.engin.umich.edu>, + + Files: pp_hot.c + + Title: "umask EXPR is fatal only if (EXPR & 0700) > 0" + From: Gurusamy Sarathy + Msg-ID: <199807111656.MAA03310@aatma.engin.umich.edu> + Files: pod/perldiag.pod pp_sys.c + + Title: "Remove reference to qsort from perlfunc.pod" + From: Gurusamy Sarathy + Msg-ID: <199807111923.PAA05124@aatma.engin.umich.edu> + Files: pod/perlfunc.pod + + Title: "Deprecate AvFILL in favor of av_len()" + From: Gurusamy Sarathy + Msg-ID: <199807111945.PAA05489@aatma.engin.umich.edu> + Files: pod/perlguts.pod + + Title: "Further clarify effects of using quotes with m operator" + From: Gurusamy Sarathy + Msg-ID: <199806201921.PAA03829@aatma.engin.umich.edu> + Files: pod/perlop.pod + + Title: "Add PERL_DESTRUCT_LEVEL=2 to test suite" + From: Tim Bunce + Files: t/TEST t/op/local.t t/op/pat.t t/op/regexp.t t/op/substr.t t/op/vec.t + + Change 1430 on 1998/07/11 by TimBunce@ig.co.uk + + Title: "Fix string substitution returncode problem" + From: Dominic Dunlop , Gurusamy Sarathy + Msg-ID: <199805271236.IAA28213@aatma.engin.umich.edu>, + + Files: pp_hot.c + + Change 1428 on 1998/07/11 by TimBunce@ig.co.uk + + Assorted patches: + + Title: "makerel now reads local patch list from patchlevel.h" + Files: patchlevel.h Porting/makerel + + Title: "pod/pod2man.PL" + From: abigail@fnx.com + Msg-ID: <19980711080957.2106.qmail@betelgeuse.wayne.fnx.com> + Files: pod/pod2man.PL + + Title: "Clarify taint example in re.pm" + From: Tom Phoenix + Msg-ID: + Files: lib/re.pm + + Title: "Anohter ptags improvement" + From: Ilya Zakharevich + Msg-ID: <199807070059.UAA28815@monk.mps.ohio-state.edu> + Files: emacs/ptags + + Title: "_71 & _04 - Make AIX hints preserve ccflags as per docs" + From: "John L. Allen" + Msg-ID: + Files: hints/aix.sh + + Change 1425 on 1998/07/11 by TimBunce@ig.co.uk + + Title: "Add newCONSTSUB (from 5.005_70)" + Files: embed.h proto.h global.sym op.c + + Change 1424 on 1998/07/11 by TimBunce@ig.co.uk + + Title: "Assorted fixes for Sys::Syslog.pm" + From: "M.J.T. Guy" , Sean Robinson + , Tim.Bunce@ig.co.uk + Msg-ID: <01IXGLISWJ7Q0001B6@sc.maricopa.edu>, + <199805270939.KAA08453@toad.ig.co.uk>, + + Files: lib/Sys/Syslog.pm + + Change 1423 on 1998/07/11 by TimBunce@ig.co.uk + + Assorted patches: + + Title: "umask: die if EXPR & 0700 else return undef" + From: Chip Salzenberg , Jarkko Hietaniemi , + Jarkko Hietaniemi , Malcolm Beattie + , Tim.Bunce@ig.co.uk (Tim Bunce), + kstar@chapin.ed, kstar@chapin.edu@ig.co.uk () + Msg-ID: <199805291520.QAA01615@sable.ox.ac.uk>, + <199805291549.SAA01439@alpha.hut.fi>, + <199805291608.RAA29283@toad.ig.co.uk>, + <19980530105129.A24006@O2.chapin.edu>, + <19980608133037.A8793@perlsupport.com> + Files: pod/perldiag.pod pod/perlfunc.pod pp_sys.c + + Title: "File name DynaLoader.pm.PL is 8.3 unfriendly" + From: Laszlo Molnar + Msg-ID: <19980610005417.G162@cdata.tvnet.hu> + Files: MANIFEST ext/DynaLoader/Makefile.PL + + Change 1356 on 1998/07/07 by TimBunce@ig.co.uk + + Assorted patches: + + ------ BUILD PROCESS ------ + + Title: "Add Test.pm (from perl 5.004_70)" + Files: MANIFEST lib/Test.pm + + ------ EXTENSIONS ------ + + Title: "Add CR LF CRLF to Socket.pm" + From: Chris Nandor + Msg-ID: + Files: ext/Socket/Socket.pm + + ------ LIBRARY ------ + + Title: "AutoSplit upgrade (AutoSplit 1.0302 from 5.004_70)" + Files: lib/AutoSplit.pm + + Title: "Upgrade base.pm (from perl 5.004_70)" + Files: lib/base.pm + + Title: "Add File::Spec modules (from 5.004_70)" + Files: lib/File/Spec.pm lib/File/Spec/Mac.pm lib/File/Spec/OS2.pm + lib/File/Spec/Unix.pm lib/File/Spec/VMS.pm + lib/File/Spec/Win32.pm + + ------ TESTS ------ + + Title: "fixup test for method call on undefined value" + Files: t/op/misc.t + + ------ UTILITIES ------ + + Title: "perlbug upgrade (from 5.004_70)" + Files: utils/perlbug.PL + + Title: "Upgrade perldoc (from 5.004_70)" + Files: utils/perldoc.PL + + Change 1355 on 1998/07/07 by TimBunce@ig.co.uk + + Title: "Fix memory leak in Safe module" + From: Gurusamy Sarathy + Msg-ID: <199806290544.BAA18463@aatma.engin.umich.edu> + Files: ext/Opcode/Opcode.xs ext/Opcode/Safe.pm + + Change 1354 on 1998/07/07 by TimBunce@ig.co.uk + + Title: "Better error message for $undef->method call" + From: Tim Bunce , Graham Barr , + joshua.pritikin@db.com + Msg-ID: <19980615171027.U4120@asic.sc.ti.com>, + Files: pod/perldiag.pod pp_hot.c + + Change 1349 on 1998/07/06 by TimBunce@ig.co.uk + + Assorted patches: + + ------ BUILD PROCESS ------ + + Title: "Configure: Workaround bash CDPATH oddity" + From: Andy Dougherty + Msg-ID: + Files: Configure + + Title: "Don't suppress display of Makefile recipes that invoke perl" + From: Gurusamy Sarathy + Msg-ID: <199806252213.SAA08545@aatma.engin.umich.edu> + Files: Makefile.SH + + ------ CORE LANGUAGE ------ + + Title: "one more^Wless quad unpack bug" + From: Jarkko Hietaniemi + Msg-ID: <199806301132.OAA27353@alpha.hut.fi> + Files: pp.c + + Title: "minor fixups to bring maint closer to devel for patching" + From: Gurusamy Sarathy + Msg-ID: <199805200046.UAA19284@aatma.engin.umich.edu> + Files: pod/perldiag.pod deb.c dump.c t/op/ref.t t/op/split.t taint.c util.c + + Title: "-Pw switches used together report bogus error" + From: Gurusamy Sarathy + Msg-ID: <199806252331.TAA10160@aatma.engin.umich.edu> + Files: perl.c + + Title: "Add doc and perl home page info to -v output" + From: Tom Christiansen + Msg-ID: <199802172229.PAA29309@jhereg.perl.com> + Files: perl.c + + Title: "Fix C<@a = (%a = 1)> bizarreness" + From: Gurusamy Sarathy , Tom Christiansen + + Msg-ID: <199807012026.OAA31507@jhereg.perl.com>, + <199807012339.TAA26024@aatma.engin.umich.edu> + Files: pp_hot.c + + Title: "make find_script() return saved string, reenable missing + diagnostics" + From: Gurusamy Sarathy + Msg-ID: <199806262224.SAA00422@aatma.engin.umich.edu> + Files: perl.c util.c + + Title: "minor e_script optimization" + From: Gurusamy Sarathy + Msg-ID: <199807060704.DAA25988@aatma.engin.umich.edu> + Files: perl.c + + ------ DOCUMENTATION ------ + + Title: "Insecure $ENV{} message out of step with perldiag" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perldiag.pod pod/perlsec.pod + + Title: "documenting close without arguments" + From: Tom Phoenix + Msg-ID: + Files: pod/perlfunc.pod + + Title: "pod for scalar .. op" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perlop.pod + + ------ EXTENSIONS ------ + + Title: "Fcntl: add few constants, enhance maintainability" + From: Jarkko Hietaniemi + Msg-ID: <199806221558.SAA18626@alpha.hut.fi> + Files: ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs + + ------ LIBRARY ------ + + Title: "Fix undef warnings in Text::Parsewords" + From: Jarkko Hietaniemi + Msg-ID: <199806300842.LAA26409@alpha.hut.fi> + Files: lib/Text/ParseWords.pm + + Title: "Add Symbol::delete_package()" + From: Gurusamy Sarathy + Msg-ID: <199807060702.DAA25976@aatma.engin.umich.edu> + Files: pod/perlembed.pod lib/Symbol.pm + + Change 1344 on 1998/07/06 by TimBunce@ig.co.uk + + Title: "Fix for broken goto &xsub" + From: Albert Dvornik , + Msg-ID: + Files: MANIFEST pp_ctl.c t/op/goto_xs.t + + Change 1343 on 1998/07/06 by TimBunce@ig.co.uk + + Title: "Undo sub stub optimization and add comments on GV_FOO constants" + From: Gurusamy Sarathy + Msg-ID: <199807050841.EAA25114@aatma.engin.umich.edu> + Files: gv.h gv.c op.c toke.c + + Change 1310 on 1998/07/04 by TimBunce@ig.co.uk + + Remove old RE //t flag from scan_subst(). + + Change 1270 on 1998/06/30 by TimBunce@ig.co.uk + + Added lib/re.pm missing from change 1210 + + Change 1211 on 1998/06/23 by TimBunce@ig.co.uk + + Update test count in t/lib/basename.t (see change 1210) + + Change 1210 on 1998/06/23 by TimBunce@ig.co.uk + + Title: "Add C pragma to propagate tainting in m// and s///" + From: Chip Salzenberg , Gurusamy Sarathy + , Tim.Bunce@ig.co.uk (Tim Bunce) + Msg-ID: <19980525155222.A18445@perlsupport.com>, + <199805261143.MAA04260@toad.ig.co.uk>, + <199805261235.IAA10371@aatma.engin.umich.edu>, + Files: MANIFEST pod/perlmodlib.pod pod/perlop.pod op.h perl.h dump.c + installperl lib/re.pm lib/File/Basename.pm mg.c op.c + pp_ctl.c pp_hot.c t/lib/basename.t t/op/taint.t toke.c + + Change 1155 on 1998/06/19 by TimBunce@ig.co.uk + + Assorted patches: + + ------ BUILD PROCESS ------ + + Title: "Clarify varargs issues in INSTALL docs" + From: Andy Dougherty + Msg-ID: + Files: INSTALL + + ------ CORE LANGUAGE ------ + + Title: "Further fixes for updated SysV IPC support" + From: Jarkko Hietaniemi + Msg-ID: <199805211644.TAA15139@alpha.hut.fi> + Files: Configure perl.h doio.c + + Title: "Fixed SEGV caused by bug in pp_hot.c:pp_sassign()" + From: Andrew Bettison + Msg-ID: + Files: pp_hot.c + + Title: "Invalidate method cache on C" + From: Chip Salzenberg + Msg-ID: <19980604134731.D24343@perlsupport.com> + Files: scope.c t/op/method.t + + Title: "fix uninitialized cv variable in op.c" + From: joshua.pritikin@db.com + Msg-ID: + Files: op.c + + Title: "fix for undef as last arg to setsockopt" + From: Graham Barr + Msg-ID: <19980603112219.B7638@asic.sc.ti.com> + Files: pp_sys.c + + Title: "Fix -i when @ARGV is empty" + From: Chip Salzenberg , Gurusamy Sarathy + , Ilya Zakharevich + , Tim.Bunce@ig.co.uk (Tim Bunce) + Msg-ID: <19980606184942.A4583@perlsupport.com>, + <199806070029.UAA18709@monk.mps.ohio-state.edu>, + <199806071817.OAA28141@aatma.engin.umich.edu>, + <199806191549.QAA16376@toad.ig.co.uk> + Files: pp_hot.c + + ------ DOCUMENTATION ------ + + Title: "Discrepancy between perlop.pod and m// operator docs" + From: Tom Phoenix + Msg-ID: + Files: pod/perlop.pod + + Title: "Doc addition for perlfunc entry for system()" + From: Ilya Zakharevich , Mike Fletcher + + Msg-ID: <199806011908.PAA31069@dewdrop2.mindspring.com>, + <199806012057.QAA26830@monk.mps.ohio-state.edu> + Files: pod/perlfunc.pod + + Title: "Clarify effects of using quotes with m operator" + From: Daniel Grisinger + Msg-ID: + Files: pod/perlop.pod + + Title: "Document -i with STDIN" + From: joshua.pritikin@db.com + Msg-ID: + Files: pod/perlrun.pod + + ------ EXTENSIONS ------ + + Title: "Fix Liblist.pm to tolerate backslashen in paths" + From: Gurusamy Sarathy + Msg-ID: <199806011954.PAA10900@aatma.engin.umich.edu> + Files: lib/ExtUtils/Liblist.pm + + ------ LIBRARY ------ + + Title: "Typo fix for Math::BogFloat" + From: Mike Stok + Msg-ID: + Files: lib/Math/BigFloat.pm + + ------ PORTABILITY - GENERAL ------ + + Title: "Add docs about types of diff to Porting/patching.pod" + From: Gurusamy Sarathy + Msg-ID: <199806090105.VAA20005@aatma.engin.umich.edu> + Files: Porting/patching.pod + + Title: "Set dont_use_nlink for PowerMAX OS 4.2" + From: Tom Horsley + Msg-ID: <199806161354.NAA21316@cleo.ssd.hcsc.com> + Files: hints/powerux.sh + + Title: "Assorted improvements to hints/solaris_2.sh" + From: Andy Dougherty + Msg-ID: + Files: hints/solaris_2.sh + + Change 1152 on 1998/06/19 by TimBunce@ig.co.uk + + Title: Tom's jumbo doc patch + From: Tom Christiansen + Msg-Id: <199806140419.WAA20549@chthon.perl.com> + Files: pod/perl.pod pod/perlbook.pod pod/perldata.pod pod/perldsc.pod + pod/perlfaq.pod pod/perlfaq1.pod pod/perlfaq2.pod + pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod + pod/perlfaq6.pod pod/perlfaq7.pod pod/perlfaq8.pod + pod/perlfaq9.pod pod/perlform.pod pod/perlfunc.pod + pod/perlipc.pod pod/perllocale.pod pod/perllol.pod + pod/perlmod.pod pod/perlmodlib.pod pod/perlobj.pod + pod/perlop.pod pod/perlre.pod pod/perlref.pod + pod/perlrun.pod pod/perlsec.pod pod/perlsub.pod + pod/perlsyn.pod pod/perltie.pod pod/perltoot.pod + pod/perlvar.pod + + Change 1038 on 1998/05/27 by TimBunce@ig.co.uk + + Assorted patches: + + ------ BUILD PROCESS ------ + + Title: "add utilities to make test dependencies" + From: Robin Barker + Msg-ID: <2607.9805211303@tempest.cise.npl.co.uk> + Files: Makefile.SH + + Title: "Add 'make nok' complement to 'make ok'" + From: "M.J.T. Guy" + Msg-ID: + Files: Makefile.SH + + Title: "further h2ph patches (add enum support)" + From: Billy + Msg-ID: + Files: MANIFEST t/lib/h2ph.pht t/lib/h2ph.t utils/h2ph.PL + + ------ CORE LANGUAGE ------ + + Title: "Fix %! error spelling and add perldiag.pod entry" + From: Graham Barr , Tim Bunce + Msg-ID: <19980524193101.A573@pobox.com> + Files: pod/perldiag.pod gv.c + + Title: "Remove obsolete Win32 uppercasing ENV code" + From: Gurusamy Sarathy + Msg-ID: <199805201510.LAA28676@aatma.engin.umich.edu> + Files: perl.c + + Title: "Don't mung $! on implicit close" + From: Chip Salzenberg + Msg-ID: <19980525113309.A15845@perlsupport.com> + Files: doio.c + + Title: "Maint trial 3 fails on SunOS 4.1.3 with Sun cc" + From: Andy Dougherty + Msg-ID: + Files: doio.c + + ------ DOCUMENTATION ------ + + Title: "doc patch: you canna return an array ( list context: || vs or)" + From: Jarkko Hietaniemi + Msg-ID: + Files: pod/perldebug.pod pod/perlfunc.pod pod/perltie.pod pod/perltrap.pod + + Title: "doc patch: @ needs escaping in m/\Q\E/ environment" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perlop.pod pod/perlre.pod + + Title: "Discrepancy between perlop.pod and m// operator", "Doc fix: Only + with /g does list context get matches without parens" + From: Greg Chapman , Tom Christiansen + , Tom Phoenix + + Msg-ID: <000201bd865e$f3bf72e0$1f04400c@assigned.well.com>, + <199805231559.JAA21316@jhereg.perl.com>, + + Files: pod/perlop.pod + + Title: "Documenting last/next/redo even further" + From: "M.J.T. Guy" , Tom Phoenix + + Msg-ID: , + + Files: pod/perlfunc.pod + + Title: "Documenting last/next/redo within continue block" + From: Tom Phoenix + Msg-ID: + Files: pod/perlfunc.pod + + Title: "Document stat return in scalar context" + From: Mark-Jason Dominus + Files: pod/perlfunc.pod + + ------ EXTENSIONS ------ + + Title: "Better LD_RUN_PATH handling on IRIX" + From: "W. Phillip Moore" + Msg-ID: <199805212206.SAA07504@zappa.morgan.com> + Files: lib/ExtUtils/MM_Unix.pm + + Title: "Dealing with in POSIX and SunOS" + From: Andy Dougherty + Msg-ID: + Files: ext/POSIX/hints/sunos_4.pl hints/sunos_4_1.sh ext/POSIX/POSIX.xs + + ------ LIBRARY ------ + + Title: "Fix FileHandle.pm example bug" + From: Daniel Grisinger + Msg-ID: + Files: lib/FileHandle.pm + + Title: "Add zero/negative $count docs for Benchmark.pm" + From: "M.J.T. Guy" + Msg-ID: + Files: lib/Benchmark.pm + + ------ PORTABILITY - GENERAL ------ + + Title: "Add test suite recommendations to Porting/patching.pod" + From: Daniel Grisinger + Msg-ID: + Files: Porting/patching.pod + + ------ TESTS ------ + + Title: "Fix looping bug in t/io/pipe.t" + From: "M.J.T. Guy" + Msg-ID: + Files: t/io/pipe.t + + Change 1020 on 1998/05/19 by TimBunce@ig.co.uk + + Title: "fix up descrepancy in h2ph test" + From: Tim Bunce + Files: t/lib/h2ph.pht + + Change 1019 on 1998/05/19 by TimBunce@ig.co.uk + + Title: "add a test to check return value from successful s/// (there was none!)" + From: Gurusamy Sarathy + Msg-ID: <199805161759.NAA12995@aatma.engin.umich.edu> + Files: t/op/subst.t + + Title: "fix up descrepancy in h2ph test" + From: Tim Bunce + Files: t/lib/h2ph.t + + Change 1018 on 1998/05/19 by TimBunce@ig.co.uk + + Title: "fix mem leak and core dump from change 1016" + From: Tim Bunce + Files: pp_sys.c + + Change 1017 on 1998/05/19 by TimBunce@ig.co.uk + + Title: "qsort, Win32 "POSIX" plus other devel changes for patch-compatibility" + From: Gurusamy Sarathy + Files: MANIFEST cflags.SH pod/perlembed.pod pod/perlfunc.pod + pod/perlguts.pod pod/perlref.pod pod/perlrun.pod + pod/perlxstut.pod av.h embed.h hv.h op.h perl.h pp.h + proto.h Todo av.c cygwin32/perlgcc cygwin32/perlld deb.c + doio.c doop.c ext/ODBM_File/ODBM_File.xs + ext/POSIX/Makefile.PL ext/POSIX/POSIX.pm ext/POSIX/POSIX.xs + gv.c hv.c interp.sym lib/AutoSplit.pm lib/Cwd.pm + lib/FindBin.pm lib/strict.pm lib/ExtUtils/Command.pm + lib/ExtUtils/Liblist.pm lib/ExtUtils/MakeMaker.pm + lib/ExtUtils/Manifest.pm lib/File/Basename.pm + lib/File/Find.pm lib/File/Path.pm lib/Getopt/Long.pm + lib/Getopt/Std.pm lib/Net/Ping.pm lib/Pod/Html.pm + lib/Pod/Text.pm lib/Term/Cap.pm lib/Test/Harness.pm mg.c + op.c perl.c pod/pod2latex.PL pod/pod2man.PL pp.c pp_ctl.c + pp_hot.c pp_sys.c scope.c sv.c t/lib/posix.t + t/pragma/locale.t utils/perldoc.PL win32/win32.h toke.c + universal.c util.c win32/Makefile win32/config_H.bc + win32/config_H.vc win32/dl_win32.xs win32/makedef.pl + win32/makefile.mk win32/perlglob.c win32/runperl.c + win32/win32.c win32/win32sck.c x2p/s2p.PL + + Change 1016 on 1998/05/19 by TimBunce@ig.co.uk + + Title: "eval { die $obj }; die; calls $obj->PROPAGATE" + From: Graham Barr + Msg-ID: <3561D147.7F3E0C88@ti.com> + Files: pp_sys.c t/op/die.t + + Change 1015 on 1998/05/19 by TimBunce@ig.co.uk + + Title: "loosen const sub re-defined warnings" + From: Doug MacEachern + Msg-ID: <355F713B.6A4C0F04@pobox.com> + Files: proto.h global.sym op.c pp.c sv.c + + Change 1014 on 1998/05/19 by TimBunce@ig.co.uk + + Title: "s/FORMLINE/FORMAT/ in sv.c" + From: Hugo van der Sanden + Msg-ID: + Files: sv.c + + Title: "Further h2ph patches (including a test suite)" + From: Billy + Msg-ID: + Files: MANIFEST t/lib/h2ph.h t/lib/h2ph.pht t/lib/h2ph.t utils/h2ph.PL + + Change 1013 on 1998/05/19 by TimBunce@ig.co.uk + + Title: "Remove change 673 (Allow empty BLOCK in code)" + From: Gurusamy Sarathy , Ilya Zakharevich + + Msg-ID: <199805151857.OAA29586@monk.mps.ohio-state.edu>, + <199805151931.PAA23086@aatma.engin.umich.edu>, + <19980129002112Z13378-6931+226@scapa.cs.ualberta.ca> + Files: toke.c + + Change 1012 on 1998/05/19 by TimBunce@ig.co.uk + + Title: "Further SysV sem/msg fixes and removal of non-portable tests" + From: Andy Dougherty , Jarkko Hietaniemi + + Msg-ID: <199805182028.XAA15717@alpha.hut.fi>, + + Files: MANIFEST Configure config_h.SH perl.h doio.c t/op/ipcmsg.t + t/op/ipcsem.t + + Change 1011 on 1998/05/19 by TimBunce@ig.co.uk + + Title: "interp.sym is missing C after -e fix" + From: jan.dubois@ibm.net (Jan Dubois) + Msg-ID: <355d460d.7621669@smtp1.ibm.net> + Files: embed.h interp.sym + + Title: "Undo changed error message which breaks Tk" + From: Gurusamy Sarathy + Msg-ID: <199805161557.LAA08106@aatma.engin.umich.edu> + Files: pp_ctl.c + + Title: "Minor fixups to new -e script code" + From: Tim Bunce + Files: perl.c + + Title: "Remove old diags not relevant after -e fix" + From: Andy Dougherty , Gurusamy Sarathy + , Tim.Bunce@ig.co.uk (Tim Bunce) + Msg-ID: <199805172143.RAA07896@aatma.engin.umich.edu>, + <199805181335.OAA07008@toad.ig.co.uk>, + + Files: pod/perldiag.pod + + Title: "more examples for vec()" + From: Tom Phoenix + Msg-ID: + Files: pod/perlfunc.pod + + Title: ""make ok" (perlbug -ok) should not be interactive" + From: Hugo van der Sanden , Jarkko Hietaniemi + + Msg-ID: <199805160942.MAA20171@alpha.hut.fi>, + + Files: utils/perlbug.PL + + Change 999 on 1998/05/15 by TimBunce@ig.co.uk + + Title: "Update Porting/makerel script for perforce dir structure" + From: Tim Bunce + Files: Porting/makerel + + Change 996 on 1998/05/15 by TimBunce@ig.co.uk + + Title: "Negative array subscript unrecognized in regex" + From: Mark-Jason Dominus , + h.sanden@elsevier.nl (Hugo van der Sanden) + Msg-ID: <19980425040819.13828.qmail@plover.com>, + <199805151514.RAA04121@dorlas.elsevier.nl> + Files: t/base/lex.t toke.c + + Title: "Remove e_fp from toke.c after change 955" + From: Tim Bunce + Files: toke.c + + Change 995 on 1998/05/15 by TimBunce@ig.co.uk + + Title: "Fix -e security hole (no longer uses temp file)" + From: Tim Bunce + Files: embed.h perl.h perl.c + + Change 992 on 1998/05/15 by TimBunce@ig.co.uk + + Title: "install non-backwards compatible .pm files into archlib" + From: Tim Bunce + Files: installperl + + Title: "revert "Can't locate" message to original for maintenance" + From: Tim Bunce + Msg-ID: <199804240047.SAA24155@den-mdev1.co.csgsystems.com> + Files: pod/perldiag.pod pp_ctl.c + + Change 990 on 1998/05/15 by TimBunce@ig.co.uk + + Title: "Add tests for die $ref" + From: Graham Barr + Msg-ID: <355C6297.121B576B@ti.com> + Files: MANIFEST t/op/die.t + + Change 989 on 1998/05/15 by TimBunce@ig.co.uk + + Title: "Fix t/op/ipcmsg.t for Digital UNIX" + From: Jarkko Hietaniemi + Msg-ID: <199805151337.QAA01174@alpha.hut.fi> + Files: t/op/ipcmsg.t + + Change 986 on 1998/05/15 by TimBunce@ig.co.uk + + Title: "Patches for BeOS port of Perl, courtesy of Tom Spindler" + From: Jarkko Hietaniemi , Tom Spindler + Msg-ID: <199805042312.CAA09025@alpha.hut.fi> + Files: MANIFEST Configure config_h.SH hints/beos.sh pod/perlfunc.pod + Porting/Glossary README.beos beos/nm.c lib/Term/ReadLine.pm + plan9/config.plan9 pp_sys.c t/io/pipe.t vms/config.vms + win32/config.bc win32/config.vc win32/config_H.bc + win32/config_H.vc + + Change 985 on 1998/05/15 by TimBunce@ig.co.uk + + Title: "allow die $ref" + From: Graham Barr , Tim.Bunce@ig.co.uk (Tim Bunce) + Msg-ID: <199805151351.OAA01985@toad.ig.co.uk>, <355C3E67.AF25B9F7@ti.com> + Files: pp_ctl.c pp_sys.c util.c + + Title: "ExtUtils::Manifest could truncate files during "make dist"" + From: "James E Jurach Jr." , + koenig@kulturbox.de (Andreas J. Koenig) + Msg-ID: <199805111048.MAA02573@arrakis.int.ein.cz>, + + Files: lib/ExtUtils/Manifest.pm + + Title: "Autosplit doesn't like upper case letters in sub names on VMS" + From: Dan Sugalski + Msg-ID: <3.0.5.32.19980330152332.009cb130@osshe.edu> + Files: lib/AutoSplit.pm + + Title: "AutoSplit/AutoLoaded subs: give useful line numbers in warnings etc" + From: "Jesse N. Glick" , koenig@anna.mind.de (Andreas + J. Koenig), larry@wall.org (Larry Wall) + Msg-ID: <199709292015.NAA09627@wall.org>, <342FCDDF.23534195@sig.bsh.com>, + , + + Files: lib/AutoSplit.pm + + Change 984 on 1998/05/15 by TimBunce@ig.co.uk + + ------ CORE LANGUAGE ------ + + Title: "Fix close pipe returning status from wrong child" + From: "M.J.T. Guy" , kstar@chapin.edu@ig.co.uk () + Msg-ID: <199805142313.TAA02684@chapin.edu>, + + Files: t/io/pipe.t util.c + + Title: "Avoid English.pm triggering load of Errno.pm" + From: Tim Bunce + Files: gv.c lib/English.pm + + ------ DOCUMENTATION ------ + + Title: "Document child exit cause a parent sleep to end early" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perlfunc.pod + + ------ EXTENSIONS ------ + + Title: "BSD Platforms need STRUCT_TM_HASZONE for POSIX" + From: Andy Dougherty + Msg-ID: + Files: MANIFEST ext/POSIX/hints/bsdos.pl ext/POSIX/hints/freebsd.pl + ext/POSIX/hints/netbsd.pl ext/POSIX/hints/openbsd.pl + + Title: "MM_VMS.pm fixes for building external library" + From: Dan Sugalski + Msg-ID: <3.0.5.32.19980511160542.009dd480@ous.edu> + Files: lib/ExtUtils/MM_VMS.pm + + Title: "Appease picky DEC compiler in POSIX.xs" + From: Dan Sugalski + Msg-ID: <3.0.5.32.19980511161434.009f8bb0@ous.edu> + Files: ext/POSIX/POSIX.xs + + ------ TESTS ------ + + Title: "Fix constant detection in t/op/ipcsem.t for Digit UNIX" + From: Jarkko Hietaniemi + Msg-ID: <199805121212.PAA15351@alpha.hut.fi> + Files: t/op/ipcsem.t + + Title: "Fix doc bug for system() return value" + From: Daniel Grisinger + Msg-ID: + Files: pod/perlfunc.pod t/op/exec.t + + ------ UTILITIES ------ + + Title: "Avoid possible constant autoload loop" + From: "M.J.T. Guy" , Graham Barr , Ilya + Zakharevich + Msg-ID: <199805141910.PAA26994@monk.mps.ohio-state.edu>, + <355B475A.C5AD4B90@ti.com>, + + Files: utils/h2xs.PL + + Title: "Further improvements to h2ph.PL" + From: kstar@chapin.edu + Msg-ID: <199805130241.WAA25459@chapin.edu> + Files: utils/h2ph.PL + + Change 982 on 1998/05/15 by TimBunce@ig.co.uk + + Title: "comment init_postdump_symbols issues" + From: Tim Bunce + Files: perl.c + + Title: "Improve sort docs re SUBNAME" + From: circle@azstarnet.com + Msg-ID: <199804281828.LAA22737@andromeda.azstarnet.com> + Files: pod/perlfunc.pod + + Change 981 on 1998/05/15 by TimBunce@ig.co.uk + + Title: "Add hook to tie %! to external Errno.pm module (not included)" + From: Graham Barr + Msg-ID: <355080CD.1111BC81@ti.com> + Files: gv.c + + Change 971 on 1998/05/14 by TimBunce@ig.co.uk + + Title: "fix C (pp_refgen fumbles when G_SCALAR, no args)" + From: Gurusamy Sarathy + Msg-ID: <199805070402.AAA02858@aatma.engin.umich.edu> + Files: pp.c + + Change 970 on 1998/05/14 by TimBunce@ig.co.uk + + Title: "perlbug reformatted" + From: Dominic Dunlop , Hugo van der Sanden + + Msg-ID: <199805110954.LAA20367@dorlas.elsevier.nl>, + , + + Files: utils/perlbug.PL + + Change 965 on 1998/05/14 by TimBunce@ig.co.uk + + Title: "Sub declaration cost reduced from ~500 to ~100 bytes" + From: Ilya Zakharevich + Msg-ID: <199805050607.CAA02050@monk.mps.ohio-state.edu> + Files: gv.h gv.c op.c + + Change 949 on 1998/05/14 by TimBunce@ig.co.uk + + Title: "while($x=<>) no longer warns (implicit defined added)" + From: Nick Ing-Simmons + Msg-ID: <199805051035.LAA27365@pluto.tiuk.ti.com> + Files: MANIFEST op.c t/op/defins.t + + Change 946 on 1998/05/14 by TimBunce@ig.co.uk + + Title: "Fix PERL_DESTRUCT_LEVEL core dumps" + From: Gurusamy Sarathy + Msg-ID: <199805062301.TAA24599@aatma.engin.umich.edu> + Files: perl.c sv.c t/op/misc.t + + Change 944 on 1998/05/14 by TimBunce@ig.co.uk + + Title: "5.004_04-m2 Cleanup of test failures" + From: Gurusamy Sarathy + Msg-ID: <199805070416.AAA03082@aatma.engin.umich.edu> + Files: t/op/die_exit.t t/op/ipcmsg.t t/op/ipcsem.t t/op/taint.t + win32/config.bc win32/config.vc + + Change 922 on 1998/05/11 by TimBunce@ig.co.uk + + Assorted patches: + + ------ CORE LANGUAGE ------ + + Title: "incorrect return value for hv_iterinit" + From: Gurusamy Sarathy + Msg-ID: <199805031848.OAA20618@aatma.engin.umich.edu> + Files: pod/perlguts.pod hv.c + + ------ DOCUMENTATION ------ + + Title: "perlvar.pod buglet E" + From: Achim Bohnet + Msg-ID: <9805041415.AA22185@o09.xray.mpe.mpg.de> + Files: pod/perlvar.pod + + Title: "Improve docs for warning about code after an exec()" + From: "M.J.T. Guy" , Chaim Frenkel + + Msg-ID: , + + Files: pod/perlfunc.pod + + Title: "Remove dead code from pod2man" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/pod2man.PL + + Title: "tweak doc for C" + From: Gurusamy Sarathy + Msg-ID: <199805090017.UAA06888@aatma.engin.umich.edu> + Files: pod/perlfunc.pod + + Title: "Document integer pragma effect on % operator" + From: Gisle Aas + Msg-ID: + Files: pod/perlop.pod + + Title: "Reduce rm command line length in pod/Makefile" + From: Hugo van der Sanden + Msg-ID: <199805041423.QAA13199@dorlas.elsevier.nl> + Files: pod/Makefile + + ------ EXTENSIONS ------ + + Title: "Clarify Termios usage in POSIX.pod" + From: Rocco Caputo + Msg-ID: <199805101952.PAA12738@ns.netrus.net> + Files: ext/POSIX/POSIX.pod + + ------ LIBRARY ------ + + Title: "Fix File::Find::finddepth typo in trial 2 release" + From: koenig@kulturbox.de (Andreas J. Koenig) + Msg-ID: + Files: lib/File/Find.pm t/lib/filefind.t + + ------ PORTABILITY - GENERAL ------ + + Title: "Add Porting/patching.pod document" + From: Daniel Grisinger + Msg-ID: <199805030305.XAA16147@relay.pair.com> + Files: MANIFEST Porting/patching.pod + + Title: "hints/machten.sh: disable semctl(), align with devel version" + From: Dominic Dunlop + Msg-ID: + Files: hints/machten.sh + + Title: "Add VMS specifics to Porting/makerel" + From: Charles Bailey + Msg-ID: <01IWDK1LONRQ0026P0@cor.newman.upenn.edu>, + <199804271732.SAA13762@toad.ig.co.uk>, + <9804250212.AA27695@forte.com> + Files: Porting/makerel + + Change 913 on 1998/05/01 by TimBunce@ig.co.uk + + Update MANIFEST for trial 2. + (Porting/Contract lib/Tie/Handle.pm t/op/tiehandle.t) + + Change 912 on 1998/05/01 by TimBunce@ig.co.uk + + Add t/op/tiehandle.t as xtext to repository (see change 911) + + Change 911 on 1998/05/01 by TimBunce@ig.co.uk + + Title: "Add ERRSV, ERRHV, DEFSV and SAVE_DEFSV for XS 5.005 compatibility" + From: timbo@ig.co.uk (Tim Bunce) + Msg-ID: <199804200854.JAA01482@toad.ig.co.uk> + Files: perl.h + + Title: "Add WRITE & CLOSE to TIEHANDLE" + From: Graham Barr + Msg-ID: <34F63DC8.CA95670F@pobox.com> + Files: pod/perltie.pod lib/Tie/Handle.pm pp_sys.c t/op/tiehandle.t + + Change 910 on 1998/05/01 by TimBunce@ig.co.uk + + Title: "Add warning for Illegal hex digit" + From: Stephen P Potter , Stephen Potter + , Tim.Bunce@ig.co.uk (Tim Bunce) + Msg-ID: <199804232219.SAA02267@spp.users.ds.net>, + <199804271409.PAA12819@toad.ig.co.uk>, + <199804280307.WAA12332@psasolar.psa.pencom.com> + Files: pod/perldiag.pod util.c + + Title: "perl_call_method() bug fix (corrupt op pointer)" + From: "Alterman, Eugene" + Msg-ID: <510415F72ECFD111A31700A0C9B3CCDE3098@efx98digmasa.bremer-inc.com> + Files: perl.c + + Title: "Fix printf segmentation fault" + From: Hugo van der Sanden + Msg-ID: + Files: pp_hot.c + + Title: "Document changed local($a[$i],$b{$j}) behaviour re delete/splice" + From: Charles Bailey + Msg-ID: <01IVMVIHNZ36001NKH@cor.newman.upenn.edu> + Files: pod/perlsub.pod + + Change 909 on 1998/05/01 by TimBunce@ig.co.uk + + Title: "Change Ilya's do_binmode to K&R prototype and move to doio.c" + Files: doio.c util.c + + Change 907 on 1998/05/01 by TimBunce@ig.co.uk + + Title: "Runtime Carp verbosity without aliasing" + From: Joshua.Pritikin@NewYork2.dmg.deuba.com, Tim Bunce + Msg-ID: + Files: lib/Carp.pm + + Title: "Fix File::Basename to not untaint results (using new //t flag)" + From: Eric Hammond , Tom Phoenix + + Msg-ID: <199710070515.WAA00682@finity.citysearch.com>, + + Files: lib/File/Basename.pm + + Change 906 on 1998/04/28 by TimBunce@ig.co.uk + + ------ CORE LANGUAGE ------ + + Title: "5.004_04m5t1: Fix dangling references in LVs", "Fix dangling + references in LVs" + From: Spider Boardman + Msg-ID: <199804010541.AAA32615@Orb.Nashua.NH.US>, + <19980422164037.D29222@perl.org> + Files: embed.h keywords.h opcode.h perl.h proto.h doop.c global.sym mg.c + pp.c sv.c + + Title: "Fix SvGMAGIC typo in change 904" + Files: doop.c + + Change 905 on 1998/04/28 by TimBunce@ig.co.uk + + Regexp patches + + Title: "New regex flag //t to leave $1 etc. tainted" + From: Chip Salzenberg , + Tim Bunce + Msg-ID: <19980310192640.37826@cyprus> + Files: pod/perlop.pod pod/perlre.pod op.h dump.c mg.c pp_hot.c sv.c + t/op/taint.t toke.c + + Title: "Don't accidentally untaint target of s///" + From: Chip Salzenberg + Msg-ID: <19980310151756.24767@cyprus> + Files: pp_ctl.c pp_hot.c t/op/taint.t + + Title: "Allow but ignore embedded /...(?o).../ in regexp" + From: h.sanden@elsevier.nl (Hugo van der Sanden) + Msg-ID: <199804201243.OAA08244@dorlas.elsevier.nl> + Files: regcomp.c + + Change 904 on 1998/04/27 by TimBunce@ig.co.uk + + Assorted patches: + + ------ CORE LANGUAGE ------ + + Title: "Protect join() against double reads on undef and SvGMAGICALs" + From: Chip Salzenberg , Tim Bunce + + Msg-ID: <19980424080630.D13985@perl.org> + Files: doop.c + + Title: "Better error message for require failure" + From: epeschko@den-mdev1 (Ed Peschko) + Msg-ID: <199804240047.SAA24155@den-mdev1.co.csgsystems.com> + Files: pod/perldiag.pod pp_ctl.c + + Title: "fixes for various noises under PERL_DESTRUCT_LEVEL" + From: Gurusamy Sarathy + Msg-ID: <199804231926.PAA23969@aatma.engin.umich.edu> + Files: perl.c + + Title: "Fix nice_chunk memory leak" + From: Gurusamy Sarathy + Msg-ID: <199804052347.TAA15699@aatma.engin.umich.edu> + Files: sv.c + + Title: "-2.0 vs. -2 (was Number representations)" + From: Chip Salzenberg + Msg-ID: <19980309185652.11231@cyprus> + Files: op.c + + Title: "perl.c fixes for -DUNEXEC" + From: Matt Wette , Matthew R Wette + + Msg-ID: <199710152146.OAA07283@mr-ed.jpl.nasa.gov> + Files: perl.c + + ------ DOCUMENTATION ------ + + Title: "perlcall is Perl from C, not C from Perl" + From: Steve A Fink + Files: pod/perlembed.pod + + Title: "Clarify require "Foo::Bar" non-bareword issue" + From: Dominique Dumont + Msg-ID: <199804231527.AA153445256@ss7serv.grenoble.hp.com> + Files: pod/perlfunc.pod + + Title: "(repost) new text for perlsec", "new text for perlsec" + From: Tom Phoenix + Msg-ID: + Files: pod/perlsec.pod + + ------ EXTENSIONS ------ + + Title: "IO::Socket->socketpair broken (typo)" + From: Olaf Titz + Msg-ID: <19980425224535.2807.qmail@bigred.inka.de> + Files: ext/IO/lib/IO/Socket.pm + + Title: "NDBM_File man page needs Fcntl" + From: "Danny R. Faught" + Msg-ID: <199707011500.IAA00601@palrel3.hp.com> + Files: ext/NDBM_File/NDBM_File.pm + + ------ LIBRARY ------ + + Title: "Documentation discrepancy: pragmatic modules" + From: "M.J.T. Guy" , h.sanden@elsevier.nl (Hugo van der Sanden) + Msg-ID: <199804221525.RAA12695@dorlas.elsevier.nl>, + + Files: lib/strict.pm lib/subs.pm lib/vars.pm + + ------ PORTABILITY - GENERAL ------ + + Title: "Updated hints file for svr4" + From: Andy Dougherty + Msg-ID: + Files: hints/svr4.sh + + Title: "Pumpkin update -- shared libperl.so location" + From: Andy Dougherty + Msg-ID: + Files: Porting/pumpkin.pod + + Title: "perl compile fix for AIX 4.3" + From: Jens-Uwe Mager + Msg-ID: <199804261611.SAA34728@ans.helios.de> + Files: ext/DynaLoader/dl_aix.xs + + Title: "Dynaloader build on VMS", + From: pvhp@forte.com (Peter Prymmer), timbo@ig.co.uk (Tim Bunce) + Msg-ID: <199804271732.SAA13762@toad.ig.co.uk>, <9804250212.AA27695@forte.com> + Files: vms/descrip.mms + + ------ UTILITIES ------ + + Title: "Major update to h2ph.PL" + From: Billy + Msg-ID: + Files: utils/h2ph.PL + + Change 897 on 1998/04/23 by TimBunce@ig.co.uk + + Assorted patches: + + ------ CORE LANGUAGE ------ + + Title: "fix for "Unbalanced string table refcount"" + From: Gurusamy Sarathy + Msg-ID: <199804042251.RAA25527@aatma.engin.umich.edu> + Files: sv.c + + Title: "Allow more lenient switch processing" + From: "John L. Allen" + Msg-ID: <199803251638.LAA22664@gateway.grumman.com> + Files: perl.c + + Title: "Add fourth arg to substr: substr EXPR,OFFSET,LEN,REPLACEMENT" + From: Gisle Aas + Msg-ID: + Files: pod/perlfunc.pod Todo opcode.pl pp.c t/op/substr.t + + Title: "Odd number of elements in hash list." + From: Tom Phoenix + Msg-ID: + Files: MANIFEST pod/perldiag.pod pp.c pp_hot.c t/op/hashwarn.t + + Title: "another destruct_level fix" + From: Gurusamy Sarathy + Msg-ID: <199804030105.UAA04400@aatma.engin.umich.edu> + Files: hv.c + + Title: "bidirectional pipe warning blues" + From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + Msg-ID: <9804082151.AA20399@claudius.bfsec.bt.co.uk> + Files: doio.c + + Title: "stale pointers after realloc (MEXTEND in pp_print and pp_prtf)" + From: Malcolm Beattie + Msg-ID: <199801191107.LAA17979@sable.ox.ac.uk> + Files: pp_hot.c pp_sys.c + + Title: "unimplemented umask() should return undef not die" + From: kstar@chapin.edu (Kurt D. Starsinic) + Msg-ID: <199803120515.VAA08660@chapin.edu> + Files: pod/perlfunc.pod pp_sys.c + + Title: "warning for: bless $foo, """ + From: Joshua.Pritikin@NewYork2.dmg.deuba.com + Msg-ID: + Files: pod/perldiag.pod pp.c + + ------ DOCUMENTATION ------ + + Title: "Mention SWIG in perlxs.pod" + From: Steve A Fink + Msg-ID: + Files: pod/perlxs.pod + + Title: "fix-up of previous perlre.pod patch" + From: Ted Ashton + Msg-ID: <199803031540.KAA09388@ns.southern.edu> + Files: pod/perlre.pod + + Title: "long list of man page nitpicks" + From: Greg Bacon , Tom Christiansen + + Msg-ID: <199804221844.NAA08338@pluto.cs.uah.edu>, + <199804222204.QAA20805@jhereg.perl.com> + Files: pod/perlapio.pod pod/perlcall.pod pod/perldebug.pod pod/perldelta.pod + pod/perldiag.pod pod/perlembed.pod pod/perlfaq2.pod + pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq5.pod + pod/perlfaq7.pod pod/perlfaq8.pod pod/perlform.pod + pod/perlfunc.pod pod/perlguts.pod pod/perlipc.pod + pod/perllocale.pod pod/perlmodlib.pod pod/perlop.pod + pod/perlre.pod pod/perlref.pod pod/perlrun.pod + pod/perlstyle.pod pod/perlsub.pod pod/perlsyn.pod + pod/perltoot.pod pod/perlvar.pod pod/perlxs.pod + pod/pod2man.PL + + Title: "document that system() does not set $! when it fails" + From: "Mark R. Levinson" + Msg-ID: <199803011946.OAA31942@anaximander.dccs.upenn.edu> + Files: pod/perlfunc.pod + + Title: "Fix pod/roffitall execute permission" + From: lvirden@cas.org + Msg-ID: <1997Nov17.132031.2589892@cor.newman> + Files: pod/roffitall + + Title: "document when split ignores trailing empty fields" + From: Hugo van der Sanden + Msg-ID: + Files: pod/perlfunc.pod + + ------ EXTENSIONS ------ + + Title: "Buglet in Opcode.pm documentation" + From: Horst von Brand + Msg-ID: <199804170349.XAA32445@sleipnir.valparaiso.cl> + Files: ext/Opcode/Opcode.pm + + Title: "Failure to append to perllocal.pod should not be fatal" + From: koenig@kulturbox.de (Andreas J. Koenig) + Msg-ID: + Files: lib/ExtUtils/MM_Unix.pm + + Title: "Document that IO.pm does not load IO::Select etc" + From: Graham Barr + Msg-ID: <353B48F1.64E35A63@ti.com> + Files: ext/IO/IO.pm + + Title: "Install extensions with bootstrap (again) in $archlib" + From: Achim Bohnet , koenig@kulturbox.de (Andreas J. + Koenig) + Msg-ID: <9804061909.AA12675@o09.xray.mpe.mpg.de>, + + Files: lib/ExtUtils/Install.pm + + Title: "glibc2.0.6 missing MSG_* defines." + From: Andy Dougherty + Msg-ID: + Files: ext/Socket/Socket.xs + + ------ LIBRARY ------ + + Title: "Benchmark.pm: add run-for-some-time mode" + From: Jarkko Hietaniemi + Msg-ID: <199804080647.JAA15136@alpha.hut.fi> + Files: lib/Benchmark.pm + + Title: "Comments added to Carp.pm" + From: Andy Wardley , Chip Salzenberg + , Tom Christiansen + + Msg-ID: <19980422164242.E29222@perl.org>, + <199804222033.OAA17959@jhereg.perl.com>, + <980409182357.ZM21638@bandanna> + Files: lib/Carp.pm + + Title: "chat2.pl fix" + From: Charles Bailey + Msg-ID: <01IVMVF507PO001NKH@cor.newman.upenn.edu> + Files: lib/chat2.pl + + Title: "lib/Pod/Html.pm" + From: d-lewart@uiuc.edu (Daniel S. Lewart) + Msg-ID: <199710170718.DAA25472@staff1.cso.uiuc.edu>, + <199710180417.AAA19778@staff2.cso.uiuc.edu> + Files: lib/Pod/Html.pm + + Title: "ormaments method in Term/ReadLine.pm causes warning with string + arg." + From: hiroo.hayashi@computer.org + Msg-ID: <199804061519.AAA21907@mail.fb3.so-net.ne.jp> + Files: lib/Term/ReadLine.pm + + ------ OTHER CHANGES ------ + + Title: "ptags broken" + From: Ilya Zakharevich + Msg-ID: <199804120208.WAA29264@monk.mps.ohio-state.edu> + Files: emacs/ptags + + ------ PORTABILITY - WIN32 ------ + + Title: "win32 tweaks (signals and crypt support)" + From: Gurusamy Sarathy + Msg-ID: <199804170505.BAA06413@aatma.engin.umich.edu> + Files: perl.h win32/config.bc win32/config.vc win32/config_H.bc + win32/config_H.vc win32/win32.c + + ------ PORTABILITY - GENERAL ------ + + Title: "Add Social Contract (2nd Draft) as Porting/Contract" + From: Russ Allbery + Msg-ID: + Files: Porting/Contract + + Title: "Config: Irix 5 hints" + From: kstar@O2.chapin.edu + Msg-ID: <199804061712.NAA22823@O2.chapin.edu> + Files: hints/irix_5.sh + + Title: "VMS patches to 5.004_03" + From: Charles Bailey + Msg-ID: <01IVYJS0L8D200209B@cor.newman.upenn.edu> + Files: vms/vms.c + + Title: "hints/netbsd.sh - enable vfork" + From: Andy Dougherty + Msg-ID: + Files: hints/netbsd.sh + + ------ UTILITIES ------ + + Title: "support find2perl -follow" + From: Billy + Msg-ID: + Files: x2p/find2perl.PL + + Change 896 on 1998/04/22 by TimBunce@ig.co.uk + + Assorted patches: + + ------ CORE LANGUAGE ------ + + Title: "Additional regex-cache patch" + From: Chip Salzenberg + Msg-ID: <19980305104831.38100@cyprus> + Files: pp_ctl.c + + Title: "Conservative C<*x = undef> patch" + From: Chip Salzenberg + Msg-ID: <19980310163310.48509@cyprus> + Files: pod/perldiag.pod pod/perlfunc.pod pp.c sv.c t/op/gv.t + + Title: "Consider @ARGV to be plain files if inplace (-i)" + From: Chip Salzenberg + Msg-ID: <199802042106.QAA04082@nielsenmedia.com> + Files: doio.c + + Title: "Fix semctl for Linux, Sun and SVR4" + From: Graham Barr , lvirden@cas.org (Larry W. Virden, x2487) + Msg-ID: <3484247D.BB036D39@ti.com>, <9712021313.AA11495@cas.org> + Files: doio.c + + Title: "C entails using C, not C" + From: Gurusamy Sarathy + Msg-ID: <199803070149.UAA12217@aatma.engin.umich.edu> + Files: pod/perlcall.pod pod/perlembed.pod pod/perlguts.pod pod/perlxs.pod + doio.c doop.c ext/DB_File/DB_File.xs + ext/DynaLoader/dl_dld.xs ext/Opcode/Opcode.xs + ext/POSIX/POSIX.xs ext/Socket/Socket.xs gv.c + lib/ExtUtils/typemap mg.c os2/OS2/REXX/REXX.xs + win32/win32.c + + Title: "Make autouse -w-safe" + From: Ilya Zakharevich + Msg-ID: <199803030236.VAA13244@monk.mps.ohio-state.edu> + Files: lib/autouse.pm op.c sv.c + + Title: "Misleading error on close of unopened handle" + From: "M.J.T. Guy" + Msg-ID: + Files: doio.c + + Title: "Confusing error from perl -e "x'"" + From: Hans Mulder + Msg-ID: <1998Mar25.174320.2866352@cor.newman.upenn.edu> + Files: toke.c + + Title: "Add HAS_GNULIBC define" + From: Andy Dougherty + Msg-ID: + Files: config_H config_h.SH + + Title: "h_errno might not be an int" + From: Andy Dougherty + Msg-ID: + Files: pp_sys.c + + Title: "Revised taint hole closer", "Revised taint hole closer" + From: Chip Salzenberg , Ilya Zakharevich + + Msg-ID: <19980310222127.09350@cyprus>, + <199803110554.AAA29157@monk.mps.ohio-state.edu> + Files: doio.c + + Title: "SEGV compiling localised lexical in perl5.004_05t1" + From: Gurusamy Sarathy , h.sanden@elsevier.nl (Hugo + van der Sanden) + Msg-ID: <199803171530.QAA24053@dorlas.elsevier.nl>, + <199803171727.MAA05234@aatma.engin.umich.edu> + Files: op.c t/op/misc.t + + Title: "Stale SP in pp_substr" + From: Stephen McCamant + Msg-ID: + Files: pp.c + + Title: "Statement unlikely to be reached warning" + From: Hans Mulder + Msg-ID: <1997Dec24.171511.2683516@cor.newman> + Files: op.c + + Title: "Tainting propagates from nowhere" + From: Gurusamy Sarathy + Msg-ID: <199803140411.XAA09343@aatma.engin.umich.edu> + Files: pp.c + + Title: "two trivial tweaks to 5.004m5t1" + From: Gurusamy Sarathy + Msg-ID: <199803060553.AAA28461@aatma.engin.umich.edu> + Files: proto.h win32/Makefile + + Title: "unpacking negatives on Alpha" + From: Achim Bohnet + Msg-ID: <9710201503.AA24797@o09.xray.mpe.mpg.de> + Files: pp.c t/op/pack.t + + ------ LIBRARY AND EXTENSIONS ------ + + Title: "Cwd.pm: abs_path() and fast_abs_path() plus code merge" + From: Graham Barr + Msg-ID: <3482F365.4A0486BA@ti.com> + Files: lib/Cwd.pm + + Title: "Math/BigInt.pm, fixed use of undefined value." + From: abigail@fnx.com + Msg-ID: <19980313052452.27365.qmail@betelgeuse.wayne.fnx.com> + Files: lib/Math/BigInt.pm + + Title: "File::Find rewrite" + From: Ilya Zakharevich + Msg-ID: <199803052344.SAA01008@monk.mps.ohio-state.edu> + Files: lib/File/Find.pm + + Title: "efficient version of strict.pm" + From: koenig@anna.mind.de (Andreas J. Koenig) + Msg-ID: + Files: lib/strict.pm + + Title: "Socket occasional SEGV in pack_sockaddr_un" + From: Trevor Blackwell + Msg-ID: <199710281804.NAA09632@wagg.viaweb.com> + Files: ext/Socket/Socket.xs + + Title: "Warning on mis-use of 'use lib'" + From: "M.J.T. Guy" , + Tom Phoenix , + Chip Salzenberg + Msg-ID: <199801270435.XAA14147@cyprus.atlantic.net>, + , + + Files: lib/lib.pm + + Title: "bug in Class::Struct" + From: Tom Christiansen + Msg-ID: <199803290814.KAA05699@toy.perl.com> + Files: lib/Class/Struct.pm + + Title: "Allow POSIX to export nice()" + From: bkeelerx@iwa.dp.intel.com (Bruce J. Keeler) + Msg-ID: + Files: ext/POSIX/POSIX.pm + + Title: "'use Env' on WinNT/95 fails" + From: Gurusamy Sarathy + Msg-ID: <199803280511.AAA15933@aatma.engin.umich.edu> + Files: lib/Env.pm + + ------ OTHER CHANGES ------ + + Title: "mv-if-diff" + From: Robin Barker + Msg-ID: <14572.9803271806@tempest.cise.npl.co.uk> + Files: mv-if-diff + + ------ PORTABILITY - WIN32 ------ + + Title: "fix various problems with backticks on win32" + From: Gurusamy Sarathy + Msg-ID: <199803070705.CAA15945@aatma.engin.umich.edu> + Files: win32/config_h.PL win32/win32.c + + ------ TESTS ------ + + Title: "Fix bug in locale.t" + From: Jarkko Hietaniemi + Msg-ID: <199801042148.XAA08599@alpha.hut.fi> + Files: t/pragma/locale.t + + Change 887 on 1998/04/10 by TimBunce@ig.co.uk + + Assorted patches: + + ------ CORE LANGUAGE ------ + + Title: "Re: die exits with 0" + From: Robin Barker + Files: perl.c t/op/die_exit.t + + Title: "More toke.c commentary; fix oddity" + From: h.sanden@elsevier.nl (Hugo van der Sanden) + Msg-ID: <199803251022.LAA01308@dorlas.elsevier.nl> + Files: toke.c + + Title: "for semctl on solaris" + From: Graham Barr + Msg-ID: <34624B80.C014E841@ti.com> + Files: doio.c t/op/ipcmsg.t t/op/ipcsem.t + + ------ DOCUMENTATION ------ + + Title: "Add more 'see also's to perlre.pod.", "Perl regexp /g modifier bug" + From: Ilya Zakharevich , epeschko@den-mdev1 (Ed + Peschko), pjr@watcher.telstra.com.au (Peter Richardson) + Msg-ID: <199803050000.LAA11476@watcher.telecom.com.au>, + <199803050231.VAA19128@monk.mps.ohio-state.edu>, + <199803050605.XAA09785@den-mdev1.co.csgsystems.com> + Files: pod/perlre.pod + + ------ LIBRARY AND EXTENSIONS ------ + + Title: "BigFloat - small neagtive numbers cause panic" + From: Hugo van der Sanden + Msg-ID: <199711201325.NAA09732@crypt.compulink.co.uk> + Files: lib/Math/BigFloat.pm + + Title: "Update Getopt::Long to 2.16" + From: JVromans@Squirrel.nl (Johan Vromans), Johan Vromans + + Msg-ID: <13571.48089.726787.147769@plume.nl.compuware.com>, + <13572.6847.863219.973795@phoenix.squirrel.nl> + Files: lib/Getopt/Long.pm + + Title: "New Text::ParseWords" + From: pomeranz@netcom.com (Hal Pomeranz) + Msg-ID: <199710162118.OAA06275@netcom7.netcom.com> + Files: lib/Text/ParseWords.pm t/lib/parsewords.t + + Title: "Fixed Text/Wrap.pm bugs (2)" + From: Jacqui Caren + Msg-ID: <199709291548.QAA08645@toad.ig.co.uk> + Files: lib/Text/Wrap.pm + + Title: "Very *evil* File::CheckTree behavior! (now uses warn/die not + print/exit)" + From: Eryq , Randal Schwartz + Msg-ID: <34B542FD.190A@zeegee.com>, <8cen2i9k6f.fsf@gadget.cscaper.com> + Files: lib/File/CheckTree.pm + + ------ OTHER CHANGES ------ + + Title: "Add ./emacs/ptags" + From: Ilya Zakharevich + Msg-ID: <199803150847.DAA08196@monk.mps.ohio-state.edu> + Files: emacs/ptags + + ------ TESTS ------ + + Title: "Avoid stat test failure from build in /tmp (tmpfs)", "Build in /tmp" + From: Andy Dougherty , Greg Bacon + , pudge@pobox.com (Chris Nandor) + Msg-ID: <199710171616.LAA13435@crp-201.adtran.com>, + , + + Files: t/op/stat.t + + Title: "for failure with lib/timelocal" + From: "M.J.T. Guy" , jan.dubois@ibm.net (Jan Dubois) + Msg-ID: <34c78f61.2529827@smtp1.ibm.net>, + + Files: t/lib/timelocal.t + + Title: "Make "localhost" related failures more clear" + From: Paul Hoffman + Msg-ID: <199801201859.KAA05686@mail.proper.com> + Files: t/lib/io_sock.t t/lib/io_udp.t + + ------ UTILITIES ------ + + Title: "Let h2xs read multiple header files" + From: Andy Dougherty , Benjamin Sugars + + Msg-ID: , + + Files: utils/h2xs.PL + + Change 886 on 1998/04/10 by TimBunce@ig.co.uk + + Changes relating primarily to portability. + + ------ CORE LANGUAGE ------ + + Title: "5.004_55: Another round of OS/2 patches" + From: Ilya Zakharevich + Msg-ID: <199803050945.EAA20153@monk.mps.ohio-state.edu> + Files: hints/os2.sh pod/perlguts.pod cop.h perl.h proto.h README.os2 + global.sym lib/ExtUtils/MM_OS2.pm lib/File/Path.pm op.c + os2/Changes os2/Makefile.SHs os2/os2.c os2/perl2cmd.pl + perl.c pod/pod2man.PL pp_ctl.c pp_hot.c pp_sys.c + t/lib/filecopy.t util.c utils/perldoc.PL + + Title: "VMS: chdir() with empty arg list" + From: lane@duphy4.drexel.edu (Charles Lane) + Msg-ID: <980317125556.222041c7@DUPHY4.Physics.Drexel.Edu> + Files: pp_sys.c + + ------ LIBRARY AND EXTENSIONS ------ + + Title: "ExtUtils/MM_Unix.pm changed to use ld -rpath on IRIX" + From: "W. Phillip Moore" + Msg-ID: <199712011738.MAA21139@zappa.morgan.com> + Files: lib/ExtUtils/MM_Unix.pm + + Title: "[Linux] POSIX::_[PS]C_.+ bug (add HINT_SC_EXIST)" + From: Yutaka OIWA + Msg-ID: <199712251923.EAA08260@tjms1f.is.s.u-tokyo.ac.jp> + Files: ext/POSIX/hints/linux.pl ext/POSIX/POSIX.xs + + Title: "5.004_04-m1] Use HAS_GNULIBC in POSIX.xs" + From: Andy Dougherty + Msg-ID: + Files: ext/POSIX/POSIX.xs + + Title: ""ODBM_File.c", line 275: NULL undefined" + From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + Msg-ID: <9803091310.AA23264@claudius.bfsec.bt.co.uk> + Files: ext/ODBM_File/ODBM_File.xs + + ------ PORTABILITY - GENERAL ------ + + Title: "5.004_04 QNX getcwd" + From: Norton Allen + Msg-ID: <199802121838.NAA20452@dolores.harvard.edu>, + <199803061511.KAA22346@bottesini.harvard.edu> + Files: hints/qnx.sh lib/Cwd.pm t/op/magic.t + + Title: "hints/netbsd.sh d_setrgid d_setruid" + From: Jarkko Hietaniemi + Msg-ID: <199802281435.QAA10866@alpha.hut.fi> + Files: hints/netbsd.sh + + Title: "osname=unixware, osvers=2.03, archname=i386-unixware + d_casti32=undef" + From: Tom Hughes + Msg-ID: <465398da47%tom@compton.demon.co.uk> + Files: hints/svr4.sh + + Title: "hints/bsdos.sh patch for BSDI 3.1" + From: Jan-Pieter Cornet + Msg-ID: <6fbip6$3cp$1@xs1.xs4all.nl> + Files: hints/bsdos.sh + + Title: "Remove BIND_NOSTART from DynaLoader for HP" + From: Keong Lim + Msg-ID: <01BD1D03.53B65E90@sieplan2.sr.com.au> + Files: ext/DynaLoader/dl_hpux.xs + + Title: "Building Perl on AIX 4+ with shared libraries and dynamic loading" + From: Juan Gallego + Msg-ID: + Files: hints/aix.sh + + Title: "alpha-dec_osf 5.0" + From: Spider Boardman + Msg-ID: <199712232305.SAA08359@Orb.Nashua.NH.US> + Files: hints/dec_osf.sh + + Title: "Off-by-one error with OS2::PrfDB" + From: Ilya Zakharevich + Msg-ID: <199710170920.FAA00390@monk.mps.ohio-state.edu> + Files: os2/OS2/PrfDB/PrfDB.xs + + Title: "5.004_04-m1] Allow overrides in hints/openbsd.sh" + From: Andy Dougherty + Msg-ID: + Files: hints/openbsd.sh + + Title: "5.004_04-m1] Linux shouldn't use -lnet" + From: Andy Dougherty + Msg-ID: + Files: hints/linux.sh + + Title: "5.004_(04|63)] Close VMS security hole" + From: Charles Bailey + Msg-ID: <01IV6LRJCSSC0009C4@cor.newman.upenn.edu> + Files: vms/vms.c + + Title: "Re: Perl online documentation on OpenVMS" + From: pvhp@forte.com (Peter Prymmer) + Msg-ID: <9803192143.AA28120@forte.com> + Files: README.vms + + Title: "Perl5.004_04m4t4 *almost* makes it for VMS", "Updated + vms/perly_c.vms and vms/perly_h.vms" + From: Andy Dougherty , Dan Sugalski + , larry@wall.org (Larry Wall) + Msg-ID: <199710151650.JAA29185@wall.org>, + <3.0.3.32.19971014150404.02fdef78@osshe.edu>, + + Files: vms/perly_c.vms + + Title: "Updated, non-wordwrapped, patch to README.VMS" + From: Dan Sugalski + Msg-ID: <3.0.5.32.19980213133828.0092c870@osshe.edu> + Files: README.vms + + Title: "VMS patches to 5.004_03 (excluding installperl and timelocal.t)" + From: Charles Bailey + Msg-ID: <01INZT9G2LZS0006YW@cor.newman.upenn.edu> + Files: lib/File/Basename.pm lib/File/Path.pm vms/config.vms vms/descrip.mms + vms/genconfig.pl vms/test.com vms/vms.c vms/ext/Filespec.pm + vms/ext/filespec.t + + Title: "Re: VMSperl crashes on -Mblib argument" + From: bailey@newman.upenn.edu (Charles Bailey) + Msg-ID: <1997Dec10.004439.2635060@cor.newman> + Files: lib/blib.pm vms/vms.c + + Title: "hints/linux.sh (MkLinux / PPC)" + From: pudge@pobox.com (Chris Nandor) + Msg-ID: + Files: hints/linux.sh + + Title: "hpux.sh hints file clarification suggestion" + From: root@qad.com + Msg-ID: <199802192351.QAA09096@jhereg.perl.com> + Files: hints/hpux.sh + + Title: "new hints/solaris_2.sh" + From: "M.J.T. Guy" + Msg-ID: + Files: hints/solaris_2.sh + + Change 873 on 1998/04/03 by TimBunce@ig.co.uk + + Title: "FileHandle Documentation patch" + From: "Darren/Torin/Who Ever..." + Msg-ID: <87emzqo49g.fsf@perv.daft.com> + Files: lib/FileHandle.pm + + Change 872 on 1998/04/03 by TimBunce@ig.co.uk + + Documentation and documentation related patches: + + ------ BUILD PROCESS ------ + + Title: "Docs re /usr/bin/perl quasi-standard location" + From: Tom Phoenix + Msg-ID: + Files: INSTALL pod/perlrun.pod + + ------ DOCUMENTATION ------ + + Title: "/RFC|RFC-1305/ non-greedy" + From: Jan-Pieter Cornet + Msg-ID: <6epo02$c4r$1@xs1.xs4all.nl> + Files: pod/perlre.pod + + Title: "5.004_04: perlhist.pod, buildtoc, perltoc.pod" + From: Jarkko Hietaniemi + Msg-ID: <199802191543.RAA29231@alpha.hut.fi> + Files: pod/perl.pod pod/perlhist.pod pod/perltoc.pod pod/buildtoc + + Title: "5.004_04: pod/perlfunc.pod: i18n example for localtime()" + From: Jarkko Hietaniemi + Msg-ID: <199711141555.RAA18875@alpha.hut.fi> + Files: pod/perlfunc.pod + + Title: "typo-fix and suggestion for perlguts.pod" + From: h.sanden@elsevier.nl (Hugo van der Sanden) + Msg-ID: <199803051543.QAA03097@dorlas.elsevier.nl> + Files: pod/perlguts.pod + + Title: "perlfunc/syscall curiosity" + From: Roderick Schertler , Tkil + + Msg-ID: <199711302259.PAA02134@reptile.scrye.com>, + + Files: pod/perlfunc.pod + + Title: "Document sprintf %#x behaviour for zero value" + From: ilya@math.ohio-state.edu (Ilya Zakharevich) + Msg-ID: <1997Nov5.185959.2539604@cor.newman> + Files: pod/perlfunc.pod + + Title: "NUL termination (was Re: STOP THE PRESSES)" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perlguts.pod + + Title: "Typo fix." + From: abigail@fnx.com + Msg-ID: <19971101120114.1030.qmail@betelgeuse.wayne.fnx.com> + Files: pod/perlop.pod pod/perlvar.pod + + Title: "5.004_63 perlrun.pod: _DEBUG_MSTATS" + From: Achim Bohnet + Msg-ID: <9803181940.AA22587@o09.xray.mpe.mpg.de> + Files: pod/perlrun.pod + + Title: "Re: Conservative C<*x = undef> patch" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perltrap.pod + + Title: "perlfunc.pod for flock()" + From: "Jeremy D. Zawodny" + Msg-ID: <3.0.5.32.19971118203119.00a723e0@woody.wcnet.org> + Files: pod/perlfunc.pod + + Title: "buglet: 'perltoc' not mentioned in perl.pod" + From: Tkil + Msg-ID: <19971127035036.17668.qmail@scrye.com> + Files: pod/perl.pod + + Title: "for() and map() peculiarity" + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perlsyn.pod + + Title: "Re: new text for perlsec" + From: Tom Phoenix + Msg-ID: + Files: pod/perlsec.pod + + Title: "perldsc's debugger x command" + From: Roderick Schertler + Msg-ID: <10669.878352893@eeyore.ibcinc.com> + Files: pod/perldsc.pod + + Title: "perlre.pod" + From: Ted Ashton + Msg-ID: <199802271501.KAA09279@ns.southern.edu> + Files: pod/perlre.pod + + Title: "Re: printf and $\", "printf and $\" + From: Roderick Schertler , Tom Phoenix + , nag + Msg-ID: <199711141918.TAA08096@flirble.org>, + , + Files: pod/perlfunc.pod + + Title: "recv() typo" + From: Roderick Schertler + Msg-ID: <12064.877012073@eeyore.ibcinc.com> + Files: pod/perlfunc.pod + + Title: "truncate return value" + From: Roderick Schertler + Msg-ID: <5490.878337883@eeyore.ibcinc.com> + Files: pod/perlfunc.pod + + Title: "update to perlbook.pod" + From: "Nathan V. Patwardhan" , Randal Schwartz + , Stephen Potter + , Tom Phoenix + + Msg-ID: <199803241354.HAA23938@psasolar.psa.pencom.com>, + <199803241441.OAA01261@mediaone.net>, + <8clnu0i05k.fsf@gadget.cscaper.com>, + + Files: pod/perlbook.pod + + Title: "utime documentation" + From: "Brandon S. Allbery KF8NH" , "M.J.T. Guy" + + Msg-ID: <199802180256.VAA11369@speaker.kf8nh.apk.net>, + + Files: pod/perlfunc.pod + + Title: "(well, doc patch) use of // requires successful match" + From: Roderick Schertler + Msg-ID: + Files: pod/perlop.pod + + ------ LIBRARY AND EXTENSIONS ------ + + Title: "MakeMaker PM doc patch and a DIR buglet" + From: Achim Bohnet + Msg-ID: <9711101050.AA13868@o09.xray.mpe.mpg.de> + Files: lib/ExtUtils/MakeMaker.pm + + Title: "bareword clarification for constant.pm" + From: Roderick Schertler + Msg-ID: <6460.878143077@eeyore.ibcinc.com> + Files: lib/constant.pm + + Title: "integer rand - bug or feature?" + From: Roderick Schertler + Msg-ID: + Files: lib/integer.pm + + ------ OTHER CHANGES ------ + + Title: "FileHandle Documentation patch" + From: "Darren/Torin/Who Ever..." + Msg-ID: <87emzqo49g.fsf@perv.daft.com> + + Title: "perl5.004_61 myconfig updates" + From: Andy Dougherty + Msg-ID: + Files: myconfig + + Title: "small fixups in pod2latex.PL" + From: "Darren/Torin/Who Ever..." + Msg-ID: <873eg6o3v2.fsf@perv.daft.com> + + ------ PORTABILITY - GENERAL ------ + + Title: "Misc doc fixes for README.VMS" + From: Dan Sugalski + Msg-ID: <3.0.5.32.19980121113134.00924a20@osshe.edu> + Files: README.vms + + Title: "moved DynaLib" + From: John Tobey + Msg-ID: <199710182332.XAA21630@remote212> + Files: ext/DynaLoader/DynaLoader.pm.PL + + ------ UTILITIES ------ + + Title: "Searching for FAQs (patch to perldoc)" + From: Piers Cawley , Russ Allbery + Msg-ID: , + + Files: utils/perldoc.PL + + Title: "perldoc" + From: Ted Ashton + Msg-ID: <199802271510.KAA10506@ns.southern.edu> + Files: utils/perldoc.PL + + Title: "perldoc -f not using pod2man" + From: Russ Allbery + Msg-ID: + Files: utils/perldoc.PL + + Title: "perldoc -m should not require pod" + From: Robin Houston + Msg-ID: <199803241319.NAA24777@stringfellow.guardian.co.uk> + Files: utils/perldoc.PL + + Title: "small fix for perldoc in perl 5.004_04" + From: Julian Yip + Msg-ID: + Files: utils/perldoc.PL + + Change 764 on 1998/03/05 by TimBunce@ig.co.uk + + APPLLIB_EXP now has arch and version dirs added to @INC + + Change 761 on 1998/03/05 by TimBunce@ig.co.uk + + Title: "properly refcount localization, fix C" + From: Gurusamy Sarathy + Msg-ID: <199802191207.MAA10742@toad.ig.co.uk> + Files: av.c hv.c scope.c t/op/local.t + + Change 758 on 1998/03/04 by TimBunce@ig.co.uk + + perldoc -f now uses pager if text is too long for screen + + Change 757 on 1998/03/04 by TimBunce@ig.co.uk + + Added OpenBSD hint file from + Document 'warn with no args' behaviour, from + + Change 756 on 1998/03/04 by TimBunce@ig.co.uk + + Fix for new gnulibc stdio.h when using sfio+perlio + + Change 755 on 1998/03/04 by TimBunce@ig.co.uk + + Fixed typo in vms/ext/Stdio/Stdio.pm AUTOLOAD + Added details of split in scalar context to perlfunc.pod + + Change 754 on 1998/03/04 by TimBunce@ig.co.uk + + Updated perl -v info to include reference to docs and home page. + + Change 753 on 1998/03/04 by TimBunce@ig.co.uk + + Updated hints/bsdos.sh for BSD/OS 3.1 + Fixed typo in pod/perlsyn.pod + Added workaround for old gmake in ext/SDBM_File/sdbm/Makefile.PL + Fixed typo in ext/GDBM_File/GDBM_File.pm + + Change 752 on 1998/03/04 by TimBunce@ig.co.uk + + Changed bug address in README to perlbug@perl.com + Changed Copyright in perl.c to 1998 + Added op/pos.t test from Robin Houston + + Change 751 on 1998/03/04 by TimBunce@ig.co.uk + + Make t/comp/require.t and t/lib/ph.t executable in repository + + Change 750 on 1998/03/04 by TimBunce@ig.co.uk + + Added dTHR definition to ease backwards compatibility for XS + source code from 5.005. + + Change 749 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "rename local 'op' variables to 'o'", #F114 + From: Gurusamy Sarathy + Files: op.h opcode.h proto.h dump.c op.c opcode.pl pp_ctl.c run.c scope.c + toke.c + + Change 748 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "consolidated win32 patch", #F112 + From: Gurusamy Sarathy + Files: MANIFEST pod/perlfaq2.pod pod/perlrun.pod win32/include/sys/socket.h + EXTERN.h INTERN.h dosish.h lib/ExtUtils/Command.pm + lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Win32.pm + lib/ExtUtils/Mksymlists.pm lib/File/DosGlob.pm t/TEST + t/harness win32/win32.h win32/win32iop.h README.win32 + doio.c installhtml installperl pp_sys.c win32/Makefile + win32/config.bc win32/config.vc win32/config_H.bc + win32/config_H.vc win32/config_h.PL win32/config_sh.PL + win32/dl_win32.xs win32/makedef.pl win32/makefile.mk + win32/perllib.c win32/runperl.c win32/win32.c + win32/win32sck.c win32/bin/perlglob.pl x2p/a2p.h x2p/a2p.c + x2p/a2py.c + + Change 747 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "initialize @INC in ph.t, and fix up MANIFEST", #F111 + From: Gurusamy Sarathy + Files: MANIFEST t/lib/ph.t + + Change 746 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "properly save STDOUT during system() in debugger", #F110 + From: Jason Smith + Files: lib/perl5db.pl + + Change 745 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "generate DynaLoader.pm at build time", #F109 + From: Achim Bohnet + Msg-ID: <9802111938.AA26224@o09.xray.mpe.mpg.de> + Files: MANIFEST ext/DynaLoader/DynaLoader.pm.PL ext/DynaLoader/Makefile.PL + + Change 744 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "Install extensions with bootstrap in $archlib", #F108 + From: koenig@anna.mind.de (Andreas J. Koenig), koenig@kulturbox.de (Andreas + J. Koenig) + Msg-ID: + Files: lib/ExtUtils/Install.pm + + Change 743 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "Pod::Html trips over "C<0>"", #F107 + From: Chip Salzenberg + Files: lib/Pod/Html.pm + + Change 742 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "5.004_58 | _04: pod2*,perlpod: L", #F106 + From: Achim Bohnet + Msg-ID: <9802111629.AA00595@o09.xray.mpe.mpg.de> + Files: pod/perlpod.pod lib/Pod/Html.pm lib/Pod/Text.pm pod/pod2man.PL + + Change 741 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "New patch for $^E==GetLastError() under Win32", #F105 + From: Gurusamy Sarathy , Tye McQueen + , ilya@math.ohio-state.edu (Ilya + Zakharevich) + Msg-ID: <199801040630.AA29298@metronet.com>, + <199801041826.NAA11568@aatma.engin.umich.edu>, + <1998Jan4.130412.2719461@cor.newman> + Files: pod/perlfunc.pod pod/perlvar.pod doio.c lib/dumpvar.pl lib/perl5db.pl + win32/win32.h mg.c util.c win32/makedef.pl win32/win32.c + + Change 740 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "5.004_56: Patch to Tie::Hash and docs", #F104 + From: Ilya Zakharevich + Msg-ID: <199801120134.UAA05437@monk.mps.ohio-state.edu> + Files: pod/perlfunc.pod lib/Tie/Hash.pm + + Change 739 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "more doc for perldoc", #F103 + From: Gurusamy Sarathy + Files: utils/perldoc.PL + + Change 738 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "Make perldoc look for an index file ", #F102 + From: Gisle Aas + Msg-ID: <199801221220.NAA22902@furu.g.aas.no> + Files: utils/perldoc.PL + + Change 737 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "perldoc -F filename", #F101 + From: Ilya Zakharevich + Msg-ID: <199712120037.TAA00176@math.mps.ohio-state.edu> + Files: utils/perldoc.PL + + Change 736 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "sv_grow can fail for HAS_64K_LIMIT systems", #F100 + From: Gisle Aas + Msg-ID: + Files: sv.c + + Change 735 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "Benchmark.pm: timethese corrupts $_", #F099 + From: abigail@fnx.com + Msg-ID: <19980201114609.7779.qmail@betelgeuse.wayne.fnx.com> + Files: lib/Benchmark.pm + + Change 734 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "STRANGE_MALLOC should test failed alloc", #F098 + From: Gisle Aas + Msg-ID: <199802021406.PAA03285@furu.g.aas.no> + Files: hv.c + + Change 733 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "support caseless %ENV", #F097 + From: Gurusamy Sarathy + Files: hv.c t/op/magic.t win32/win32.h + + Change 732 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "newer cperl-mode.el (from 5.004_60)", #F096 + From: Ilya Zakharevich + Files: emacs/cperl-mode.el + + Change 731 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "Handle set magic on xsub OUTPUT args, add API functions that handle + magic", #F095 + From: Gurusamy Sarathy + Msg-ID: <199801190409.XAA26710@aatma.engin.umich.edu> + Files: pod/perlguts.pod pod/perlxs.pod embed.h proto.h sv.h global.sym + lib/ExtUtils/xsubpp sv.c + + Change 730 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "Fix flawed cleanup when signal handlers are not defined", #F094 + From: Gurusamy Sarathy + Msg-ID: <199710290106.UAA11485@aatma.engin.umich.edu> + Files: mg.c + + Change 729 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "Tests for C", #F093 + From: Hugo van der Sanden + Msg-ID: <199711021247.MAA01743@crypt.compulink.co.uk> + Files: t/op/sort.t + + Change 728 on 1998/03/04 by TimBunce@ig.co.uk + + Title: "Make search.pl work on win32", #F092 + From: Gurusamy Sarathy + Files: win32/bin/search.pl + + Change 721 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix spurious perldoc warnings on DOSISH platforms", #F091 + From: Molnar Laszlo + Msg-ID: <34475659.1AA69855@cdata.tvnet.hu> + Files: utils/perldoc.PL + + Change 720 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Make ExtUtils::MM_Unix::fixin() do something meaningful on win32", + #F090 + From: Gurusamy Sarathy + Msg-ID: <199801070016.TAA17766@aatma.engin.umich.edu> + Files: lib/ExtUtils/MM_Unix.pm + + Change 719 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix inconsistent case $ENV{Path} (vs $ENV{PATH})", #F089 + From: Gurusamy Sarathy + Files: lib/FindBin.pm + + Change 718 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix File::Find's longstanding confusion about win32 being like VMS", + #F088 + From: Gurusamy Sarathy + Msg-ID: <199802020459.XAA04964@aatma.engin.umich.edu> + Files: lib/File/Find.pm + + Change 717 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "do_postponed breaks with multiple interpreters", #F087 + From: Gurusamy Sarathy + Msg-ID: <199710290316.WAA15888@aatma.engin.umich.edu> + Files: op.c + + Change 716 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Make warning on C optional, add to perl{diag,delta}.pod", + #F086 + From: Gurusamy Sarathy + Files: pod/perldelta.pod pod/perldiag.pod toke.c + + Change 715 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Pod::Html bug and fix: missing in index", #F085 + From: Gurusamy Sarathy + Msg-ID: <199802192314.SAA23326@aatma.engin.umich.edu> + Files: lib/Pod/Html.pm + + Change 714 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "New pod: perlhist", #F084 + From: Jarkko Hietaniemi + Msg-ID: <199802191556.RAA09578@alpha.hut.fi> + Files: MANIFEST pod/perl.pod pod/perlhist.pod pod/perltoc.pod pod/buildtoc + + Change 713 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix restoration of locals on scope unwinding", #F083 + From: Gurusamy Sarathy + Msg-ID: <199802110515.AAA23700@aatma.engin.umich.edu> + Files: pp_ctl.c t/op/local.t + + Change 712 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "after an eval-ed bad require, requiring a string ref SEGVs", #F082 + From: Gurusamy Sarathy + Msg-ID: <199802102349.SAA16001@aatma.engin.umich.edu> + Files: pp_ctl.c + + Change 711 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix seg fault on eval/require and syntax errors", #F081 + From: Gurusamy Sarathy + Msg-ID: <199802102321.SAA15346@aatma.engin.umich.edu> + Files: MANIFEST scope.h op.c pp_ctl.c scope.c t/comp/require.t toke.c + + Change 710 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "5.004_58: the locale.t problem in IRIX", #F080 + From: Jarkko Hietaniemi + Msg-ID: <199802091747.TAA01735@alpha.hut.fi> + Files: t/pragma/locale.t + + Change 709 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "sv_setnv will upgrade SVt_NV to SVt_PVNV", #F079 + From: Gisle Aas + Msg-ID: + Files: sv.c + + Change 708 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Eliminate double warnings under C", #F077 + From: "M.J.T. Guy" + Msg-ID: + Files: gv.c op.c toke.c + + Change 707 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix infinite loop on unlink() failure in File::Path::rmtree()", + #F076 + From: Murray Nesbitt , Tim Bunce + Msg-ID: <199802061100.LAA16423@toad.ig.co.uk> + Files: lib/File/Path.pm + + Change 706 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Update of h2ph", #F075 + From: kstar@www.chapin.edu (Kurt D. Starsinic) + Msg-ID: <199802051354.FAA11452@www.chapin.edu> + Files: t/lib/ph.t utils/h2ph.PL + + Change 705 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix AutoLoader for deep packages", #F074 + From: Zachary Miller + Msg-ID: <199710092348.SAA02108@zappy.er.usgs.gov> + Files: lib/AutoLoader.pm + + Change 704 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix order of warnings for misplaced subscripts", #F073 + From: Hugo van der Sanden + Msg-ID: <199710131023.LAA16796@crypt.compulink.co.uk> + Files: op.c + + Change 703 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Make recursive lexical analysis more robust", #F072 + From: Ilya Zakharevich and Chip Salzenberg + Msg-ID: <199710160102.VAA28817@monk.mps.ohio-state.edu> + Files: toke.c + + Change 702 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix random whitespace errors in docs", #F070 + From: Roderick Schertler + Msg-ID: <12726.877706444@eeyore.ibcinc.com> + Files: pod/perlfunc.pod pod/checkpods.PL + + Change 701 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix line numbers after here documents in eval STRING", #F069 + From: Ilya Zakharevich + Msg-ID: <199710241745.NAA08166@monk.mps.ohio-state.edu> + Files: toke.c + + Change 700 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix SEGV from combining caller and C", #F068 + From: James Duncan , Nicholas Clark + + Msg-ID: <199710241248.NAA00163@flirble.org>, + + Files: pp_ctl.c sv.c + + Change 699 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Don't fold string comparison under C", #F067 + From: Jarkko Hietaniemi + Msg-ID: <199711151506.RAA26287@alpha.hut.fi> + Files: op.c + + Change 698 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix SEGV on constant at end of sort block", #F066 + From: Administration + Msg-ID: <199711170838.JAA26073@thetis.fi.muni.cz> + Files: op.c + + Change 697 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Allow C to mean C", #F065 + From: Chip Salzenberg + Files: op.c + + Change 696 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix extension version mismatch message", #F064 + From: Chip Salzenberg + Files: XSUB.h + + Change 695 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Better handle and test struct tm of Linux and SunOS", #F063 + From: Andy Dougherty + Msg-ID: + Files: MANIFEST ext/POSIX/hints/linux.pl ext/POSIX/hints/sunos_4.pl + hints/linux.sh hints/sunos_4_1.sh t/lib/posix.t + + Change 694 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix doc bug in getservbyname() examples", #F062 + From: Tom Christiansen + Files: ext/Socket/Socket.pm + + Change 693 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Kill warning about parameter type", #F061 + From: Chip Salzenberg + Files: op.c + + Change 692 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Socket occasional SEGV", #F060 + From: Trevor Blackwell + Msg-ID: <199710281804.NAA09632@wagg.viaweb.com> + Files: ext/Socket/Socket.xs + + Change 691 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Avoid SEGV from local($@)", #F059 + From: Gurusamy Sarathy + Msg-ID: <199710290251.VAA14362@aatma.engin.umich.edu> + Files: pp_ctl.c + + Change 690 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Don't use broken pad_reset() (was Re: Perl bug in 5.004_03 )", #F058 + From: Gurusamy Sarathy + Msg-ID: <199710300036.TAA01004@aatma.engin.umich.edu> + Files: op.c + + Change 689 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Use STMT_{START,END} in XSRETURN", #F057 + From: Gurusamy Sarathy + Msg-ID: <199710300245.VAA04244@aatma.engin.umich.edu> + Files: XSUB.h + + Change 688 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Re: Sort grammar bug", #F056 + From: Gurusamy Sarathy + Msg-ID: <199711011946.OAA18882@aatma.engin.umich.edu> + Files: toke.c + + Change 687 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Document indirect object cases for exec(), system()", #F055 + From: Dominic Dunlop + Msg-ID: + Files: pod/perlfunc.pod + + Change 686 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Update docs on tr///", #F054 + From: Tom Phoenix + Msg-ID: + Files: pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod + pod/perllocale.pod pod/perlmod.pod pod/perlop.pod + pod/perlstyle.pod toke.c + + Change 685 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Re: perlop bitwise & | ^ documentation", #F053 + From: Tom Phoenix + Msg-ID: + Files: pod/perlop.pod + + Change 684 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix SEGV on C<*glob{'SCALAR','ARRAY'}>", #F052 + From: "Joseph N. Hall" + Msg-ID: <199711110552.WAA12613@gadget.cscaper.com> + Files: perly.c perly.c.diff perly.y vms/perly_c.vms + + Change 683 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "for perlguts.pod: document sv_derived_from, sv_vcatpfn and + sv_vsetpfn", #F051 + From: jan.dubois@ibm.net (Jan Dubois) and Chip Salzenberg + Msg-ID: <346ae970.7444534@smtp1.ibm.net> + Files: pod/perlguts.pod + + Change 682 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "5.004_04: locale startup failure (at last) documented", #F050 + From: Jarkko Hietaniemi + Msg-ID: <199711172054.WAA08261@alpha.hut.fi> + Files: INSTALL pod/perldiag.pod pod/perllocale.pod + + Change 681 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Cope with lack of args in Fcntl::AUTOLOAD", #F049 + From: Jerome Abela + Msg-ID: <19971120183248.23588@coredump.hsc.fr> + Files: ext/Fcntl/Fcntl.pm + + Change 680 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Commenting toke.c", #F048 + From: gnat@frii.com + Msg-ID: <199801082138.OAA14186@prometheus.frii.com> + Files: toke.c + + Change 679 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Re: 5.004_04 vec() fails with 32-bit values", #F047 + From: "M.J.T. Guy" + Msg-ID: + Files: pod/perlguts.pod pp.c t/op/vec.t + + Change 678 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "A few perl5.004_03 bugs", #F046 + From: Hugo van der Sanden + Msg-ID: <199801221211.MAA05315@crypt.compulink.co.uk> + Files: mg.c t/op/magic.t + + Change 677 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Faster, cleaner av_unshift() ", #F045 + From: Gisle Aas + Msg-ID: <199801221850.TAA23111@furu.g.aas.no> + Files: av.c + + Change 676 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "New hints/solaris2.sh", #F044 + From: Stephen Zander + Msg-ID: <87oh12y458.fsf@wsuse5.mckesson.com> + Files: hints/solaris_2.sh + + Change 675 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Refresh Complex.pm and test", #F043 + From: Jarkko Hietaniemi + Msg-ID: <199802051608.SAA20262@alpha.hut.fi> + Files: lib/Math/Complex.pm t/lib/complex.t + + Change 674 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix (\@@) proto", #F042 + From: "Joseph N. Hall" + Msg-ID: <199801240132.SAA25111@gadget.cscaper.com> + Files: op.c t/comp/proto.t + + Change 673 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Allow empty BLOCK in code", #F041 + From: Vladimir Alexiev + Msg-ID: <19980129002112Z13378-6931+226@scapa.cs.ualberta.ca> + Files: toke.c + + Change 672 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix name of $Foo::{'Bar::'}: '*Foo::Bar::'", #F040 + From: Chip Salzenberg + Files: gv.c t/op/gv.t + + Change 671 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Keep accurate reference count on globs' stashes", #F038 + From: Gisle Aas + Msg-ID: + Files: gv.c sv.c + + Change 670 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Avoid memory allocation in gv_fetchpv(), for speed", #F037 + From: Chip Salzenberg + Files: gv.c + + Change 669 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Make Configure less negative about PerlIO", #F036 + From: Chip Salzenberg + Msg-ID: <199801312323.SAA15237@cyprus.atlantic.net> + Files: Configure + + Change 668 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix (mostly) pseudo-same-REs due to embedded NULs", #F035 + From: Martin Plechsmid + Msg-ID: <199802021217.NAA05230@albert.karlin.mff.cuni.cz> + Files: pp_ctl.c + + Change 667 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Make Getopt::Long avoid $&, $`, $'", #F034 + From: Irving Reid + Msg-ID: <98Feb3.005102est.11655@janus.tor.securecomputing.com> + Files: lib/Getopt/Long.pm + + Change 666 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "adding the newSVpvn API function", #F033 + From: Matthias Ulrich Neeracher + Msg-ID: <199801310532.GAA23798@solar.ethz.ch> + Files: pod/perlguts.pod pod/perltoc.pod proto.h global.sym sv.c + + Change 665 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Support C as function-blind bearword", #F032 + From: Chip Salzenberg + Files: toke.c + + Change 664 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Re-optimize character classes", #F031 + From: Chip Salzenberg + Files: regcomp.h regcomp.c regexec.c + + Change 663 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix C which needed ENTER/LEAVE", #F030 + From: dfh@dwroll.lucent.com (D461-David_F_Haertig(Dave)83040) + Msg-ID: + Files: op.c t/op/local.t + + Change 662 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Dramatically improve performance of // with parens or $&", #F029 + From: Chip Salzenberg + Files: cop.h perl.h proto.h regexp.h gv.c interp.sym perl.c pp.c pp_ctl.c + pp_hot.c regexec.c scope.c + + Change 661 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Don't warn on $x{shift}, ne => 1, or -f => 1", #F028 + From: Chip Salzenberg + Files: toke.c + + Change 660 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Protect against weirdness with unreal @_ in C", #F027 + From: Chip Salzenberg + Files: scope.c + + Change 659 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix C", #F026 + From: Hugo van der Sanden + Msg-ID: <199711021331.NAA01826@crypt.compulink.co.uk> + Files: sv.c t/op/sprintf.t + + Change 658 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Tiny core patch for source filters", #F025 + From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + Msg-ID: <9711202312.AA02937@claudius.bfsec.bt.co.uk> + Files: toke.c + + Change 657 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Here-doc in s///e (was: Bug)", #F024 + From: Hugo van der Sanden + Msg-ID: <199711221445.OAA14153@crypt.compulink.co.uk> + Files: t/base/lex.t toke.c + + Change 656 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix duplicate warnings on C<-e undef>", #F023 + From: Hugo van der Sanden + Msg-ID: <199711221252.MAA14000@crypt.compulink.co.uk> + Files: doio.c t/pragma/warn-1global + + Change 655 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix '*' prototype", #F022 + From: Ilya Zakharevich + Msg-ID: <199711212225.RAA00755@monk.mps.ohio-state.edu> + Files: toke.c + + Change 654 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "File::Find bugs (and patches)", "File::Find bugs & patches", #F021 + From: "Conrad E. Kimball" + Msg-ID: <199711260703.XAA21257@mailgate2.boeing.com> + Files: lib/File/Find.pm + + Change 653 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix typo: FORM{,AT}LINE", #F020 + From: Chip Salzenberg + Files: sv.c + + Change 652 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix use of unref mem when blessed object goes out of scope", #F019 + From: Gurusamy Sarathy + Msg-ID: <199711282326.SAA15090@aatma.engin.umich.edu> + Files: scope.c + + Change 651 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix C", #F018 + From: Stephane Payrard + Msg-ID: <199712040054.BAA04612@www.zweig.com> + Files: op.c t/op/my.t + + Change 650 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "enhanced "use strict" warning", #F017 + From: Tkil + Msg-ID: <199712040938.CAA07628@reptile.scrye.com> + Files: gv.c t/pragma/strict-subs t/pragma/strict-vars + + Change 649 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "eval of sub gives spurious "uninitialised" warning", #F016 + From: Gurusamy Sarathy + Msg-ID: <199712061025.FAA14396@aatma.engin.umich.edu> + Files: pod/perldelta.pod pod/perlfunc.pod op.c t/op/eval.t + + Change 648 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "[PERL] Assigning result of pop scrambles unrelated reference", #F015 + From: Gurusamy Sarathy + Msg-ID: <199712061100.GAA14864@aatma.engin.umich.edu> + Files: sv.c + + Change 647 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "[PERL] Filedescriptor leak in 5.004_55 (and earlier)", #F014 + From: Ilya Zakharevich + Msg-ID: <199712151922.OAA06410@monk.mps.ohio-state.edu> + Files: os2/os2.c util.c + + Change 646 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix fdopen() on STD{IN,OUT,ERR}", #F013 + From: Roderick Schertler + Msg-ID: + Files: doio.c t/op/misc.t + + Change 645 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix local $a[0] and local $h{a}", #F012 + From: Stephen McCamant + Msg-ID: + Files: embed.h scope.h global.sym pp.c pp_hot.c scope.c t/op/local.t + + Change 644 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Eliminate redundant mg_get() in SvTRUE()", #F011 + From: Spider Boardman + Msg-ID: <199712251839.NAA14800@Orb.Nashua.NH.US> + Files: sv.c + + Change 643 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Don't force scalar context on C or C", #F010 + From: Chip Salzenberg + Files: op.c t/op/my.t + + Change 642 on 1998/03/03 by TimBunce@ig.co.uk + + Title: "Fix assignment to $_[0] in DESTROY", #F009 + From: Gurusamy Sarathy + Msg-ID: <199801010030.TAA14274@aatma.engin.umich.edu> + Files: pod/perlobj.pod sv.c t/op/ref.t + + Change 627 on 1998/03/02 by TimBunce@ig.co.uk + + Title: "Fix inefficient checks for TIEHANDLE", #F008 + From: Gurusamy Sarathy + Msg-ID: <199801080106.UAA05048@aatma.engin.umich.edu> + Files: pp_hot.c pp_sys.c + + Change 626 on 1998/03/02 by TimBunce@ig.co.uk + + This is the change description for change 625 + Title: "Fix tr///s option", #F007 + From: Inaba Hiroto + Msg-ID: <19980110155333D.inaba@st.rim.or.jp> + Files: doop.c + + Change 623 on 1998/03/02 by TimBunce@ig.co.uk + + Title: "Fix lexical lookup in eval-sub-eval", #F006 + From: Chip Salzenberg + Files: pp_ctl.c + + Change 622 on 1998/03/02 by TimBunce@ig.co.uk + + Title: "Don't upgrade target of assignment from LVALUE", #F005 + From: Chip Salzenberg + Files: sv.c + + Change 621 on 1998/03/02 by TimBunce@ig.co.uk + + Title: "Fix compile-time warning line in while ()", #F004 + From: Chip Salzenberg + Files: op.c + + Change 620 on 1998/03/02 by TimBunce@ig.co.uk + + Title: "STMT foreach LIST;", #F002 + From: Chip Salzenberg + Files: pod/perlsyn.pod perly.c perly.c.diff perly.y t/cmd/mod.t toke.c + vms/perly_c.vms + + Change 619 on 1998/03/02 by TimBunce@ig.co.uk + + Title: "Fix SIGSEGV on C<42 until forever>", #F001 + From: Chip Salzenberg + Files: op.c ---------------- Version 5.004_04 Maintenance release 4 for 5.004 *************** *** 79,85 **** Files: MANIFEST lib/ExtUtils/Liblist.pm Title: "Set LD_RUN_PATH when building suidperl" ! From: Chip Salzenberg , Tony Sanders Msg-ID: <199708272226.QAA10206@austin.bsdi.com> Files: Makefile.SH --- 4123,4129 ---- Files: MANIFEST lib/ExtUtils/Liblist.pm Title: "Set LD_RUN_PATH when building suidperl" ! From: Chip Salzenberg , Tony Sanders Msg-ID: <199708272226.QAA10206@austin.bsdi.com> Files: Makefile.SH *************** *** 150,181 **** Files: scope.c t/op/ref.t Title: "Avoid assumption that STRLEN == I32" ! From: Chip Salzenberg , Hallvard B Furuseth Msg-ID: <199708242310.BAA05497@bombur2.uio.no> Files: hv.c Title: "Fix memory leak in splice(@_)" From: "Tuomas J. Lukka" , Chip Salzenberg ! Msg-ID: Files: proto.h av.c global.sym pp.c Title: "Fix line number of warnings in while() conditional", "misleading uninit value warning" ! From: Chip Salzenberg , Greg Bacon Msg-ID: <199708271607.LAA01403@crp-201.adtran.com> Files: proto.h op.c perly.c perly.y Title: "-t and POSIX::isatty on IO::Handle objects", "Fix C<-t $handle>" ! From: Chip Salzenberg , Greg Ward Msg-ID: <199708261754.NAA24826@bottom.bic.mni.mcgill.ca> Files: pp_sys.c Title: "Fix output of invalid printf formats" ! From: Chip Salzenberg , Hugo van der Sanden Msg-ID: <199708241529.QAA02457@crypt.compulink.co.uk> Files: sv.c t/op/sprintf.t --- 4194,4225 ---- Files: scope.c t/op/ref.t Title: "Avoid assumption that STRLEN == I32" ! From: Chip Salzenberg , Hallvard B Furuseth Msg-ID: <199708242310.BAA05497@bombur2.uio.no> Files: hv.c Title: "Fix memory leak in splice(@_)" From: "Tuomas J. Lukka" , Chip Salzenberg ! Msg-ID: Files: proto.h av.c global.sym pp.c Title: "Fix line number of warnings in while() conditional", "misleading uninit value warning" ! From: Chip Salzenberg , Greg Bacon Msg-ID: <199708271607.LAA01403@crp-201.adtran.com> Files: proto.h op.c perly.c perly.y Title: "-t and POSIX::isatty on IO::Handle objects", "Fix C<-t $handle>" ! From: Chip Salzenberg , Greg Ward Msg-ID: <199708261754.NAA24826@bottom.bic.mni.mcgill.ca> Files: pp_sys.c Title: "Fix output of invalid printf formats" ! From: Chip Salzenberg , Hugo van der Sanden Msg-ID: <199708241529.QAA02457@crypt.compulink.co.uk> Files: sv.c t/op/sprintf.t *************** *** 219,225 **** toke.c Title: "Reverse previous "Fix C" patch" ! From: Chip Salzenberg , Kenneth Albanowski , Tom Christiansen Msg-ID: <199707050155.VAA27394@rio.atlantic.net>, --- 4263,4269 ---- toke.c Title: "Reverse previous "Fix C" patch" ! From: Chip Salzenberg , Kenneth Albanowski , Tom Christiansen Msg-ID: <199707050155.VAA27394@rio.atlantic.net>, *************** *** 243,249 **** Title: "unpack now allows commas but -w warns", "unpack() difference 5.003->5.004" From: "John L. Allen" , Chip Salzenberg ! , Jarkko Hietaniemi , Jim Esten , Jim Esten , timbo (Tim Bunce) Msg-ID: <199709031632.LAA29584@wepco.com>, --- 4287,4293 ---- Title: "unpack now allows commas but -w warns", "unpack() difference 5.003->5.004" From: "John L. Allen" , Chip Salzenberg ! , Jarkko Hietaniemi , Jim Esten , Jim Esten , timbo (Tim Bunce) Msg-ID: <199709031632.LAA29584@wepco.com>, *************** *** 304,310 **** Files: op.c t/comp/proto.t Title: "Fix bugs with magical arrays and hashes (@ISA)" ! From: Chip Salzenberg Msg-ID: <199709232148.RAA29967@rio.atlantic.net> Files: perl.h proto.h av.c global.sym gv.c mg.c pp.c pp_hot.c scope.c t/op/method.t --- 4348,4354 ---- Files: op.c t/comp/proto.t Title: "Fix bugs with magical arrays and hashes (@ISA)" ! From: Chip Salzenberg Msg-ID: <199709232148.RAA29967@rio.atlantic.net> Files: perl.h proto.h av.c global.sym gv.c mg.c pp.c pp_hot.c scope.c t/op/method.t *************** *** 315,321 **** Files: perl.c taint.c util.c Title: "Tainting bitwise vector ops" ! From: Chip Salzenberg Msg-ID: <199710061726.NAA16438@rio.atlantic.net> Files: doop.c t/op/taint.t --- 4359,4365 ---- Files: perl.c taint.c util.c Title: "Tainting bitwise vector ops" ! From: Chip Salzenberg Msg-ID: <199710061726.NAA16438@rio.atlantic.net> Files: doop.c t/op/taint.t *************** *** 344,350 **** Files: pp.c pp_hot.c Title: "Fix defined() bug in m4t3 affecting LWP" ! From: chip@atlantic.net@ig.co.uk () Msg-ID: <199710101822.OAA14249@cyprus.atlantic.net> Files: pp.c --- 4388,4394 ---- Files: pp.c pp_hot.c Title: "Fix defined() bug in m4t3 affecting LWP" ! From: Chip Salzenberg Msg-ID: <199710101822.OAA14249@cyprus.atlantic.net> Files: pp.c *************** *** 468,474 **** Files: pod/perlop.pod Title: "repeating #! switches" ! From: Chip Salzenberg , Robin Barker Msg-ID: <199709241736.NAA25855@rio.atlantic.net>, <24778.9709241501@tempest.cise.npl.co.uk> --- 4512,4518 ---- Files: pod/perlop.pod Title: "repeating #! switches" ! From: Chip Salzenberg , Robin Barker Msg-ID: <199709241736.NAA25855@rio.atlantic.net>, <24778.9709241501@tempest.cise.npl.co.uk> *************** *** 1145,1151 **** Files: t/comp/term.t toke.c Title: "Fix memory leak on eval 'sub {}'" ! From: Chip Salzenberg Files: pp_ctl.c Title: "stringify looses integerness" --- 5189,5195 ---- Files: t/comp/term.t toke.c Title: "Fix memory leak on eval 'sub {}'" ! From: Chip Salzenberg Files: pp_ctl.c Title: "stringify looses integerness" *************** *** 1177,1192 **** Title: "Forbid negative splice offset beyond array start" From: "John L. Allen" , Chip Salzenberg ! Msg-ID: Files: pp.c Title: "Forbid "goto" into middle of foreach loop" ! From: Chip Salzenberg Files: pod/perldiag.pod pp_ctl.c Title: "Fix C" ! From: Chip Salzenberg Files: toke.c Title: "bless file handles as FileHandle if loaded else IO::Handle" --- 5221,5236 ---- Title: "Forbid negative splice offset beyond array start" From: "John L. Allen" , Chip Salzenberg ! Msg-ID: Files: pp.c Title: "Forbid "goto" into middle of foreach loop" ! From: Chip Salzenberg Files: pod/perldiag.pod pp_ctl.c Title: "Fix C" ! From: Chip Salzenberg Files: toke.c Title: "bless file handles as FileHandle if loaded else IO::Handle" *************** *** 1205,1240 **** Files: sv.c Title: "Fix '-' flag on sprintf() of floats" ! From: Chip Salzenberg , Jarkko Hietaniemi Msg-ID: <199705270646.JAA02510@alpha.hut.fi> Files: sv.c Title: "Free temps before calling END blocks", "Too late destruction" ! From: Chip Salzenberg Msg-ID: Files: perl.c Title: "Fix C parsing" From: "Chuck D. Phillips (NON-HP Employee)" , Chip ! Salzenberg Msg-ID: <199706121737.KAA00503@palrel3.hp.com> Files: toke.c Title: "Fix lockf_emulate_flock() positioning" ! From: Chip Salzenberg , gen@atd.rdc.ricoh.co.jp Msg-ID: <199706091132.UAA00895@wampa.atd.rdc.ricoh.co.jp> Files: pp_sys.c Title: "Don't use atol() for unsigned values", "signedness problem in pack("N", "value");" ! From: Chip Salzenberg , Roger Espel Llima Msg-ID: <19970531200007.40218@llaic.univ-bpclermont.fr> Files: sv.c Title: "Don't warn about "${foo}" in string, even if &foo exists" ! From: Chip Salzenberg Files: toke.c Title: "[PATCH] -p does not check for failure of implicit print" --- 5249,5284 ---- Files: sv.c Title: "Fix '-' flag on sprintf() of floats" ! From: Chip Salzenberg , Jarkko Hietaniemi Msg-ID: <199705270646.JAA02510@alpha.hut.fi> Files: sv.c Title: "Free temps before calling END blocks", "Too late destruction" ! From: Chip Salzenberg Msg-ID: Files: perl.c Title: "Fix C parsing" From: "Chuck D. Phillips (NON-HP Employee)" , Chip ! Salzenberg Msg-ID: <199706121737.KAA00503@palrel3.hp.com> Files: toke.c Title: "Fix lockf_emulate_flock() positioning" ! From: Chip Salzenberg , gen@atd.rdc.ricoh.co.jp Msg-ID: <199706091132.UAA00895@wampa.atd.rdc.ricoh.co.jp> Files: pp_sys.c Title: "Don't use atol() for unsigned values", "signedness problem in pack("N", "value");" ! From: Chip Salzenberg , Roger Espel Llima Msg-ID: <19970531200007.40218@llaic.univ-bpclermont.fr> Files: sv.c Title: "Don't warn about "${foo}" in string, even if &foo exists" ! From: Chip Salzenberg Files: toke.c Title: "[PATCH] -p does not check for failure of implicit print" *************** *** 1297,1303 **** Title: "Faster int to string conversion", "[PATCH} Re: memory leak in buffer safety code" ! From: Chip Salzenberg , Hugo van der Sanden , Tim Bunce Msg-ID: <199707140912.KAA09935@crypt.compulink.co.uk>, <199707142050.QAA20976@rio.atlantic.net>, --- 5341,5347 ---- Title: "Faster int to string conversion", "[PATCH} Re: memory leak in buffer safety code" ! From: Chip Salzenberg , Hugo van der Sanden , Tim Bunce Msg-ID: <199707140912.KAA09935@crypt.compulink.co.uk>, <199707142050.QAA20976@rio.atlantic.net>, *************** *** 1482,1488 **** Files: lib/Shell.pm Title: "confessing a carp" ! From: Chip Salzenberg , Hugo van der Sanden , Nick Ing-Simmons , Tim Bunce Msg-ID: <199708052155.WAA25393@crypt.compulink.co.uk>, --- 5526,5532 ---- Files: lib/Shell.pm Title: "confessing a carp" ! From: Chip Salzenberg , Hugo van der Sanden , Nick Ing-Simmons , Tim Bunce Msg-ID: <199708052155.WAA25393@crypt.compulink.co.uk>, *************** *** 1927,1933 **** Title: "Regex Bug in 5.003_26 thru 003_99a" From: Andreas Karrer , Chip Salzenberg ! Msg-ID: <199705152303.BAA08890@kuru.ee.ethz.ch>, <199705161915.PAA18721@rio.atlantic.net> Files: regcomp.h regcomp.c regexec.c --- 5971,5977 ---- Title: "Regex Bug in 5.003_26 thru 003_99a" From: Andreas Karrer , Chip Salzenberg ! Msg-ID: <199705152303.BAA08890@kuru.ee.ethz.ch>, <199705161915.PAA18721@rio.atlantic.net> Files: regcomp.h regcomp.c regexec.c diff -c 'perl5.004_04/Configure' 'perl5.004_05/Configure' Index: ./Configure Prereq: 3.0.1.8 *** ./Configure Fri Oct 3 13:57:39 1997 --- ./Configure Tue Apr 13 00:39:07 1999 *************** *** 87,94 **** : This should not matter in scripts, but apparently it does, sometimes case "$CDPATH" in ! '') ;; ! *) CDPATH='' ;; esac : Sanity checks --- 87,94 ---- : This should not matter in scripts, but apparently it does, sometimes case "$CDPATH" in ! '') ;; ! *) CDPATH='.' ;; esac : Sanity checks *************** *** 371,376 **** --- 371,379 ---- d_semctl='' d_semget='' d_semop='' + d_union_semun='' + d_semctl_semun='' + d_semctl_semid_ds='' d_setegid='' d_seteuid='' d_setlinebuf='' *************** *** 405,410 **** --- 408,420 ---- sockethdr='' socketlib='' d_statblks='' + d_fstatfs='' + d_statfs='' + d_statfsflags='' + d_fstatvfs='' + d_statvfs='' + d_getmntent='' + d_hasmntopt='' d_stdio_cnt_lval='' d_stdio_ptr_lval='' d_stdiobase='' *************** *** 480,485 **** --- 490,496 ---- i_malloc='' i_math='' i_memory='' + i_mntent='' i_ndbm='' i_neterrno='' i_niin='' *************** *** 489,494 **** --- 500,506 ---- d_pwclass='' d_pwcomment='' d_pwexpire='' + d_pwgecos='' d_pwquota='' i_pwd='' i_sfio='' *************** *** 503,513 **** --- 515,527 ---- i_sysfilio='' i_sysioctl='' i_syssockio='' + i_sysmount='' i_sysndir='' i_sysparam='' i_sysresrc='' i_sysselct='' i_sysstat='' + i_sysstatvfs='' i_systimes='' i_systypes='' i_sysun='' *************** *** 538,543 **** --- 552,558 ---- loclibpth='' plibpth='' xlibpth='' + ignore_versioned_solibs='' libs='' lns='' lseektype='' *************** *** 637,642 **** --- 652,659 ---- smallmach='pdp11 i8086 z8000 i80286 iAPX286' rmlist='' + installusrbinperl='' + : We must find out about Eunice early eunicefix=':' if test -f /etc/unixtovms; then *************** *** 715,720 **** --- 732,739 ---- i_whoami='' : default library list libswanted='' + : some systems want only to use the non-versioned libso:s + ignore_versioned_solibs='' : set useposix=false in your hint file to disable the POSIX extension. useposix=true : set useopcode=false in your hint file to disable the Opcode extension. *************** *** 1469,1474 **** --- 1488,1494 ---- perl pg sendmail + tee test uname zip *************** *** 1681,1687 **** $test -d /usr/include/minix && osname=minix 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 --- 1701,1707 ---- $test -d /usr/include/minix && osname=minix if $test -d /MachTen; then osname=machten ! if $test -x /sbin/version -o -d /MachTen_Folder; then osvers=`/sbin/version | $awk '{print $2}' | $sed -e 's/[A-Za-z]$//'` elif $test -x /usr/etc/version; then *************** *** 1748,1759 **** osvers="$3" ;; genix) osname=genix ;; hp*) osname=hpux ! case "$3" in ! *.08.*) osvers=9 ;; ! *.09.*) osvers=9 ;; ! *.10.*) osvers=10 ;; ! *) osvers="$3" ;; ! esac ;; irix*) osname=irix case "$3" in --- 1768,1774 ---- osvers="$3" ;; genix) osname=genix ;; hp*) osname=hpux ! osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'` ;; irix*) osname=irix case "$3" in *************** *** 2979,2984 **** --- 2994,3024 ---- installbin="$binexp" fi + echo " " + case "$installusrbinperl" in + '') if test -d /usr/bin -a "X$installbin" != X/usr/bin; then + $cat <&4 cat >gnulibc.c </dev/null 2>&1 && \ ! ./gnulibc | $contains '^GNU C Library' >/dev/null 2>&1; then val="$define" echo "You are using the GNU C Library" else --- 3886,3903 ---- echo " " echo "Checking for GNU C Library..." >&4 cat >gnulibc.c < ! int main() { ! #ifdef __GLIBC__ ! exit(0); ! #else ! exit(1); ! #endif } EOM if $cc $ccflags $ldflags -o gnulibc gnulibc.c $libs >/dev/null 2>&1 && \ ! ./gnulibc ; then val="$define" echo "You are using the GNU C Library" else *************** *** 4519,4524 **** --- 4564,4573 ---- esac : Try to guess additional flags to pick up local libraries. + : Be careful not to append to a plain 'none' + case "$dflt" in + none) dflt='' ;; + esac for thisflag in $ldflags; do case "$thisflag" in -L*) *************** *** 4625,4648 **** . ./myread case "$ans" in true|$define|[Yy]*) ! useshrplib='true' ! # Why does next4 have to be so different? ! case "${osname}${osvers}" in ! next4*) xxx='DYLD_LIBRARY_PATH' ;; ! *) xxx='LD_LIBRARY_PATH' ;; ! esac ! $cat <&4 ! ! To build perl, you must add the current working directory to your ! $xxx environtment variable before running make. You can do ! this with ! $xxx=\`pwd\`; export $xxx ! for Bourne-style shells, or ! setenv $xxx \`pwd\` ! for Csh-style shells. You *MUST* do this before running make. ! ! EOM ! ;; *) useshrplib='false' ;; esac ;; --- 4674,4680 ---- . ./myread case "$ans" in true|$define|[Yy]*) ! useshrplib='true' ;; *) useshrplib='false' ;; esac ;; *************** *** 5459,5471 **** cat <. Versions 5.003_02 and later of perl allow alternate IO mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still ! the default and is the only supported mechanism. This abstraction ! layer can use AT&T's sfio (if you already have sfio installed) or ! fall back on standard IO. This PerlIO abstraction layer is ! experimental and may cause problems with some extension modules. If this doesn't make any sense to you, just accept the default 'n'. EOM --- 5491,5503 ---- cat <. Versions 5.003_02 and later of perl allow alternate IO mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still ! the default. This abstraction layer can use AT&T's sfio (if you ! already have sfio installed) or regular stdio, although sfio may cause ! problems with some extension modules. Using PerlIO with stdio is safe, ! but it is slower than plain stdio and therefore is not the default. If this doesn't make any sense to you, just accept the default 'n'. EOM *************** *** 6062,6067 **** --- 6094,6116 ---- set chsize d_chsize eval $inlibc + hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift; + while $test $# -ge 2; do + case "$1" in + $define) echo "#include <$2>";; + esac ; + shift 2; + done > try.c; + echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c; + if eval $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then + val="$define"; + else + val="$undef"; + fi; + set $varname; + eval $setvar; + $rm -f try.c try.o' + : check for const keyword echo " " echo 'Checking to see if your C compiler knows about "const"...' >&4 *************** *** 7033,7038 **** --- 7082,7095 ---- set d_pwcomment eval $setvar + if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then + val="$define" + else + val="$undef" + fi + set d_pwgecos + eval $setvar + $rm -f $$.h ;; *) *************** *** 7043,7048 **** --- 7100,7106 ---- set d_pwclass; eval $setvar set d_pwexpire; eval $setvar set d_pwcomment; eval $setvar + set d_pwgecos; eval $setvar ;; esac *************** *** 7338,7343 **** --- 7396,7557 ---- set d_sem eval $setvar + : see how to do semctl IPC_STAT + case "$h_sem$d_sem$d_semctl" in + true$define$define) + : see whether sys/sem.h defines union semun + $cat > try.c <<'END' + #include + #include + #include + int main () { union semun semun; semun.buf = 0; } + END + if $cc $ccflags -o try try.c > /dev/null 2>&1; then + echo "You have union semun in ." >&4 + val="$define" + else + echo "You do not have union semun in ." >&4 + val="$undef" + fi + $rm -f try try.c + set d_union_semun + eval $setvar + + : see whether semctl IPC_STAT can use union semun + $cat > try.c < + #include + #include + #include + #include + #include + #ifndef errno + extern int errno; + #endif + #$d_union_semun HAS_UNION_SEMUN + int main() { + union semun + #ifndef HAS_UNION_SEMUN + { + int val; + struct semid_ds *buf; + unsigned short *array; + } + #endif + arg; + int sem, st; + + #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && \ + defined(S_IRWXO) && defined(IPC_CREAT) + sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT); + if (sem > -1) { + struct semid_ds argbuf; + arg.buf = &argbuf; + # ifdef IPC_STAT + st = semctl(sem, 0, IPC_STAT, arg); + if (st == 0) + printf("semun\n"); + else + # endif /* IPC_STAT */ + printf("semctl IPC_STAT failed: errno = %d\n", errno); + # ifdef IPC_RMID + if (semctl(sem, 0, IPC_RMID, arg) != 0) + # endif /* IPC_RMID */ + printf("semctl IPC_RMID failed: errno = %d\n", errno); + } else + #endif /* IPC_PRIVATE && ... */ + printf("semget failed: errno = %d\n", errno); + + return 0; + } + END + val="$undef" + if $cc $ccflags -o try try.c > /dev/null 2>&1; then + d_semctl_semun=`./try` + case "$d_semctl_semun" in + semun) val="$define" ;; + esac + fi + $rm -f try try.c + set d_semctl_semun + eval $setvar + case "$d_semctl_semun" in + $define|true) + echo "You can use union semun for semctl IPC_STAT." >&4 + ;; + *) echo "You cannot use union semun for semctl IPC_STAT." >&4 + ;; + esac + + : see whether semctl IPC_STAT can use struct semid_ds pointer + + $cat > try.c <<'END' + #include + #include + #include + #include + #include + #include + #ifndef errno + extern int errno; + #endif + int main() { + struct semid_ds arg; + int sem, st; + + #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && \ + defined(S_IRWXO) && defined(IPC_CREAT) + sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT); + if (sem > -1) { + # ifdef IPC_STAT + st = semctl(sem, 0, IPC_STAT, &arg); + if (st == 0) + printf("semid_ds\n"); + else + # endif /* IPC_STAT */ + printf("semctl IPC_STAT failed: errno = %d\n", errno); + # ifdef IPC_RMID + if (semctl(sem, 0, IPC_RMID, &arg) != 0) + # endif /* IPC_RMID */ + printf("semctl IPC_RMID failed: errno = %d\n", errno); + } else + #endif /* IPC_PRIVATE && ... */ + printf("semget failed: errno = %d\n", errno); + + return 0; + } + END + val="$undef" + if $cc $ccflags -o try try.c > /dev/null 2>&1; then + d_semctl_semid_ds=`./try` + case "$d_semctl_semid_ds" in + semid_ds) val="$define" ;; + esac + fi + $rm -f try try.c + set d_semctl_semid_ds + eval $setvar + case "$d_semctl_semid_ds" in + $define|true) + echo "You can use struct semid_ds * for semctl IPC_STAT." >&4 + ;; + *) echo "You cannot use struct semid_ds * for semctl IPC_STAT." >&4 + ;; + esac + ;; + *) val="$undef" + + set d_union_semun + eval $setvar + + set d_semctl_semun + eval $setvar + + set d_semctl_semid_ds + eval $setvar + ;; + esac + : see if setegid exists set setegid d_setegid eval $inlibc *************** *** 9361,9366 **** --- 9575,9584 ---- set math.h i_math eval $inhdr + : see if this is a mntent.h system + set mntent.h i_mntent + eval $inhdr + : see if ndbm.h is available set ndbm.h t_ndbm eval $inhdr *************** *** 9699,9704 **** --- 9917,9954 ---- set sys/param.h i_sysparam eval $inhdr + : see if this is a sys/mount.h system + set sys/mount.h i_sysmount + eval $inhdr + + : see if statfs exists + set statfs d_statfs + eval $inlibc + + : see if fstatfs exists + set fstatfs d_fstatfs + eval $inlibc + + : see if statfs knows about mount flags + set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h + eval $hasfield + + : see if statvfs exists + set statvfs d_statvfs + eval $inlibc + + : see if fstatvfs exists + set fstatvfs d_fstatvfs + eval $inlibc + + : see if getmntent exists + set getmntent d_getmntent + eval $inlibc + + : see if hasmntopt exists + set hasmntopt d_hasmntopt + eval $inlibc + : see if sys/resource.h has to be included set sys/resource.h i_sysresrc eval $inhdr *************** *** 9711,9716 **** --- 9961,9970 ---- set sys/types.h i_systypes eval $inhdr + : see if this is a sys/statvfs.h system + set sys/statvfs.h i_sysstatvfs + eval $inhdr + : see if this is a sys/un.h system set sys/un.h i_sysun eval $inhdr *************** *** 10076,10087 **** --- 10330,10345 ---- d_fork='$d_fork' d_fpathconf='$d_fpathconf' d_fsetpos='$d_fsetpos' + d_fstatfs='$d_fstatfs' + d_fstatvfs='$d_fstatvfs' d_ftime='$d_ftime' d_getgrps='$d_getgrps' d_setgrps='$d_setgrps' d_gethent='$d_gethent' d_gethname='$d_gethname' d_getlogin='$d_getlogin' + d_getmntent='$d_getmntent' + d_hasmntopt='$d_hasmntopt' d_getpgid='$d_getpgid' d_getpgrp2='$d_getpgrp2' d_getpgrp='$d_getpgrp' *************** *** 10129,10134 **** --- 10387,10393 ---- d_pwclass='$d_pwclass' d_pwcomment='$d_pwcomment' d_pwexpire='$d_pwexpire' + d_pwgecos='$d_pwgecos' d_pwquota='$d_pwquota' d_readdir='$d_readdir' d_readlink='$d_readlink' *************** *** 10144,10149 **** --- 10403,10411 ---- d_semctl='$d_semctl' d_semget='$d_semget' d_semop='$d_semop' + d_union_semun='$d_union_semun' + d_semctl_semun='$d_semctl_semun' + d_semctl_semid_ds='$d_semctl_semid_ds' d_setegid='$d_setegid' d_seteuid='$d_seteuid' d_setlinebuf='$d_setlinebuf' *************** *** 10171,10176 **** --- 10433,10441 ---- d_socket='$d_socket' d_sockpair='$d_sockpair' d_statblks='$d_statblks' + d_statfs='$d_statfs' + d_statfsflags='$d_statfsflags' + d_statvfs='$d_statvfs' d_stdio_cnt_lval='$d_stdio_cnt_lval' d_stdio_ptr_lval='$d_stdio_ptr_lval' d_stdiobase='$d_stdiobase' *************** *** 10262,10267 **** --- 10527,10533 ---- i_malloc='$i_malloc' i_math='$i_math' i_memory='$i_memory' + i_mntent='$i_mntent' i_ndbm='$i_ndbm' i_neterrno='$i_neterrno' i_niin='$i_niin' *************** *** 10278,10289 **** --- 10544,10557 ---- i_sysfilio='$i_sysfilio' i_sysin='$i_sysin' i_sysioctl='$i_sysioctl' + i_sysmount='$i_sysmount' i_sysndir='$i_sysndir' i_sysparam='$i_sysparam' i_sysresrc='$i_sysresrc' i_sysselct='$i_sysselct' i_syssockio='$i_syssockio' i_sysstat='$i_sysstat' + i_sysstatvfs='$i_sysstatvfs' i_systime='$i_systime' i_systimek='$i_systimek' i_systimes='$i_systimes' *************** *** 10299,10304 **** --- 10567,10573 ---- i_varargs='$i_varargs' i_varhdr='$i_varhdr' i_vfork='$i_vfork' + ignore_versioned_solibs='$ignore_versioned_solibs' incpath='$incpath' inews='$inews' installarchlib='$installarchlib' *************** *** 10309,10314 **** --- 10578,10584 ---- installscript='$installscript' installsitearch='$installsitearch' installsitelib='$installsitelib' + installusrbinperl='$installusrbinperl' intsize='$intsize' known_extensions='$known_extensions' ksh='$ksh' *************** *** 10565,10570 **** --- 10835,10846 ---- echo "Done." fi + if $test -f config.msg; then + echo "Hmm. I also noted the following information while running:" + echo " " + $cat config.msg >&4 + $rm -f config.msg + fi $rm -f kit*isdone ark*isdone $rm -rf UU diff -c 'perl5.004_04/Copying' 'perl5.004_05/Copying' Index: ./Copying *** ./Copying Tue Oct 18 12:18:02 1994 --- ./Copying Sun Nov 22 10:08:38 1998 *************** *** 2,8 **** Version 1, February 1989 Copyright (C) 1989 Free Software Foundation, Inc. ! 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. --- 2,8 ---- Version 1, February 1989 Copyright (C) 1989 Free Software Foundation, Inc. ! 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. *************** *** 215,222 **** GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with this program; if not, write to the Free Software ! Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. --- 215,222 ---- GNU General Public License for more details. You should have received a copy of the GNU General Public License ! along with this program; if not, write to the Free Software Foundation, ! Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. Also add information on how to contact you by electronic and paper mail. diff -c 'perl5.004_04/EXTERN.h' 'perl5.004_05/EXTERN.h' Index: ./EXTERN.h *** ./EXTERN.h Fri Jun 6 17:44:08 1997 --- ./EXTERN.h Sun Nov 22 10:08:38 1998 *************** *** 18,29 **** #undef EXTCONST #undef dEXTCONST #if defined(VMS) && !defined(__GNUC__) # define EXT globalref # define dEXT globaldef {"$GLOBAL_RW_VARS"} noshare # define EXTCONST globalref # define dEXTCONST globaldef {"$GLOBAL_RO_VARS"} readonly #else ! # if (defined(_MSC_VER) && defined(_WIN32)) || (defined(__BORLANDC__) && defined(__WIN32__)) # ifdef PERLDLL # define EXT extern __declspec(dllexport) # define dEXT --- 18,33 ---- #undef EXTCONST #undef dEXTCONST #if defined(VMS) && !defined(__GNUC__) + /* Suppress portability warnings from DECC for VMS-specific extensions */ + # ifdef __DECC + # pragma message disable (GLOBALEXT,NOSHAREEXT,READONLYEXT) + # endif # define EXT globalref # define dEXT globaldef {"$GLOBAL_RW_VARS"} noshare # define EXTCONST globalref # define dEXTCONST globaldef {"$GLOBAL_RO_VARS"} readonly #else ! # if defined(WIN32) && !defined(PERL_STATIC_SYMS) && !defined(__GNUC__) && !defined(PERL_OBJECT) # ifdef PERLDLL # define EXT extern __declspec(dllexport) # define dEXT diff -c 'perl5.004_04/INSTALL' 'perl5.004_05/INSTALL' Index: ./INSTALL Prereq: 1.28 *** ./INSTALL Tue Oct 14 08:47:06 1997 --- ./INSTALL Fri Jun 19 14:47:57 1998 *************** *** 93,99 **** Configure will figure out various things about your system. Some things Configure will figure out for itself, other things it will ask you about. To accept the default, just press RETURN. The default ! is almost always ok. At any Configure prompt, you can type &-d and Configure will use the defaults from then on. After it runs, Configure will perform variable substitution on all the --- 93,99 ---- Configure will figure out various things about your system. Some things Configure will figure out for itself, other things it will ask you about. To accept the default, just press RETURN. The default ! is almost always okay. At any Configure prompt, you can type &-d and Configure will use the defaults from then on. After it runs, Configure will perform variable substitution on all the *************** *** 130,135 **** --- 130,143 ---- your perl source directory. If you do, installperl will attempt infinite recursion. + It may seem obvious to say, but Perl is useful only when users can + easily find it. When possible, it's good for both /usr/bin/perl and + /usr/local/bin/perl to be symlinks to the actual binary. If that can't + be done, system administrators are strongly encouraged to put + (symlinks to) perl and its accompanying utilities, such as perldoc, + into a directory typically found along a user's PATH, or in another + obvious and convenient place. + By default, Configure will compile perl to use dynamic loading if your system supports it. If you want to force perl to be compiled statically, you can either choose this when Configure prompts you or *************** *** 719,725 **** This will do two independent things: First, it will force compilation to use cc -g so that you can use your system's debugger on the executable. (Note: Your system may actually require something like ! cc -g2. Check you man pages for cc(1) and also any hint file for your system.) Second, it will add -DDEBUGGING to your ccflags variable in config.sh so that you can use B to access perl's internal state. (Note: Configure will only add -DDEBUGGING by --- 727,733 ---- This will do two independent things: First, it will force compilation to use cc -g so that you can use your system's debugger on the executable. (Note: Your system may actually require something like ! cc -g2. Check your man pages for cc(1) and also any hint file for your system.) Second, it will add -DDEBUGGING to your ccflags variable in config.sh so that you can use B to access perl's internal state. (Note: Configure will only add -DDEBUGGING by *************** *** 941,947 **** If you have any locale-related environment variables set, try unsetting them. I have some reports that some versions of IRIX hang while running B<./miniperl configpm> with locales other than the C ! locale. See the discussion under L below about locales. =item malloc duplicates --- 949,966 ---- If you have any locale-related environment variables set, try unsetting them. I have some reports that some versions of IRIX hang while running B<./miniperl configpm> with locales other than the C ! locale. See the discussion under L<"make test"> below about locales ! and the whole L section in the file pod/perllocale.pod. ! The latter is especially useful if you see something like this ! ! perl: warning: Setting locale failed. ! perl: warning: Please check that your locale settings: ! LC_ALL = "En_US", ! LANG = (unset) ! are supported and installed on your system. ! perl: warning: Falling back to the standard locale ("C"). ! ! at Perl startup. =item malloc duplicates *************** *** 951,971 **** =item varargs If you get varargs problems with gcc, be sure that gcc is installed ! correctly. When using gcc, you should probably have i_stdarg='define' and i_varargs='undef' in config.sh. The problem is usually solved by running fixincludes correctly. If you do change config.sh, don't forget to propagate your changes (see L<"Propagating your changes to config.sh"> below). See also the L<"vsprintf"> item below. ! =item croak If you get error messages such as the following (the exact line numbers will vary in different versions of perl): ! util.c: In function `Perl_croak': ! util.c:962: number of arguments doesn't match prototype ! proto.h:45: prototype declaration it might well be a symptom of the gcc "varargs problem". See the previous L<"varargs"> item. --- 970,991 ---- =item varargs If you get varargs problems with gcc, be sure that gcc is installed ! correctly and that you are not passing -I/usr/include to gcc. ! When using gcc, you should probably have i_stdarg='define' and i_varargs='undef' in config.sh. The problem is usually solved by running fixincludes correctly. If you do change config.sh, don't forget to propagate your changes (see L<"Propagating your changes to config.sh"> below). See also the L<"vsprintf"> item below. ! =item util.c If you get error messages such as the following (the exact line numbers will vary in different versions of perl): ! util.c: In function `Perl_form': ! util.c:1107: number of arguments doesn't match prototype ! proto.h:125: prototype declaration it might well be a symptom of the gcc "varargs problem". See the previous L<"varargs"> item. diff -c 'perl5.004_04/INTERN.h' 'perl5.004_05/INTERN.h' Index: ./INTERN.h *** ./INTERN.h Thu Mar 6 10:46:34 1997 --- ./INTERN.h Sun Nov 22 10:08:38 1998 *************** *** 18,32 **** --- 18,43 ---- #undef EXTCONST #undef dEXTCONST #if defined(VMS) && !defined(__GNUC__) + /* Suppress portability warnings from DECC for VMS-specific extensions */ + # ifdef __DECC + # pragma message disable (GLOBALEXT,NOSHAREEXT,READONLYEXT) + # endif # define EXT globaldef {"$GLOBAL_RW_VARS"} noshare # define dEXT globaldef {"$GLOBAL_RW_VARS"} noshare # define EXTCONST globaldef {"$GLOBAL_RO_VARS"} readonly # define dEXTCONST globaldef {"$GLOBAL_RO_VARS"} readonly #else + # ifdef __cplusplus + # define EXT + # define dEXT + # define EXTCONST extern const + # define dEXTCONST const + #else # define EXT # define dEXT # define EXTCONST const # define dEXTCONST const + #endif #endif #undef INIT diff -c 'perl5.004_04/MANIFEST' 'perl5.004_05/MANIFEST' Index: ./MANIFEST *** ./MANIFEST Wed Oct 8 11:16:23 1997 --- ./MANIFEST Thu Apr 29 11:36:47 1999 *************** *** 13,24 **** --- 13,30 ---- INTERN.h Included before domestic .h files MANIFEST This list of files Makefile.SH A script that generates Makefile + Porting/Contract Social contract for contributed modules in Perl core Porting/Glossary Glossary of config.sh variables + Porting/genlog Generate formatted changelogs by querying p4d Porting/makerel Release making utility + Porting/p4d2p Generate standard patches from p4 diffs + Porting/p4desc Smarter 'p4 describe', outputs diffs for new files + Porting/patching.pod How to report changes made to Perl Porting/patchls Flexible patch file listing utility Porting/pumpkin.pod Guidelines and hints for Perl maintainers README The Instructions README.amiga Notes about AmigaOS port + README.beos Notes about BeOS port README.cygwin32 Notes about Cygwin32 port README.os2 Notes about OS/2 port README.plan9 Notes about Plan9 port *************** *** 29,34 **** --- 35,41 ---- XSUB.h Include file for extension subroutines av.c Array value code av.h Array value header + beos/nm.c BeOS port cflags.SH A script that emits C compilation flags per file compat3.sym List of symbols for binary-compatibility with 5.003 config_H Sample config.h *************** *** 49,59 **** --- 56,68 ---- eg/ADB An adb wrapper to put in your crash dir eg/README Intro to example perl scripts eg/cgi/RunMeFirst Setup script for CGI examples + eg/cgi/caution.xbm Small image for CGI examples eg/cgi/clickable_image.cgi CGI example eg/cgi/cookie.cgi CGI example eg/cgi/crash.cgi CGI example eg/cgi/customize.cgi CGI example eg/cgi/diff_upload.cgi CGI example + eg/cgi/dna.small.gif.uu Small image for CGI examples eg/cgi/file_upload.cgi CGI example eg/cgi/frameset.cgi CGI example eg/cgi/index.html Index page for CGI examples *************** *** 62,67 **** --- 71,77 ---- eg/cgi/monty.cgi CGI example eg/cgi/multiple_forms.cgi CGI example eg/cgi/nph-clock.cgi CGI example + eg/cgi/nph-multipart.cgi CGI example eg/cgi/popup.cgi CGI example eg/cgi/save_state.cgi CGI example eg/cgi/tryit.cgi CGI example *************** *** 109,114 **** --- 119,126 ---- eg/who A sample who program eg/wrapsuid A setuid script wrapper generator emacs/cperl-mode.el An alternate perl-mode + emacs/e2ctags.pl etags to ctags converter + emacs/ptags Creates smart TAGS file embed.h Maps symbols to safer names embed.pl Produces embed.h ext/DB_File/DB_File.pm Berkeley DB extension Perl module *************** *** 116,122 **** ext/DB_File/DB_File_BS Berkeley DB extension mkbootstrap fodder ext/DB_File/Makefile.PL Berkeley DB extension makefile writer ext/DB_File/typemap Berkeley DB extension interface types ! ext/DynaLoader/DynaLoader.pm Dynamic Loader perl module ext/DynaLoader/Makefile.PL Dynamic Loader makefile writer ext/DynaLoader/README Dynamic Loader notes and intro ext/DynaLoader/dl_aix.xs AIX implementation --- 128,134 ---- ext/DB_File/DB_File_BS Berkeley DB extension mkbootstrap fodder ext/DB_File/Makefile.PL Berkeley DB extension makefile writer ext/DB_File/typemap Berkeley DB extension interface types ! ext/DynaLoader/DynaLoader_pm.PL Dynamic Loader perl module ext/DynaLoader/Makefile.PL Dynamic Loader makefile writer ext/DynaLoader/README Dynamic Loader notes and intro ext/DynaLoader/dl_aix.xs AIX implementation *************** *** 172,178 **** --- 184,196 ---- ext/POSIX/POSIX.pm POSIX extension Perl module ext/POSIX/POSIX.pod POSIX extension documentation ext/POSIX/POSIX.xs POSIX extension external subroutines + ext/POSIX/hints/bsdos.pl Hint for POSIX for named architecture + ext/POSIX/hints/freebsd.pl Hint for POSIX for named architecture + ext/POSIX/hints/linux.pl Hint for POSIX for named architecture + ext/POSIX/hints/netbsd.pl Hint for POSIX for named architecture ext/POSIX/hints/next_3.pl Hint for POSIX for named architecture + ext/POSIX/hints/openbsd.pl Hint for POSIX for named architecture + ext/POSIX/hints/sunos_4.pl Hint for POSIX for named architecture ext/POSIX/typemap POSIX extension interface types ext/SDBM_File/Makefile.PL SDBM extension makefile writer ext/SDBM_File/SDBM_File.pm SDBM extension Perl module *************** *** 234,239 **** --- 252,258 ---- hints/amigaos.sh Hints for named architecture hints/apollo.sh Hints for named architecture hints/aux_3.sh Hints for named architecture + hints/beos.sh Hints for named architecture hints/broken-db.msg Warning message for systems with broken DB library hints/bsdos.sh Hints for named architecture hints/convexos.sh Hints for named architecture *************** *** 272,277 **** --- 291,297 ---- hints/next_3.sh Hints for named architecture hints/next_3_0.sh Hints for named architecture hints/next_4.sh Hints for named architecture + hints/openbsd.sh Hints for named architecture hints/opus.sh Hints for named architecture hints/os2.sh Hints for named architecture hints/os390.sh Hints for named architecture *************** *** 313,318 **** --- 333,339 ---- lib/CGI.pm Web server interface ("Common Gateway Interface") lib/CGI/Apache.pm Support for Apache's Perl module lib/CGI/Carp.pm Log server errors with helpful context + lib/CGI/Cookie.pm Support for cookies lib/CGI/Fast.pm Support for FastCGI (persistent server process) lib/CGI/Push.pm Support for server push lib/CGI/Switch.pm Simple interface for multiple server types *************** *** 349,354 **** --- 370,381 ---- lib/File/DosGlob.pm Win32 DOS-globbing module lib/File/Find.pm Routines to do a find lib/File/Path.pm Do things like `mkdir -p' and `rm -r' + lib/File/Spec.pm Portable operations on file names + lib/File/Spec/Mac.pm Portable operations on Mac file names + lib/File/Spec/OS2.pm Portable operations on OS2 file names + lib/File/Spec/Unix.pm Portable operations on Unix file names + lib/File/Spec/VMS.pm Portable operations on VMS file names + lib/File/Spec/Win32.pm Portable operations on Win32 file names lib/File/stat.pm By-name interface to Perl's builtin stat lib/FileCache.pm Keep more files open than the system permits lib/FileHandle.pm Backward-compatible front end to IO extension *************** *** 380,391 **** --- 407,420 ---- lib/Term/Cap.pm Perl module supporting termcap usage lib/Term/Complete.pm A command completion subroutine lib/Term/ReadLine.pm Stub readline library + lib/Test.pm A simple framework for writing test scripts lib/Test/Harness.pm A test harness lib/Text/Abbrev.pm An abbreviation table builder lib/Text/ParseWords.pm Perl module to split words on arbitrary delimiter lib/Text/Soundex.pm Perl module to implement Soundex lib/Text/Tabs.pm Do expand and unexpand lib/Text/Wrap.pm Paragraph formatter + lib/Tie/Handle.pm Base class for tied handles lib/Tie/Hash.pm Base class for tied hashes lib/Tie/RefHash.pm Base class for tied hashes with references as keys lib/Tie/Scalar.pm Base class for tied scalars *************** *** 399,404 **** --- 428,434 ---- lib/User/pwent.pm By-name interface to Perl's builtin getpw* lib/abbrev.pl An abbreviation table builder lib/assert.pl assertion and panic with stack trace + lib/attrs.pm attrs extension Perl module (stub) lib/autouse.pm Load and call a function only when it's used lib/base.pm Establish IS-A relationship at compile time lib/bigfloat.pl An arbitrary precision floating point package *************** *** 435,440 **** --- 465,471 ---- 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/re.pm Pragmas for regular expressions lib/shellwords.pl Perl library to split into words with shell quoting lib/sigtrap.pm For trapping an abort and giving traceback lib/stat.pl Perl library supporting stat function *************** *** 560,573 **** --- 591,607 ---- pod/perlform.pod Format info pod/perlfunc.pod Function info pod/perlguts.pod Internals info + pod/perlhist.pod Perl history info pod/perlipc.pod IPC info pod/perllocale.pod Locale support info pod/perllol.pod How to use lists of lists pod/perlmod.pod Module mechanism info + pod/perlmodinstall.pod Installing CPAN Modules pod/perlmodlib.pod Module policy info pod/perlobj.pod Object info pod/perlop.pod Operator info pod/perlpod.pod Pod info + pod/perlport.pod Portability guide pod/perlre.pod Regular expression info pod/perlref.pod References info pod/perlrun.pod Execution info *************** *** 629,634 **** --- 663,669 ---- t/comp/package.t See if packages work t/comp/proto.t See if function prototypes work t/comp/redef.t See if we get correct warnings on redefined subs + t/comp/require.t See if require works t/comp/script.t See if script invokation works t/comp/term.t See if more terms work t/comp/use.t See if pragmas work *************** *** 661,669 **** --- 696,708 ---- t/lib/filefind.t See if File::Find works t/lib/filehand.t See if FileHandle works t/lib/filepath.t See if File::Path works + t/lib/filespec.t See if File::Spec works t/lib/findbin.t See if FindBin works t/lib/gdbm.t See if GDBM_File works t/lib/getopt.t See if Getopt::Std and Getopt::Long works + t/lib/h2ph.h Test header file for h2ph + t/lib/h2ph.pht Generated output from h2ph.h by h2ph, for comparison + t/lib/h2ph.t See if h2ph works like it should t/lib/hostname.t See if Sys::Hostname works t/lib/io_dup.t See if dup()-related methods from IO work t/lib/io_pipe.t See if pipe()-related methods from IO work *************** *** 680,685 **** --- 719,725 ---- t/lib/open3.t See if IPC::Open3 works t/lib/ops.t See if Opcode works t/lib/parsewords.t See if Text::ParseWords works + t/lib/ph.t See if h2ph works t/lib/posix.t See if POSIX works t/lib/safe1.t See if Safe works t/lib/safe2.t See if Safe works *************** *** 703,709 **** --- 743,752 ---- t/op/closure.t See if closures work t/op/cmp.t See if the various string and numeric compare work t/op/cond.t See if conditional expressions work + t/op/defins.t See if auto-insert of defined() works t/op/delete.t See if delete works + t/op/die.t See if die works + t/op/die_exit.t See if die and exit status interaction works t/op/do.t See if subroutines work t/op/each.t See if hash iterators work t/op/eval.t See if eval operator works *************** *** 713,720 **** --- 756,765 ---- t/op/fork.t See if fork works t/op/glob.t See if <*> works t/op/goto.t See if goto works + t/op/goto_xs.t See if "goto &sub" works on XSUBs t/op/groups.t See if $( works t/op/gv.t See if typeglobs work + t/op/hashwarn.t See if warnings for bad hash assignments work t/op/inc.t See if inc/dec of integers near 32 bit limit work t/op/index.t See if index works t/op/int.t See if int works *************** *** 730,735 **** --- 775,781 ---- t/op/ord.t See if ord works t/op/pack.t See if pack and unpack work t/op/pat.t See if esoteric patterns work + t/op/pos.t See if pos works t/op/push.t See if push and pop work t/op/quotemeta.t See if quotemeta works t/op/rand.t See if rand works *************** *** 753,758 **** --- 799,805 ---- t/op/sysio.t See if sysread and syswrite work t/op/taint.t See if tainting works t/op/tie.t See if tie/untie functions work + t/op/tiehandle.t See if tie for handles works t/op/time.t See if time functions work t/op/undef.t See if undef works t/op/universal.t See if UNIVERSAL class works *************** *** 820,837 **** win32/Makefile Win32 makefile for NMAKE (Visual C++ build) win32/TEST Win32 port win32/autosplit.pl Win32 port ! win32/bin/network.pl Win32 port win32/bin/pl2bat.pl wrap perl scripts into batch files win32/bin/runperl.pl run perl script via batch file namesake win32/bin/search.pl Win32 port - win32/bin/webget.pl Win32 port - win32/bin/www.pl Win32 port win32/config.bc Win32 base line config.sh (Borland C++ build) win32/config.vc Win32 base line config.sh (Visual C++ build) win32/config_H.bc Win32 config header (Borland C++ build) win32/config_H.vc Win32 config header (Visual C++ build) win32/config_h.PL Perl code to convert Win32 config.sh to config.h win32/config_sh.PL Perl code to update Win32 config.sh from Makefile win32/dl_win32.xs Win32 port win32/genxsdef.pl Win32 port win32/include/arpa/inet.h Win32 port --- 867,883 ---- win32/Makefile Win32 makefile for NMAKE (Visual C++ build) win32/TEST Win32 port win32/autosplit.pl Win32 port ! win32/bin/perlglob.pl Win32 globbing win32/bin/pl2bat.pl wrap perl scripts into batch files win32/bin/runperl.pl run perl script via batch file namesake win32/bin/search.pl Win32 port win32/config.bc Win32 base line config.sh (Borland C++ build) win32/config.vc Win32 base line config.sh (Visual C++ build) win32/config_H.bc Win32 config header (Borland C++ build) win32/config_H.vc Win32 config header (Visual C++ build) win32/config_h.PL Perl code to convert Win32 config.sh to config.h win32/config_sh.PL Perl code to update Win32 config.sh from Makefile + win32/des_fcrypt.patch Win32 port win32/dl_win32.xs Win32 port win32/genxsdef.pl Win32 port win32/include/arpa/inet.h Win32 port *************** *** 849,856 **** win32/splittree.pl Win32 port win32/win32.c Win32 port win32/win32.h Win32 port - win32/win32io.c Win32 port - win32/win32io.h Win32 port win32/win32iop.h Win32 port win32/win32sck.c Win32 port writemain.SH Generate perlmain.c from miniperlmain.c+extensions --- 895,900 ---- diff -c 'perl5.004_04/Makefile.SH' 'perl5.004_05/Makefile.SH' Index: ./Makefile.SH *** ./Makefile.SH Wed Oct 15 05:33:16 1997 --- ./Makefile.SH Tue Apr 27 05:38:22 1999 *************** *** 25,32 **** --- 25,37 ---- linklibperl='$(LIBPERL)' shrpldflags='$(LDDLFLAGS)' + ldlibpth='' case "$useshrplib" in true) + # Prefix all runs of 'miniperl' and 'perl' with + # $ldlibpth so that ./perl finds *this* libperl.so. + ldlibpth="LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH" + pldlflags="$cccdlflags" # NeXT-4 specific stuff. Can't we do this in the hint file? case "${osname}${osvers}" in *************** *** 35,44 **** lddlflags="-dynamic -undefined warning -framework System \ -compatibility_version 1 -current_version $patchlevel \ -prebind -seg1addr 0x27000000 -install_name \$(shrpdir)/\$@" ;; ! sunos*|freebsd[23]*|netbsd*) linklibperl="-lperl" ;; aix*) shrpldflags="-H512 -T512 -bhalt:4 -bM:SRE -bE:perl.exp" case "$osvers" in --- 40,60 ---- lddlflags="-dynamic -undefined warning -framework System \ -compatibility_version 1 -current_version $patchlevel \ -prebind -seg1addr 0x27000000 -install_name \$(shrpdir)/\$@" + # NeXT uses a different name. + ldlibpth="DYLD_LIBRARY_PATH=`pwd`:$DYLD_LIBRARY_PATH" + ;; + rhapsody*) + ldlibpth="DYLD_LIBRARY_PATH=`pwd`/Perl:$DYLD_LIBRARY_PATH" ;; ! os2*) # OS/2 doesn't need anything special for LD_LIBRARY_PATH. ! ldlibpth='' ! ;; ! sunos*) linklibperl="-lperl" ;; + netbsd*|freebsd[234]*) + linklibperl="-L. -lperl" + ;; aix*) shrpldflags="-H512 -T512 -bhalt:4 -bM:SRE -bE:perl.exp" case "$osvers" in *************** *** 52,60 **** aixinstdir=`pwd | sed 's/\/UU$//'` linklibperl="-L $archlibexp/CORE -L $aixinstdir -lperl" ;; ! hpux10*) linklibperl="-L `pwd | sed 's/\/UU$//'` -Wl,+b$archlibexp/CORE -lperl" ;; esac ;; *) pldlflags='' --- 68,78 ---- aixinstdir=`pwd | sed 's/\/UU$//'` linklibperl="-L $archlibexp/CORE -L $aixinstdir -lperl" ;; ! hpux10*|hpux11*) linklibperl="-L `pwd | sed 's/\/UU$//'` -Wl,+b$archlibexp/CORE -lperl" ;; + beos*) ldlibpth="LIBRARY_PATH=`pwd`:$LIBRARY_PATH" + ;; esac ;; *) pldlflags='' *************** *** 124,129 **** --- 142,151 ---- LLIBPERL= $linklibperl SHRPENV = $shrpenv + # The following is used to include the current directory in + # LD_LIBRARY_PATH if you are building a shared libperl.so. + LDLIBPTH = $ldlibpth + dynamic_ext = $dynamic_list static_ext = $static_list ext = \$(dynamic_ext) \$(static_ext) *************** *** 220,229 **** @echo " "; echo " Everything is up to date." translators: miniperl lib/Config.pm FORCE ! @echo " "; echo " Making x2p stuff"; cd x2p; $(MAKE) all utilities: miniperl lib/Config.pm FORCE ! @echo " "; echo " Making utilities"; cd utils; $(MAKE) all # This is now done by installman only if you actually want the man pages. --- 242,251 ---- @echo " "; echo " Everything is up to date." translators: miniperl lib/Config.pm FORCE ! @echo " "; echo " Making x2p stuff"; cd x2p; $(LDLIBPTH) $(MAKE) all utilities: miniperl lib/Config.pm FORCE ! @echo " "; echo " Making utilities"; cd utils; $(LDLIBPTH) $(MAKE) all # This is now done by installman only if you actually want the man pages. *************** *** 272,277 **** --- 294,300 ---- case "$osname" in aix) $spitshell >>Makefile <<'!NO!SUBS!' + rm -f libperl$(OBJ_EXT) mv $@ libperl$(OBJ_EXT) $(AR) qv $(LIBPERL) libperl$(OBJ_EXT) !NO!SUBS! *************** *** 299,318 **** # The Module used here must not depend on Config or any extensions. miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL) ! $(CC) $(LARGE) $(CLDFLAGS) -o miniperl miniperlmain$(OBJ_EXT) $(LLIBPERL) $(libs) ! @./miniperl -w -Ilib -MExporter -e 0 || $(MAKE) minitest perl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs ! $(SHRPENV) $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o perl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) pureperl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs ! $(SHRPENV) purify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o pureperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) purecovperl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs ! $(SHRPENV) purecov $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o purecovperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) quantperl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs ! $(SHRPENV) quantify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o quantperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) # This version, if specified in Configure, does ONLY those scripts which need # set-id emulation. Suidperl must be setuid root. It contains the "taint" --- 322,341 ---- # The Module used here must not depend on Config or any extensions. miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL) ! $(LDLIBPTH) $(CC) $(LARGE) $(CLDFLAGS) -o miniperl miniperlmain$(OBJ_EXT) $(LLIBPERL) $(libs) ! $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e 0 || $(MAKE) minitest perl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs ! $(SHRPENV) $(LDLIBPTH) $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o perl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) pureperl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs ! $(SHRPENV) $(LDLIBPTH) purify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o pureperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) purecovperl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs ! $(SHRPENV) $(LDLIBPTH) purecov $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o purecovperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) quantperl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs ! $(SHRPENV) $(LDLIBPTH) quantify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o quantperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) # This version, if specified in Configure, does ONLY those scripts which need # set-id emulation. Suidperl must be setuid root. It contains the "taint" *************** *** 320,326 **** # has been invoked correctly. suidperl: $& sperl$(OBJ_EXT) perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs ! $(SHRPENV) $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o suidperl perlmain$(OBJ_EXT) sperl$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) !NO!SUBS! --- 343,349 ---- # has been invoked correctly. suidperl: $& sperl$(OBJ_EXT) perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs ! $(SHRPENV) $(LDLIBPTH) $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o suidperl perlmain$(OBJ_EXT) sperl$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) !NO!SUBS! *************** *** 340,378 **** preplibrary: miniperl lib/Config.pm $(plextract) @sh ./makedir lib/auto @echo " AutoSplitting perl library" ! @./miniperl -Ilib -e 'use AutoSplit; \ autosplit_lib_modules(@ARGV)' lib/*.pm lib/*/*.pm # Take care to avoid modifying lib/Config.pm without reason # (If trying to create a new port and having problems with the configpm script, # try 'make minitest' and/or commenting out the tests at the end of configpm.) lib/Config.pm: config.sh miniperl configpm ! ./miniperl configpm tmp ! sh mv-if-diff tmp lib/Config.pm 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 installperl ! ./perl installperl install.man: all installman ! ./perl installman # XXX Experimental. Hardwired values, but useful for testing. # Eventually Configure could ask for some of these values. install.html: all installhtml ! ./perl installhtml \ ! --podroot=. --podpath=. --recurse \ ! --htmldir=$(privlib)/html \ ! --htmlroot=$(privlib)/html \ ! --splithead=pod/perlipc \ ! --splititem=pod/perlfunc \ --libpods=perlfunc:perlguts:perlvar:perlrun:perlop \ --verbose --- 363,402 ---- preplibrary: miniperl lib/Config.pm $(plextract) @sh ./makedir lib/auto @echo " AutoSplitting perl library" ! $(LDLIBPTH) ./miniperl -Ilib -e 'use AutoSplit; \ autosplit_lib_modules(@ARGV)' lib/*.pm lib/*/*.pm # Take care to avoid modifying lib/Config.pm without reason # (If trying to create a new port and having problems with the configpm script, # try 'make minitest' and/or commenting out the tests at the end of configpm.) lib/Config.pm: config.sh miniperl configpm ! $(LDLIBPTH) ./miniperl configpm tmp ! sh mv-if-diff tmp $@ lib/ExtUtils/Miniperl.pm: miniperlmain.c miniperl minimod.pl lib/Config.pm ! $(LDLIBPTH) ./miniperl minimod.pl > tmp ! sh mv-if-diff tmp $@ $(plextract): miniperl lib/Config.pm ! $(LDLIBPTH) ./miniperl -Ilib $@.PL install: all install.perl install.man install.perl: all installperl ! $(LDLIBPTH) ./perl installperl install.man: all installman ! $(LDLIBPTH) ./perl installman # XXX Experimental. Hardwired values, but useful for testing. # Eventually Configure could ask for some of these values. install.html: all installhtml ! $(LDLIBPTH) ./perl installhtml \ ! --podroot=. --podpath=. --recurse \ ! --htmldir=$(privlib)/html \ ! --htmlroot=$(privlib)/html \ ! --splithead=pod/perlipc \ ! --splititem=pod/perlfunc \ --libpods=perlfunc:perlguts:perlvar:perlrun:perlop \ --verbose *************** *** 429,441 **** # DynaLoader may be needed for extensions that use Makefile.PL. $(DYNALOADER): miniperl preplibrary FORCE ! @sh ext/util/make_ext static $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) d_dummy $(dynamic_ext): miniperl preplibrary $(DYNALOADER) FORCE ! @sh ext/util/make_ext dynamic $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) s_dummy $(static_ext): miniperl preplibrary $(DYNALOADER) FORCE ! @sh ext/util/make_ext static $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) clean: _tidy _mopup --- 453,465 ---- # DynaLoader may be needed for extensions that use Makefile.PL. $(DYNALOADER): miniperl preplibrary FORCE ! @$(LDLIBPTH) sh ext/util/make_ext static $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) d_dummy $(dynamic_ext): miniperl preplibrary $(DYNALOADER) FORCE ! @$(LDLIBPTH) sh ext/util/make_ext dynamic $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) s_dummy $(static_ext): miniperl preplibrary $(DYNALOADER) FORCE ! @$(LDLIBPTH) sh ext/util/make_ext static $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) clean: _tidy _mopup *************** *** 514,528 **** makedepend: makedepend.SH config.sh sh ./makedepend.SH ! test-prep: miniperl perl preplibrary $(dynamic_ext) cd t && (rm -f perl$(EXE_EXT); $(LNS) ../perl$(EXE_EXT) perl$(EXE_EXT)) test check: test-prep ! cd t && ./perl TEST .clist --- 554,573 ---- @echo "You may see some irrelevant test failures if you have been unable" @echo "to build lib/Config.pm." - cd t && (rm -f perl$(EXE_EXT); $(LNS) ../miniperl$(EXE_EXT) perl$(EXE_EXT)) \ ! && $(LDLIBPTH) ./perl TEST base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t .clist diff -c /dev/null 'perl5.004_05/Porting/Contract' Index: ./Porting/Contract *** ./Porting/Contract Wed Dec 31 19:00:00 1969 --- ./Porting/Contract Thu Apr 23 15:49:22 1998 *************** *** 0 **** --- 1,108 ---- + + Contributed Modules in Perl Core + A Social Contract about Artistic Control + + What follows is a statement about artistic control, defined as the ability + of authors of packages to guide the future of their code and maintain + control over their work. It is a recognition that authors should have + control over their work, and that it is a responsibility of the rest of + the Perl community to ensure that they retain this control. It is an + attempt to document the standards to which we, as Perl developers, intend + to hold ourselves. It is an attempt to write down rough guidelines about + the respect we owe each other as Perl developers. + + This statement is not a legal contract. This statement is not a legal + document in any way, shape, or form. Perl is distributed under the GNU + Public License and under the Artistic License; those are the precise legal + terms. This statement isn't about the law or licenses. It's about + community, mutual respect, trust, and good-faith cooperation. + + We recognize that the Perl core, defined as the software distributed with + the heart of Perl itself, is a joint project on the part of all of us. + >From time to time, a script, module, or set of modules (hereafter referred + to simply as a "module") will prove so widely useful and/or so integral to + the correct functioning of Perl itself that it should be distributed with + Perl core. This should never be done without the author's explicit + consent, and a clear recognition on all parts that this means the module + is being distributed under the same terms as Perl itself. A module author + should realize that inclusion of a module into the Perl core will + necessarily mean some loss of control over it, since changes may + occasionally have to be made on short notice or for consistency with the + rest of Perl. + + Once a module has been included in the Perl core, however, everyone + involved in maintaining Perl should be aware that the module is still the + property of the original author unless the original author explicitly + gives up their ownership of it. In particular: + + 1) The version of the module in the core should still be considered the + work of the original author. All patches, bug reports, and so forth + should be fed back to them. Their development directions should be + respected whenever possible. + + 2) Patches may be applied by the pumpkin holder without the explicit + cooperation of the module author if and only if they are very minor, + time-critical in some fashion (such as urgent security fixes), or if + the module author cannot be reached. Those patches must still be + given back to the author when possible, and if the author decides on + an alternate fix in their version, that fix should be strongly + preferred unless there is a serious problem with it. Any changes not + endorsed by the author should be marked as such, and the contributor + of the change acknowledged. + + 3) The version of the module distributed with Perl should, whenever + possible, be the latest version of the module as distributed by the + author (the latest non-beta version in the case of public Perl + releases), although the pumpkin holder may hold off on upgrading the + version of the module distributed with Perl to the latest version + until the latest version has had sufficient testing. + + In other words, the author of a module should be considered to have final + say on modifications to their module whenever possible (bearing in mind + that it's expected that everyone involved will work together and arrive at + reasonable compromises when there are disagreements). + + As a last resort, however: + + 4) If the author's vision of the future of their module is sufficiently + different from the vision of the pumpkin holder and perl5-porters as a + whole so as to cause serious problems for Perl, the pumpkin holder may + choose to formally fork the version of the module in the core from the + one maintained by the author. This should not be done lightly and + should *always* if at all possible be done only after direct input + from Larry. If this is done, it must then be made explicit in the + module as distributed with Perl core that it is a forked version and + that while it is based on the original author's work, it is no longer + maintained by them. This must be noted in both the documentation and + in the comments in the source of the module. + + Again, this should be a last resort only. Ideally, this should never + happen, and every possible effort at cooperation and compromise should be + made before doing this. If it does prove necessary to fork a module for + the overall health of Perl, proper credit must be given to the original + author in perpetuity and the decision should be constantly re-evaluated to + see if a remerging of the two branches is possible down the road. + + In all dealings with contributed modules, everyone maintaining Perl should + keep in mind that the code belongs to the original author, that they may + not be on perl5-porters at any given time, and that a patch is not + official unless it has been integrated into the author's copy of the + module. To aid with this, and with points #1, #2, and #3 above, contact + information for the authors of all contributed modules should be kept with + the Perl distribution. + + Finally, the Perl community as a whole recognizes that respect for + ownership of code, respect for artistic control, proper credit, and active + effort to prevent unintentional code skew or communication gaps is vital + to the health of the community and Perl itself. Members of a community + should not normally have to resort to rules and laws to deal with each + other, and this document, although it contains rules so as to be clear, is + about an attitude and general approach. The first step in any dispute + should be open communication, respect for opposing views, and an attempt + at a compromise. In nearly every circumstance nothing more will be + necessary, and certainly no more drastic measure should be used until + every avenue of communication and discussion has failed. + + -- + Version 1.2. By Russ Allbery (rra@stanford.edu) and the perl5-porters. + diff -c 'perl5.004_04/Porting/Glossary' 'perl5.004_05/Porting/Glossary' Index: ./Porting/Glossary *** ./Porting/Glossary Mon Feb 10 10:37:46 1997 --- ./Porting/Glossary Fri May 15 11:28:45 1998 *************** *** 454,480 **** to poll active file descriptors. d_pwage (i_pwd.U): ! This varaible conditionally defines PWAGE, which indicates that struct passwd contains pw_age. d_pwchange (i_pwd.U): ! This varaible conditionally defines PWCHANGE, which indicates that struct passwd contains pw_change. d_pwclass (i_pwd.U): ! This varaible conditionally defines PWCLASS, which indicates that struct passwd contains pw_class. d_pwcomment (i_pwd.U): ! This varaible conditionally defines PWCOMMENT, which indicates that struct passwd contains pw_comment. d_pwexpire (i_pwd.U): ! This varaible conditionally defines PWEXPIRE, which indicates that struct passwd contains pw_expire. d_pwquota (i_pwd.U): ! This varaible conditionally defines PWQUOTA, which indicates that struct passwd contains pw_quota. d_readdir (d_readdir.U): --- 454,484 ---- to poll active file descriptors. d_pwage (i_pwd.U): ! This variable conditionally defines PWAGE, which indicates that struct passwd contains pw_age. d_pwchange (i_pwd.U): ! This variable conditionally defines PWCHANGE, which indicates that struct passwd contains pw_change. d_pwclass (i_pwd.U): ! This variable conditionally defines PWCLASS, which indicates that struct passwd contains pw_class. d_pwcomment (i_pwd.U): ! This variable conditionally defines PWCOMMENT, which indicates that struct passwd contains pw_comment. d_pwexpire (i_pwd.U): ! This variable conditionally defines PWEXPIRE, which indicates that struct passwd contains pw_expire. + d_pwgecos (i_pwd.U): + This variable conditionally defines PWGECOS, which indicates + that struct passwd contains pw_gecos. + d_pwquota (i_pwd.U): ! This variable conditionally defines PWQUOTA, which indicates that struct passwd contains pw_quota. d_readdir (d_readdir.U): diff -c /dev/null 'perl5.004_05/Porting/genlog' Index: ./Porting/genlog *** ./Porting/genlog Wed Dec 31 19:00:00 1969 --- ./Porting/genlog Mon Apr 26 15:11:12 1999 *************** *** 0 **** --- 1,119 ---- + #!/usr/bin/perl -w + # + # Generate a nice changelist by querying perforce. + # + # Each change is described with the change number, description, + # which branch the change happened in, files modified, + # and who was responsible for entering the change. + # + # Can be called with a list of change numbers or a range of the + # form "12..42". Changelog will be printed from highest number + # to lowest. + # + # Outputs the changelist to stdout. + # + # Gurusamy Sarathy + # + + use Text::Wrap; + + $0 =~ s|^.*/||; + unless (@ARGV) { + die < + USAGE + } + + my @changes; + + my %editkind; + @editkind{ qw( add edit delete integrate branch )} + = qw( + ! - !> +> ); + + my $p4port = $ENV{P4PORT} || 'localhost:1666'; + + while (@ARGV) { + $_ = shift; + if (/^(\d+)\.\.(\d+)$/) { + push @changes, $1 .. $2; + } + elsif (/^\d+$/) { + push @changes, $_; + } + elsif (/^-p(.*)$/) { + $p4port = $1 || shift; + } + else { + warn "Arguments must be change numbers, ignoring `$_'\n"; + } + } + + @changes = sort { $b <=> $a } @changes; + + my @desc = `p4 -p $p4port describe -s @changes`; + if ($?) { + die "$0: `p4 -p $p4port describe -s @changes` failed, status[$?]\n"; + } + else { + chomp @desc; + while (@desc) { + my ($change,$who,$date,$time,@log,$branch,$file,$type,%files); + $_ = shift @desc; + if (/^Change (\d+) by (\w+)\@.+ on (\S+) (\S+)\s*$/) { + ($change, $who, $date, $time) = ($1,$2,$3,$4); + $_ = shift @desc; # get rid of empty line + while (@desc) { + $_ = shift @desc; + last if /^Affected/; + push @log, $_; + } + if (/^Affected/) { + $_ = shift @desc; # get rid of empty line + while ($_ = shift @desc) { + last unless /^\.\.\./; + if (m{^\.\.\. //depot/(.*?perl|[^/]*)/([^#]+)#\d+ (\w+)\s*$}) { + ($branch,$file,$type) = ($1,$2,$3); + $files{$branch} = {} unless exists $files{$branch}; + $files{$branch}{$type} = [] unless exists $files{$branch}{$type}; + push @{$files{$branch}{$type}}, $file; + } + else { + warn "Unknown line [$_], ignoring\n"; + } + } + } + } + next unless $change; + print "_" x 76, "\n"; + printf < 25 && ($kind eq 'integrate' + || $kind eq 'branch')) + || @$files > 100; + print wrap(sprintf("%12s ", $editkind{$kind}), + sprintf("%12s ", $editkind{$kind}), + "@$files\n"); + } + } + } + } diff -c 'perl5.004_04/Porting/makerel' 'perl5.004_05/Porting/makerel' Index: ./Porting/makerel *** ./Porting/makerel Mon Sep 22 05:54:02 1997 --- ./Porting/makerel Mon Apr 26 16:07:41 1999 *************** *** 1,4 **** ! #!/bin/env perl -w # A first attempt at some automated support for making a perl release. # Very basic but functional - if you're on a unix system. --- 1,4 ---- ! #!/usr/bin/perl -w # A first attempt at some automated support for making a perl release. # Very basic but functional - if you're on a unix system. *************** *** 17,36 **** die "Must be in root of the perl source tree.\n" unless -f "./MANIFEST" and -f "patchlevel.h"; ! $patchlevel_h = `grep '#define ' patchlevel.h`; print $patchlevel_h; $patchlevel = $1 if $patchlevel_h =~ /PATCHLEVEL\s+(\d+)/; $subversion = $1 if $patchlevel_h =~ /SUBVERSION\s+(\d+)/; ! die "Unable to parse patchlevel.h" unless $subversion > 0; $vers = sprintf("5.%03d", $patchlevel); ! $vers.= sprintf( "_%02d", $subversion) if $subversion; ! $perl = "perl$vers"; ! $reldir = "$relroot/$perl"; ! $reldir .= "-$ARGV[0]" if $ARGV[0]; ! print "\nMaking a release for $perl in $reldir\n\n"; print "Cross-checking the MANIFEST...\n"; ($missfile, $missentry) = fullcheck(); --- 17,51 ---- die "Must be in root of the perl source tree.\n" unless -f "./MANIFEST" and -f "patchlevel.h"; ! open PATCHLEVEL,"; ! close PATCHLEVEL; ! my $patchlevel_h = join "", grep { /^#define/ } @patchlevel_h; print $patchlevel_h; $patchlevel = $1 if $patchlevel_h =~ /PATCHLEVEL\s+(\d+)/; $subversion = $1 if $patchlevel_h =~ /SUBVERSION\s+(\d+)/; ! die "Unable to parse patchlevel.h" unless $subversion >= 0; $vers = sprintf("5.%03d", $patchlevel); ! $vms_vers = sprintf("5_%03d", $patchlevel); ! if ($subversion) { ! $vers.= sprintf( "_%02d", $subversion); ! $vms_vers.= sprintf( "%02d", $subversion); ! } else { ! $vms_vers.= " "; ! } ! # fetch list of local patches ! my (@local_patches, @lpatch_tags, $lpatch_tags); ! @local_patches = grep { /^static.*local_patches/../^};/ } @patchlevel_h; ! @local_patches = grep { !/^\s*,?NULL/ } @local_patches; ! @lpatch_tags = map { /^\s*,"(\w+)/ } @local_patches; ! $lpatch_tags = join "-", @lpatch_tags; ! $perl = "perl$vers"; ! $reldir = "$perl"; ! $reldir .= "-$lpatch_tags" if $lpatch_tags; + print "\nMaking a release for $perl in $relroot/$reldir\n\n"; print "Cross-checking the MANIFEST...\n"; ($missfile, $missentry) = fullcheck(); *************** *** 47,58 **** print "\n"; print "Setting file permissions...\n"; system("find . -type f -print | xargs chmod -w"); ! system("find . -type d -print | xargs chmod g-s"); system("find t -name '*.t' -print | xargs chmod +x"); system("chmod +w configure"); # special case (see pumpkin.pod) ! @exe = qw( Configure configpm configure --- 62,92 ---- print "\n"; + print "Creating $relroot/$reldir release directory...\n"; + die "$relroot/$reldir release directory already exists\n" if -e "$relroot/$reldir"; + die "$relroot/$reldir.tar.gz release file already exists\n" if -e "$relroot/$reldir.tar.gz"; + mkdir("$relroot/$reldir", 0755) or die "mkdir $relroot/$reldir: $!\n"; + print "\n"; + + print "Copying files to release directory...\n"; + # ExtUtils::Manifest maniread does not preserve the order + $cmd = "awk '{print \$1}' MANIFEST | cpio -pdm $relroot/$reldir"; + system($cmd) == 0 or die "$cmd failed"; + print "\n"; + + + chdir "$relroot/$reldir" or die $!; + + + print "Updating VMS version specific files with $vms_vers...\n"; + system("perl -pi -e 's/^\QPERL_VERSION = \E\d\_\d+(\s*\#)/PERL_VERSION = $vms_vers$1/' vms/descrip.mms"); + print "Setting file permissions...\n"; system("find . -type f -print | xargs chmod -w"); ! system("find . -type d -print | xargs chmod 755"); system("find t -name '*.t' -print | xargs chmod +x"); system("chmod +w configure"); # special case (see pumpkin.pod) ! my @exe = qw( Configure configpm configure *************** *** 74,99 **** Porting/makerel ); system("chmod +x @exe"); - print "\n"; - - - print "Creating $reldir release directory...\n"; - die "$reldir release directory already exists\n" if -e "../$perl"; - die "$reldir.tar.gz release file already exists\n" if -e "../$reldir.tar.gz"; - mkdir($reldir, 0755) or die "mkdir $reldir: $!\n"; - print "\n"; ! ! print "Copying files to release directory...\n"; ! # ExtUtils::Manifest maniread does not preserve the order ! $cmd = "awk '{print \$1}' MANIFEST | cpio -pdm $reldir"; ! system($cmd) == 0 or die "$cmd failed"; print "\n"; ! chdir $relroot or die $!; print "Creating and compressing the tar file...\n"; ! $cmd = "tar cf - $perl | gzip --best > $perl.tar.gz"; system($cmd) == 0 or die "$cmd failed"; print "\n"; --- 108,128 ---- Porting/makerel ); system("chmod +x @exe"); ! print "Adding CRs to DOSish files...\n"; ! my @crlf = qw( ! README.win32 ! win32/Makefile ! win32/makefile.mk ! ); ! system("perl -pi -e 's/\$/\\r/' @crlf"); print "\n"; ! chdir ".." or die $!; print "Creating and compressing the tar file...\n"; ! my $src = (-e $perl) ? $perl : 'perl'; # 'perl' in maint branch ! $cmd = "tar cf - $reldir | gzip --best > $reldir.tar.gz"; system($cmd) == 0 or die "$cmd failed"; print "\n"; diff -c /dev/null 'perl5.004_05/Porting/p4d2p' Index: ./Porting/p4d2p *** ./Porting/p4d2p Wed Dec 31 19:00:00 1969 --- ./Porting/p4d2p Thu Apr 29 11:01:02 1999 *************** *** 0 **** --- 1,84 ---- + #!/usr/bin/perl -wspi.bak + + # + # reads a perforce style diff on stdin and outputs appropriate headers + # so the diff can be applied with the patch program + # + # Gurusamy Sarathy + # + + BEGIN { + $0 =~ s|.*/||; + if ($h or $help) { + print STDERR < change-123.patch + + USAGE + exit(0); + } + unless (@ARGV) { @ARGV = '-'; undef $^I; } + use vars qw($thisfile $time $file $fnum $v $h $help); + $thisfile = ""; + $time = localtime(time); + } + + my ($cur, $match); + $cur = m<^==== //depot/(.+?)\#\d+.* ====$> ... m<^(\@\@.+\@\@|\*+)$>; + + $match = $1; + + if ($ARGV ne $thisfile) { + warn "processing patchfile [$ARGV]\n" unless $ARGV eq '-'; + $thisfile = $ARGV; + } + + # while we are within range + if ($cur) { + # set the file name after first line + if ($cur == 1) { + $file = $match; + $fnum++; + } + # emit the diff header when we hit last line + elsif ($cur =~ /E0$/) { + my $f = $file; + + # special hack for perl so we can always use "patch -p1" + $f =~ s<^.*?(perl.*?/)><$1>; + + # unified diff + if ($match =~ /^\@/) { + warn "emitting udiff header\n" if $v; + $_ = "Index: $f\n--- $f.~1~\t$time\n+++ $f\t$time\n$_"; + } + # context diff + elsif ($match =~ /^\*/) { + warn "emitting cdiff header\n" if $v; + $_ = "Index: $f\n*** $f.~1~\t$time\n--- $f\t$time\n$_"; + } + } + # see if we hit another patch (i.e. previous patch was empty) + elsif (m<^==== //depot/(.+?)\#\d+.* ====$>) { + $file = $match = $1; + } + # suppress all other lines in the header + else { + $_ = ""; + } + warn "file [$file] line [$cur] file# [$fnum]\n" if $v; + } + + $_ .= "End of Patch.\n" if eof; diff -c /dev/null 'perl5.004_05/Porting/p4desc' Index: ./Porting/p4desc *** ./Porting/p4desc Wed Dec 31 19:00:00 1969 --- ./Porting/p4desc Sun Mar 28 01:00:46 1999 *************** *** 0 **** --- 1,117 ---- + #!/usr/bin/perl -wpi.bak + + # + # Munge "p4 describe ..." output to include new files. + # + # Gurusamy Sarathy + # + + use vars qw($thisfile $change $file $fnum $h $v $p4port @addfiles); + + BEGIN { + $0 =~ s|^.*/||; + $p4port = $ENV{P4PORT} || 'localhost:1666'; + for (@ARGV) { + if ($p4port =~ /^\s+$/) { + $p4port = $_; + } + elsif (/^-p(.*)$/) { + $p4port = $1 || ' '; + } + elsif (/^-v$/) { + $v++; + } + elsif (/^-h/) { + $h++; + } + else { + push @files, $_; + } + } + unless (@files) { @files = '-'; undef $^I; } + @ARGV = @files; + if ($h) { + print STDERR < change-123.desc + p4 describe -du 123 | $0 | p4d2p > change-123.patch + + USAGE + exit(0); + } + $thisfile = ""; + } + + + if ($ARGV ne $thisfile) { + warn "processing patchfile [$ARGV]\n" unless $ARGV eq '-'; + $thisfile = $ARGV; + } + + my $cur = m|^Affected files| ... m|^Differences|; + + # while we are within range + if ($cur) { + if (m|^\.\.\. (//depot/.+?#\d+) add$|) { + my $newfile = $1; + push @addfiles, $newfile; + warn "$newfile add, revision != 1!\n" unless $newfile =~ /#1$/; + } + warn "file [$file] line [$cur] file# [$fnum]\n" if $v; + } + + if (/^Change (\d+) by/) { + $_ = "\n\n" . $_ if $change; # start of a new change list + $change = $1; + my $new = newfiles(); + if ($new) { + $_ = $new . $_; + } + } + + if (eof) { + $_ .= newfiles(); + } + + sub newfiles { + my $addfile; + my $ret = ""; + for $addfile (@addfiles) { + my $type = `p4 -p $p4port files $addfile`; + if ($?) { + warn "$0: `p4 -p $p4port print $addfile` failed, status[$?]\n"; + next; + } + $type =~ m|^//.*\((.+)\)$| or next; + $type = $1; + unless ($type =~ /text/) { + $ret .= "\n==== $addfile ($type) ====\n\n"; + next; + } + my @new = `p4 -p $p4port print $addfile`; + if ($?) { + die "$0: `p4 -p $p4port print $addfile` failed, status[$?]\n"; + } + my $desc = shift @new; # discard initial description + $ret .= "\n==== $addfile ($type) ====\n\n"; + my $lines = "," . @new; + $lines = "" if @new < 2; + $ret .= "\@\@ -0,0 +1$lines \@\@\n"; + $ret .= join("+","",@new); + } + @addfiles = (); + return $ret; + } diff -c /dev/null 'perl5.004_05/Porting/patching.pod' Index: ./Porting/patching.pod *** ./Porting/patching.pod Wed Dec 31 19:00:00 1969 --- ./Porting/patching.pod Sun Jan 24 02:09:05 1999 *************** *** 0 **** --- 1,325 ---- + =head1 Name + + patching.pod - Appropriate format for patches to the perl source tree + + =head2 Where to get this document + + The latest version of this document is available from + http://perrin.dimensional.com/perl/perlpatch.html + + =head2 How to contribute to this document + + You may mail corrections, additions, and suggestions to me + at dgris@dimensional.com but the preferred method would be + to follow the instructions set forth in this document and + submit a patch 8-). + + =head1 Description + + =head2 Why this document exists + + As an open source project Perl relies on patches and contributions from + its users to continue functioning properly and to root out the inevitable + bugs. But, some users are unsure as to the I way to prepare a patch + and end up submitting seriously malformed patches. This makes it very + difficult for the current maintainer to integrate said patches into their + distribution. This document sets out usage guidelines for patches in an + attempt to make everybody's life easier. + + =head2 Common problems + + The most common problems appear to be patches being mangled by certain + mailers (I won't name names, but most of these seem to be originating on + boxes running a certain popular commercial operating system). Other problems + include patches not rooted in the appropriate place in the directory structure, + and patches not produced using standard utilities (such as diff). + + =head1 Proper Patch Guidelines + + =head2 What to patch + + Generally speaking you should patch the latest development release + of perl. The maintainers of the individual branches will see to it + that patches are picked up and applied as appropriate. + + =head2 How to prepare your patch + + =over 4 + + =item Creating your patch + + First, back up the original files. This can't be stressed enough, + back everything up _first_. + + Also, please create patches against a clean distribution of the perl source. + This insures that everyone else can apply your patch without clobbering their + source tree. + + =item diff + + While individual tastes vary (and are not the point here) patches should + be created using either C<-u> or C<-c> arguments to diff. These produce, + respectively, unified diffs (where the changed line appears immediately next + to the original) and context diffs (where several lines surrounding the changes + are included). See the manpage for diff for more details. + + Also, the preferred method for patching is - + + C | C<-u>] Eold-fileE Enew-fileE> + + Note the order of files. + + Also, if your patch is to the core (rather than to a module) it + is better to create it as a context diff as some machines have + broken patch utilities that choke on unified diffs. + + GNU diff has many desirable features not provided by most vendor-supplied + diffs. Some examples using GNU diff: + + # generate a patch for a newly added file + % diff -u /dev/null new/file + + # generate a patch to remove a file (patch > v2.4 will remove it cleanly) + % diff -u old/goner /dev/null + + # get additions, deletions along with everything else, recursively + % diff -ruN olddir newdir + + # ignore whitespace + % diff -bu a/file b/file + + # show function name in every hunk (safer, more informative) + % diff -u -F '^[_a-zA-Z0-9]+ *(' old/file new/file + + + =item Directories + + Patches should be generated from the source root directory, not from the + directory that the patched file resides in. This insures that the maintainer + patches the proper file and avoids name collisions (especially common when trying + to apply patches to files that appear in both $src_root/ext/* and $src_root/lib/*). + It is better to diff the file in $src_root/ext than the file in $src_root/lib. + + =item Filenames + + The most usual convention when submitting patches for a single file is to make + your changes to a copy of the file with the same name as the original. Rename + the original file in such a way that it is obvious what is being patched ($file~ or + $file.old seem to be popular). + + If you are submitting patches that affect multiple files then you should backup + the entire directory tree (to $source_root.old/ for example). This will allow + C Eold-dirE Enew-dirE> to create all the patches + at once. + + =back + + =head2 What to include in your patch + + =over 4 + + =item Description of problem + + The first thing you should include is a description of the problem that + the patch corrects. If it is a code patch (rather than a documentation + patch) you should also include a small test case that illustrates the + bug. + + =item Direction for application + + You should include instructions on how to properly apply your patch. + These should include the files affected, any shell scripts or commands + that need to be run before or after application of the patch, and + the command line necessary for application. + + =item If you have a code patch + + If you are submitting a code patch there are several other things that + you need to do. + + =over 4 + + =item Comments, Comments, Comments + + Be sure to adequately comment your code. While commenting every + line is unnecessary, anything that takes advantage of side effects of + operators, that creates changes that will be felt outside of the + function being patched, or that others may find confusing should + be documented. If you are going to err, it is better to err on the + side of adding too many comments than too few. + + =item Style + + Please follow the indentation style and nesting style in use in the + block of code that you are patching. + + =item Testsuite + + When submitting a patch you should make every effort to also include + an addition to perl's regression tests to properly exercise your + patch. Your testsuite additions should generally follow these + guidelines (courtesy of Gurusamy Sarathy (gsar@engin.umich.edu))- + + Know what you're testing. Read the docs, and the source. + Tend to fail, not succeed. + Interpret results strictly. + Use unrelated features (this will flush out bizarre interactions). + Use non-standard idioms (otherwise you are not testing TIMTOWTDI). + Avoid using hardcoded test numbers whenever possible (the + EXPECTED/GOT found in t/op/tie.t is much more maintainable, + and gives better failure reports). + Give meaningful error messages when a test fails. + Avoid using qx// and system() unless you are testing for them. If you + do use them, make sure that you cover _all_ perl platforms. + Unlink any temporary files you create. + Promote unforeseen warnings to errors with $SIG{__WARN__}. + Be sure to use the libraries and modules shipped with version + being tested, not those that were already installed. + Add comments to the code explaining what you are testing for. + Make updating the '1..42' string unnecessary. Or make sure that + you update it. + Test _all_ behaviors of a given operator, library, or function- + All optional arguments + Return values in various contexts (boolean, scalar, list, lvalue) + Use both global and lexical variables + Don't forget the exceptional, pathological cases. + + =back + + =item Test your patch + + Apply your patch to a clean distribution, compile, and run the + regression test suite (you did remember to add one for your + patch, didn't you). + + =back + + =head2 An example patch creation + + This should work for most patches- + + cp MANIFEST MANIFEST.old + emacs MANIFEST + (make changes) + cd .. + diff -c perl5.008_42/MANIFEST.old perl5.008_42/MANIFEST > mypatch + (testing the patch:) + mv perl5.008_42/MANIFEST perl5.008_42/MANIFEST.new + cp perl5.008_42/MANIFEST.old perl5.008_42/MANIFEST + patch -p < mypatch + (should succeed) + diff perl5.008_42/MANIFEST perl5.008_42/MANIFEST.new + (should produce no output) + + =head2 Submitting your patch + + =over 4 + + =item Mailers + + Please, please, please (get the point? 8-) don't use a mailer that + word wraps your patch or that MIME encodes it. Both of these leave + the patch essentially worthless to the maintainer. + + If you have no choice in mailers and no way to get your hands on a + better one there is, of course, a perl solution. Just do this- + + perl -ne 'print pack("u*",$_)' patch > patch.uue + + and post patch.uue with a note saying to unpack it using + + perl -ne 'print unpack("u*",$_)' patch.uue > patch + + =item Subject lines for patches + + The subject line on your patch should read + + [PATCH]5.xxx_xx (Area) Description + + where the x's are replaced by the appropriate version number, + area is a short keyword identifying what area of perl you are + patching, and description is a very brief summary of the + problem (don't forget this is an email header). + + Examples- + + [PATCH]5.004_04 (DOC) fix minor typos + + [PATCH]5.004_99 (CORE) New warning for foo() when frobbing + + [PATCH]5.005_42 (CONFIG) Added support for fribnatz 1.5 + + =item Where to send your patch + + If your patch is for the perl core it should be sent perlbug@perl.org. + If it is a patch to a module that you downloaded from CPAN you should + submit your patch to that module's author. + + =back + + =head2 Applying a patch + + =over 4 + + =item General notes on applying patches + + The following are some general notes on applying a patch + to your perl distribution. + + =over 4 + + =item patch C<-p> + + It is generally easier to apply patches with the C<-p> argument to + patch. This helps reconcile differing paths between the machine the + patch was created on and the machine on which it is being applied. + + =item Cut and paste + + _Never_ cut and paste a patch into your editor. This usually clobbers + the tabs and confuses patch. + + =item Hand editing patches + + Avoid hand editing patches as this frequently screws up the whitespace + in the patch and confuses the patch program. + + =back + + =back + + =head2 Final notes + + If you follow these guidelines it will make everybody's life a little + easier. You'll have the satisfaction of having contributed to perl, + others will have an easy time using your work, and it should be easier + for the maintainers to coordinate the occasionally large numbers of + patches received. + + Also, just because you're not a brilliant coder doesn't mean that you + can't contribute. As valuable as code patches are there is always a + need for better documentation (especially considering the general + level of joy that most programmers feel when forced to sit down and + write docs). If all you do is patch the documentation you have still + contributed more than the person who sent in an amazing new feature + that no one can use because no one understands the code (what I'm + getting at is that documentation is both the hardest part to do + (because everyone hates doing it) and the most valuable). + + Mostly, when contributing patches, imagine that it is B receiving + hundreds of patches and that it is B responsibility to integrate + them into the source. Obviously you'd want the patches to be as easy + to apply as possible. Keep that in mind. 8-) + + =head1 Last Modified + + Last modified 21 January 1999 + Daniel Grisinger + + =head1 Author and Copyright Information + + Copyright (c) 1998 Daniel Grisinger + + Adapted from a posting to perl5-porters by Tim Bunce (Tim.Bunce@ig.co.uk). + + I'd like to thank the perl5-porters for their suggestions. diff -c 'perl5.004_04/Porting/patchls' 'perl5.004_05/Porting/patchls' Index: ./Porting/patchls *** ./Porting/patchls Wed Oct 15 09:09:31 1997 --- ./Porting/patchls Mon Apr 26 15:10:50 1999 *************** *** 1,4 **** ! #!/bin/perl -w # # patchls - patch listing utility # --- 1,4 ---- ! #!/usr/bin/perl -w # # patchls - patch listing utility # *************** *** 17,26 **** use strict; use vars qw($VERSION); ! $VERSION = 2.04; sub usage { ! die q{ patchls [options] patchfile [ ... ] -h no filename headers (like grep), only the listing. --- 17,26 ---- use strict; use vars qw($VERSION); ! $VERSION = 2.10; sub usage { ! die qq{ patchls [options] patchfile [ ... ] -h no filename headers (like grep), only the listing. *************** *** 30,42 **** -m print formatted Meta-information (Subject,From,Msg-ID etc). -p N strip N levels of directory Prefix (like patch), else automatic. -v more verbose (-d for noisy debugging). -f F only list patches which patch files matching regexp F ! (F has $ appended unless it contains a /). other options for special uses: -I just gather and display summary Information about the patches. -4 write to stdout the PerForce commands to prepare for patching. -M T Like -m but only output listed meta tags (eg -M 'Title From') -W N set wrap width to N (defaults to 70, use 0 for no wrap) } } --- 30,49 ---- -m print formatted Meta-information (Subject,From,Msg-ID etc). -p N strip N levels of directory Prefix (like patch), else automatic. -v more verbose (-d for noisy debugging). + -n give a count of the number of patches applied to a file if >1. -f F only list patches which patch files matching regexp F ! (F has \$ appended unless it contains a /). ! -e Expect patched files to Exist (relative to current directory) ! Will print warnings for files which don't. Also affects -4 option. other options for special uses: -I just gather and display summary Information about the patches. -4 write to stdout the PerForce commands to prepare for patching. + -5 like -4 but add "|| exit 1" after each command -M T Like -m but only output listed meta tags (eg -M 'Title From') -W N set wrap width to N (defaults to 70, use 0 for no wrap) + -X list patchfiles that may clash (i.e. patch the same file) + + patchls version $VERSION by Tim Bunce } } *************** *** 44,83 **** $::opt_d = 0; $::opt_v = 0; $::opt_m = 0; $::opt_i = 0; $::opt_h = 0; $::opt_l = 0; $::opt_c = 0; $::opt_f = ''; # special purpose options $::opt_I = 0; $::opt_4 = 0; # output PerForce commands to prepare for patching $::opt_M = ''; # like -m but only output these meta items (-M Title) $::opt_W = 70; # set wrap width columns (see Text::Wrap module) usage unless @ARGV; ! getopts("mihlvc4p:f:IM:W:") or usage; $columns = $::opt_W || 9999999; $::opt_m = 1 if $::opt_M; ! my @show_meta = split(' ', $::opt_M || 'Title From Msg-ID'); my %cat_title = ( 'BUILD' => 'BUILD PROCESS', 'CORE' => 'CORE LANGUAGE', 'DOC' => 'DOCUMENTATION', ! 'LIB' => 'LIBRARY AND EXTENSIONS', 'PORT1' => 'PORTABILITY - WIN32', 'PORT2' => 'PORTABILITY - GENERAL', 'TEST' => 'TESTS', 'UTIL' => 'UTILITIES', 'OTHER' => 'OTHER CHANGES', ); ! my %ls; # Style 1: # *** perl-5.004/embed.h Sat May 10 03:39:32 1997 --- 51,125 ---- $::opt_d = 0; $::opt_v = 0; $::opt_m = 0; + $::opt_n = 0; $::opt_i = 0; $::opt_h = 0; $::opt_l = 0; $::opt_c = 0; $::opt_f = ''; + $::opt_e = 0; # special purpose options $::opt_I = 0; $::opt_4 = 0; # output PerForce commands to prepare for patching + $::opt_5 = 0; $::opt_M = ''; # like -m but only output these meta items (-M Title) $::opt_W = 70; # set wrap width columns (see Text::Wrap module) + $::opt_C = 0; # 'Chip' mode (handle from/tags/article/bug files) undocumented + $::opt_X = 0; # list patchfiles that patch the same file usage unless @ARGV; ! getopts("dmnihlvecC45Xp:f:IM:W:") or usage; $columns = $::opt_W || 9999999; $::opt_m = 1 if $::opt_M; ! $::opt_4 = 1 if $::opt_5; ! $::opt_i = 1 if $::opt_X; ! ! # see get_meta_info() ! my @show_meta = split(' ', $::opt_M || 'Title From Msg-ID Files'); ! my %show_meta = map { ($_,1) } @show_meta; my %cat_title = ( 'BUILD' => 'BUILD PROCESS', 'CORE' => 'CORE LANGUAGE', 'DOC' => 'DOCUMENTATION', ! 'LIB' => 'LIBRARY', 'PORT1' => 'PORTABILITY - WIN32', 'PORT2' => 'PORTABILITY - GENERAL', 'TEST' => 'TESTS', 'UTIL' => 'UTILITIES', 'OTHER' => 'OTHER CHANGES', + 'EXT' => 'EXTENSIONS', + 'UNKNOWN' => 'UNKNOWN - NO FILES PATCHED', ); ! ! sub get_meta_info { ! my $ls = shift; ! local($_) = shift; ! if (/^From:\s+(.*\S)/i) {; ! my $from = $1; # temporary measure for Chip Salzenberg ! $from =~ s/chip\@(atlantic\.net|perlsupport\.com)/chip\@pobox.com/; ! $from =~ s/\(Tim Bunce\) \(Tim Bunce\)/(Tim Bunce)/; ! $ls->{From}{$from} = 1 ! } ! if (/^Subject:\s+(?:Re: )?(.*\S)/i) { ! my $title = $1; ! $title =~ s/\[(PATCH|PERL)[\w\. ]*\]:?//g; ! $title =~ s/\b(PATCH|PERL)[\w\.]*://g; ! $title =~ s/\bRe:\s+/ /g; ! $title =~ s/\s+/ /g; ! $title =~ s/^\s*(.*?)\s*$/$1/g; ! $ls->{Title}{$title} = 1; ! } ! $ls->{'Msg-ID'}{$1}=1 if /^Message-Id:\s+(.*\S)/i; ! $ls->{Date}{$1}=1 if /^Date:\s+(.*\S)/i; ! $ls->{$1}{$2}=1 if $::opt_M && /^([-\w]+):\s+(.*\S)/; ! } ! # Style 1: # *** perl-5.004/embed.h Sat May 10 03:39:32 1997 *************** *** 89,95 **** # Style 2: # --- perl5.004001/mg.c Sun Jun 08 12:26:24 1997 # +++ perl5.004-bc/mg.c Sun Jun 08 11:56:08 1997 ! # @@ -656,9 +656,27 @@ # or (rcs, note the different date format) # --- 1.18 1997/05/23 19:22:04 # +++ ./pod/perlembed.pod 1997/06/03 21:41:38 --- 131,141 ---- # Style 2: # --- perl5.004001/mg.c Sun Jun 08 12:26:24 1997 # +++ perl5.004-bc/mg.c Sun Jun 08 11:56:08 1997 ! # @@ .. @@ ! # or for deletions ! # --- perl5.004001/mg.c Sun Jun 08 12:26:24 1997 ! # +++ /dev/null Sun Jun 08 11:56:08 1997 ! # @@ ... @@ # or (rcs, note the different date format) # --- 1.18 1997/05/23 19:22:04 # +++ ./pod/perlembed.pod 1997/06/03 21:41:38 *************** *** 97,108 **** # Variation: # Index: embed.h ! my($in, $prevline, $prevtype, $ls); ! my(@removed, @added); my $prologue = 1; # assume prologue till patch or /^exit\b/ seen foreach my $argv (@ARGV) { $in = $argv; unless (open F, "<$in") { warn "Unable to open $in: $!\n"; next; --- 143,164 ---- # Variation: # Index: embed.h ! my %ls; ! ! my $in; ! my $ls; ! my $prevline = ''; ! my $prevtype = ''; ! my (%removed, %added); my $prologue = 1; # assume prologue till patch or /^exit\b/ seen + foreach my $argv (@ARGV) { $in = $argv; + if (-d $in) { + warn "Ignored directory $in\n"; + next; + } unless (open F, "<$in") { warn "Unable to open $in: $!\n"; next; *************** *** 115,149 **** # not an interesting patch line # but possibly meta-information or prologue if ($prologue) { ! push @added, $1 if /^touch\s+(\S+)/; ! push @removed, $1 if /^rm\s+(?:-f)?\s*(\S+)/; $prologue = 0 if /^exit\b/; } ! next unless $::opt_m; ! $ls->{From}{$1}=1,next if /^From:\s+(.*\S)/i; ! $ls->{Title}{$1}=1,next if /^Subject:\s+(?:Re: )?(.*\S)/i; ! $ls->{'Msg-ID'}{$1}=1,next if /^Message-Id:\s+(.*\S)/i; ! $ls->{Date}{$1}=1,next if /^Date:\s+(.*\S)/i; ! $ls->{$1}{$2}=1,next if /^([-\w]+):\s+(.*\S)/; next; } $type = $1; next if /^--- [0-9,]+ ----$/ || /^\*\*\* [0-9,]+ \*\*\*\*$/; $prologue = 0; ! print "Last: $prevline","This: ${_}Got: $1\n\n" if $::opt_d; # Some patches have Index lines but not diff headers # Patch copes with this, so must we. It's also handy for # documenting manual changes by simply adding Index: lines ! # to the file which describes the problem bing fixed. ! add_file($ls, $1), next if /^Index:\s+(\S+)/; if ( ($type eq '---' and $prevtype eq '***') # Style 1 or ($type eq '+++' and $prevtype eq '---') # Style 2 ) { if (/^[-+*]{3} (\S+)\s*(.*?\d\d:\d\d:\d\d)?/) { # double check ! add_file($ls, $1); } else { warn "$in $.: parse error (prev $prevtype, type $type)\n$prevline$_"; --- 171,210 ---- # not an interesting patch line # but possibly meta-information or prologue if ($prologue) { ! $added{$1} = 1 if /^touch\s+(\S+)/; ! $removed{$1} = 1 if /^rm\s+(?:-f)?\s*(\S+)/; $prologue = 0 if /^exit\b/; } ! get_meta_info($ls, $_) if $::opt_m; next; } $type = $1; next if /^--- [0-9,]+ ----$/ || /^\*\*\* [0-9,]+ \*\*\*\*$/; $prologue = 0; ! print "Last: $prevline","This: ${_}Got: $type\n\n" if $::opt_d; # Some patches have Index lines but not diff headers # Patch copes with this, so must we. It's also handy for # documenting manual changes by simply adding Index: lines ! # to the file which describes the problem being fixed. ! if (/^Index:\s+(.*)/) { ! my $f; ! foreach $f (split(/ /, $1)) { add_patched_file($ls, $f) } ! next; ! } if ( ($type eq '---' and $prevtype eq '***') # Style 1 or ($type eq '+++' and $prevtype eq '---') # Style 2 ) { if (/^[-+*]{3} (\S+)\s*(.*?\d\d:\d\d:\d\d)?/) { # double check ! if ($1 eq "/dev/null") { ! $prevline =~ /^[-+*]{3} (\S+)\s*/; ! add_deleted_file($ls, $1); ! } ! else { ! add_patched_file($ls, $1); ! } } else { warn "$in $.: parse error (prev $prevtype, type $type)\n$prevline$_"; *************** *** 152,162 **** } continue { $prevline = $_; ! $prevtype = $type; $type = ''; } # if we don't have a title for -m then use the file name ! $ls->{Title}{$in}=1 if $::opt_m and !$ls->{Title} and $ls->{out}; $ls->{category} = $::opt_c --- 213,246 ---- } continue { $prevline = $_; ! $prevtype = $type || ''; $type = ''; } + + # special mode for patch sets from Chip + if ($in =~ m:[\\/]patch$:) { + my $is_chip; + my $chip; + my $dir; ($dir = $in) =~ s:[\\/]patch$::; + if (!$ls->{From} && (open(CHIP,"$dir/article") || open(CHIP,"$dir/bug"))) { + get_meta_info($ls, $_) while (); + $is_chip = 1; + } + if (open CHIP,"<$dir/from") { + chop($chip = ); + $ls->{From} = { $chip => 1 }; + $is_chip = 1; + } + if (open CHIP,"<$dir/tag") { + chop($chip = ); + $ls->{Title} = { $chip => 1 }; + $is_chip = 1; + } + $ls->{From} = { "Chip Salzenberg" => 1 } if $is_chip && !$ls->{From}; + } + # if we don't have a title for -m then use the file name ! $ls->{Title}{"Untitled: $in"}=1 if $::opt_m and !$ls->{Title} and $ls->{out}; $ls->{category} = $::opt_c *************** *** 170,182 **** my @ls = values %ls; if ($::opt_f) { # filter out patches based on -f - my $out; $::opt_f .= '$' unless $::opt_f =~ m:/:; @ls = grep { - my @out = keys %{$_->{out}}; my $match = 0; ! for $out (@out) { ! ++$match if $out =~ m/$::opt_f/o; } $match; } @ls; --- 254,268 ---- my @ls = values %ls; if ($::opt_f) { # filter out patches based on -f $::opt_f .= '$' unless $::opt_f =~ m:/:; @ls = grep { my $match = 0; ! if ($_->{is_in}) { ! my @out = keys %{ $_->{out} }; ! $match=1 if grep { m/$::opt_f/o } @out; ! } ! else { ! $match=1 if $_->{in} =~ m/$::opt_f/o; } $match; } @ls; *************** *** 190,234 **** # --- Handle special modes --- if ($::opt_4) { ! print map { "p4 delete $_\n" } @removed if @removed; ! print map { "p4 add $_\n" } @added if @added; ! my @patches = grep { $_->{is_in} } @ls; my %patched = map { ($_, 1) } map { keys %{$_->{out}} } @patches; ! delete @patched{@added}; my @patched = sort keys %patched; ! print map { "p4 edit $_\n" } @patched if @patched; ! exit 0; } if ($::opt_I) { my $n_patches = 0; my($in,$out); my %all_out; foreach $in (@ls) { next unless $in->{is_in}; ++$n_patches; my @outs = keys %{$in->{out}}; @all_out{@outs} = ($in->{in}) x @outs; } my @all_out = sort keys %all_out; my @missing = grep { ! -f $_ } @all_out; print "$n_patches patch files patch ".@all_out." files (".@missing." missing)\n"; print "(use -v to list patches which patch 'missing' files)\n" ! if @missing && !$::opt_v; if ($::opt_v and @missing) { print "Missing files:\n"; foreach $out (@missing) { ! printf " %-20s\t%s\n", $out, $all_out{$out}; } } ! print "Added files: @added\n" if @added; ! print "Removed files: @removed\n" if @removed; exit 0+@missing; } unless ($::opt_c and $::opt_m) { foreach $ls (@ls) { next unless ($::opt_i) ? $ls->{is_out} : $ls->{is_in}; list_files_by_patch($ls); } } --- 276,342 ---- # --- Handle special modes --- if ($::opt_4) { ! my $tail = ($::opt_5) ? "|| exit 1" : ""; ! print map { "p4 delete $_$tail\n" } sort keys %removed if %removed; ! print map { "p4 add $_$tail\n" } sort keys %added if %added; ! my @patches = sort grep { $_->{is_in} } @ls; ! my @no_outs = grep { keys %{$_->{out}} == 0 } @patches; ! warn "Warning: Some files contain no patches:", ! join("\n\t", '', map { $_->{in} } @no_outs), "\n" if @no_outs; ! my %patched = map { ($_, 1) } map { keys %{$_->{out}} } @patches; ! delete @patched{keys %added}; my @patched = sort keys %patched; ! foreach(@patched) { ! next if $removed{$_}; ! my $edit = ($::opt_e && !-f $_) ? "add " : "edit"; ! print "p4 $edit $_$tail\n"; ! } ! exit 0 unless $::opt_C; } + if ($::opt_I) { my $n_patches = 0; my($in,$out); my %all_out; + my @no_outs; foreach $in (@ls) { next unless $in->{is_in}; ++$n_patches; my @outs = keys %{$in->{out}}; + push @no_outs, $in unless @outs; @all_out{@outs} = ($in->{in}) x @outs; } my @all_out = sort keys %all_out; my @missing = grep { ! -f $_ } @all_out; print "$n_patches patch files patch ".@all_out." files (".@missing." missing)\n"; + print @no_outs." patch files don't contain patches.\n" if @no_outs; print "(use -v to list patches which patch 'missing' files)\n" ! if (@missing || @no_outs) && !$::opt_v; ! if ($::opt_v and @no_outs) { ! print "Patch files which don't contain patches:\n"; ! foreach $out (@no_outs) { ! printf " %-20s\n", $out->{in}; ! } ! } if ($::opt_v and @missing) { print "Missing files:\n"; foreach $out (@missing) { ! printf " %-20s\t", $out unless $::opt_h; ! print $all_out{$out} unless $::opt_l; ! print "\n"; } } ! print "Added files: ".join(" ",sort keys %added )."\n" if %added; ! print "Removed files: ".join(" ",sort keys %removed)."\n" if %removed; exit 0+@missing; } unless ($::opt_c and $::opt_m) { foreach $ls (@ls) { next unless ($::opt_i) ? $ls->{is_out} : $ls->{is_in}; + next if $::opt_X and keys %{$ls->{out}} <= 1; list_files_by_patch($ls); } } *************** *** 261,271 **** # --- ! sub add_file { my $ls = shift; ! my $out = trim_name(shift); ! $ls->{out}->{$out} = 1; # do the -i inverse as well, even if we're not doing -i my $i = $ls{$out} ||= { --- 369,385 ---- # --- ! sub add_patched_file { my $ls = shift; ! my $raw_name = shift; ! my $action = shift || 1; # 1==patched, 2==deleted ! ! my $out = trim_name($raw_name); ! print "add_patched_file '$out' ($raw_name, $action)\n" if $::opt_d; ! ! $ls->{out}->{$out} = $action; ! warn "$out patched but not present\n" if $::opt_e && !-f $out; # do the -i inverse as well, even if we're not doing -i my $i = $ls{$out} ||= { *************** *** 276,288 **** $i->{out}->{$in} = 1; } sub trim_name { # reduce/tidy file paths from diff lines my $name = shift; - $name = "$name ($in)" if $name eq "/dev/null"; $name =~ s:\\:/:g; # adjust windows paths $name =~ s://:/:g; # simplify (and make win \\share into absolute path) ! if (defined $::opt_p) { # strip on -p levels of directory prefix my $dc = $::opt_p; $name =~ s:^[^/]+/(.+)$:$1: while $dc-- > 0; --- 390,413 ---- $i->{out}->{$in} = 1; } + sub add_deleted_file { + my $ls = shift; + my $raw_name = shift; + my $out = trim_name($raw_name); + print "add_deleted_file '$out' ($raw_name)\n" if $::opt_d; + $removed{$out} = 1; + #add_patched_file(@_[0,1], 2); + } + sub trim_name { # reduce/tidy file paths from diff lines my $name = shift; $name =~ s:\\:/:g; # adjust windows paths $name =~ s://:/:g; # simplify (and make win \\share into absolute path) ! if ($name eq "/dev/null") { ! # do nothing (XXX but we need a way to record deletions) ! } ! elsif (defined $::opt_p) { # strip on -p levels of directory prefix my $dc = $::opt_p; $name =~ s:^[^/]+/(.+)$:$1: while $dc-- > 0; *************** *** 290,296 **** else { # try to strip off leading path to perl directory # if absolute path, strip down to any *perl* directory first $name =~ s:^/.*?perl.*?/::i; ! $name =~ s:.*perl[-_]?5?[._]?[-_a-z0-9.+]*/::i; $name =~ s:^\./::; } return $name; --- 415,421 ---- else { # try to strip off leading path to perl directory # if absolute path, strip down to any *perl* directory first $name =~ s:^/.*?perl.*?/::i; ! $name =~ s:.*(perl|maint)[-_]?5?[._]?[-_a-z0-9.+]*/::i; $name =~ s:^\./::; } return $name; *************** *** 308,314 **** my @list = sort keys %{$ls->{$meta}}; push @meta, sprintf "%7s: ", $meta; if ($meta eq 'Title') { ! @list = map { s/\[?PATCH\]?:?\s*//g; "\"$_\""; } @list } elsif ($meta eq 'From') { # fix-up bizzare addresses from japan and ibm :-) --- 433,440 ---- my @list = sort keys %{$ls->{$meta}}; push @meta, sprintf "%7s: ", $meta; if ($meta eq 'Title') { ! @list = map { "\"$_\""; } @list; ! push @list, "#$1" if $::opt_C && $ls->{in} =~ m:\b(\w\d+)/patch$:; } elsif ($meta eq 'From') { # fix-up bizzare addresses from japan and ibm :-) *************** *** 328,344 **** $name = "\n$name" if @meta and $name; } # don't print the header unless the file contains something interesting ! return if !@meta and !$ls->{out}; ! print("$ls->{in}\n"),return if $::opt_l; # -l = no listing # a twisty maze of little options my $cat = ($ls->{category} and !$::opt_m) ? "\t$ls->{category}" : ""; print "$name$cat: " unless ($::opt_h and !$::opt_v) or !"$name$cat"; ! print join('',"\n",@meta) if @meta; my @v = sort PATORDER keys %{ $ls->{out} }; ! my $v = "@v\n"; print $::opt_m ? " Files: ".my_wrap(""," ",$v) : $v; } --- 454,482 ---- $name = "\n$name" if @meta and $name; } # don't print the header unless the file contains something interesting ! return if !@meta and !$ls->{out} and !$::opt_v; ! if ($::opt_l) { # -l = no listing, just names ! print "$ls->{in}"; ! my $n = keys %{ $ls->{out} }; ! print " ($n patches)" if $::opt_n and $n>1; ! print "\n"; ! return; ! } # a twisty maze of little options my $cat = ($ls->{category} and !$::opt_m) ? "\t$ls->{category}" : ""; print "$name$cat: " unless ($::opt_h and !$::opt_v) or !"$name$cat"; ! my $sep = "\n"; ! $sep = "" if @show_meta==1 && $::opt_c && $::opt_h; ! print join('', $sep, @meta) if @meta; + return if $::opt_m && !$show_meta{Files}; my @v = sort PATORDER keys %{ $ls->{out} }; ! my $n = @v; ! my $v = "@v"; print $::opt_m ? " Files: ".my_wrap(""," ",$v) : $v; + print " ($n patches)" if $::opt_n and $n>1; + print "\n"; } *************** *** 364,371 **** if m:^(cygwin32|os2|plan9|qnx|vms)/: or m:^(hints|Porting|ext/DynaLoader)/: or m:^README\.:; $c{LIB} += 10,next ! if m:^(lib|ext)/:; $c{'CORE'} += 15,next if m:^[^/]+[\._]([chH]|sym|pl)$:; $c{BUILD} += 10,next --- 502,511 ---- if m:^(cygwin32|os2|plan9|qnx|vms)/: or m:^(hints|Porting|ext/DynaLoader)/: or m:^README\.:; + $c{EXT} += 10,next + if m:^(ext|lib/ExtUtils)/:; $c{LIB} += 10,next ! if m:^(lib)/:; $c{'CORE'} += 15,next if m:^[^/]+[\._]([chH]|sym|pl)$:; $c{BUILD} += 10,next *************** *** 391,397 **** } else { my($c, $v) = %c; ! $c ||= 'OTHER'; $v ||= 0; print " ".@$files." patches: $c: $v\n" if $verb; return $c; } --- 531,537 ---- } else { my($c, $v) = %c; ! $c ||= 'UNKNOWN'; $v ||= 0; print " ".@$files." patches: $c: $v\n" if $verb; return $c; } diff -c 'perl5.004_04/Porting/pumpkin.pod' 'perl5.004_05/Porting/pumpkin.pod' Index: ./Porting/pumpkin.pod Prereq: 1.13 *** ./Porting/pumpkin.pod Wed Oct 8 09:58:04 1997 --- ./Porting/pumpkin.pod Sat Apr 24 12:35:57 1999 *************** *** 8,15 **** =head1 DESCRIPTION ! This document attempts to begin to describe some of the ! considerations involved in patching and maintaining perl. This document is still under construction, and still subject to significant changes. Still, I hope parts of it will be useful, --- 8,15 ---- =head1 DESCRIPTION ! This document attempts to begin to describe some of the considerations ! involved in patching, porting, and maintaining perl. This document is still under construction, and still subject to significant changes. Still, I hope parts of it will be useful, *************** *** 73,86 **** =head2 Subversions ! In addition, there may be "developer" sub-versions available. These ! are not official releases. They may contain unstable experimental ! features, and are subject to rapid change. Such developer ! sub-versions are numbered with sub-version numbers. For example, ! version 5.003_04 is the 4'th developer version built on top of ! 5.003. It might include the _01, _02, and _03 changes, but it ! also might not. Sub-versions are allowed to be subversive. (But see ! the next section for recent changes.) These sub-versions can also be used as floating point numbers, so you can do things such as --- 73,84 ---- =head2 Subversions ! In addition, there usually are sub-versions available. Sub-versions ! are numbered with sub-version numbers. For example, version 5.003_04 ! is the 4'th developer version built on top of 5.003. It might include ! the _01, _02, and _03 changes, but it also might not. Sub-versions are ! allowed to be subversive. (But see the next section for recent ! changes.) These sub-versions can also be used as floating point numbers, so you can do things such as *************** *** 92,117 **** use 5.003_03; # the "_" is optional Sub-versions produced by the members of perl5-porters are usually ! available on CPAN in the F directory. =head2 Maintenance and Development Subversions ! As an experiment, starting with version 5.004, subversions _01 through ! _49 will be reserved for bug-fix maintenance releases, and subversions ! _50 through _99 will be available for unstable development versions. The separate bug-fix track is being established to allow us an easy way to distribute important bug fixes without waiting for the developers to untangle all the other problems in the current ! developer's release. Trial releases of bug-fix maintenance releases are announced on perl5-porters. Trial releases use the new subversion number (to avoid testers installing it over the previous release) and include a 'local ! patch' entry in patchlevel.h. ! Watch for announcements of maintenance subversions in ! comp.lang.perl.announce. =head2 Why such a complicated scheme? --- 90,136 ---- use 5.003_03; # the "_" is optional Sub-versions produced by the members of perl5-porters are usually ! available on CPAN in the F and F ! directories. =head2 Maintenance and Development Subversions ! Starting with version 5.004, subversions _01 through _49 is reserved ! for bug-fix maintenance releases, and subversions _50 through _99 for ! unstable development versions. The separate bug-fix track is being established to allow us an easy way to distribute important bug fixes without waiting for the developers to untangle all the other problems in the current ! developer's release. The first rule of maintenance work is "First, do ! no harm." Trial releases of bug-fix maintenance releases are announced on perl5-porters. Trial releases use the new subversion number (to avoid testers installing it over the previous release) and include a 'local ! patch' entry in patchlevel.h. The distribution file contains the ! string C to make clear that the file is not meant for ! public consumption. ! ! In general, the names of official distribution files for the public ! always match the regular expression ! ! ^perl5\.\d{3}(_[0-4]\d)?\.tar\.gz$ ! ! Developer releases always match ! ! ^perl5\.\d{3}(_[5-9]\d)?\.tar\.gz$ ! And the trial versions for a new maintainance release match ! ! ^perl5\.\d{3}(_[0-4]\d)-MAINT_TRIAL_\d+\.tar\.gz$ ! ! In the past it has been observed that pumkings tend to invent new ! naming conventions on the fly. If you are a pumpking, before you ! invent a new name for any of the three types of perl distributions, ! please inform the guys from the CPAN who are doing indexing and ! provide the trees of symlinks and the like. They will have to know ! I what you decide. =head2 Why such a complicated scheme? *************** *** 153,159 **** The name has stuck. ! =head1 Philosophical Issues in Patching Perl There are no absolute rules, but there are some general guidelines I have tried to follow as I apply patches to the perl sources. --- 172,178 ---- The name has stuck. ! =head1 Philosophical Issues in Patching and Porting Perl There are no absolute rules, but there are some general guidelines I have tried to follow as I apply patches to the perl sources. *************** *** 172,177 **** --- 191,206 ---- could still get their work done, but others could build a shared libperl if they wanted to as well. + Contain your changes carefully. Assume nothing about other operating + systems, not even closely related ones. Your changes must not affect + other platforms. + + Spy shamelessly on how similar patching or porting issues have been + settled elsewhere. + + If feasible, try to keep filenames 8.3-compliant to humor those poor + souls that get joy from running Perl under such dire limitations. + =head2 Seek consensus on major changes If you are making big changes, don't do it in secret. Discuss the *************** *** 194,199 **** --- 223,310 ---- releases of the operating system. Further, the feature-specific tests may help out folks on another platform who have the same problem. + =head2 Machine-specific files + + =over 4 + + =item source code + + If you have many machine-specific #defines or #includes, consider + creating an "osish.h" (os2ish.h, vmsish.h, and so on) and including + that in perl.h. If you have several machine-specific files (function + emulations, function stubs, build utility wrappers) you may create a + separate subdirectory (djgpp, win32) and put the files in there. + Remember to update C when you add files. + + If your system support dynamic loading but none of the existing + methods at F work for you, you must write + a new one. Study the existing ones to see what kind of interface + you must supply. + + =item build hints + + There are two kinds of hints: hints for building Perl and hints for + extensions. The former live in the C subdirectory, the latter + in C subdirectories. + + The top level hints are Bourne-shell scripts that set, modify and + unset appropriate Configure variables, based on the Configure command + line options and possibly existing config.sh and Policy.sh files from + previous Configure runs. + + The extension hints are written Perl (by the time they are used + miniperl has been built) and control the building of their respective + extensions. They can be used to for example manipulate compilation + and linking flags. + + =item build and installation Makefiles, scripts, and so forth + + Sometimes you will also need to tweak the Perl build and installation + procedure itself, like for example F and F. + Tread very carefully, even more than usual. Contain your changes + with utmost care. + + =item test suite + + Many of the tests in C subdirectory assume machine-specific things + like existence of certain functions, something about filesystem + semantics, certain external utilities and their error messages. Use + the C<$^O> and the C module (which contains the results of the + Configure run, in effect the C converted to Perl) to either + skip (preferably not) or customize (preferable) the tests for your + platform. + + =item modules + + Certain standard modules may need updating if your operating system + sports for example a native filesystem naming. You may want to update + some or all of the modules File::Basename, File::Spec, File::Path, and + File::Copy to become aware of your native filesystem syntax and + peculiarities. + + =item documentation + + If your operating system comes from outside UNIX you almost certainly + will have differences in the available operating system functionality + (missing system calls, different semantics, whatever). Please + document these at F. If your operating system is + the first B to have a system call also update the list of + "portability-bewares" at the beginning of F. + + A file called F at the top level that explains things + like how to install perl at this platform, where to get any possibly + required additional software, and for example what test suite errors + to expect, is nice too. + + You may also want to write a separate F<.pod> file for your operating + system to tell about existing mailing lists, os-specific modules, + documentation, whatever. Please name these along the lines of + FI.pod. [unfinished: where to put this file (the pod/ + subdirectory, of course: but more importantly, which/what index files + should be updated?)] + + =back + =head2 Allow for lots of testing We should never release a main version without testing it as a *************** *** 209,215 **** but, in general, we ought to try to avoid breaking widely-installed things. ! =head2 Automate generation of derivative files The F, F, F, and F files are all automatically generated by perl scripts. In general, don't --- 320,326 ---- but, in general, we ought to try to avoid breaking widely-installed things. ! =head2 Automated generation of derivative files The F, F, F, and F files are all automatically generated by perl scripts. In general, don't *************** *** 217,225 **** F and F are also automatically generated by B. In general, you should patch the metaconfig units ! instead of patching these files directly. However, minor changes to ! F may be made in between major sync-ups with the metaconfig ! units, which tends to be complicated operations. =head1 How to Make a Distribution --- 328,346 ---- F and F are also automatically generated by B. In general, you should patch the metaconfig units ! instead of patching these files directly. However, very minor changes ! to F may be made in between major sync-ups with the ! metaconfig units, which tends to be complicated operations. But be ! careful, this can quickly spiral out of control. Running metaconfig ! is not really hard. ! ! Also F is automatically produced from F. ! In general, look out for all F<*.SH> files. ! ! Finally, the sample files in the F subdirectory are ! generated automatically by the script F included ! with the metaconfig units. See L<"run metaconfig"> below for ! information on obtaining the metaconfig units. =head1 How to Make a Distribution *************** *** 273,288 **** metaconfig -m ! will regenerate Configure and config_h.SH. More information on ! obtaining and running metaconfig is in the F file that comes ! with Perl's metaconfig units. Perl's metaconfig units should be ! available the same place you found this file. On CPAN, look under my ! directory F for a file such as F<5.003_07-02.U.tar.gz>. ! That file should be unpacked in your main perl source directory. It ! contains the files needed to run B to reproduce Perl's ! Configure script. (Those units are for 5.003_07. There have been ! changes since then; please contact me if you want more recent ! versions, and I will try to point you in the right direction.) Alternatively, do consider if the F<*ish.h> files might be a better place for your changes. --- 394,409 ---- metaconfig -m ! will regenerate Configure and config_h.SH. Much more information ! on obtaining and running metaconfig is in the F file ! that comes with Perl's metaconfig units. Perl's metaconfig units ! should be available on CPAN. A set of units that will work with ! perl5.005 is in the file F under ! http://www.perl.com/CPAN/authors/id/ANDYD/ . The mc_units tar file ! should be unpacked in your main perl source directory. Note: those ! units were for use with 5.005. There may have been changes since then. ! Check for later versions or contact perl5-porters@perl.org to obtain a ! pointer to the current version. Alternatively, do consider if the F<*ish.h> files might be a better place for your changes. *************** *** 297,313 **** Both commands will also list extra files in the directory that are not listed in MANIFEST. ! The MANIFEST is normally sorted, with one exception. Perl includes ! both a F script and a F script. The ! F script is a front-end to the main F, but ! is there to aid folks who use autoconf-generated F files ! for other software. The problem is that F and F ! are the same on case-insensitive file systems, so I deliberately put ! F first in the MANIFEST so that the extraction of ! F will overwrite F and leave you with the ! correct script. (The F script must also have write ! permission for this to work, so it's the only file in the distribution ! I normally have with write permission.) If you are using metaconfig to regenerate Configure, then you should note that metaconfig actually uses MANIFEST.new, so you want to be sure --- 418,424 ---- Both commands will also list extra files in the directory that are not listed in MANIFEST. ! The MANIFEST is normally sorted. If you are using metaconfig to regenerate Configure, then you should note that metaconfig actually uses MANIFEST.new, so you want to be sure *************** *** 320,333 **** All the tests in the t/ directory ought to be executable. The main makefile used to do a 'chmod t/*/*.t', but that resulted in a self-modifying distribution--something some users would strongly ! prefer to avoid. Probably, the F script should check for this ! and do the chmod if needed, but it doesn't currently. In all, the following files should probably be executable: Configure configpm ! configure embed.pl installperl installman --- 431,445 ---- All the tests in the t/ directory ought to be executable. The main makefile used to do a 'chmod t/*/*.t', but that resulted in a self-modifying distribution--something some users would strongly ! prefer to avoid. The F script will check for this ! and do the chmod if needed, but the tests still ought to be ! executable. In all, the following files should probably be executable: Configure configpm ! configure.gnu embed.pl installperl installman *************** *** 340,346 **** *.SH vms/ext/Stdio/test.pl vms/ext/filespec.t - vms/fndvers.com x2p/*.SH Other things ought to be readable, at least :-). --- 452,457 ---- *************** *** 355,372 **** =head2 Run Configure This will build a config.sh and config.h. You can skip this if you haven't ! changed Configure or config_h.SH at all. ! =head2 Update config_H ! The config_H file is provided to help those folks who can't run Configure. ! It is important to keep it up-to-date. If you have changed config_h.SH, ! those changes must be reflected in config_H as well. (The name config_H was ! chosen to distinguish the file from config.h even on case-insensitive file ! systems.) Simply edit the existing config_H file; keep the first few ! explanatory lines and then copy your new config.h below. ! ! It may also be necessary to update vms/config.vms and plan9/config.plan9, though you should be quite careful in doing so if you are not familiar with those systems. You might want to issue your patch with a promise to quickly issue a follow-up that handles those --- 466,508 ---- =head2 Run Configure This will build a config.sh and config.h. You can skip this if you haven't ! changed Configure or config_h.SH at all. I use the following command ! sh Configure -Dprefix=/opt/perl -Doptimize=-O -Dusethreads \ ! -Dcf_by='yourname' \ ! -Dcf_email='yourname@yourhost.yourplace.com' \ ! -Dperladmin='yourname@yourhost.yourplace.com' \ ! -Dmydomain='.yourplace.com' \ ! -Dmyhostname='yourhost' \ ! -des ! ! =head2 Update Porting/config.sh and Porting/config_H ! ! [XXX ! This section needs revision. We're currently working on easing ! the task of keeping the vms, win32, and plan9 config.sh info ! up-to-date. The plan is to use keep up-to-date 'canned' config.sh ! files in the appropriate subdirectories and then generate 'canned' ! config.h files for vms, win32, etc. from the generic config.sh file. ! This is to ease maintenance. When Configure gets updated, the parts ! sometimes get scrambled around, and the changes in config_H can ! sometimes be very hard to follow. config.sh, on the other hand, can ! safely be sorted, so it's easy to track (typically very small) changes ! to config.sh and then propoagate them to a canned 'config.h' by any ! number of means, including a perl script in win32/ or carrying ! config.sh and config_h.SH to a Unix system and running sh ! config_h.SH.) ! XXX] ! ! The Porting/config.sh and Porting/config_H files are provided to ! help those folks who can't run Configure. It is important to keep ! them up-to-date. If you have changed config_h.SH, those changes must ! be reflected in config_H as well. (The name config_H was chosen to ! distinguish the file from config.h even on case-insensitive file systems.) ! Simply edit the existing config_H file; keep the first few explanatory ! lines and then copy your new config.h below. ! It may also be necessary to update win32/config.?c, vms/config.vms and plan9/config.plan9, though you should be quite careful in doing so if you are not familiar with those systems. You might want to issue your patch with a promise to quickly issue a follow-up that handles those *************** *** 387,401 **** started to fix F to detect this, but I never completed the task. Some additional notes from Larry on this: ! Don't forget to regenerate perly.c.diff. byacc -d perly.y mv y.tab.c perly.c ! patch perly.c perly.c.diff One chunk of lines that often fails begins with --- 523,540 ---- started to fix F to detect this, but I never completed the task. + If C changes, make sure you run C to + update the corresponding VMS files. See L. + Some additional notes from Larry on this: ! Don't forget to regenerate perly_c.diff. byacc -d perly.y mv y.tab.c perly.c ! patch perly.c perly_c.diff One chunk of lines that often fails begins with *************** *** 467,472 **** --- 606,628 ---- separately in the patch file (or both). There is no disagreement that detailed descriptions ought to be easily available somewhere. + =head2 Todo + + The F file contains a roughly-catgorized unordered list of + aspects of Perl that could use enhancement, features that could be + added, areas that could be cleaned up, and so on. During your term as + pumpkin-holder, you will probably address some of these issues, and + perhaps identify others which, while you decide not to address them + this time around, may be tackled in the future. Update the file + reflect the situation as it stands when you hand over the pumpkin. + + You might like, early in your pumpkin-holding career, to see if you + can find champions for partiticular issues on the to-do list: an issue + owned is an issue more likely to be resolved. + + There are also some more porting-specific L items later in this + file. + =head2 OS/2-specific updates In the os2 directory is F, a set of OS/2-specific *************** *** 479,486 **** =head2 VMS-specific updates ! If you have changed F, then you may want to update ! F by running C. The Perl version number appears in several places under F. It is courteous to update these versions. For example, if you are --- 635,642 ---- =head2 VMS-specific updates ! If you have changed F or F, then you most probably want ! to update F by running C. The Perl version number appears in several places under F. It is courteous to update these versions. For example, if you are *************** *** 1030,1035 **** --- 1186,1247 ---- then perl.c will put /my/override ahead of ARCHLIB and PRIVLIB. + =head2 Shared libperl.so location + + Why isn't the shared libperl.so installed in /usr/lib/ along + with "all the other" shared libraries? Instead, it is installed + in $archlib, which is typically something like + + /usr/local/lib/perl5/archname/5.00404 + + and is architecture- and version-specific. + + The basic reason why a shared libperl.so gets put in $archlib is so that + you can have more than one version of perl on the system at the same time, + and have each refer to its own libperl.so. + + Three examples might help. All of these work now; none would work if you + put libperl.so in /usr/lib. + + =over + + =item 1. + + Suppose you want to have both threaded and non-threaded perl versions + around. Configure will name both perl libraries "libperl.so" (so that + you can link to them with -lperl). The perl binaries tell them apart + by having looking in the appropriate $archlib directories. + + =item 2. + + Suppose you have perl5.004_04 installed and you want to try to compile + it again, perhaps with different options or after applying a patch. + If you already have libperl.so installed in /usr/lib/, then it may be + either difficult or impossible to get ld.so to find the new libperl.so + that you're trying to build. If, instead, libperl.so is tucked away in + $archlib, then you can always just change $archlib in the current perl + you're trying to build so that ld.so won't find your old libperl.so. + (The INSTALL file suggests you do this when building a debugging perl.) + + =item 3. + + The shared perl library is not a "well-behaved" shared library with + proper major and minor version numbers, so you can't necessarily + have perl5.004_04 and perl5.004_05 installed simultaneously. Suppose + perl5.004_04 were to install /usr/lib/libperl.so.4.4, and perl5.004_05 + were to install /usr/lib/libperl.so.4.5. Now, when you try to run + perl5.004_04, ld.so might try to load libperl.so.4.5, since it has + the right "major version" number. If this works at all, it almost + certainly defeats the reason for keeping perl5.004_04 around. Worse, + with development subversions, you certaily can't guarantee that + libperl.so.4.4 and libperl.so.4.55 will be compatible. + + Anyway, all this leads to quite obscure failures that are sure to drive + casual users crazy. Even experienced users will get confused :-). Upon + reflection, I'd say leave libperl.so in $archlib. + + =back + =head1 Upload Your Work to CPAN You can upload your work to CPAN if you have a CPAN id. Check out *************** *** 1073,1084 **** We should probably duplicate the metaconfig prefix stuff for an install prefix. ! =item Configure -Dsrcdir=/blah/blah We should be able to emulate B. Tom Tromey tromey@creche.cygnus.com has submitted some patches to ! the dist-users mailing list along these lines. Eventually, they ought ! to get folded back into the main distribution. =item Hint file fixes --- 1285,1325 ---- We should probably duplicate the metaconfig prefix stuff for an install prefix. ! =item Configure -Dsrc=/blah/blah We should be able to emulate B. Tom Tromey tromey@creche.cygnus.com has submitted some patches to ! the dist-users mailing list along these lines. They have been folded ! back into the main distribution, but various parts of the perl ! Configure/build/install process still assume src='.'. ! ! =item Directory for vendor-supplied modules? ! ! If a vendor supplies perl, but wants to leave $siteperl and $sitearch ! for the local user to use, where should the vendor put vendor-supplied ! modules (such as Tk.so)? If the vendor puts them in the default $archlib, ! then they need to be updated each time the perl version is updated. ! Perhaps we need a set of libries $vendorlib and $vendorarch that ! track $apiversion (like the $sitexxx directories do) rather than just ! $version (like the main perl directory). ! ! An alternative (and perhaps even better) plan might be for the vendor ! to select non-default $privlib and $archlib directories, perhaps using ! $apiversion instead of $version (or even just /usr/lib/perl5 with no ! version stuff at all), and put modules into those directories (with perl ! Makefile.PL INSTALLDIRS=perl). This would be fine unless the vendor ! wanted to support different versions of perl installed at the same time. ! (How many vendors *really* want to do that?) ! ! =item Separate directories for Perl-supplied and add-on man pages ! ! Man pages supplied with the perl distribution proper ought to go in ! an appropriate man directory. Perhaps man pages supplied with add-on ! modules ought to (at least optionally) go into a $siteman[1-9] directory. ! For example, suppose that $privlib is /usr/lib/perl5 and $man1dir ! is /usr/man/man1. Also, suppose $sitelib is /usr/local/lib/perl5. ! In this situation, it might make sense for man pages to go into ! /usr/local/lib/man/man1. =item Hint file fixes *************** *** 1090,1095 **** --- 1331,1377 ---- Some of the hint file information (particularly dynamic loading stuff) ought to be fed back into the main metaconfig distribution. + =item Catch GNU Libc "Stub" functions + + Some functions (such as lchown()) are present in libc, but are + unimplmented. That is, they always fail and set errno=ENOSYS. + + Thomas Bushnell provided the following sample code and the explanation + that follows: + + /* System header to define __stub macros and hopefully few prototypes, + which can conflict with char FOO(); below. */ + #include + /* Override any gcc2 internal prototype to avoid an error. */ + /* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ + char FOO(); + + int main() { + + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ + #if defined (__stub_FOO) || defined (__stub___FOO) + choke me + #else + FOO(); + #endif + + ; return 0; } + + The choice of is essentially arbitrary. The GNU libc + macros are found in . You can include that file instead + of (which itself includes ) if you test for + its existence first. is assumed to exist on every system, + which is why it's used here. Any GNU libc header file will include + the stubs macros. If either __stub_NAME or __stub___NAME is defined, + then the function doesn't actually exist. Tests using work + on every system around. + + The declaration of FOO is there to override builtin prototypes for + ANSI C functions. + =back =head2 Probably good ideas waiting for round tuits *************** *** 1135,1146 **** Maybe include a replacement function that doesn't lose data in rare cases of coercion between string and numerical values. - =item long long - - Can we support C on systems where C is larger - than what we've been using for C? What if you can't C - a C? - =item Improve makedepend The current makedepend process is clunky and annoyingly slow, but it --- 1417,1422 ---- *************** *** 1177,1180 **** =head1 LAST MODIFIED ! $Id: pumpkin.pod,v 1.13 1997/08/28 18:26:40 doughera Released $ --- 1453,1456 ---- =head1 LAST MODIFIED ! $Id: pumpkin.pod,v 1.22 1998/07/22 16:33:55 doughera Released $ diff -c 'perl5.004_04/README' 'perl5.004_05/README' Index: ./README *** ./README Tue Jun 10 21:44:56 1997 --- ./README Sun Nov 22 10:08:38 1998 *************** *** 22,29 **** Kit, in the file named "Artistic". If not, I'll be glad to provide one. You should also have received a copy of the GNU General Public License ! along with this program; if not, write to the Free Software ! Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. For those of you that choose to use the GNU General Public License, my interpretation of the GNU General Public License is that no Perl --- 22,29 ---- Kit, in the file named "Artistic". If not, I'll be glad to provide one. You should also have received a copy of the GNU General Public License ! along with this program; if not, write to the Free Software Foundation, ! Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. For those of you that choose to use the GNU General Public License, my interpretation of the GNU General Public License is that no Perl *************** *** 76,86 **** 2) Read the manual entries before running perl. 3) IMPORTANT! Help save the world! Communicate any problems and suggested ! patches to me, larry@wall.org (Larry Wall), so we can ! keep the world in sync. If you have a problem, there's someone else ! out there who either has had or will have the same problem. ! It's usually helpful if you send the output of the "myconfig" script ! in the main perl directory. If you've succeeded in compiling perl, the perlbug script in the utils/ subdirectory can be used to help mail in a bug report. --- 76,85 ---- 2) Read the manual entries before running perl. 3) IMPORTANT! Help save the world! Communicate any problems and suggested ! patches to perlbug@perl.com so we can keep the world in sync. ! If you have a problem, there's someone else out there who either has had ! or will have the same problem. It's usually helpful if you send the ! output of the "myconfig" script in the main perl directory. If you've succeeded in compiling perl, the perlbug script in the utils/ subdirectory can be used to help mail in a bug report. diff -c /dev/null 'perl5.004_05/README.beos' Index: ./README.beos *** ./README.beos Wed Dec 31 19:00:00 1969 --- ./README.beos Fri May 15 11:28:45 1998 *************** *** 0 **** --- 1,75 ---- + $Id: README.beos,v 1.2 1998/05/02 01:55:04 dogcow Exp dogcow $ + + Notes on building perl under BeOS: + + GENERAL ISSUES + -------------- + perl will almost compile straight out of the box with ./Configure -d, but + there are a few gotchas: + + Currently, you have to edit config.sh and remove SDBM_File from the + dynamic_ext= and extensions= lines. SDBM_File does not build properly + at this time. You need to run ./Configure -S after editing config.sh. + + In addition, with mwcc, after doing `make depend`, you need to edit + makefile and x2p/makefile and remove the lines that mention 'Bletch:'. + This is not necessary if you're using gnu cpp. + + in short: + ./Configure -d + remove SDBM_File from config.sh + ./Configure -S + make depend + remove Bletch: from makefile and x2p/makefile + make + + Other than that, perl should build without problems. There are some + technical comments in hints/beos.sh. + + OS RELEASE-SPECIFIC NOTES + ------------------------- + + PR1/PPC: + See R3/X86. Same bug, different form. + + PR2/PPC: + Signals are somewhat unreliable, but they can work. Use caution. + The POSIX module is still somewhat buggy. + + R3/X86: + Under R3 x86, there are some serious problems with the math routines + such that numbers are incorrectly printed. This causes problems with + modules that encode their version numbers - in particular, IO.pm will + probably not work properly. This should be fixed under R3.1. + + The problem has manifested itself if you see something similar to the + following during the compile: + + cc -c -I/usr/local/include -O -DVERSION=\"1.1504\" -DXS_VERSION=\"1.1499999999\" -fpic -I../.. IO.c + (lots of 9's are the indication of the problem.) + + In the meantime, you can use the following workaround: + + make perl + cd ext/IO + cc -c -I/usr/local/include -O -DVERSION=\"1.1504\" -DXS_VERSION=\"1.15\" -fpic -I../.. IO.c + cd .. + make + + (Substitute the correct numbers if IO has been updated.) + + R3/PPC- + There's math problems, but of a different kind. In particular, + perl -e 'print (240000 - (3e4<<3))' gives a non-zero answer. + I'm looking into this. There is no workaround as yet. Hopefully, + this will be fixed in R3.1. + + CONTACT INFORMATION + ------------------- + If you have comments, problem reports, or even patches or bugfixes (gasp!) + please email me. + + 1 May 1998 + Tom Spindler + dogcow@merit.edu + diff -c 'perl5.004_04/README.os2' 'perl5.004_05/README.os2' Index: ./README.os2 *** ./README.os2 Tue Aug 5 09:04:17 1997 --- ./README.os2 Fri Apr 10 10:35:34 1998 *************** *** 308,314 **** The only cases when the shell is not used is the multi-argument system() (see L)/exec() (see L), and one-argument version thereof without redirection and shell ! meta-characters. =head1 Frequently asked questions --- 308,338 ---- The only cases when the shell is not used is the multi-argument system() (see L)/exec() (see L), and one-argument version thereof without redirection and shell ! meta-characters. Perl may also start scripts which start with cookies ! C or C<#!> directly, without an intervention of shell. ! ! If starting scripts directly, Perl will use exactly the same algorithm as for ! the search of script given by B<-S> command-line option: it will look in ! the current directory, then on components of C<$ENV{PATH}> using the ! following order of appended extensions: no extension, F<.cmd>, F<.btm>, ! F<.bat>, F<.pl>. ! ! Note that Perl will start to look for scripts only if OS/2 cannot start the ! specified application, thus C will not look for a script if ! there is an executable file F I on C. ! ! Note also that executable files on OS/2 can have an arbitrary extension, ! but F<.exe> will be automatically appended if no dot is present in the name. ! The workaround as as simple as that: since F and F denote the ! same file, to start an executable residing in file F (no ! extension) give an argument C to system(). ! ! The last note is that currently it is not straightforward to start PM ! programs from VIO (=text-mode) Perl process and visa versa. Either ensure ! that shell will be used, as in C, or start it using ! optional arguments to system() documented in C module. This ! is considered a bug and should be fixed soon. ! =head1 Frequently asked questions *************** *** 780,785 **** --- 804,813 ---- =head2 Testing + If you haven't yet moved perl.dll onto LIBPATH, do it now(alternatively, if + you have a previous perl installation you'd rather not disrupt until this one + is installed, copy perl.dll to the t directory). + Now run make test *************** *** 910,915 **** --- 938,945 ---- to 1. =head2 Installing the built perl + + If you haven't yet moved perl.dll onto LIBPATH, do it now. Run diff -c 'perl5.004_04/README.vms' 'perl5.004_05/README.vms' Index: ./README.vms *** ./README.vms Mon Sep 22 15:36:22 1997 --- ./README.vms Fri Apr 10 10:35:34 1998 *************** *** 203,212 **** --- 203,221 ---- 6) Optionally define the command PERLDOC as PERLDOC :== $PERL_ROOT:[000000]PERL PERL_ROOT:[LIB.POD]PERLDOC.COM -T + Note that if you wish to use most as a pager please see + ftp://space.mit.edu/pub/davis/ for both most and slang. 7) Optionally define the command PERLBUG (the Perl bug report generator) as PERLBUG :== $PERL_ROOT:[000000]PERL PERL_ROOT:[LIB]PERLBUG.COM" + 8) Optionally define the command POD2MAN (Converts POD files to nroff + source suitable for converting to man pages. Also quiets complaints during + module builds) as + + DEFINE/NOLOG POD2MAN PERL_ROOT:[LIB.POD]POD2MAN.COM + POD2MAN :== $PERL_ROOT:[000000]PERL POD2MAN + * Installing Perl into DCLTABLES Courtesy of Brad Hughes: *************** *** 367,736 **** the the opportunity to test and develop for the AXP, and to the entire VMSperl group for useful advice and suggestions. In addition the perl5-porters deserve credit for their creativity and - willingness to work with the VMS newcomers. Finally, the greatest debt of - gratitude is due to Larry Wall , for having the ideas which - have made our sleepless nights possible. - - Thanks, - The VMSperl group - - - --------------------------------------------------------------------------- - [Here's the pre-5.004_04 version of README.vms, for the record.] - - Last revised: 19-Jan-1996 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 - part, as well as most of the system calls which have close equivalents under - VMS. There are still some incompatibilities in process handling (e.g the - fork/exec model for creating subprocesses doesn't do what you might expect - under Unix), and there remain some file handling differences from Unix. Over - the longer term, we'll try to get many of the useful VMS system services - integrated as well, depending on time and people available. Of course, if - you'd like to add something yourself, or join the porting team, we'd love to - have you! - - The current sources and build procedures have been tested on a VAX using VAXC - and DECC, and on an AXP using DECC. If you run into problems with other - compilers, please let us know. - - Note to DECC users: Some early versions of the DECCRTL contained a few bugs - 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. 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. 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 - - At the moment, in addition to basic VMS, you'll need two things: - - a C compiler: VAXC, DECC, or gcc for the VAX; DECC for the AXP - - a make tool: DEC's MMS (version 2.6 or later) or the free analog MMK - (available from ftp.spc.edu), or a standard make utility (e.g. GNU make, - also available from ftp.spc.edu). - In addition, you may include socket support if you have an IP stack running - on your system. See the topic "Socket support" for more information. - - * Socket support - - Perl includes a number of IP socket routines among its builtin functions, - which are available if you choose to compile Perl with socket support. Since - IP networking is an optional addition to VMS, there are several different IP - stacks available, so it's difficult to automate the process of building Perl - with socket support in a way which will work on all systems. - - By default, Perl is built without IP socket support. If you define the macro - SOCKET when invoking MMK, 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]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. - Both SOCKETSHR and NETLIB are available from MadGoat ftp sites, such as - ftp.spc.edu or ftp.wku.edu. - - 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 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 - into its directory tree, in which you will find a [.vms] subdirectory below - the directory in which this file is found. If this isn't the case, then you'll - need to unpack the distribution properly, or manually edit Descrip.MMS or - the VMS Makefile to alter directory paths as necessary. (I'd advise using the - `normal' directory tree, at least for the first time through.) This - subdirectory contains several files, among which are the following: - Config.VMS - A template Config.H set up for VMS. - Descrip.MMS - The MMS/MMK dependency file for building Perl - GenConfig.Pl - A Perl script to generate Config.SH retrospectively - from Config.VMS, since the Configure shell script which - normally generates Config.SH doesn't run under VMS. - GenOpt.Com - A little DCL procedure used to write some linker options - files, since not all make utilities can do this easily. - Gen_ShrFls.Pl - A Perl script which generates linker options files and - MACRO declarations for PerlShr.Exe. - Makefile - The make dependency file for building Perl - MMS2Make.Pl - A Perl script used to generate Makefile from Descrip.MMS - PerlVMS.pod - Documentation for VMS-specific behavior of Perl - Perly_[CH].VMS - Versions of the byacc output from Perl's grammar, - modified to include VMS-specific C compiler options - SockAdapt.[CH] - C source code used to integrate VMS TCP/IP support - Test.Com - DCL driver for Perl regression tests - VMSish.H - C header file containing VMS-specific definitions - VMS.C - C source code for VMS-specific routines - VMS_Yfix.Pl - Perl script to convert Perly.[CH] to Perly_[CH].VMS - WriteMain.Pl - Perl script to generate Perlmain.C - The [.Ext...] directories contain VMS-specific extensions distributed with - Perl. There may also be other files in [.VMS...] pertaining to features under - development; for the most part, you can ignore them. Note that packages in - [.ext.*] are not built with Perl by default; you build the ones you want - once the basic Perl build is complete (see the perlvms docs for instructions - on building extensions.) - - Config.VMS and Decrip.MMS/Makefile are set up to build a version of Perl which - includes all features known to work when this release was assembled. If you - have code at your site which would support additional features (e.g. emulation - of Unix system calls), feel free to make the appropriate changes to these - files. (Note: Do not use or edit config.h in the main Perl source directory; - it is superseded by the current Config.VMS during the build.) You may also - wish to make site-specific changes to Descrip.MMS or Makefile to reflect local - conventions for naming of files, etc. - - There are several pieces of system-specific information which become part of - the Perl Config extension. Under VMS, the data for Config are generated by the - script GenConfig.Pl in the [.VMS] subdirectory. It tries to ascertain the - necessary information from various files, or from the system itself, and - generally does the right thing. There is a list of hard-coded values at the - end of this script which specifies items that are correct for most VMS systems, - but may be incorrect for you, if your site is set up in an unusual fashion. If - you're familiar with Perl's Config extension, feel free to edit these values as - necessary. If this doesn't mean much to you, don't worry -- the information is - probably correct, and even if it's not, none of these parameters affect your - ability to build or run Perl. You'll only get the wrong answer if you ask for - it specifically from Config. - - Examine the information at the beginning of Descrip.MMS for information about - specifying alternate C compilers or building a version of Perl with debugging - support. For instance, if you want to use DECC, you'll need to include the - /macro="decc=1" qualifier to MMK (If you're using make, these options are not - supported.) If you're on an AXP system, define the macro __AXP__ (MMK does - this for you), and DECC will automatically be selected. - - To start the build, set default to the main source directory. Since - Descrip.MMS assumes that VMS commands have their usual meaning, and makes use - of command-line macros, you may want to be certain that you haven't defined DCL - symbols which would interfere with the build. Then, if you are using MMS or - MMK, say - $ MMS/Descrip=[.VMS] ! or MMK - (N.B. If you are using MMS, you must use version 2.6 or later; a bug in - earlier versions produces malformed cc command lines.) If you are using a - version of make, say - $ Make -f [.VMS]Makefile - Note that the Makefile doesn't support conditional compilation, is - set up to use VAXC on a VAX, and does not include socket support. You can - either edit the Makefile by hand, using Descrip.MMS as a guide, or use the - Makefile to build Miniperl.Exe, and then run the Perl script MMS2Make.pl, - found in the [.VMS] subdirectory, to generate a new Makefile with the options - appropriate to your site. - - If you are using MM[SK], and you decide to rebuild Perl with a different set - of parameters (e.g. changing the C compiler, or adding socket support), be - sure to say - $ MMK/Descrip=[.VMS] realclean - first, in order to remove files generated during the previous build. If - you omit this step, you risk ending up with a copy of Perl which - composed partially of old files and partially of new ones, which may lead - to strange effects when you try to run Perl. - - A bug in some early versions of the DECC RTL on the AXP causes newlines - to be lost when writing to a pipe. A different bug in some patched versions - of DECC 4.0 for VAX can also scramble preprocessor output. Finally, gcc 2.7.2 - has yet another preprocessor bug, which causes line breaks to be inserted - into the output at inopportune times. Each of these bugs causes Gen_ShrFls.pl - to fail, since it can't parse the preprocessor output to identify global - variables and routines. This problem is generally manifested as missing - global symbols when linking PerlShr.Exe or Perl.Exe. You can work around - it by defining the macro PIPES_BROKEN when you invoke MMS or MMK. - - - This will build the following files: - Miniperl.Exe - a stand-alone version of without any extensions. - Miniperl has all the intrinsic capabilities of Perl, - but cannot make use of the DynaLoader or any - extensions which use XS code. - PerlShr.Exe - a shareable image containing most of Perl's internal - routines and global variables. Perl.Exe is linked to - this image, as are all dynamic extensions, so everyone's - using the same set of global variables and routines. - Perl.Exe - the main Perl executable image. It's contains the - main() routine, plus code for any statically linked - extensions. - PerlShr_Attr.Opt - A linker options file which specifies psect attributes - matching those in PerlShr.Exe. It should be used when - linking images against PerlShr.Exe - PerlShr_Bld.Opt - A linker options file which specifies various things - used to build PerlShr.Exe. It should be used when - rebuilding PerlShr.Exe via MakeMaker-produced - Descrip.MMS files for static extensions. - c2ph - Perl program which generates template code to access - C struct members from Perl. - h2ph - Perl program which generates template code to access - #defined constants in a C header file from Perl, - using the "old-style" interface. (Largely supplanted - by h2xs.) - h2xs - Perl program which generates template files for creating - XSUB extensions, optionally beginning with the #defined - constants in a C header file. - [.lib.pod]perldoc - A Perl program which locates and displays documentation - for Perl and its extensions. - [.Lib]Config.pm - the Perl extension which saves configuration information - about Perl and your system. - [.Lib]DynaLoader.pm - The Perl extension which performs dynamic linking of - shareable images for extensions. - Several subdirectories under [.Lib] containing preprocessed files or - site-specific files. - There are, of course, a number of other files created for use during the build. - Once you've got the binaries built, you may wish to `build' the `tidy' or - `clean' targets to remove extra files. - - If you run into problems during the build, you can get help from the VMSPerl - or perl5-porters mailing lists (see below). When you report the problem, - please include the following information: - - The version of Perl you're trying to build. Please include any - "letter" patchlevel, in addition to the version number. If the - build successfully created Miniperl.Exe, you can check this by - saying '$ MCR Sys$Disk:[]Miniperl -v'. Also, please mention - where you obtained the distribution kit; in particular, note - whether you were using a basic Perl kit or the VMS test kit - (see below). - - The exact command you issued to build Perl. - - A copy of all error messages which were generated during the build. - Please include enough of the build log to establish the context of - the error messages. - - A summary of your configuration. If the build progressed far enough - to generate Miniperl.Exe and [.Lib]Config.pm, you can obtain this - by saying '$ MCR Sys$Disk:[]Miniperl "-V"' (note the "" around -V). - If not, then you can say '$ MMK/Descrip=[.VMS] printconfig' to - produce the summary. - This may sound like a lot of information to send, but it'll often make - it easier for someone to spot the problem, instead of having to give - a spectrum of possibilities. - - - - * Installing Perl once it's built - - Once the build is complete, you'll need to do the following: - - Put PerlShr.Exe in a common directory, and make it world-readable. - If you place it in a location other than Sys$Share, you'll need to - define the logical name PerlShr to point to the image. (If you're - installing on a VMScluster, be sure that each node is using the - copy of PerlShr you expect [e.g. if you put PerlShr.Exe in Sys$Share, - do they all share Sys$Share?]). - - Put Perl.Exe in a common directory, and make it world-executable. - - Define a foreign command to invoke Perl, using a statement like - $ Perl == "$dev:[dir]Perl.Exe" - - Create a world-readable directory tree for Perl library modules, - scripts, and what-have-you, and define PERL_ROOT as a rooted logical - name pointing to the top of this tree (i.e. if your Perl files were - going to live in DKA1:[Util.Perl5...], then you should - $ Define/Translation=Concealed Perl_Root DKA1:[Util.Perl5.] - (Be careful to follow the rules for rooted logical names; in particular, - remember that a rooted logical name cannot have as its device portion - another rooted logical name - you've got to supply the actual device name - and directory path to the root directory.) - - 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 - docs for common display engines; a pod2hlp translator is under development. - These files are copied to [.lib.pod] during the installation. - - Define a foreign command to execute perldoc, such as - $ Perldoc == "''Perl' Perl_Root:[lib.pod]Perldoc -t" - This will allow users to retrieve documentation using Perldoc. For - more details, say "perldoc perldoc". - That's it. - - If you run into a bug in Perl, please submit a bug report. The PerlBug - program, found in the [.lib] directory, will walk you through the process - of assembling the necessary information into a bug report, and sending - of to the Perl bug reporting address, perlbug@perl.com. - - * For more information - - If you're interested in more information on Perl in general, you may wish to - consult the Usenet newsgroups comp.lang.perl.announce and comp.lang.perl.misc. - The FAQ for these groups provides pointers to other online sources of - information, as well as books describing Perl in depth. - - If you're interested in up-to-date information on Perl development and - internals, you might want to subscribe to the perl5-porters mailing list. You - can do this by sending a message to perl5-porters-request@nicoh.com, containing - the single line - subscribe perl5-porters - This is a high-volume list at the moment (>50 messages/day). - - If you're interested in ongoing information about the VMS port, you can - subscribe to the VMSPerl mailing list by sending a request to - vmsperl-request@genetics.upenn.edu, containing the single line - subscribe VMSPerl - as the body of the message. 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. In order to make retrieval convenient, this - kit is also available by the name Perl5_VMSTest.Zip. 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. - - - * Acknowledgements - - There are, of course, far too many people involved in the porting and testing - of Perl to mention everyone who deserves it, so please forgive us if we've - missed someone. That said, special thanks are due to the following: - Tim Adye - for the VMS emulations of getpw*() - David Denholm - for extensive testing and provision of pipe and SocketShr code, - Mark Pizzolato - for the getredirection() code - Rich Salz - for readdir() and related routines - Peter Prymmer - and Tim Bunce , deserve credit for their creativity and willingness to work with the VMS newcomers. Finally, the greatest debt of gratitude is due to Larry Wall , for having the ideas which have made our sleepless nights possible. --- 376,381 ---- diff -c 'perl5.004_04/README.win32' 'perl5.004_05/README.win32' Index: ./README.win32 *** ./README.win32 Mon Jul 28 20:02:36 1997 --- ./README.win32 Thu Apr 29 11:45:26 1999 *************** *** 1,583 **** ! If you read this file _as_is_, just ignore the funny characters you ! see. It is written in the POD format (see pod/perlpod.pod) which is ! specially designed to be readable as is. ! ! =head1 NAME ! ! perlwin32 - Perl under Win32 ! ! =head1 SYNOPSIS ! ! These are instructions for building Perl under Windows NT (versions ! 3.51 or 4.0), using Visual C++ (versions 2.0 through 5.0) or Borland ! C++ (version 5.x). Currently, this port may also build under Windows95, ! but you can expect problems stemming from the unmentionable command ! shell that infests that platform. Note this caveat is only about ! B perl. Once built, you should be able to B it on ! either Win32 platform (modulo the problems arising from the inferior ! command shell). ! ! =head1 DESCRIPTION ! ! Before you start, you should glance through the README file ! found in the top-level directory where the Perl distribution ! was extracted. Make sure you read and understand the terms under ! which this software is being distributed. ! ! Also make sure you read L below for the ! known limitations of this port. ! ! The INSTALL file in the perl top-level has much information that is ! only relevant to people building Perl on Unix-like systems. In ! particular, you can safely ignore any information that talks about ! "Configure". ! ! You may also want to look at two other options for building ! a perl that will work on Windows NT: the README.cygwin32 and ! README.os2 files, which each give a different set of rules to build ! a Perl that will work on Win32 platforms. Those two methods will ! probably enable you to build a more Unix-compatible perl, but you ! will also need to download and use various other build-time and ! run-time support software described in those files. ! ! This set of instructions is meant to describe a so-called "native" ! port of Perl to Win32 platforms. The resulting Perl requires no ! additional software to run (other than what came with your operating ! system). Currently, this port is capable of using either the ! Microsoft Visual C++ compiler, or the Borland C++ compiler. The ! ultimate goal is to support the other major compilers that can ! generally be used to build Win32 applications. ! ! This port currently supports MakeMaker (the set of modules that ! is used to build extensions to perl). Therefore, you should be ! able to build and install most extensions found in the CPAN sites. ! See L below for general hints about this. ! ! =head2 Setting Up ! ! =over 4 ! ! =item Command Shell ! ! Use the default "cmd" shell that comes with NT. In particular, do ! *not* use the 4DOS/NT shell. The Makefile has commands that are not ! compatible with that shell. The Makefile also has known ! incompatibilites with the default shell that comes with Windows95, ! so building under Windows95 should be considered "unsupported". ! ! =item Borland C++ ! ! If you are using the Borland compiler, you will need dmake, a freely ! available make that has very nice macro features and parallelability. ! (The make that Borland supplies is seriously crippled, and will not ! work for MakeMaker builds--if you *have* to bug someone about this, ! I suggest you bug Borland to fix their make :) ! ! A port of dmake for win32 platforms is available from ! "http://www-personal.umich.edu/~gsar/dmake-4.0-win32.tar.gz". ! Fetch and install dmake somewhere on your path. Also make sure you ! copy the Borland dmake.ini file to some location where you keep ! *.ini files. If you use the binary that comes with the above port, you ! will need to set INIT in your environment to the directory where you ! put the dmake.ini file. ! ! =item Microsoft Visual C++ ! ! The NMAKE that comes with Visual C++ will suffice for building. ! If you did not choose to always initialize the Visual C++ compilation ! environment variables when you installed Visual C++ on your system, you ! will need to run the VCVARS32.BAT file usually found somewhere like ! C:\MSDEV4.2\BIN. This will set your build environment. ! ! You can also use dmake to build using Visual C++, provided: you ! copied the dmake.ini for Visual C++; set INIT to point to the ! directory where you put it, as above; and edit win32/config.vc ! and change "make=nmake" to "make=dmake". The last step is only ! essential if you want to use dmake to be your default make for ! building extensions using MakeMaker. ! ! =item Permissions ! ! Depending on how you extracted the distribution, you have to make sure ! some of the files are writable by you. The easiest way to make sure of ! this is to execute: ! ! attrib -R *.* /S ! ! from the perl toplevel directory. You don't I to do this if you ! used the right tools to extract the files in the standard distribution, ! but it doesn't hurt to do so. ! ! =back ! ! =head2 Building ! ! =over 4 ! ! =item * ! ! Make sure you are in the "win32" subdirectory under the perl toplevel. ! This directory contains a "Makefile" that will work with ! versions of NMAKE that come with Visual C++ ver. 2.0 and above, and ! a dmake "makefile.mk" that will work for both Borland and Visual C++ ! builds. The defaults in the dmake makefile are setup to build using the ! Borland compiler. ! ! =item * ! ! Edit the Makefile (or makefile.mk, if using dmake) and change the values ! of INST_DRV and INST_TOP if you want perl to be installed in a location ! other than "C:\PERL". If you are using Visual C++ ver. 2.0, uncomment ! the line that sets "CCTYPE=MSVC20". ! ! You will also have to make sure CCHOME points to wherever you installed ! your compiler. ! ! =item * ! ! Type "nmake" (or "dmake" if you are using that make). ! ! This should build everything. Specifically, it will create perl.exe, ! perl.dll, and perlglob.exe at the perl toplevel, and various other ! extension dll's under the lib\auto directory. If the build fails for ! any reason, make sure you have done the previous steps correctly. ! ! The build process may produce "harmless" compiler warnings (more or ! less copiously, depending on how picky your compiler gets). The ! maintainers are aware of these warnings, thankyouverymuch. :) ! ! When building using Visual C++, a perl95.exe will also get built. This ! executable is only needed on Windows95, and should be used instead of ! perl.exe, and then only if you want sockets to work properly on Windows95. ! This is necessitated by a bug in the Microsoft C Runtime that cannot be ! worked around in the "normal" perl.exe. Again, if this bugs you, please ! bug Microsoft :). perl95.exe gets built with its own private copy of the ! C Runtime that is not accessible to extensions (which see the DLL version ! of the CRT). Be aware, therefore, that this perl95.exe will have ! esoteric problems with extensions like perl/Tk that themselves use the C ! Runtime heavily, or want to free() pointers malloc()-ed by perl. ! ! You can avoid the perl95.exe problems completely if you use Borland ! C++ for building perl (perl95.exe is not needed and will not be built ! in that case). ! ! =back ! ! =head2 Testing ! ! Type "nmake test" (or "dmake test"). This will run most of the tests from ! the testsuite (many tests will be skipped, and but no test should fail). ! ! If some tests do fail, it may be because you are using a different command ! shell than the native "cmd.exe". ! ! If you used the Borland compiler, you may see a failure in op/taint.t ! arising from the inability to find the Borland Runtime DLLs on the system ! default path. You will need to copy the DLLs reported by the messages ! from where Borland chose to install it, into the Windows system directory ! (usually somewhere like C:\WINNT\SYSTEM32), and rerun the test. ! ! Please report any other failures as described under L. ! ! =head2 Installation ! ! Type "nmake install" (or "dmake install"). This will put the newly ! built perl and the libraries under "C:\perl" (actually whatever you set ! C to in the Makefile). It will also install the pod ! documentation under C<$INST_TOP\lib\pod> and HTML versions of the same ! under C<$INST_TOP\lib\pod\html>. To use the Perl you just installed, ! set your PATH environment variable to "C:\perl\bin" (or C<$INST_TOP\bin>, ! if you changed the default as above). ! ! =head2 Usage Hints ! ! =over 4 ! ! =item Environment Variables ! ! The installation paths that you set during the build get compiled ! into perl, so you don't have to do anything additional to start ! using that perl (except add its location to your PATH variable). ! ! If you put extensions in unusual places, you can set PERL5LIB ! to a list of paths separated by semicolons where you want perl ! to look for libraries. Look for descriptions of other environment ! variables you can set in the perlrun podpage. ! ! Sometime in the future, some of the configuration information ! for perl will be moved into the Windows registry. ! ! =item File Globbing ! ! By default, perl spawns an external program to do file globbing. ! The install process installs both a perlglob.exe and a perlglob.bat ! that perl can use for this purpose. Note that with the default ! installation, perlglob.exe will be found by the system before ! perlglob.bat. ! ! perlglob.exe relies on the argv expansion done by the C Runtime of ! the particular compiler you used, and therefore behaves very ! differently depending on the Runtime used to build it. To preserve ! compatiblity, perlglob.bat (a perl script/module that can be ! used portably) is installed. Besides being portable, perlglob.bat ! also offers enhanced globbing functionality. ! ! If you want perl to use perlglob.bat instead of perlglob.exe, just ! delete perlglob.exe from the install location (or move it somewhere ! perl cannot find). Using File::DosGlob.pm (which is the same ! as perlglob.bat) to override the internal CORE::glob() works about 10 ! times faster than spawing perlglob.exe, and you should take this ! approach when writing new modules. See File::DosGlob for details. ! ! =item Using perl from the command line ! ! If you are accustomed to using perl from various command-line ! shells found in UNIX environments, you will be less than pleased ! with what Windows NT offers by way of a command shell. ! ! The crucial thing to understand about the "cmd" shell (which is ! the default on Windows NT) is that it does not do any wildcard ! expansions of command-line arguments (so wildcards need not be ! quoted). It also provides only rudimentary quoting. The only ! (useful) quote character is the double quote ("). It can be used to ! protect spaces in arguments and other special characters. The ! Windows NT documentation has almost no description of how the ! quoting rules are implemented, but here are some general observations ! based on experiments: The shell breaks arguments at spaces and ! passes them to programs in argc/argv. Doublequotes can be used ! to prevent arguments with spaces in them from being split up. ! You can put a double quote in an argument by escaping it with ! a backslash and enclosing the whole argument within double quotes. ! The backslash and the pair of double quotes surrounding the ! argument will be stripped by the shell. ! ! The file redirection characters "<", ">", and "|" cannot be quoted ! by double quotes (there are probably more such). Single quotes ! will protect those three file redirection characters, but the ! single quotes don't get stripped by the shell (just to make this ! type of quoting completely useless). The caret "^" has also ! been observed to behave as a quoting character (and doesn't get ! stripped by the shell also). ! ! Here are some examples of usage of the "cmd" shell: ! ! This prints two doublequotes: ! ! perl -e "print '\"\"' " ! ! This does the same: ! ! perl -e "print \"\\\"\\\"\" " ! ! This prints "bar" and writes "foo" to the file "blurch": ! ! perl -e "print 'foo'; print STDERR 'bar'" > blurch ! ! This prints "foo" ("bar" disappears into nowhereland): ! ! perl -e "print 'foo'; print STDERR 'bar'" 2> nul ! ! This prints "bar" and writes "foo" into the file "blurch": ! ! perl -e "print 'foo'; print STDERR 'bar'" 1> blurch ! ! This pipes "foo" to the "less" pager and prints "bar" on the console: ! ! perl -e "print 'foo'; print STDERR 'bar'" | less ! ! This pipes "foo\nbar\n" to the less pager: ! ! perl -le "print 'foo'; print STDERR 'bar'" 2>&1 | less ! ! This pipes "foo" to the pager and writes "bar" in the file "blurch": ! ! perl -e "print 'foo'; print STDERR 'bar'" 2> blurch | less ! ! ! Discovering the usefulness of the "command.com" shell on Windows95 ! is left as an exercise to the reader :) ! ! =item Building Extensions ! ! The Comprehensive Perl Archive Network (CPAN) offers a wealth ! of extensions, some of which require a C compiler to build. ! Look in http://www.perl.com/ for more information on CPAN. ! ! Most extensions (whether they require a C compiler or not) can ! be built, tested and installed with the standard mantra: ! ! perl Makefile.PL ! $MAKE ! $MAKE test ! $MAKE install ! ! where $MAKE stands for NMAKE or DMAKE. Some extensions may not ! provide a testsuite (so "$MAKE test" may not do anything, or fail), ! but most serious ones do. ! ! If a module implements XSUBs, you will need one of the supported ! C compilers. You must make sure you have set up the environment for ! the compiler for command-line compilation. ! ! If a module does not build for some reason, look carefully for ! why it failed, and report problems to the module author. If ! it looks like the extension building support is at fault, report ! that with full details of how the build failed using the perlbug ! utility. ! ! =item Win32 Specific Extensions ! ! A number of extensions specific to the Win32 platform are available ! from CPAN. You may find that many of these extensions are meant to ! be used under the Activeware port of Perl, which used to be the only ! native port for the Win32 platform. Since the Activeware port does not ! have adequate support for Perl's extension building tools, these ! extensions typically do not support those tools either, and therefore ! cannot be built using the generic steps shown in the previous section. ! ! To ensure smooth transitioning of existing code that uses the ! Activeware port, there is a bundle of Win32 extensions that contains ! all of the Activeware extensions and most other Win32 extensions from ! CPAN in source form, along with many added bugfixes, and with MakeMaker ! support. This bundle is available at: ! ! http://www.perl.com/CPAN/authors/id/GSAR/libwin32-0.08.tar.gz ! ! See the README in that distribution for building and installation ! instructions. Look for later versions that may be available at the ! same location. ! ! It is expected that authors of Win32 specific extensions will begin ! distributing their work in MakeMaker compatible form subsequent to ! the 5.004 release of perl, at which point the need for a dedicated ! bundle such as the above should diminish. ! ! =item Running Perl Scripts ! ! Perl scripts on UNIX use the "#!" (a.k.a "shebang") line to ! indicate to the OS that it should execute the file using perl. ! Win32 has no comparable means to indicate arbitrary files are ! executables. ! ! Instead, all available methods to execute plain text files on ! Win32 rely on the file "extension". There are three methods ! to use this to execute perl scripts: ! ! =over 8 ! ! =item 1 ! ! There is a facility called "file extension associations" that will ! work in Windows NT 4.0. This can be manipulated via the two ! commands "assoc" and "ftype" that come standard with Windows NT ! 4.0. Type "ftype /?" for a complete example of how to set this ! up for perl scripts (Say what? You thought Windows NT wasn't ! perl-ready? :). ! ! =item 2 ! ! Since file associations don't work everywhere, and there are ! reportedly bugs with file associations where it does work, the ! old method of wrapping the perl script to make it look like a ! regular batch file to the OS, may be used. The install process ! makes available the "pl2bat.bat" script which can be used to wrap ! perl scripts into batch files. For example: ! ! pl2bat foo.pl ! ! will create the file "FOO.BAT". Note "pl2bat" strips any ! .pl suffix and adds a .bat suffix to the generated file. ! ! If you use the 4DOS/NT or similar command shell, note that ! "pl2bat" uses the "%*" variable in the generated batch file to ! refer to all the command line arguments, so you may need to make ! sure that construct works in batch files. As of this writing, ! 4DOS/NT users will need a "ParameterChar = *" statement in their ! 4NT.INI file, or will need to execute "setdos /p*" in the 4DOS/NT ! startup file to enable this to work. ! ! =item 3 ! ! Using "pl2bat" has a few problems: the file name gets changed, ! so scripts that rely on C<$0> to find what they must do may not ! run properly; running "pl2bat" replicates the contents of the ! original script, and so this process can be maintenance intensive ! if the originals get updated often. A different approach that ! avoids both problems is possible. ! ! A script called "runperl.bat" is available that can be copied ! to any filename (along with the .bat suffix). For example, ! if you call it "foo.bat", it will run the file "foo" when it is ! executed. Since you can run batch files on Win32 platforms simply ! by typing the name (without the extension), this effectively ! runs the file "foo", when you type either "foo" or "foo.bat". ! With this method, "foo.bat" can even be in a different location ! than the file "foo", as long as "foo" is available somewhere on ! the PATH. If your scripts are on a filesystem that allows symbolic ! links, you can even avoid copying "runperl.bat". ! ! Here's a diversion: copy "runperl.bat" to "runperl", and type ! "runperl". Explain the observed behavior, or lack thereof. :) ! Hint: .gnidnats llits er'uoy fi ,"lrepnur" eteled :tniH ! ! =back ! ! =item Miscellaneous Things ! ! A full set of HTML documentation is installed, so you should be ! able to use it if you have a web browser installed on your ! system. ! ! C is also a useful tool for browsing information contained ! in the documentation, especially in conjunction with a pager ! like C (recent versions of which have Win32 support). You may ! have to set the PAGER environment variable to use a specific pager. ! "perldoc -f foo" will print information about the perl operator ! "foo". ! ! If you find bugs in perl, you can run C to create a ! bug report (you may have to send it manually if C cannot ! find a mailer on your system). ! ! =back ! ! =head1 BUGS AND CAVEATS ! ! This port should be considered beta quality software at the present ! time because some details are still in flux and there may be ! changes in any of these areas: build process, installation structure, ! supported utilities/modules, and supported perl functionality. ! In particular, functionality specific to the Win32 environment may ! ultimately be supported as either core modules or extensions. The ! beta status implies, among other things, that you should be prepared ! to recompile extensions when binary incompatibilites arise due to ! changes in the internal structure of the code. ! ! An effort has been made to ensure that the DLLs produced by the two ! supported compilers are compatible with each other (despite the ! best efforts of the compiler vendors). Extension binaries produced ! by one compiler should also coexist with a perl binary built by ! a different compiler. In order to accomplish this, PERL.DLL provides ! a layer of runtime code that uses the C Runtime that perl was compiled ! with. Extensions which include "perl.h" will transparently access ! the functions in this layer, thereby ensuring that both perl and ! extensions use the same runtime functions. ! ! If you have had prior exposure to Perl on Unix platforms, you will notice ! this port exhibits behavior different from what is documented. Most of the ! differences fall under one of these categories. We do not consider ! any of them to be serious limitations (especially when compared to the ! limited nature of some of the Win32 OSes themselves :) ! ! =over 8 ! ! =item * ! ! C and C functions may not behave as documented. They ! may return values that bear no resemblance to those reported on Unix ! platforms, and some fields (like the the one for inode) may be completely ! bogus. ! ! =item * ! ! The following functions are currently unavailable: C, ! C, C, C, C, C, ! C, C, C, C, ! C, C. This list is possibly very incomplete. ! ! =item * ! ! crypt() is not available due to silly export restrictions. It may ! become available when the laws change. Meanwhile, look in CPAN for ! extensions that provide it. ! ! =item * ! ! Various C related calls are supported, but they may not ! behave as on Unix platforms. ! ! =item * ! ! The four-argument C call is only supported on sockets. ! ! =item * ! ! C<$?> ends up with the exitstatus of the subprocess (this is different ! from Unix, where the exitstatus is actually given by "$? >> 8"). ! Failure to spawn() the subprocess is indicated by setting $? to ! "255<<8". This is subject to change. ! ! =item * ! ! Building modules available on CPAN is mostly supported, but this ! hasn't been tested much yet. Expect strange problems, and be ! prepared to deal with the consequences. ! ! =item * ! ! C, C and process-related functions may not ! behave as described in the documentation, and some of the ! returned values or effects may be bogus. ! ! =item * ! ! Signal handling may not behave as on Unix platforms (where it ! doesn't exactly "behave", either :). For instance, calling C ! or C from signal handlers will cause an exception, since most ! implementations of C on Win32 are severely crippled. ! Thus, signals may work only for simple things like setting a flag ! variable in the handler. Using signals under this port should ! currently be considered unsupported. ! ! =item * ! ! File globbing may not behave as on Unix platforms. In particular, ! if you don't use perlglob.bat for globbing, it will understand ! wildcards only in the filename component (and not in the pathname). ! In other words, something like "print <*/*.pl>" will not print all the ! perl scripts in all the subdirectories one level under the current one ! (like it does on UNIX platforms). perlglob.exe is also dependent on ! the particular implementation of wildcard expansion in the vendor ! libraries used to build it (which varies wildly at the present time). ! Using perlglob.bat (or File::DosGlob) avoids these limitations, but ! still only provides DOS semantics (read "warts") for globbing. ! ! =back ! ! Please send detailed descriptions of any problems and solutions that ! you may find to >, along with the output produced ! by C. ! ! =head1 AUTHORS ! ! =over 4 ! ! Gary Ng E71564.1743@CompuServe.COME ! ! Gurusamy Sarathy Egsar@umich.eduE ! ! Nick Ing-Simmons Enick@ni-s.u-net.comE ! ! =back ! ! This document is maintained by Gurusamy Sarathy. ! ! =head1 SEE ALSO ! ! L ! ! =head1 HISTORY ! ! This port was originally contributed by Gary Ng around 5.003_24, ! and borrowed from the Hip Communications port that was available ! at the time. ! ! Nick Ing-Simmons and Gurusamy Sarathy have made numerous and ! sundry hacks since then. ! ! Borland support was added in 5.004_01 (Gurusamy Sarathy). ! ! Last updated: 25 July 1997 ! ! =cut ! --- 1,673 ---- ! If you read this file _as_is_, just ignore the funny characters you ! see. It is written in the POD format (see pod/perlpod.pod) which is ! specially designed to be readable as is. ! ! =head1 NAME ! ! perlwin32 - Perl under Win32 ! ! =head1 SYNOPSIS ! ! These are instructions for building Perl under Windows NT (versions ! 3.51 or 4.0). Currently, this port is reported to build ! under Windows95 using the 4DOS shell--the default shell that infests ! Windows95 will not work (see below). Note this caveat is only about ! B perl. Once built, you should be able to B it on ! either Win32 platform (modulo the problems arising from the inferior ! command shell). ! ! =head1 DESCRIPTION ! ! Before you start, you should glance through the README file ! found in the top-level directory where the Perl distribution ! was extracted. Make sure you read and understand the terms under ! which this software is being distributed. ! ! Also make sure you read L below for the ! known limitations of this port. ! ! The INSTALL file in the perl top-level has much information that is ! only relevant to people building Perl on Unix-like systems. In ! particular, you can safely ignore any information that talks about ! "Configure". ! ! You may also want to look at two other options for building ! a perl that will work on Windows NT: the README.cygwin32 and ! README.os2 files, which each give a different set of rules to build ! a Perl that will work on Win32 platforms. Those two methods will ! probably enable you to build a more Unix-compatible perl, but you ! will also need to download and use various other build-time and ! run-time support software described in those files. ! ! This set of instructions is meant to describe a so-called "native" ! port of Perl to Win32 platforms. The resulting Perl requires no ! additional software to run (other than what came with your operating ! system). Currently, this port is capable of using one of the ! following compilers: ! ! Borland C++ version 5.02 or later ! Microsoft Visual C++ version 4.2 or later ! ! ! This port currently supports MakeMaker (the set of modules that ! is used to build extensions to perl). Therefore, you should be ! able to build and install most extensions found in the CPAN sites. ! See L below for general hints about this. ! ! =head2 Setting Up ! ! =over 4 ! ! =item Command Shell ! ! Use the default "cmd" shell that comes with NT. Some versions of the ! popular 4DOS/NT shell have incompatibilities that may cause you trouble. ! If the build fails under that shell, try building again with the cmd ! shell. The Makefile also has known incompatibilites with the "command.com" ! shell that comes with Windows95, so building under Windows95 should ! be considered "unsupported". However, there have been reports of successful ! build attempts using 4DOS/NT version 6.01 under Windows95, using dmake, but ! your mileage may vary. ! ! The surest way to build it is on WindowsNT, using the cmd shell. ! ! Make sure the path to the build directory does not contain spaces. The ! build usually works in this circumstance, but some tests will fail. ! ! =item Borland C++ ! ! If you are using the Borland compiler, you will need dmake, a freely ! available make that has very nice macro features and parallelability. ! (The make that Borland supplies is seriously crippled, and will not ! work for MakeMaker builds.) ! ! A port of dmake for win32 platforms is available from: ! ! http://www-personal.umich.edu/~gsar/dmake-4.1-win32.zip ! ! Fetch and install dmake somewhere on your path (follow the instructions ! in the README.NOW file). ! ! =item Microsoft Visual C++ ! ! The NMAKE that comes with Visual C++ will suffice for building. ! You will need to run the VCVARS32.BAT file usually found somewhere ! like C:\MSDEV4.2\BIN. This will set your build environment. ! ! You can also use dmake to build using Visual C++, provided: ! you set OSRELEASE to "microsft" (or whatever the directory name ! under which the Visual C dmake configuration lives) in your environment, ! and edit win32/config.vc to change "make=nmake" into "make=dmake". The ! latter step is only essential if you want to use dmake as your default ! make for building extensions using MakeMaker. ! ! =back ! ! =head2 Building ! ! =over 4 ! ! =item * ! ! Make sure you are in the "win32" subdirectory under the perl toplevel. ! This directory contains a "Makefile" that will work with ! versions of NMAKE that come with Visual C++, and a dmake "makefile.mk" ! that will work for all supported compilers. The defaults in the dmake ! makefile are setup to build using the Borland compiler. ! ! =item * ! ! Edit the makefile.mk (or Makefile, if using nmake) and change the values ! of INST_DRV and INST_TOP. You can also enable various build ! flags. ! ! If you have either the source or a library that contains des_fcrypt(), ! enable the appropriate option in the makefile. des_fcrypt() is not ! bundled with the distribution due to US Government restrictions ! on the export of cryptographic software. Nevertheless, this routine ! is part of the "libdes" library (written by Ed Young) which is widely ! available worldwide, usually along with SSLeay (for example: ! "ftp://fractal.mta.ca/pub/crypto/SSLeay/DES/"). Set CRYPT_SRC to the ! name of the file that implements des_fcrypt(). Alternatively, if ! you have built a library that contains des_fcrypt(), you can set ! CRYPT_LIB to point to the library name. The location above contains ! many versions of the "libdes" library, all with slightly different ! implementations of des_fcrypt(). Older versions have a single, ! self-contained file (fcrypt.c) that implements crypt(), so they may be ! easier to use. A patch against the fcrypt.c found in libdes-3.06 is ! in des_fcrypt.patch. ! ! Perl will also build without des_fcrypt(), but the crypt() builtin will ! fail at run time. ! ! You will also have to make sure CCHOME points to wherever you installed ! your compiler. Make sure this path has no spaces in it. If you ! insist on spaces in your path names, there is no telling what else ! will fail, but you can try putting the path in double quotes. Some ! parts of perl try to accomodate that, but not all pieces do. ! ! The default value for CCHOME in the makefiles for Visual C++ ! may not be correct if you have a version later than 5.2. Make ! sure the default exists and is valid. ! ! Other options are explained in the makefiles. Be sure to read the ! instructions carefully. ! ! =item * ! ! Type "dmake" (or "nmake" if you are using that make). ! ! This should build everything. Specifically, it will create perl.exe, ! perl.dll, and perlglob.exe at the perl toplevel, and various other ! extension dll's under the lib\auto directory. If the build fails for ! any reason, make sure you have done the previous steps correctly. ! ! The build process may produce "harmless" compiler warnings (more or ! less copiously, depending on how picky your compiler gets). The ! maintainers are aware of these warnings, thankyouverymuch. :) ! ! When building using Visual C++, a perl95.exe will also get built. This ! executable is only needed on Windows95, and should be used instead of ! perl.exe, and then only if you want sockets to work properly on Windows95. ! This is necessitated by a bug in the Microsoft C Runtime that cannot be ! worked around in the "normal" perl.exe. perl95.exe gets built with its ! own private copy of the C Runtime that is not accessible to extensions ! (which see the DLL version of the CRT). Be aware, therefore, that this ! perl95.exe will have esoteric problems with extensions like perl/Tk that ! themselves use the C Runtime heavily, or want to free() pointers ! malloc()-ed by perl. ! ! You can avoid the perl95.exe problems completely if you either enable ! USE_PERLCRT with Visual C++, or use Borland C++ for building perl. In ! those cases, perl95.exe is not needed and will not be built. ! ! =back ! ! =head2 Testing ! ! Type "dmake test" (or "nmake test"). This will run most of the tests from ! the testsuite (many tests will be skipped, and but no test should fail). ! ! If some tests do fail, it may be because you are using a different command ! shell than the native "cmd.exe", or because you are building from a path ! that contains spaces. So don't do that. ! ! If you're using the Borland compiler, you may see a failure in op/taint.t ! arising from the inability to find the Borland Runtime DLLs on the system ! default path. You will need to copy the DLLs reported by the messages ! from where Borland chose to install it, into the Windows system directory ! (usually somewhere like C:\WINNT\SYSTEM32), and rerun the test. ! ! The Visual C runtime apparently has a bug that causes posix.t to fail ! test#2. This usually happens only if you extracted the files in text ! mode. Enable the USE_PERLCRT option in the Makefile to fix this bug. ! ! Please report any other failures as described under L. ! ! =head2 Installation ! ! Type "dmake install" (or "nmake install"). This will put the newly ! built perl and the libraries under whatever C points to in the ! Makefile. It will also install the pod documentation under ! C<$INST_TOP\lib\pod> and HTML versions of the same under ! C<$INST_TOP\lib\pod\html>. To use the Perl you just installed, ! set your PATH environment variable to C<$INST_TOP\bin>. ! ! =head2 Usage Hints ! ! =over 4 ! ! =item Environment Variables ! ! The installation paths that you set during the build get compiled ! into perl, so you don't have to do anything additional to start ! using that perl (except add its location to your PATH variable). ! ! If you put extensions in unusual places, you can set PERL5LIB ! to a list of paths separated by semicolons where you want perl ! to look for libraries. Look for descriptions of other environment ! variables you can set in L. ! ! You can also control the shell that perl uses to run system() and ! backtick commands via PERL5SHELL. See L. ! ! Perl does not depend on the registry, but it can look up certain default ! values if you choose to put them there. Perl attempts to read entries from ! C and C. ! Entries in the former override entries in the latter. One or more of the ! following entries (of type REG_SZ or REG_EXPAND_SZ) may be set: ! ! lib-$] version-specific path to add to @INC ! lib path to add to @INC ! sitelib-$] version-specific path to add to @INC ! sitelib path to add to @INC ! PERL* fallback for all %ENV lookups that begin with "PERL" ! ! Note the C<$]> in the above is not literal. Substitute whatever version ! of perl you want to honor that entry, e.g. C<5.00502>. Paths must be ! separated with semicolons, as usual on win32. ! ! =item File Globbing ! ! By default, perl spawns an external program to do file globbing. ! The install process installs both a perlglob.exe and a perlglob.bat ! that perl can use for this purpose. Note that with the default ! installation, perlglob.exe will be found by the system before ! perlglob.bat. ! ! perlglob.exe relies on the argv expansion done by the C Runtime of ! the particular compiler you used, and therefore behaves very ! differently depending on the Runtime used to build it. To preserve ! compatiblity, perlglob.bat (a perl script that can be used portably) ! is installed. Besides being portable, perlglob.bat also offers ! enhanced globbing functionality. ! ! If you want perl to use perlglob.bat instead of perlglob.exe, just ! delete perlglob.exe from the install location (or move it somewhere ! perl cannot find). Using File::DosGlob.pm (which implements the core ! functionality of perlglob.bat) to override the internal CORE::glob() ! works about 10 times faster than spawing perlglob.exe, and you should ! take this approach when writing new modules. See File::DosGlob for ! details. ! ! =item Using perl from the command line ! ! If you are accustomed to using perl from various command-line ! shells found in UNIX environments, you will be less than pleased ! with what Windows NT offers by way of a command shell. ! ! The crucial thing to understand about the "cmd" shell (which is ! the default on Windows NT) is that it does not do any wildcard ! expansions of command-line arguments (so wildcards need not be ! quoted). It also provides only rudimentary quoting. The only ! (useful) quote character is the double quote ("). It can be used to ! protect spaces in arguments and other special characters. The ! Windows NT documentation has almost no description of how the ! quoting rules are implemented, but here are some general observations ! based on experiments: The shell breaks arguments at spaces and ! passes them to programs in argc/argv. Doublequotes can be used ! to prevent arguments with spaces in them from being split up. ! You can put a double quote in an argument by escaping it with ! a backslash and enclosing the whole argument within double quotes. ! The backslash and the pair of double quotes surrounding the ! argument will be stripped by the shell. ! ! The file redirection characters "<", ">", and "|" cannot be quoted ! by double quotes (there are probably more such). Single quotes ! will protect those three file redirection characters, but the ! single quotes don't get stripped by the shell (just to make this ! type of quoting completely useless). The caret "^" has also ! been observed to behave as a quoting character (and doesn't get ! stripped by the shell also). ! ! Here are some examples of usage of the "cmd" shell: ! ! This prints two doublequotes: ! ! perl -e "print '\"\"' " ! ! This does the same: ! ! perl -e "print \"\\\"\\\"\" " ! ! This prints "bar" and writes "foo" to the file "blurch": ! ! perl -e "print 'foo'; print STDERR 'bar'" > blurch ! ! This prints "foo" ("bar" disappears into nowhereland): ! ! perl -e "print 'foo'; print STDERR 'bar'" 2> nul ! ! This prints "bar" and writes "foo" into the file "blurch": ! ! perl -e "print 'foo'; print STDERR 'bar'" 1> blurch ! ! This pipes "foo" to the "less" pager and prints "bar" on the console: ! ! perl -e "print 'foo'; print STDERR 'bar'" | less ! ! This pipes "foo\nbar\n" to the less pager: ! ! perl -le "print 'foo'; print STDERR 'bar'" 2>&1 | less ! ! This pipes "foo" to the pager and writes "bar" in the file "blurch": ! ! perl -e "print 'foo'; print STDERR 'bar'" 2> blurch | less ! ! ! Discovering the usefulness of the "command.com" shell on Windows95 ! is left as an exercise to the reader :) ! ! =item Building Extensions ! ! The Comprehensive Perl Archive Network (CPAN) offers a wealth ! of extensions, some of which require a C compiler to build. ! Look in http://www.perl.com/ for more information on CPAN. ! ! Most extensions (whether they require a C compiler or not) can ! be built, tested and installed with the standard mantra: ! ! perl Makefile.PL ! $MAKE ! $MAKE test ! $MAKE install ! ! where $MAKE stands for NMAKE or DMAKE. Some extensions may not ! provide a testsuite (so "$MAKE test" may not do anything, or fail), ! but most serious ones do. ! ! If a module implements XSUBs, you will need one of the supported ! C compilers. You must make sure you have set up the environment for ! the compiler for command-line compilation. ! ! If a module does not build for some reason, look carefully for ! why it failed, and report problems to the module author. If ! it looks like the extension building support is at fault, report ! that with full details of how the build failed using the perlbug ! utility. ! ! =item Command-line Wildcard Expansion ! ! The default command shells on DOS descendant operating systems (such ! as they are) usually do not expand wildcard arguments supplied to ! programs. They consider it the application's job to handle that. ! This is commonly achieved by linking the application (in our case, ! perl) with startup code that the C runtime libraries usually provide. ! However, doing that results in incompatible perl versions (since the ! behavior of the argv expansion code differs depending on the ! compiler, and it is even buggy on some compilers). Besides, it may ! be a source of frustration if you use such a perl binary with an ! alternate shell that *does* expand wildcards. ! ! Instead, the following solution works rather well. The nice things ! about it: 1) you can start using it right away 2) it is more powerful, ! because it will do the right thing with a pattern like */*/*.c ! 3) you can decide whether you do/don't want to use it 4) you can ! extend the method to add any customizations (or even entirely ! different kinds of wildcard expansion). ! ! C:\> copy con c:\perl\lib\Wild.pm ! # Wild.pm - emulate shell @ARGV expansion on shells that don't ! use File::DosGlob; ! @ARGV = map { ! my @g = File::DosGlob::glob($_) if /[*?]/; ! @g ? @g : $_; ! } @ARGV; ! 1; ! ^Z ! C:\> set PERL5OPT=-MWild ! C:\> perl -le "for (@ARGV) { print }" */*/perl*.c ! p4view/perl/perl.c ! p4view/perl/perlio.c ! p4view/perl/perly.c ! perl5.005/win32/perlglob.c ! perl5.005/win32/perllib.c ! perl5.005/win32/perlglob.c ! perl5.005/win32/perllib.c ! perl5.005/win32/perlglob.c ! perl5.005/win32/perllib.c ! ! Note there are two distinct steps there: 1) You'll have to create ! Wild.pm and put it in your perl lib directory. 2) You'll need to ! set the PERL5OPT environment variable. If you want argv expansion ! to be the default, just set PERL5OPT in your default startup ! environment. ! ! If you are using the Visual C compiler, you can get the C runtime's ! command line wildcard expansion built into perl binary. The resulting ! binary will always expand unquoted command lines, which may not be ! what you want if you use a shell that does that for you. The expansion ! done is also somewhat less powerful than the approach suggested above. ! ! =item Win32 Specific Extensions ! ! A number of extensions specific to the Win32 platform are available ! from CPAN. You may find that many of these extensions are meant to ! be used under the Activeware port of Perl, which used to be the only ! native port for the Win32 platform. Since the Activeware port does not ! have adequate support for Perl's extension building tools, these ! extensions typically do not support those tools either, and therefore ! cannot be built using the generic steps shown in the previous section. ! ! To ensure smooth transitioning of existing code that uses the ! ActiveState port, there is a bundle of Win32 extensions that contains ! all of the ActiveState extensions and most other Win32 extensions from ! CPAN in source form, along with many added bugfixes, and with MakeMaker ! support. This bundle is available at: ! ! http://www.perl.com/CPAN/authors/id/GSAR/libwin32-0.14.zip ! ! See the README in that distribution for building and installation ! instructions. Look for later versions that may be available at the ! same location. ! ! =item Running Perl Scripts ! ! Perl scripts on UNIX use the "#!" (a.k.a "shebang") line to ! indicate to the OS that it should execute the file using perl. ! Win32 has no comparable means to indicate arbitrary files are ! executables. ! ! Instead, all available methods to execute plain text files on ! Win32 rely on the file "extension". There are three methods ! to use this to execute perl scripts: ! ! =over 8 ! ! =item 1 ! ! There is a facility called "file extension associations" that will ! work in Windows NT 4.0. This can be manipulated via the two ! commands "assoc" and "ftype" that come standard with Windows NT ! 4.0. Type "ftype /?" for a complete example of how to set this ! up for perl scripts (Say what? You thought Windows NT wasn't ! perl-ready? :). ! ! =item 2 ! ! Since file associations don't work everywhere, and there are ! reportedly bugs with file associations where it does work, the ! old method of wrapping the perl script to make it look like a ! regular batch file to the OS, may be used. The install process ! makes available the "pl2bat.bat" script which can be used to wrap ! perl scripts into batch files. For example: ! ! pl2bat foo.pl ! ! will create the file "FOO.BAT". Note "pl2bat" strips any ! .pl suffix and adds a .bat suffix to the generated file. ! ! If you use the 4DOS/NT or similar command shell, note that ! "pl2bat" uses the "%*" variable in the generated batch file to ! refer to all the command line arguments, so you may need to make ! sure that construct works in batch files. As of this writing, ! 4DOS/NT users will need a "ParameterChar = *" statement in their ! 4NT.INI file, or will need to execute "setdos /p*" in the 4DOS/NT ! startup file to enable this to work. ! ! =item 3 ! ! Using "pl2bat" has a few problems: the file name gets changed, ! so scripts that rely on C<$0> to find what they must do may not ! run properly; running "pl2bat" replicates the contents of the ! original script, and so this process can be maintenance intensive ! if the originals get updated often. A different approach that ! avoids both problems is possible. ! ! A script called "runperl.bat" is available that can be copied ! to any filename (along with the .bat suffix). For example, ! if you call it "foo.bat", it will run the file "foo" when it is ! executed. Since you can run batch files on Win32 platforms simply ! by typing the name (without the extension), this effectively ! runs the file "foo", when you type either "foo" or "foo.bat". ! With this method, "foo.bat" can even be in a different location ! than the file "foo", as long as "foo" is available somewhere on ! the PATH. If your scripts are on a filesystem that allows symbolic ! links, you can even avoid copying "runperl.bat". ! ! Here's a diversion: copy "runperl.bat" to "runperl", and type ! "runperl". Explain the observed behavior, or lack thereof. :) ! Hint: .gnidnats llits er'uoy fi ,"lrepnur" eteled :tniH ! ! =back ! ! =item Miscellaneous Things ! ! A full set of HTML documentation is installed, so you should be ! able to use it if you have a web browser installed on your ! system. ! ! C is also a useful tool for browsing information contained ! in the documentation, especially in conjunction with a pager ! like C (recent versions of which have Win32 support). You may ! have to set the PAGER environment variable to use a specific pager. ! "perldoc -f foo" will print information about the perl operator ! "foo". ! ! If you find bugs in perl, you can run C to create a ! bug report (you may have to send it manually if C cannot ! find a mailer on your system). ! ! =back ! ! =head1 BUGS AND CAVEATS ! ! An effort has been made to ensure that the DLLs produced by the two ! supported compilers are compatible with each other (despite the ! best efforts of the compiler vendors). Extension binaries produced ! by one compiler should also coexist with a perl binary built by ! a different compiler. In order to accomplish this, PERL.DLL provides ! a layer of runtime code that uses the C Runtime that perl was compiled ! with. Extensions which include "perl.h" will transparently access ! the functions in this layer, thereby ensuring that both perl and ! extensions use the same runtime functions. ! ! If you have had prior exposure to Perl on Unix platforms, you will notice ! this port exhibits behavior different from what is documented. Most of the ! differences fall under one of these categories. We do not consider ! any of them to be serious limitations (especially when compared to the ! limited nature of some of the Win32 OSes themselves :) ! ! =over 8 ! ! =item * ! ! C and C functions may not behave as documented. They ! may return values that bear no resemblance to those reported on Unix ! platforms, and some fields (like the the one for inode) may be completely ! bogus. ! ! =item * ! ! The following functions are currently unavailable: C, ! C, C, C, C, C, ! C and related security functions, C, ! C, C, C, C, ! C, C, C, C, C, ! C<*netent()>, C<*protoent()>, C<*servent()>, C<*hostent()>, ! C. ! This list is possibly incomplete. ! ! =item * ! ! Various C related calls are supported, but they may not ! behave as on Unix platforms. ! ! =item * ! ! The four-argument C call is only supported on sockets. ! ! =item * ! ! The C call is only supported on sockets (where it provides the ! functionality of ioctlsocket() in the Winsock API). ! ! =item * ! ! Failure to spawn() a subprocess is indicated by setting $? to "255 << 8". ! C<$?> is set in a way compatible with Unix (i.e. the exitstatus of the ! subprocess is obtained by "$? >> 8", as described in the documentation). ! ! =item * ! ! You can expect problems building modules available on CPAN if you ! build perl itself with -DUSE_THREADS. These problems should be resolved ! as we get closer to 5.005. ! ! =item * ! ! C, C and process-related functions may not ! behave as described in the documentation, and some of the ! returned values or effects may be bogus. ! ! =item * ! ! Signal handling may not behave as on Unix platforms (where it ! doesn't exactly "behave", either :). For instance, calling C ! or C from signal handlers will cause an exception, since most ! implementations of C on Win32 are severely crippled. ! Thus, signals may work only for simple things like setting a flag ! variable in the handler. Using signals under this port should ! currently be considered unsupported. ! ! =item * ! ! C is implemented, but doesn't have the semantics of ! C, i.e. it doesn't send a signal to the identified process ! like it does on Unix platforms. Instead it immediately calls ! C. Thus the signal argument is ! used to set the exit-status of the terminated process. This behavior ! may change in future. ! ! =item * ! ! File globbing may not behave as on Unix platforms. In particular, ! if you don't use perlglob.bat for globbing, it will understand ! wildcards only in the filename component (and not in the pathname). ! In other words, something like "print <*/*.pl>" will not print all the ! perl scripts in all the subdirectories one level under the current one ! (like it does on UNIX platforms). perlglob.exe is also dependent on ! the particular implementation of wildcard expansion in the vendor ! libraries used to build it (which varies wildly at the present time). ! Using perlglob.bat (or File::DosGlob) avoids these limitations, but ! still only provides DOS semantics (read "warts") for globbing. ! ! =back ! ! Please send detailed descriptions of any problems and solutions that ! you may find to >, along with the output produced ! by C. ! ! =head1 AUTHORS ! ! =over 4 ! ! Gary Ng E71564.1743@CompuServe.COME ! ! Gurusamy Sarathy Egsar@umich.eduE ! ! Nick Ing-Simmons Enick@ni-s.u-net.comE ! ! =back ! ! This document is maintained by Gurusamy Sarathy. ! ! =head1 SEE ALSO ! ! L ! ! =head1 HISTORY ! ! This port was originally contributed by Gary Ng around 5.003_24, ! and borrowed from the Hip Communications port that was available ! at the time. ! ! Nick Ing-Simmons and Gurusamy Sarathy have made numerous and ! sundry hacks since then. ! ! Borland support was added in 5.004_01 (Gurusamy Sarathy). ! ! Last updated: 29 November 1998 ! ! =cut ! diff -c 'perl5.004_04/Todo' 'perl5.004_05/Todo' Index: ./Todo *** ./Todo Thu Jul 31 16:43:18 1997 --- ./Todo Sun Nov 22 10:08:38 1998 *************** *** 21,26 **** --- 21,28 ---- reference to compiled regexp lexically scoped functions: my sub foo { ... } lvalue functions + regression/sanity tests for suidperl + Full 64 bit support (i.e. "long long") Possible pragmas debugger *************** *** 30,36 **** constant function cache switch structures eval qw() at compile time - foreach (1..1000000) foreach(reverse...) Set KEEP on constant split Cache eval tree (unless lexical outer scope used (mark in &compiling?)) --- 32,37 ---- *************** *** 45,51 **** Vague possibilities ref function in list context - data prettyprint function? (or is it, as I suspect, a lib routine?) make tr/// return histogram in list context? Loop control on do{} et al Explicit switch statements --- 46,51 ---- *************** *** 54,58 **** structured types autocroak? Modifiable $1 et al - substr EXPR,OFFSET,LENGTH,STRING --- 54,57 ---- diff -c 'perl5.004_04/XSUB.h' 'perl5.004_05/XSUB.h' Index: ./XSUB.h *** ./XSUB.h Mon Jul 28 20:37:31 1997 --- ./XSUB.h Tue Mar 3 12:58:12 1998 *************** *** 15,21 **** #define dXSI32 I32 ix = XSANY.any_i32 ! #define XSRETURN(off) stack_sp = stack_base + ax + ((off) - 1); return /* Simple macros to put new mortal values onto the stack. */ /* Typically used to return values from XS functions. */ --- 15,25 ---- #define dXSI32 I32 ix = XSANY.any_i32 ! #define XSRETURN(off) \ ! STMT_START { \ ! stack_sp = stack_base + ax + ((off) - 1); \ ! return; \ ! } STMT_END /* Simple macros to put new mortal values onto the stack. */ /* Typically used to return values from XS functions. */ *************** *** 39,45 **** #ifdef XS_VERSION # define XS_VERSION_BOOTCHECK \ STMT_START { \ ! char *vn = "", *module = SvPV(ST(0),na); \ if (items >= 2) /* version supplied as bootstrap arg */ \ Sv = ST(1); \ else { \ --- 43,49 ---- #ifdef XS_VERSION # define XS_VERSION_BOOTCHECK \ STMT_START { \ ! char *vn = Nullch, *module = SvPV(ST(0),na); \ if (items >= 2) /* version supplied as bootstrap arg */ \ Sv = ST(1); \ else { \ *************** *** 51,58 **** vn = "VERSION"), FALSE); \ } \ if (Sv && (!SvOK(Sv) || strNE(XS_VERSION, SvPV(Sv, na)))) \ ! croak("%s object version %s does not match $%s::%s %_", \ ! module, XS_VERSION, module, vn, Sv); \ } STMT_END #else # define XS_VERSION_BOOTCHECK --- 55,64 ---- vn = "VERSION"), FALSE); \ } \ if (Sv && (!SvOK(Sv) || strNE(XS_VERSION, SvPV(Sv, na)))) \ ! croak("%s object version %s does not match %s%s%s%s %_", \ ! module, XS_VERSION, \ ! vn ? "$" : "", vn ? module : "", vn ? "::" : "", \ ! vn ? vn : "bootstrap parameter", Sv); \ } STMT_END #else # define XS_VERSION_BOOTCHECK diff -c 'perl5.004_04/av.c' 'perl5.004_05/av.c' Index: ./av.c *** ./av.c Mon Oct 6 13:20:06 1997 --- ./av.c Sun Nov 22 10:08:38 1998 *************** *** 25,41 **** if (AvREAL(av)) return; key = AvMAX(av) + 1; ! while (key > AvFILL(av) + 1) AvARRAY(av)[--key] = &sv_undef; while (key) { sv = AvARRAY(av)[--key]; assert(sv); ! if (sv != &sv_undef) (void)SvREFCNT_inc(sv); } key = AvARRAY(av) - AvALLOC(av); while (key) AvALLOC(av)[--key] = &sv_undef; AvREAL_on(av); } --- 25,44 ---- if (AvREAL(av)) return; key = AvMAX(av) + 1; ! while (key > AvFILLp(av) + 1) AvARRAY(av)[--key] = &sv_undef; while (key) { sv = AvARRAY(av)[--key]; assert(sv); ! if (sv != &sv_undef) { ! dTHR; (void)SvREFCNT_inc(sv); + } } key = AvARRAY(av) - AvALLOC(av); while (key) AvALLOC(av)[--key] = &sv_undef; + AvREIFY_off(av); AvREAL_on(av); } *************** *** 44,58 **** AV *av; I32 key; { if (key > AvMAX(av)) { SV** ary; I32 tmp; I32 newmax; if (AvALLOC(av) != AvARRAY(av)) { ! ary = AvALLOC(av) + AvFILL(av) + 1; tmp = AvARRAY(av) - AvALLOC(av); ! Move(AvARRAY(av), AvALLOC(av), AvFILL(av)+1, SV*); AvMAX(av) += tmp; SvPVX(av) = (char*)AvALLOC(av); if (AvREAL(av)) { --- 47,62 ---- AV *av; I32 key; { + dTHR; /* only necessary if we have to extend stack */ if (key > AvMAX(av)) { SV** ary; I32 tmp; I32 newmax; if (AvALLOC(av) != AvARRAY(av)) { ! ary = AvALLOC(av) + AvFILLp(av) + 1; tmp = AvARRAY(av) - AvALLOC(av); ! Move(AvARRAY(av), AvALLOC(av), AvFILLp(av)+1, SV*); AvMAX(av) += tmp; SvPVX(av) = (char*)AvALLOC(av); if (AvREAL(av)) { *************** *** 134,143 **** if (SvRMAGICAL(av)) { if (mg_find((SV*)av,'P')) { sv = sv_newmortal(); mg_copy((SV*)av, sv, 0, key); ! Sv = sv; ! return &Sv; } } --- 138,148 ---- if (SvRMAGICAL(av)) { if (mg_find((SV*)av,'P')) { + static SV *mysv; sv = sv_newmortal(); mg_copy((SV*)av, sv, 0, key); ! mysv = sv; ! return &mysv; } } *************** *** 146,158 **** if (key < 0) return 0; } ! else if (key > AvFILL(av)) { if (!lval) return 0; ! if (AvREALISH(av)) ! sv = NEWSV(5,0); ! else ! sv = sv_newmortal(); return av_store(av,key,sv); } if (AvARRAY(av)[key] == &sv_undef) { --- 151,160 ---- if (key < 0) return 0; } ! else if (key > AvFILLp(av)) { if (!lval) return 0; ! sv = NEWSV(5,0); return av_store(av,key,sv); } if (AvARRAY(av)[key] == &sv_undef) { *************** *** 198,203 **** --- 200,206 ---- if (key < 0) return 0; } + if (SvREADONLY(av) && key >= AvFILL(av)) croak(no_modify); if (!AvREAL(av) && AvREIFY(av)) *************** *** 205,219 **** if (key > AvMAX(av)) av_extend(av,key); ary = AvARRAY(av); ! if (AvFILL(av) < key) { if (!AvREAL(av)) { if (av == curstack && key > stack_sp - stack_base) stack_sp = stack_base + key; /* XPUSH in disguise */ do ! ary[++AvFILL(av)] = &sv_undef; ! while (AvFILL(av) < key); } ! AvFILL(av) = key; } else if (AvREAL(av)) SvREFCNT_dec(ary[key]); --- 208,223 ---- if (key > AvMAX(av)) av_extend(av,key); ary = AvARRAY(av); ! if (AvFILLp(av) < key) { if (!AvREAL(av)) { + dTHR; if (av == curstack && key > stack_sp - stack_base) stack_sp = stack_base + key; /* XPUSH in disguise */ do ! ary[++AvFILLp(av)] = &sv_undef; ! while (AvFILLp(av) < key); } ! AvFILLp(av) = key; } else if (AvREAL(av)) SvREFCNT_dec(ary[key]); *************** *** 238,244 **** AvREAL_on(av); AvALLOC(av) = 0; SvPVX(av) = 0; ! AvMAX(av) = AvFILL(av) = -1; return av; } --- 242,248 ---- AvREAL_on(av); AvALLOC(av) = 0; SvPVX(av) = 0; ! AvMAX(av) = AvFILLp(av) = -1; return av; } *************** *** 258,264 **** New(4,ary,size,SV*); AvALLOC(av) = ary; SvPVX(av) = (char*)ary; ! AvFILL(av) = size - 1; AvMAX(av) = size - 1; for (i = 0; i < size; i++) { assert (*strp); --- 262,268 ---- New(4,ary,size,SV*); AvALLOC(av) = ary; SvPVX(av) = (char*)ary; ! AvFILLp(av) = size - 1; AvMAX(av) = size - 1; for (i = 0; i < size; i++) { assert (*strp); *************** *** 285,291 **** Copy(strp,ary,size,SV*); AvFLAGS(av) = AVf_REIFY; SvPVX(av) = (char*)ary; ! AvFILL(av) = size - 1; AvMAX(av) = size - 1; while (size--) { assert (*strp); --- 289,295 ---- Copy(strp,ary,size,SV*); AvFLAGS(av) = AVf_REIFY; SvPVX(av) = (char*)ary; ! AvFILLp(av) = size - 1; AvMAX(av) = size - 1; while (size--) { assert (*strp); *************** *** 313,319 **** if (AvREAL(av)) { ary = AvARRAY(av); ! key = AvFILL(av) + 1; while (key) { SvREFCNT_dec(ary[--key]); ary[key] = &sv_undef; --- 317,323 ---- if (AvREAL(av)) { ary = AvARRAY(av); ! key = AvFILLp(av) + 1; while (key) { SvREFCNT_dec(ary[--key]); ary[key] = &sv_undef; *************** *** 323,329 **** AvMAX(av) += key; SvPVX(av) = (char*)AvALLOC(av); } ! AvFILL(av) = -1; if (SvRMAGICAL(av)) mg_clear((SV*)av); --- 327,333 ---- AvMAX(av) += key; SvPVX(av) = (char*)AvALLOC(av); } ! AvFILLp(av) = -1; if (SvRMAGICAL(av)) mg_clear((SV*)av); *************** *** 339,352 **** return; /*SUPPRESS 560*/ if (AvREAL(av)) { ! key = AvFILL(av) + 1; while (key) SvREFCNT_dec(AvARRAY(av)[--key]); } Safefree(AvALLOC(av)); AvALLOC(av) = 0; SvPVX(av) = 0; ! AvMAX(av) = AvFILL(av) = -1; if (AvARYLEN(av)) { SvREFCNT_dec(AvARYLEN(av)); AvARYLEN(av) = 0; --- 343,356 ---- return; /*SUPPRESS 560*/ if (AvREAL(av)) { ! key = AvFILLp(av) + 1; while (key) SvREFCNT_dec(AvARRAY(av)[--key]); } Safefree(AvALLOC(av)); AvALLOC(av) = 0; SvPVX(av) = 0; ! AvMAX(av) = AvFILLp(av) = -1; if (AvARYLEN(av)) { SvREFCNT_dec(AvARYLEN(av)); AvARYLEN(av) = 0; *************** *** 386,392 **** register I32 num; { register I32 i; ! register SV **sstr,**dstr; if (!av || num <= 0) return; --- 390,396 ---- register I32 num; { register I32 i; ! register SV **ary; if (!av || num <= 0) return; *************** *** 401,425 **** num -= i; AvMAX(av) += i; ! AvFILL(av) += i; SvPVX(av) = (char*)(AvARRAY(av) - i); } if (num) { ! av_extend(av,AvFILL(av)+num); ! AvFILL(av) += num; ! dstr = AvARRAY(av) + AvFILL(av); ! sstr = dstr - num; ! #ifdef BUGGY_MSC5 ! # pragma loop_opt(off) /* don't loop-optimize the following code */ ! #endif /* BUGGY_MSC5 */ ! for (i = AvFILL(av) - num; i >= 0; --i) { ! *dstr-- = *sstr--; ! #ifdef BUGGY_MSC5 ! # pragma loop_opt() /* loop-optimization back to command-line setting */ ! #endif /* BUGGY_MSC5 */ ! } ! while (num) ! AvARRAY(av)[--num] = &sv_undef; } } --- 405,422 ---- num -= i; AvMAX(av) += i; ! AvFILLp(av) += i; SvPVX(av) = (char*)(AvARRAY(av) - i); } if (num) { ! i = AvFILLp(av); ! av_extend(av, i + num); ! AvFILLp(av) += num; ! ary = AvARRAY(av); ! Move(ary, ary + num, i + 1, SV*); ! do { ! ary[--num] = &sv_undef; ! } while (num); } } *************** *** 438,444 **** *AvARRAY(av) = &sv_undef; SvPVX(av) = (char*)(AvARRAY(av) + 1); AvMAX(av)--; ! AvFILL(av)--; if (SvSMAGICAL(av)) mg_set((SV*)av); return retval; --- 435,441 ---- *AvARRAY(av) = &sv_undef; SvPVX(av) = (char*)(AvARRAY(av) + 1); AvMAX(av)--; ! AvFILLp(av)--; if (SvSMAGICAL(av)) mg_set((SV*)av); return retval; *************** *** 461,467 **** if (fill < 0) fill = -1; if (fill <= AvMAX(av)) { ! I32 key = AvFILL(av); SV** ary = AvARRAY(av); if (AvREAL(av)) { --- 458,464 ---- if (fill < 0) fill = -1; if (fill <= AvMAX(av)) { ! I32 key = AvFILLp(av); SV** ary = AvARRAY(av); if (AvREAL(av)) { *************** *** 475,481 **** ary[++key] = &sv_undef; } ! AvFILL(av) = fill; if (SvSMAGICAL(av)) mg_set((SV*)av); } --- 472,478 ---- ary[++key] = &sv_undef; } ! AvFILLp(av) = fill; if (SvSMAGICAL(av)) mg_set((SV*)av); } diff -c 'perl5.004_04/av.h' 'perl5.004_05/av.h' Index: ./av.h *** ./av.h Thu Mar 6 10:46:34 1997 --- ./av.h Tue May 19 17:26:03 1998 *************** *** 1,6 **** /* av.h * ! * Copyright (c) 1991-1997, Larry Wall * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. --- 1,6 ---- /* av.h * ! * Copyright (c) 1991-1998, Larry Wall * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. *************** *** 9,16 **** struct xpvav { char* xav_array; /* pointer to first array element */ ! SSize_t xav_fill; ! SSize_t xav_max; IV xof_off; /* ptr is incremented by offset */ double xnv_nv; /* numeric value, if any */ MAGIC* xmg_magic; /* magic for scalar array */ --- 9,16 ---- struct xpvav { char* xav_array; /* pointer to first array element */ ! SSize_t xav_fill; /* Index of last element present */ ! SSize_t xav_max; /* Number of elements for which array has space */ IV xof_off; /* ptr is incremented by offset */ double xnv_nv; /* numeric value, if any */ MAGIC* xmg_magic; /* magic for scalar array */ diff -c /dev/null 'perl5.004_05/beos/nm.c' Index: ./beos/nm.c *** ./beos/nm.c Wed Dec 31 19:00:00 1969 --- ./beos/nm.c Fri May 15 11:28:45 1998 *************** *** 0 **** --- 1,53 ---- + /* nm.c - a feeble shared-lib library parser + * Copyright 1997, 1998 Tom Spindler + * This software is covered under perl's Artistic license. + */ + + /* $Id: nm.c,v 1.1 1998/02/16 03:51:26 dogcow Exp $ */ + + #include + #include + #include + #include + #include + #include + + main(int argc, char **argv) { + char *path, *symname; + image_id img; + int32 n = 0; + volatile int32 symnamelen, symtype; + void *symloc; + + if (argc != 2) { printf("more args, bozo\n"); exit(1); } + + path = (void *) malloc((size_t) 2048); + symname = (void *) malloc((size_t) 2048); + + if (!getcwd(path, 2048)) { printf("aiee!\n"); exit(1); } + if (!strcat(path, "/")) {printf("naah.\n"); exit (1); } + /*printf("%s\n",path);*/ + + if ('/' != argv[1][0]) { + if (!strcat(path, argv[1])) { printf("feh1\n"); exit(1); } + } else { + if (!strcpy(path, argv[1])) { printf("gah!\n"); exit(1); } + } + /*printf("%s\n",path);*/ + + img = load_add_on(path); + if (B_ERROR == img) {printf("Couldn't load_add_on() %s.\n", path); exit(2); } + + symnamelen=2047; + + while (B_BAD_INDEX != get_nth_image_symbol(img, n++, symname, &symnamelen, + &symtype, &symloc)) { + printf("%s |%s |GLOB %Lx | \n", symname, + ((B_SYMBOL_TYPE_ANY == symtype) || (B_SYMBOL_TYPE_TEXT == symtype)) ? "FUNC" : "VAR ", symloc); + symnamelen=2047; + } + printf("number of symbols: %d\n", n); + if (B_ERROR == unload_add_on(img)) {printf("err while closing.\n"); exit(3); } + free(path); + return(0); + } diff -c 'perl5.004_04/cflags.SH' 'perl5.004_05/cflags.SH' Index: ./cflags.SH *** ./cflags.SH Mon Aug 19 13:08:07 1996 --- ./cflags.SH Tue May 19 17:26:03 1998 *************** *** 123,128 **** --- 123,129 ---- optimize="$optdebug" fi + : Can we perhaps use $ansi2knr here echo "$cc -c -DPERL_CORE $ccflags $optimize $perltype $large $split" eval "$also "'"$cc -DPERL_CORE -c $ccflags $optimize $perltype $large $split"' diff -c 'perl5.004_04/config_H' 'perl5.004_05/config_H' Index: ./config_H Prereq: 3.0.1.4 *** ./config_H Tue Apr 8 02:40:42 1997 --- ./config_H Wed Apr 22 07:49:24 1998 *************** *** 329,334 **** --- 329,340 ---- */ #define HAS_GETPRIORITY /**/ + /* HAS_GNULIBC: + * This symbol, if defined, indicates to the C program that + * the GNU C library is being used. + */ + /*#define HAS_GNULIBC / **/ + /* HAS_HTONL: * This symbol, if defined, indicates that the htonl() routine (and * friends htons() ntohl() ntohs()) are available to do network diff -c 'perl5.004_04/config_h.SH' 'perl5.004_05/config_h.SH' Index: ./config_h.SH Prereq: 3.0.1.4 *** ./config_h.SH Thu May 8 12:57:47 1997 --- ./config_h.SH Tue Apr 6 15:38:11 1999 *************** *** 360,365 **** --- 360,371 ---- */ #$d_getprior HAS_GETPRIORITY /**/ + /* HAS_GNULIBC: + * This symbol, if defined, indicates to the C program that + * the GNU C library is being used. + */ + #$d_gnulibc HAS_GNULIBC /**/ + /* HAS_HTONL: * This symbol, if defined, indicates that the htonl() routine (and * friends htons() ntohl() ntohs()) are available to do network *************** *** 617,622 **** --- 623,652 ---- */ #$d_sem HAS_SEM /**/ + /* HAS_UNION_SEMUN: + * This symbol, if defined, indicates that the union semun + * is defined in . If not, the user code probably + * needs to define it as: + * union semun { + * int val; + * struct semid_ds *buf; + * unsigned short *array; + * } + */ + #$d_union_semun HAS_UNION_SEMUN /**/ + + /* USE_SEMCTL_SEMUN: + * This symbol, if defined, indicates that union semun is + * used for semctl IPC_STAT. + */ + #$d_semctl_semun USE_SEMCTL_SEMUN /**/ + + /* USE_SEMCTL_SEMID_DS: + * This symbol, if defined, indicates that struct semid_ds * is + * used for semctl IPC_STAT. + */ + #$d_semctl_semid_ds USE_SEMCTL_SEMID_DS /**/ + /* HAS_SETEGID: * This symbol, if defined, indicates that the setegid routine is available * to change the effective gid of the current program. *************** *** 1145,1150 **** --- 1175,1184 ---- * This symbol, if defined, indicates to the C program that struct passwd * contains pw_comment. */ + /* PWGECOS: + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_gecos. + */ #$i_pwd I_PWD /**/ #$d_pwquota PWQUOTA /**/ #$d_pwage PWAGE /**/ *************** *** 1152,1157 **** --- 1186,1192 ---- #$d_pwclass PWCLASS /**/ #$d_pwexpire PWEXPIRE /**/ #$d_pwcomment PWCOMMENT /**/ + #$d_pwgecos PWGECOS /**/ /* I_STDDEF: * This symbol, if defined, indicates that exists and should *************** *** 1225,1230 **** --- 1260,1283 ---- */ #$i_systypes I_SYS_TYPES /**/ + /* I_MNTENT: + * This symbol, if defined, indicates that exists and + * should be included. + */ + #$i_mntent I_MNTENT /**/ + + /* I_SYS_MOUNT: + * This symbol, if defined, indicates that exists and + * should be included. + */ + #$i_sysmount I_SYS_MOUNT /**/ + + /* I_SYS_STATVFS: + * This symbol, if defined, indicates that exists and + * should be included. + */ + #$i_sysstatvfs I_SYS_STATVFS /**/ + /* I_SYS_UN: * This symbol, if defined, indicates to the C program that it should * include to get UNIX domain socket definitions. *************** *** 1587,1592 **** --- 1640,1676 ---- * be used. */ #$d_sfio USE_SFIO /**/ + + /* HAS_FSTATFS: + * This symbol, if defined, indicates that the fstatfs routine is + * available to do stat filesystems of file descriptors. + */ + /* HAS_STRUCT_STATFS_FLAGS: + * This symbol, if defined, indicates that the struct statfs + * does have the f_flags member containing the mount flags of + * the filesystem holding the file. + * This kind of struct statfs is coming from sys/mount.h (BSD) + * and not from sys/statfs.h (SYSV). + */ + #$d_fstatfs HAS_FSTATFS /**/ + #$d_statfsflags HAS_STRUCT_STATFS_FLAGS /**/ + + /* HAS_FSTATVFS: + * This symbol, if defined, indicates that the fstatvfs routine is + * available to do stat filesystems of file descriptors. + */ + #$d_fstatvfs HAS_FSTATVFS /**/ + + /* HAS_GETMNTENT: + * This symbol, if defined, indicates that the getmntent routine is + * available to enumerate mounted filesystems. + */ + /* HAS_HASMNTOPT: + * This symbol, if defined, indicates that the hasmntopt routine is + * available to check options on mounted filesystems. + */ + #$d_getmntent HAS_GETMNTENT /**/ + #$d_hasmntopt HAS_HASMNTOPT /**/ /* Sigjmp_buf: * This is the buffer type to be used with Sigsetjmp and Siglongjmp. diff -c 'perl5.004_04/cop.h' 'perl5.004_05/cop.h' Index: ./cop.h *** ./cop.h Fri May 9 20:23:51 1997 --- ./cop.h Sun Nov 22 10:08:38 1998 *************** *** 187,200 **** pm = cx->blk_oldpm, \ gimme = cx->blk_gimme; \ DEBUG_l( PerlIO_printf(PerlIO_stderr(), "Leaving block %ld, type %s\n", \ ! (long)cxstack_ix+1,block_type[cx->cx_type]); ) /* Continue a block elsewhere (NEXT and REDO). */ #define TOPBLOCK(cx) cx = &cxstack[cxstack_ix], \ stack_sp = stack_base + cx->blk_oldsp, \ markstack_ptr = markstack + cx->blk_oldmarksp, \ scopestack_ix = cx->blk_oldscopesp, \ ! retstack_ix = cx->blk_oldretsp /* substitution context */ struct subst { --- 187,201 ---- pm = cx->blk_oldpm, \ gimme = cx->blk_gimme; \ DEBUG_l( PerlIO_printf(PerlIO_stderr(), "Leaving block %ld, type %s\n", \ ! (long)cxstack_ix+1,block_type[CxTYPE(cx)]); ) /* Continue a block elsewhere (NEXT and REDO). */ #define TOPBLOCK(cx) cx = &cxstack[cxstack_ix], \ stack_sp = stack_base + cx->blk_oldsp, \ markstack_ptr = markstack + cx->blk_oldmarksp, \ scopestack_ix = cx->blk_oldscopesp, \ ! retstack_ix = cx->blk_oldretsp, \ ! curpm = cx->blk_oldpm /* substitution context */ struct subst { *************** *** 250,261 **** rxres_free(&cx->sb_rxres) struct context { ! I32 cx_type; /* what kind of context this is */ union { struct block cx_blk; struct subst cx_subst; } cx_u; }; #define CXt_NULL 0 #define CXt_SUB 1 #define CXt_EVAL 2 --- 251,264 ---- rxres_free(&cx->sb_rxres) struct context { ! U32 cx_type; /* what kind of context this is */ union { struct block cx_blk; struct subst cx_subst; } cx_u; }; + + #define CXTYPEMASK 0xff #define CXt_NULL 0 #define CXt_SUB 1 #define CXt_EVAL 2 *************** *** 263,268 **** --- 266,277 ---- #define CXt_SUBST 4 #define CXt_BLOCK 5 + /* private flags for CXt_EVAL */ + #define CXp_REAL 0x00000100 /* truly eval'', not a lookalike */ + + #define CxTYPE(c) ((c)->cx_type & CXTYPEMASK) + #define CxREALEVAL(c) (((c)->cx_type & (CXt_EVAL|CXp_REAL)) == (CXt_EVAL|CXp_REAL)) + #define CXINC (cxstack_ix < cxstack_max ? ++cxstack_ix : (cxstack_ix = cxinc())) /* "gimme" values */ *************** *** 275,277 **** --- 284,287 ---- #define G_EVAL 4 /* Assume eval {} around subroutine call. */ #define G_NOARGS 8 /* Don't construct a @_ array. */ #define G_KEEPERR 16 /* Append errors to $@, don't overwrite it */ + #define G_NODEBUG 32 /* Disable debugging at toplevel. */ diff -c 'perl5.004_04/cygwin32/perlgcc' 'perl5.004_05/cygwin32/perlgcc' Index: ./cygwin32/perlgcc *** ./cygwin32/perlgcc Fri Apr 4 17:33:10 1997 --- ./cygwin32/perlgcc Tue May 19 17:26:03 1998 *************** *** 30,50 **** # make exports file my $command = "echo EXPORTS > perl.def"; print "$command\n"; ! system($command); $command ="nm $libstring | grep '^........ [TCD] _'| grep -v _impure_ptr | sed 's/[^_]*_//' >> perl.def"; print "$command\n"; ! system($command); # Build the perl.a lib to link to: $command ="dlltool --as=as --dllname perl.exe --def perl.def --output-lib perl.a"; print "$command\n"; ! system($command); # change name of export lib to libperlexp so that is can be understood by ld2/perlld $command ="mv perl.a libperlexp.a"; print "$command\n"; ! system($command); # get the full path name of a few libs: my $crt0 = `gcc -print-file-name=crt0.o`; --- 30,50 ---- # make exports file my $command = "echo EXPORTS > perl.def"; print "$command\n"; ! system($command) == 0 or die "system() failed.\n"; $command ="nm $libstring | grep '^........ [TCD] _'| grep -v _impure_ptr | sed 's/[^_]*_//' >> perl.def"; print "$command\n"; ! system($command) == 0 or die "system() failed.\n"; # Build the perl.a lib to link to: $command ="dlltool --as=as --dllname perl.exe --def perl.def --output-lib perl.a"; print "$command\n"; ! system($command) == 0 or die "system() failed.\n"; # change name of export lib to libperlexp so that is can be understood by ld2/perlld $command ="mv perl.a libperlexp.a"; print "$command\n"; ! system($command) == 0 or die "system() failed.\n"; # get the full path name of a few libs: my $crt0 = `gcc -print-file-name=crt0.o`; *************** *** 53,77 **** chomp $libdir; $libdir =~ s/libcygwin\.a//g; # Link exe: $command = "ld --base-file perl.base -o perl.exe $crt0 $obsString $libstring -L$libdir $libflagString"; print "$command\n"; ! system($command); $command = "dlltool --as=as --dllname perl.exe --def perl.def --base-file perl.base --output-exp perl.exp"; print "$command\n"; ! system($command); $command = "ld --base-file perl.base perl.exp -o perl.exe $crt0 $obsString $libstring -L$libdir $libflagString"; print "$command\n"; ! system($command); $command = "dlltool --as=as --dllname perl.exe --def perl.def --base-file perl.base --output-exp perl.exp"; print "$command\n"; ! system($command); $command = "ld perl.exp -o perl.exe $crt0 $obsString $libstring -L$libdir $libflagString"; print "$command\n"; ! system($command); print "perlgcc: Completed\n"; --- 53,84 ---- chomp $libdir; $libdir =~ s/libcygwin\.a//g; + # when $crt0 and $libdir get used in the system calls below, the \'s + # from the gcc -print-file-name get used to create special characters, + # such as \n, \t. Replace the \'s with /'s so that this does not + # happen: + $crt0 =~ s:\\:/:g; + $libdir =~ s:\\:/:g; + # Link exe: $command = "ld --base-file perl.base -o perl.exe $crt0 $obsString $libstring -L$libdir $libflagString"; print "$command\n"; ! system($command) == 0 or die "system() failed.\n"; $command = "dlltool --as=as --dllname perl.exe --def perl.def --base-file perl.base --output-exp perl.exp"; print "$command\n"; ! system($command) == 0 or die "system() failed.\n"; $command = "ld --base-file perl.base perl.exp -o perl.exe $crt0 $obsString $libstring -L$libdir $libflagString"; print "$command\n"; ! system($command) == 0 or die "system() failed.\n"; $command = "dlltool --as=as --dllname perl.exe --def perl.def --base-file perl.base --output-exp perl.exp"; print "$command\n"; ! system($command) == 0 or die "system() failed.\n"; $command = "ld perl.exp -o perl.exe $crt0 $obsString $libstring -L$libdir $libflagString"; print "$command\n"; ! system($command) == 0 or die "system() failed.\n"; print "perlgcc: Completed\n"; diff -c 'perl5.004_04/cygwin32/perlld' 'perl5.004_05/cygwin32/perlld' Index: ./cygwin32/perlld *** ./cygwin32/perlld Fri Apr 4 17:34:09 1997 --- ./cygwin32/perlld Tue May 19 17:26:03 1998 *************** *** 47,100 **** writeInit(); $command = "gcc -c $fixup.c\n"; print $command; ! system($command); $command = "gcc -c $init.cc\n"; print $command; ! system($command); $command = "echo EXPORTS > $libname.def\n"; print $command; ! system($command); $command = "nm ".join(" ",@objs)." $init.o $fixup.o | grep '^........ [TCD] _' | sed 's/[^_]*_//' >> $libname.def\n"; print $command; ! system($command); $command = "ld --base-file $libname.base --dll -o $libname.dll ".join(" ",@objs)." $init.o $fixup.o "; $command .= join(" ",@flags)." -e _dll_entry\@12 \n"; print $command; ! system($command); $command = "dlltool --as=as --dllname $libname.dll --def $libname.def --base-file $libname.base --output-exp $libname.exp\n"; print $command; ! system($command); $command = "ld --base-file $libname.base $libname.exp --dll -o $libname.dll ".join(" ",@objs)." $init.o $fixup.o "; $command .= join(" ",@flags)." -e _dll_entry\@12 \n"; print $command; ! system($command); $command = "dlltool --as=as --dllname $libname.dll --def $libname.def --base-file $libname.base --output-exp $libname.exp\n"; print $command; ! system($command); $command = "ld $libname.exp --dll -o $libname.dll ".join(" ",@objs)." $init.o $fixup.o "; $command .= join(" ",@flags)." -e _dll_entry\@12 \n"; print $command; ! system($command); print "Build the import lib\n"; $command = "dlltool --as=as --dllname $libname.dll --def $libname.def --output-lib $libname.a\n"; print $command; ! system($command); # if there was originally a path, copy the dll and a to that location: if($path && $path ne "./" && $path."\n" ne "`pwd`"){ $command = "mv $libname.dll $path".$libname.".dll\n"; print $command; ! system($command); $command = "mv $libname.a $path".$libname.".a\n"; print $command; ! system($command); } --- 47,100 ---- writeInit(); $command = "gcc -c $fixup.c\n"; print $command; ! system($command) == 0 or die "system() failed.\n"; $command = "gcc -c $init.cc\n"; print $command; ! system($command) == 0 or die "system() failed.\n"; $command = "echo EXPORTS > $libname.def\n"; print $command; ! system($command) == 0 or die "system() failed.\n"; $command = "nm ".join(" ",@objs)." $init.o $fixup.o | grep '^........ [TCD] _' | sed 's/[^_]*_//' >> $libname.def\n"; print $command; ! system($command) == 0 or die "system() failed.\n"; $command = "ld --base-file $libname.base --dll -o $libname.dll ".join(" ",@objs)." $init.o $fixup.o "; $command .= join(" ",@flags)." -e _dll_entry\@12 \n"; print $command; ! system($command) == 0 or die "system() failed.\n"; $command = "dlltool --as=as --dllname $libname.dll --def $libname.def --base-file $libname.base --output-exp $libname.exp\n"; print $command; ! system($command) == 0 or die "system() failed.\n"; $command = "ld --base-file $libname.base $libname.exp --dll -o $libname.dll ".join(" ",@objs)." $init.o $fixup.o "; $command .= join(" ",@flags)." -e _dll_entry\@12 \n"; print $command; ! system($command) == 0 or die "system() failed.\n"; $command = "dlltool --as=as --dllname $libname.dll --def $libname.def --base-file $libname.base --output-exp $libname.exp\n"; print $command; ! system($command) == 0 or die "system() failed.\n"; $command = "ld $libname.exp --dll -o $libname.dll ".join(" ",@objs)." $init.o $fixup.o "; $command .= join(" ",@flags)." -e _dll_entry\@12 \n"; print $command; ! system($command) == 0 or die "system() failed.\n"; print "Build the import lib\n"; $command = "dlltool --as=as --dllname $libname.dll --def $libname.def --output-lib $libname.a\n"; print $command; ! system($command) == 0 or die "system() failed.\n"; # if there was originally a path, copy the dll and a to that location: if($path && $path ne "./" && $path."\n" ne "`pwd`"){ $command = "mv $libname.dll $path".$libname.".dll\n"; print $command; ! system($command) == 0 or die "system() failed.\n"; $command = "mv $libname.a $path".$libname.".a\n"; print $command; ! system($command) == 0 or die "system() failed.\n"; } *************** *** 102,108 **** else{ # no special processing, just call ld $command = "ld $args\n"; print $command; ! system($command); } #--------------------------------------------------------------------------- --- 102,108 ---- else{ # no special processing, just call ld $command = "ld $args\n"; print $command; ! system($command) == 0 or die "system() failed.\n"; } #--------------------------------------------------------------------------- diff -c 'perl5.004_04/deb.c' 'perl5.004_05/deb.c' Index: ./deb.c *** ./deb.c Thu Mar 6 10:46:34 1997 --- ./deb.c Mon Jul 6 19:03:16 1998 *************** *** 27,32 **** --- 27,33 ---- deb(pat,a1,a2,a3,a4,a5,a6,a7,a8) char *pat; { + dTHR; register I32 i; GV* gv = curcop->cop_filegv; *************** *** 51,56 **** --- 52,58 ---- va_dcl # endif { + dTHR; va_list args; register I32 i; GV* gv = curcop->cop_filegv; *************** *** 82,100 **** I32 debstackptrs() { PerlIO_printf(Perl_debug_log, "%8lx %8lx %8ld %8ld %8ld\n", (unsigned long)curstack, (unsigned long)stack_base, (long)*markstack_ptr, (long)(stack_sp-stack_base), (long)(stack_max-stack_base)); PerlIO_printf(Perl_debug_log, "%8lx %8lx %8ld %8ld %8ld\n", (unsigned long)mainstack, (unsigned long)AvARRAY(curstack), ! (long)mainstack, (long)AvFILL(curstack), (long)AvMAX(curstack)); return 0; } I32 debstack() { I32 top = stack_sp - stack_base; register I32 i = top - 30; I32 *markscan = markstack; --- 84,104 ---- I32 debstackptrs() { + dTHR; PerlIO_printf(Perl_debug_log, "%8lx %8lx %8ld %8ld %8ld\n", (unsigned long)curstack, (unsigned long)stack_base, (long)*markstack_ptr, (long)(stack_sp-stack_base), (long)(stack_max-stack_base)); PerlIO_printf(Perl_debug_log, "%8lx %8lx %8ld %8ld %8ld\n", (unsigned long)mainstack, (unsigned long)AvARRAY(curstack), ! (long)mainstack, (long)AvFILLp(curstack), (long)AvMAX(curstack)); return 0; } I32 debstack() { + dTHR; I32 top = stack_sp - stack_base; register I32 i = top - 30; I32 *markscan = markstack; diff -c 'perl5.004_04/doio.c' 'perl5.004_05/doio.c' Index: ./doio.c *** ./doio.c Mon Jul 28 21:08:11 1997 --- ./doio.c Tue Apr 13 00:21:23 1999 *************** *** 34,51 **** #endif #ifdef I_UTIME ! # ifdef _MSC_VER # include # else # include # endif #endif #ifdef I_FCNTL #include #endif #ifdef I_SYS_FILE #include #endif #if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX) #include --- 34,57 ---- #endif #ifdef I_UTIME ! # if defined(_MSC_VER) || defined(__MINGW32__) # include # else # include # endif #endif + #ifdef I_FCNTL #include #endif #ifdef I_SYS_FILE #include #endif + #ifdef O_EXCL + # define OPEN_EXCL O_EXCL + #else + # define OPEN_EXCL 0 + #endif #if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX) #include *************** *** 92,97 **** --- 98,104 ---- PerlIO *fp; int fd; int result; + bool was_fdopen = FALSE; forkprocess = 1; /* assume true if no fork */ *************** *** 170,177 **** if (strNE(name,"-")) TAINT_ENV(); TAINT_PROPER("piped open"); ! if (dowarn && name[strlen(name)-1] == '|') ! warn("Can't do bidirectional pipe"); fp = my_popen(name,"w"); writing = 1; } --- 177,187 ---- if (strNE(name,"-")) TAINT_ENV(); TAINT_PROPER("piped open"); ! if (name[strlen(name)-1] == '|') { ! name[strlen(name)-1] = '\0' ; ! if (dowarn) ! warn("Can't do bidirectional pipe"); ! } fp = my_popen(name,"w"); writing = 1; } *************** *** 221,226 **** --- 231,238 ---- } if (dodup) fd = dup(fd); + else + was_fdopen = TRUE; if (!(fp = PerlIO_fdopen(fd,mode))) { if (dodup) close(fd); *************** *** 252,258 **** else fp = PerlIO_open(name,mode); } ! else if (name[len-1] == '|') { name[--len] = '\0'; while (len && isSPACE(name[len-1])) name[--len] = '\0'; --- 264,270 ---- else fp = PerlIO_open(name,mode); } ! else if (len > 1 && name[len-1] == '|') { name[--len] = '\0'; while (len && isSPACE(name[len-1])) name[--len] = '\0'; *************** *** 283,288 **** --- 295,301 ---- } if (IoTYPE(io) && IoTYPE(io) != '|' && IoTYPE(io) != '-') { + dTHR; if (Fstat(PerlIO_fileno(fp),&statbuf) < 0) { (void)PerlIO_close(fp); goto say_false; *************** *** 328,345 **** sv = *av_fetch(fdpid,fd,TRUE); (void)SvUPGRADE(sv, SVt_IV); SvIVX(sv) = pid; ! PerlIO_close(fp); } fp = saveifp; PerlIO_clearerr(fp); } #if defined(HAS_FCNTL) && defined(F_SETFD) ! fd = PerlIO_fileno(fp); ! fcntl(fd,F_SETFD,fd > maxsysfd); #endif IoIFP(io) = fp; if (writing) { if (IoTYPE(io) == 's' || (IoTYPE(io) == '>' && S_ISCHR(statbuf.st_mode)) ) { if (!(IoOFP(io) = PerlIO_fdopen(PerlIO_fileno(fp),"w"))) { --- 341,364 ---- sv = *av_fetch(fdpid,fd,TRUE); (void)SvUPGRADE(sv, SVt_IV); SvIVX(sv) = pid; ! if (!was_fdopen) ! PerlIO_close(fp); } fp = saveifp; PerlIO_clearerr(fp); } #if defined(HAS_FCNTL) && defined(F_SETFD) ! { ! int save_errno = errno; ! fd = PerlIO_fileno(fp); ! fcntl(fd,F_SETFD,fd > maxsysfd); /* can change errno */ ! errno = save_errno; ! } #endif IoIFP(io) = fp; if (writing) { + dTHR; if (IoTYPE(io) == 's' || (IoTYPE(io) == '>' && S_ISCHR(statbuf.st_mode)) ) { if (!(IoOFP(io) = PerlIO_fdopen(PerlIO_fileno(fp),"w"))) { *************** *** 384,399 **** } filemode = 0; while (av_len(GvAV(gv)) >= 0) { ! STRLEN len; sv = av_shift(GvAV(gv)); SAVEFREESV(sv); sv_setsv(GvSV(gv),sv); SvSETMAGIC(GvSV(gv)); ! oldname = SvPVx(GvSV(gv), len); ! if (do_open(gv,oldname,len,FALSE,0,0,Nullfp)) { if (inplace) { TAINT_PROPER("inplace open"); ! if (strEQ(oldname,"-")) { setdefout(gv_fetchpv("STDOUT",TRUE,SVt_PVIO)); return IoIFP(GvIOp(gv)); } --- 403,419 ---- } filemode = 0; while (av_len(GvAV(gv)) >= 0) { ! dTHR; ! STRLEN oldlen; sv = av_shift(GvAV(gv)); SAVEFREESV(sv); sv_setsv(GvSV(gv),sv); SvSETMAGIC(GvSV(gv)); ! oldname = SvPVx(GvSV(gv), oldlen); ! if (do_open(gv,oldname,oldlen,inplace!=0,0,0,Nullfp)) { if (inplace) { TAINT_PROPER("inplace open"); ! if (oldlen == 1 && *oldname == '-') { setdefout(gv_fetchpv("STDOUT",TRUE,SVt_PVIO)); return IoIFP(GvIOp(gv)); } *************** *** 438,444 **** do_close(gv,FALSE); (void)unlink(SvPVX(sv)); (void)rename(oldname,SvPVX(sv)); ! do_open(gv,SvPVX(sv),SvCUR(sv),FALSE,0,0,Nullfp); #endif /* DOSISH */ #else (void)UNLINK(SvPVX(sv)); --- 458,464 ---- do_close(gv,FALSE); (void)unlink(SvPVX(sv)); (void)rename(oldname,SvPVX(sv)); ! do_open(gv,SvPVX(sv),SvCUR(sv),inplace!=0,0,0,Nullfp); #endif /* DOSISH */ #else (void)UNLINK(SvPVX(sv)); *************** *** 455,462 **** #if !defined(DOSISH) && !defined(AMIGAOS) # ifndef VMS /* Don't delete; use automatic file versioning */ if (UNLINK(oldname) < 0) { ! warn("Can't rename %s to %s: %s, skipping file", ! oldname, SvPVX(sv), Strerror(errno) ); do_close(gv,FALSE); continue; } --- 475,482 ---- #if !defined(DOSISH) && !defined(AMIGAOS) # ifndef VMS /* Don't delete; use automatic file versioning */ if (UNLINK(oldname) < 0) { ! warn("Can't remove %s: %s, skipping file", ! oldname, Strerror(errno) ); do_close(gv,FALSE); continue; } *************** *** 466,475 **** #endif } ! sv_setpvn(sv,">",1); ! sv_catpv(sv,oldname); SETERRNO(0,0); /* in case sprintf set errno */ ! if (!do_open(argvoutgv,SvPVX(sv),SvCUR(sv),FALSE,0,0,Nullfp)) { warn("Can't do inplace edit on %s: %s", oldname, Strerror(errno) ); do_close(gv,FALSE); --- 486,496 ---- #endif } ! sv_setpvn(sv,">",!inplace); ! sv_catpvn(sv,oldname,oldlen); SETERRNO(0,0); /* in case sprintf set errno */ ! if (!do_open(argvoutgv,SvPVX(sv),SvCUR(sv),inplace!=0, ! O_WRONLY|O_CREAT|OPEN_EXCL,0666,Nullfp)) { warn("Can't do inplace edit on %s: %s", oldname, Strerror(errno) ); do_close(gv,FALSE); *************** *** 499,505 **** return IoIFP(GvIOp(gv)); } else ! PerlIO_printf(PerlIO_stderr(), "Can't open %s: %s\n",SvPV(sv, na), Strerror(errno)); } if (inplace) { (void)do_close(argvoutgv,FALSE); --- 520,527 ---- return IoIFP(GvIOp(gv)); } else ! PerlIO_printf(PerlIO_stderr(), "Can't open %s: %s\n", ! SvPV(sv, na), Strerror(errno)); } if (inplace) { (void)do_close(argvoutgv,FALSE); *************** *** 572,584 **** if (!gv) gv = argvgv; if (!gv || SvTYPE(gv) != SVt_PVGV) { ! SETERRNO(EBADF,SS$_IVCHAN); return FALSE; } io = GvIO(gv); if (!io) { /* never opened */ ! if (dowarn && not_implicit) ! warn("Close on unopened file <%s>",GvENAME(gv)); return FALSE; } retval = io_close(io); --- 594,610 ---- if (!gv) gv = argvgv; if (!gv || SvTYPE(gv) != SVt_PVGV) { ! if (not_implicit) ! SETERRNO(EBADF,SS$_IVCHAN); return FALSE; } io = GvIO(gv); if (!io) { /* never opened */ ! if (not_implicit) { ! if (dowarn) ! warn("Close on unopened file <%s>",GvENAME(gv)); ! SETERRNO(EBADF,SS$_IVCHAN); ! } return FALSE; } retval = io_close(io); *************** *** 616,621 **** --- 642,650 ---- } IoOFP(io) = IoIFP(io) = Nullfp; } + else { + SETERRNO(EBADF,SS$_IVCHAN); + } return retval; } *************** *** 624,629 **** --- 653,659 ---- do_eof(gv) GV *gv; { + dTHR; register IO *io; int ch; *************** *** 717,722 **** --- 747,795 ---- return -1L; } + int + do_binmode(fp, iotype, flag) + PerlIO *fp; + int iotype; + int flag; + { + if (flag != TRUE) + croak("panic: unsetting binmode"); /* Not implemented yet */ + #ifdef DOSISH + #ifdef atarist + if (!PerlIO_flush(fp) && (fp->_flag |= _IOBIN)) + return 1; + else + return 0; + #else + if (setmode(PerlIO_fileno(fp), OP_BINARY) != -1) { + #if defined(WIN32) && defined(__BORLANDC__) + /* The translation mode of the stream is maintained independent + * of the translation mode of the fd in the Borland RTL (heavy + * digging through their runtime sources reveal). User has to + * set the mode explicitly for the stream (though they don't + * document this anywhere). GSAR 97-5-24 + */ + PerlIO_seek(fp,0L,0); + ((FILE*)fp)->flags |= _F_BIN; + #endif + return 1; + } + else + return 0; + #endif + #else + #if defined(USEMYBINMODE) + if (my_binmode(fp,iotype) != NULL) + return 1; + else + return 0; + #else + return 1; + #endif + #endif + } + #if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP) /* code courtesy of William Kucharski */ #define HAS_CHSIZE *************** *** 818,829 **** my_stat(ARGS) dARGS { ! dSP; IO *io; GV* tmpgv; if (op->op_flags & OPf_REF) { ! EXTEND(sp,1); tmpgv = cGVOP->op_gv; do_fstat: io = GvIO(tmpgv); --- 891,902 ---- my_stat(ARGS) dARGS { ! djSP; IO *io; GV* tmpgv; if (op->op_flags & OPf_REF) { ! EXTEND(SP,1); tmpgv = cGVOP->op_gv; do_fstat: io = GvIO(tmpgv); *************** *** 846,851 **** --- 919,925 ---- } else { SV* sv = POPs; + char *s; PUTBACK; if (SvTYPE(sv) == SVt_PVGV) { tmpgv = (GV*)sv; *************** *** 856,866 **** goto do_fstat; } statgv = Nullgv; ! sv_setpv(statname,SvPV(sv, na)); laststype = OP_STAT; ! laststatval = Stat(SvPV(sv, na),&statcache); ! if (laststatval < 0 && dowarn && strchr(SvPV(sv, na), '\n')) warn(warn_nl, "stat"); return laststatval; } --- 930,941 ---- goto do_fstat; } + s = SvPV(sv, na); statgv = Nullgv; ! sv_setpv(statname, s); laststype = OP_STAT; ! laststatval = Stat(s, &statcache); ! if (laststatval < 0 && dowarn && strchr(s, '\n')) warn(warn_nl, "stat"); return laststatval; } *************** *** 870,879 **** my_lstat(ARGS) dARGS { ! dSP; SV *sv; if (op->op_flags & OPf_REF) { ! EXTEND(sp,1); if (cGVOP->op_gv == defgv) { if (laststype != OP_LSTAT) croak("The stat preceding -l _ wasn't an lstat"); --- 945,954 ---- my_lstat(ARGS) dARGS { ! djSP; SV *sv; if (op->op_flags & OPf_REF) { ! EXTEND(SP,1); if (cGVOP->op_gv == defgv) { if (laststype != OP_LSTAT) croak("The stat preceding -l _ wasn't an lstat"); *************** *** 907,912 **** --- 982,988 ---- char *tmps; if (sp > mark) { + dTHR; New(401,Argv, sp - mark + 1, char*); a = Argv; while (++mark <= sp) { *************** *** 1041,1052 **** --- 1117,1134 ---- register SV **mark; register SV **sp; { + dTHR; register I32 val; register I32 val2; register I32 tot = 0; + char *what; char *s; SV **oldmark = mark; + #define APPLY_TAINT_PROPER() \ + if (!tainted) {} else { TAINT_PROPER(what); } + + /* This is a first heuristic; it doesn't catch tainting magic. */ if (tainting) { while (++mark <= sp) { if (SvTAINTED(*mark)) { *************** *** 1058,1082 **** } switch (type) { case OP_CHMOD: ! TAINT_PROPER("chmod"); if (++mark <= sp) { - tot = sp - mark; val = SvIVx(*mark); while (++mark <= sp) { ! if (chmod(SvPVx(*mark, na),val)) tot--; } } break; #ifdef HAS_CHOWN case OP_CHOWN: ! TAINT_PROPER("chown"); if (sp - mark > 2) { val = SvIVx(*++mark); val2 = SvIVx(*++mark); tot = sp - mark; while (++mark <= sp) { ! if (chown(SvPVx(*mark, na),val,val2)) tot--; } } --- 1140,1172 ---- } switch (type) { case OP_CHMOD: ! what = "chmod"; ! APPLY_TAINT_PROPER(); if (++mark <= sp) { val = SvIVx(*mark); + APPLY_TAINT_PROPER(); + tot = sp - mark; while (++mark <= sp) { ! char *name = SvPVx(*mark, na); ! APPLY_TAINT_PROPER(); ! if (chmod(name, val)) tot--; } } break; #ifdef HAS_CHOWN case OP_CHOWN: ! what = "chown"; ! APPLY_TAINT_PROPER(); if (sp - mark > 2) { val = SvIVx(*++mark); val2 = SvIVx(*++mark); + APPLY_TAINT_PROPER(); tot = sp - mark; while (++mark <= sp) { ! char *name = SvPVx(*mark, na); ! APPLY_TAINT_PROPER(); ! if (chown(name, val, val2)) tot--; } } *************** *** 1084,1094 **** #endif #ifdef HAS_KILL case OP_KILL: ! TAINT_PROPER("kill"); if (mark == sp) break; s = SvPVx(*++mark, na); - tot = sp - mark; if (isUPPER(*s)) { if (*s == 'S' && s[1] == 'I' && s[2] == 'G') s += 3; --- 1174,1184 ---- #endif #ifdef HAS_KILL case OP_KILL: ! what = "kill"; ! APPLY_TAINT_PROPER(); if (mark == sp) break; s = SvPVx(*++mark, na); if (isUPPER(*s)) { if (*s == 'S' && s[1] == 'I' && s[2] == 'G') s += 3; *************** *** 1097,1102 **** --- 1187,1194 ---- } else val = SvIVx(*mark); + APPLY_TAINT_PROPER(); + tot = sp - mark; #ifdef VMS /* kill() doesn't do process groups (job trees?) under VMS */ if (val < 0) val = -val; *************** *** 1109,1114 **** --- 1201,1207 ---- while (++mark <= sp) { I32 proc = SvIVx(*mark); register unsigned long int __vmssts; + APPLY_TAINT_PROPER(); if (!((__vmssts = sys$delprc(&proc,0)) & 1)) { tot--; switch (__vmssts) { *************** *** 1131,1136 **** --- 1224,1230 ---- val = -val; while (++mark <= sp) { I32 proc = SvIVx(*mark); + APPLY_TAINT_PROPER(); #ifdef HAS_KILLPG if (killpg(proc,val)) /* BSD */ #else *************** *** 1141,1157 **** } else { while (++mark <= sp) { ! if (kill(SvIVx(*mark),val)) tot--; } } break; #endif case OP_UNLINK: ! TAINT_PROPER("unlink"); tot = sp - mark; while (++mark <= sp) { s = SvPVx(*mark, na); if (euid || unsafe) { if (UNLINK(s)) tot--; --- 1235,1255 ---- } else { while (++mark <= sp) { ! I32 proc = SvIVx(*mark); ! APPLY_TAINT_PROPER(); ! if (kill(proc, val)) tot--; } } break; #endif case OP_UNLINK: ! what = "unlink"; ! APPLY_TAINT_PROPER(); tot = sp - mark; while (++mark <= sp) { s = SvPVx(*mark, na); + APPLY_TAINT_PROPER(); if (euid || unsafe) { if (UNLINK(s)) tot--; *************** *** 1172,1178 **** break; #ifdef HAS_UTIME case OP_UTIME: ! TAINT_PROPER("utime"); if (sp - mark > 2) { #if defined(I_UTIME) || defined(VMS) struct utimbuf utbuf; --- 1270,1277 ---- break; #ifdef HAS_UTIME case OP_UTIME: ! what = "utime"; ! APPLY_TAINT_PROPER(); if (sp - mark > 2) { #if defined(I_UTIME) || defined(VMS) struct utimbuf utbuf; *************** *** 1191,1199 **** utbuf.actime = SvIVx(*++mark); /* time accessed */ utbuf.modtime = SvIVx(*++mark); /* time modified */ #endif tot = sp - mark; while (++mark <= sp) { ! if (utime(SvPVx(*mark, na),&utbuf)) tot--; } } --- 1290,1301 ---- utbuf.actime = SvIVx(*++mark); /* time accessed */ utbuf.modtime = SvIVx(*++mark); /* time modified */ #endif + APPLY_TAINT_PROPER(); tot = sp - mark; while (++mark <= sp) { ! char *name = SvPVx(*mark, na); ! APPLY_TAINT_PROPER(); ! if (utime(name, &utbuf)) tot--; } } *************** *** 1203,1208 **** --- 1305,1312 ---- #endif } return tot; + + #undef APPLY_TAINT_PROPER } /* Do the permissions allow some operation? Assumes statcache already set. */ *************** *** 1294,1299 **** --- 1398,1404 ---- SV **mark; SV **sp; { + dTHR; key_t key; I32 n, flags; *************** *** 1329,1341 **** SV **mark; SV **sp; { SV *astr; char *a; I32 id, n, cmd, infosize, getinfo; I32 ret = -1; - #ifdef __linux__ /* XXX Need metaconfig test */ - union semun unsemds; - #endif id = SvIVx(*++mark); n = (optype == OP_SEMCTL) ? SvIVx(*++mark) : 0; --- 1434,1444 ---- SV **mark; SV **sp; { + dTHR; SV *astr; char *a; I32 id, n, cmd, infosize, getinfo; I32 ret = -1; id = SvIVx(*++mark); n = (optype == OP_SEMCTL) ? SvIVx(*++mark) : 0; *************** *** 1365,1390 **** else if (cmd == GETALL || cmd == SETALL) { struct semid_ds semds; ! #ifdef __linux__ /* XXX Need metaconfig test */ ! /* linux (and Solaris2?) uses : ! int semctl (int semid, int semnum, int cmd, union semun arg) ! union semun { ! int val; ! struct semid_ds *buf; ! ushort *array; ! }; ! */ ! union semun semun; semun.buf = &semds; ! if (semctl(id, 0, IPC_STAT, semun) == -1) ! #else ! if (semctl(id, 0, IPC_STAT, &semds) == -1) ! #endif return -1; getinfo = (cmd == GETALL); ! infosize = semds.sem_nsems * sizeof(short); ! /* "short" is technically wrong but much more portable ! than guessing about u_?short(_t)? */ } break; #endif --- 1468,1480 ---- else if (cmd == GETALL || cmd == SETALL) { struct semid_ds semds; ! union semun semun; ! semun.buf = &semds; ! if (Semctl(id, 0, IPC_STAT, semun) == -1) return -1; getinfo = (cmd == GETALL); ! infosize = semds.sem_nsems * sizeof(unsigned short); } break; #endif *************** *** 1424,1436 **** break; #endif #ifdef HAS_SEM ! case OP_SEMCTL: ! #ifdef __linux__ /* XXX Need metaconfig test */ ! unsemds.buf = (struct semid_ds *)a; ! ret = semctl(id, n, cmd, unsemds); ! #else ! ret = semctl(id, n, cmd, (struct semid_ds *)a); ! #endif break; #endif #ifdef HAS_SHM --- 1514,1525 ---- break; #endif #ifdef HAS_SEM ! case OP_SEMCTL: { ! union semun unsemds; ! ! unsemds.buf = (struct semid_ds *)a; ! ret = Semctl(id, n, cmd, unsemds); ! } break; #endif #ifdef HAS_SHM *************** *** 1453,1458 **** --- 1542,1548 ---- SV **sp; { #ifdef HAS_MSG + dTHR; SV *mstr; char *mbuf; I32 id, msize, flags; *************** *** 1477,1482 **** --- 1567,1573 ---- SV **sp; { #ifdef HAS_MSG + dTHR; SV *mstr; char *mbuf; long mtype; *************** *** 1515,1520 **** --- 1606,1612 ---- SV **sp; { #ifdef HAS_SEM + dTHR; SV *opstr; char *opbuf; I32 id; *************** *** 1542,1547 **** --- 1634,1640 ---- SV **sp; { #ifdef HAS_SHM + dTHR; SV *mstr; char *mbuf, *shm; I32 id, mpos, msize; diff -c 'perl5.004_04/doop.c' 'perl5.004_05/doop.c' Index: ./doop.c *** ./doop.c Wed Oct 8 09:18:24 1997 --- ./doop.c Sun Nov 22 10:08:38 1998 *************** *** 23,28 **** --- 23,29 ---- SV *sv; OP *arg; { + dTHR; register short *tbl; register U8 *s; register U8 *send; *************** *** 30,38 **** register I32 ch; register I32 matches = 0; register I32 squash = op->op_private & OPpTRANS_SQUASH; STRLEN len; ! if (SvREADONLY(sv)) croak(no_modify); tbl = (short*)cPVOP->op_pv; s = (U8*)SvPV(sv, len); --- 31,40 ---- register I32 ch; register I32 matches = 0; register I32 squash = op->op_private & OPpTRANS_SQUASH; + register U8 *p; STRLEN len; ! if (SvREADONLY(sv) && !(op->op_private & OPpTRANS_COUNTONLY)) croak(no_modify); tbl = (short*)cPVOP->op_pv; s = (U8*)SvPV(sv, len); *************** *** 53,69 **** } s++; } } else { d = s; while (s < send) { if ((ch = tbl[*s]) >= 0) { *d = ch; ! if (matches++ && squash) { ! if (d[-1] == *d) matches--; else ! d++; } else d++; --- 55,81 ---- } s++; } + SvSETMAGIC(sv); + } + else if (op->op_private & OPpTRANS_COUNTONLY) { + while (s < send) { + if (tbl[*s] >= 0) + matches++; + s++; + } } else { d = s; + p = send; while (s < send) { if ((ch = tbl[*s]) >= 0) { *d = ch; ! matches++; ! if (squash) { ! if (p == d - 1 && *p == *d) matches--; else ! p = d++; } else d++; *************** *** 75,82 **** matches += send - d; /* account for disappeared chars */ *d = '\0'; SvCUR_set(sv, d - (U8*)SvPVX(sv)); } - SvSETMAGIC(sv); return matches; } --- 87,94 ---- matches += send - d; /* account for disappeared chars */ *d = '\0'; SvCUR_set(sv, d - (U8*)SvPVX(sv)); + SvSETMAGIC(sv); } return matches; } *************** *** 96,106 **** mark++; len = (items > 0 ? (delimlen * (items - 1) ) : 0); ! if (SvTYPE(sv) < SVt_PV) ! sv_upgrade(sv, SVt_PV); if (SvLEN(sv) < len + items) { /* current length is way too short */ while (items-- > 0) { ! if (*mark) { SvPV(*mark, tmplen); len += tmplen; } --- 108,117 ---- mark++; len = (items > 0 ? (delimlen * (items - 1) ) : 0); ! (void)SvUPGRADE(sv, SVt_PV); if (SvLEN(sv) < len + items) { /* current length is way too short */ while (items-- > 0) { ! if (*mark && !SvGMAGICAL(*mark) && SvOK(*mark)) { SvPV(*mark, tmplen); len += tmplen; } *************** *** 256,261 **** --- 267,273 ---- do_chomp(sv) register SV *sv; { + dTHR; register I32 count; STRLEN len; char *s; *************** *** 333,338 **** --- 345,351 ---- SV *left; SV *right; { + dTHR; /* just for taint */ #ifdef LIBERAL register long *dl; register long *ll; *************** *** 447,453 **** do_kv(ARGS) dARGS { ! dSP; HV *hv = (HV*)POPs; register HE *entry; SV *tmpstr; --- 460,466 ---- do_kv(ARGS) dARGS { ! djSP; HV *hv = (HV*)POPs; register HE *entry; SV *tmpstr; *************** *** 474,480 **** RETURN; if (gimme == G_SCALAR) { ! I32 i; dTARGET; if (op->op_flags & OPf_MOD) { /* lvalue */ --- 487,493 ---- RETURN; if (gimme == G_SCALAR) { ! IV i; dTARGET; if (op->op_flags & OPf_MOD) { /* lvalue */ *************** *** 483,489 **** sv_magic(TARG, Nullsv, 'k', Nullch, 0); } LvTYPE(TARG) = 'k'; ! LvTARG(TARG) = (SV*)hv; PUSHs(TARG); RETURN; } --- 496,506 ---- sv_magic(TARG, Nullsv, 'k', Nullch, 0); } LvTYPE(TARG) = 'k'; ! if (LvTARG(TARG) != (SV*)hv) { ! if (LvTARG(TARG)) ! SvREFCNT_dec(LvTARG(TARG)); ! LvTARG(TARG) = SvREFCNT_inc(hv); ! } PUSHs(TARG); RETURN; } *************** *** 502,508 **** } /* Guess how much room we need. hv_max may be a few too many. Oh well. */ ! EXTEND(sp, HvMAX(hv) * (dokeys + dovalues)); PUTBACK; /* hv_iternext and hv_iterval might clobber stack_sp */ while (entry = hv_iternext(hv)) { --- 519,525 ---- } /* Guess how much room we need. hv_max may be a few too many. Oh well. */ ! EXTEND(SP, HvMAX(hv) * (dokeys + dovalues)); PUTBACK; /* hv_iternext and hv_iterval might clobber stack_sp */ while (entry = hv_iternext(hv)) { diff -c 'perl5.004_04/dosish.h' 'perl5.004_05/dosish.h' Index: ./dosish.h *** ./dosish.h Thu Jul 31 13:38:06 1997 --- ./dosish.h Wed Mar 4 07:12:27 1998 *************** *** 24,34 **** #define dXSUB_SYS #define TMPPATH "plXXXXXX" - #ifdef WIN32 - #define HAS_UTIME - #define HAS_KILL - #endif - /* * 5.003_07 and earlier keyed on #ifdef MSDOS for determining if we were * running on DOS, *and* if we had to cope with 16 bit memory addressing --- 24,29 ---- *************** *** 54,59 **** --- 49,62 ---- */ #undef USEMYBINMODE + /* Stat_t: + * This symbol holds the type used to declare buffers for information + * returned by stat(). It's usually just struct stat. It may be necessary + * to include and to get any typedef'ed + * information. + */ + #define Stat_t struct stat + /* USE_STAT_RDEV: * This symbol is defined if this system has a stat structure declaring * st_rdev *************** *** 94,105 **** #ifndef WIN32 # define Stat(fname,bufptr) stat((fname),(bufptr)) #else ! # define Stat(fname,bufptr) win32_stat((fname),(bufptr)) ! # define my_getenv(var) getenv(var) /* ! * the following are standard library calls (stdio in particular) ! * that is being redirected to the perl DLL. This is needed for ! * Dynaloading any modules that called stdio functions */ ! # include #endif /* WIN32 */ --- 97,112 ---- #ifndef WIN32 # define Stat(fname,bufptr) stat((fname),(bufptr)) #else ! # define HAS_IOCTL ! # define HAS_UTIME ! # define HAS_KILL ! # define HAS_WAIT ! # define HAS_CHOWN /* ! * This provides a layer of functions and macros to ensure extensions will ! * get to use the same RTL functions as the core. */ ! # ifndef HASATTRIBUTE ! # include ! # endif #endif /* WIN32 */ diff -c 'perl5.004_04/dump.c' 'perl5.004_05/dump.c' Index: ./dump.c *** ./dump.c Tue May 13 15:25:54 1997 --- ./dump.c Mon Jul 6 19:03:16 1998 *************** *** 31,36 **** --- 31,37 ---- void dump_all() { + dTHR; PerlIO_setlinebuf(Perl_debug_log); if (main_root) dump_op(main_root); *************** *** 41,46 **** --- 42,48 ---- dump_packsubs(stash) HV* stash; { + dTHR; I32 i; HE *entry; *************** *** 100,135 **** } void ! dump_op(op) ! register OP *op; { dump("{\n"); ! if (op->op_seq) ! PerlIO_printf(Perl_debug_log, "%-4d", op->op_seq); else PerlIO_printf(Perl_debug_log, " "); ! dump("TYPE = %s ===> ", op_name[op->op_type]); ! if (op->op_next) { ! if (op->op_seq) ! PerlIO_printf(Perl_debug_log, "%d\n", op->op_next->op_seq); else ! PerlIO_printf(Perl_debug_log, "(%d)\n", op->op_next->op_seq); } else PerlIO_printf(Perl_debug_log, "DONE\n"); dumplvl++; ! if (op->op_targ) { ! if (op->op_type == OP_NULL) ! dump(" (was %s)\n", op_name[op->op_targ]); else ! dump("TARG = %d\n", op->op_targ); } #ifdef DUMPADDR ! dump("ADDR = 0x%lx => 0x%lx\n",op, op->op_next); #endif ! if (op->op_flags) { SV *tmpsv = newSVpv("", 0); ! switch (op->op_flags & OPf_WANT) { case OPf_WANT_VOID: sv_catpv(tmpsv, ",VOID"); break; --- 102,137 ---- } void ! dump_op(o) ! register OP *o; { dump("{\n"); ! if (o->op_seq) ! PerlIO_printf(Perl_debug_log, "%-4d", o->op_seq); else PerlIO_printf(Perl_debug_log, " "); ! dump("TYPE = %s ===> ", op_name[o->op_type]); ! if (o->op_next) { ! if (o->op_seq) ! PerlIO_printf(Perl_debug_log, "%d\n", o->op_next->op_seq); else ! PerlIO_printf(Perl_debug_log, "(%d)\n", o->op_next->op_seq); } else PerlIO_printf(Perl_debug_log, "DONE\n"); dumplvl++; ! if (o->op_targ) { ! if (o->op_type == OP_NULL) ! dump(" (was %s)\n", op_name[o->op_targ]); else ! dump("TARG = %d\n", o->op_targ); } #ifdef DUMPADDR ! dump("ADDR = 0x%lx => 0x%lx\n",o, o->op_next); #endif ! if (o->op_flags) { SV *tmpsv = newSVpv("", 0); ! switch (o->op_flags & OPf_WANT) { case OPf_WANT_VOID: sv_catpv(tmpsv, ",VOID"); break; *************** *** 143,200 **** sv_catpv(tmpsv, ",UNKNOWN"); break; } ! if (op->op_flags & OPf_KIDS) sv_catpv(tmpsv, ",KIDS"); ! if (op->op_flags & OPf_PARENS) sv_catpv(tmpsv, ",PARENS"); ! if (op->op_flags & OPf_STACKED) sv_catpv(tmpsv, ",STACKED"); ! if (op->op_flags & OPf_REF) sv_catpv(tmpsv, ",REF"); ! if (op->op_flags & OPf_MOD) sv_catpv(tmpsv, ",MOD"); ! if (op->op_flags & OPf_SPECIAL) sv_catpv(tmpsv, ",SPECIAL"); dump("FLAGS = (%s)\n", SvCUR(tmpsv) ? SvPVX(tmpsv) + 1 : ""); SvREFCNT_dec(tmpsv); } ! if (op->op_private) { SV *tmpsv = newSVpv("", 0); ! if (op->op_type == OP_AASSIGN) { ! if (op->op_private & OPpASSIGN_COMMON) sv_catpv(tmpsv, ",COMMON"); } ! else if (op->op_type == OP_SASSIGN) { ! if (op->op_private & OPpASSIGN_BACKWARDS) sv_catpv(tmpsv, ",BACKWARDS"); } ! else if (op->op_type == OP_TRANS) { ! if (op->op_private & OPpTRANS_SQUASH) sv_catpv(tmpsv, ",SQUASH"); ! if (op->op_private & OPpTRANS_DELETE) sv_catpv(tmpsv, ",DELETE"); ! if (op->op_private & OPpTRANS_COMPLEMENT) sv_catpv(tmpsv, ",COMPLEMENT"); } ! else if (op->op_type == OP_REPEAT) { ! if (op->op_private & OPpREPEAT_DOLIST) sv_catpv(tmpsv, ",DOLIST"); } ! else if (op->op_type == OP_ENTERSUB || ! op->op_type == OP_RV2SV || ! op->op_type == OP_RV2AV || ! op->op_type == OP_RV2HV || ! op->op_type == OP_RV2GV || ! op->op_type == OP_AELEM || ! op->op_type == OP_HELEM ) { ! if (op->op_type == OP_ENTERSUB) { ! if (op->op_private & OPpENTERSUB_AMPER) sv_catpv(tmpsv, ",AMPER"); ! if (op->op_private & OPpENTERSUB_DB) sv_catpv(tmpsv, ",DB"); } ! switch (op->op_private & OPpDEREF) { case OPpDEREF_SV: sv_catpv(tmpsv, ",SV"); break; --- 145,202 ---- sv_catpv(tmpsv, ",UNKNOWN"); break; } ! if (o->op_flags & OPf_KIDS) sv_catpv(tmpsv, ",KIDS"); ! if (o->op_flags & OPf_PARENS) sv_catpv(tmpsv, ",PARENS"); ! if (o->op_flags & OPf_STACKED) sv_catpv(tmpsv, ",STACKED"); ! if (o->op_flags & OPf_REF) sv_catpv(tmpsv, ",REF"); ! if (o->op_flags & OPf_MOD) sv_catpv(tmpsv, ",MOD"); ! if (o->op_flags & OPf_SPECIAL) sv_catpv(tmpsv, ",SPECIAL"); dump("FLAGS = (%s)\n", SvCUR(tmpsv) ? SvPVX(tmpsv) + 1 : ""); SvREFCNT_dec(tmpsv); } ! if (o->op_private) { SV *tmpsv = newSVpv("", 0); ! if (o->op_type == OP_AASSIGN) { ! if (o->op_private & OPpASSIGN_COMMON) sv_catpv(tmpsv, ",COMMON"); } ! else if (o->op_type == OP_SASSIGN) { ! if (o->op_private & OPpASSIGN_BACKWARDS) sv_catpv(tmpsv, ",BACKWARDS"); } ! else if (o->op_type == OP_TRANS) { ! if (o->op_private & OPpTRANS_SQUASH) sv_catpv(tmpsv, ",SQUASH"); ! if (o->op_private & OPpTRANS_DELETE) sv_catpv(tmpsv, ",DELETE"); ! if (o->op_private & OPpTRANS_COMPLEMENT) sv_catpv(tmpsv, ",COMPLEMENT"); } ! else if (o->op_type == OP_REPEAT) { ! if (o->op_private & OPpREPEAT_DOLIST) sv_catpv(tmpsv, ",DOLIST"); } ! else if (o->op_type == OP_ENTERSUB || ! o->op_type == OP_RV2SV || ! o->op_type == OP_RV2AV || ! o->op_type == OP_RV2HV || ! o->op_type == OP_RV2GV || ! o->op_type == OP_AELEM || ! o->op_type == OP_HELEM ) { ! if (o->op_type == OP_ENTERSUB) { ! if (o->op_private & OPpENTERSUB_AMPER) sv_catpv(tmpsv, ",AMPER"); ! if (o->op_private & OPpENTERSUB_DB) sv_catpv(tmpsv, ",DB"); } ! switch (o->op_private & OPpDEREF) { case OPpDEREF_SV: sv_catpv(tmpsv, ",SV"); break; *************** *** 205,246 **** sv_catpv(tmpsv, ",HV"); break; } ! if (op->op_type == OP_AELEM || op->op_type == OP_HELEM) { ! if (op->op_private & OPpLVAL_DEFER) sv_catpv(tmpsv, ",LVAL_DEFER"); } else { ! if (op->op_private & HINT_STRICT_REFS) sv_catpv(tmpsv, ",STRICT_REFS"); } } ! else if (op->op_type == OP_CONST) { ! if (op->op_private & OPpCONST_BARE) sv_catpv(tmpsv, ",BARE"); } ! else if (op->op_type == OP_FLIP) { ! if (op->op_private & OPpFLIP_LINENUM) sv_catpv(tmpsv, ",LINENUM"); } ! else if (op->op_type == OP_FLOP) { ! if (op->op_private & OPpFLIP_LINENUM) sv_catpv(tmpsv, ",LINENUM"); } ! if (op->op_flags & OPf_MOD && op->op_private & OPpLVAL_INTRO) sv_catpv(tmpsv, ",INTRO"); if (SvCUR(tmpsv)) dump("PRIVATE = (%s)\n", SvPVX(tmpsv) + 1); SvREFCNT_dec(tmpsv); } ! switch (op->op_type) { case OP_GVSV: case OP_GV: ! if (cGVOP->op_gv) { SV *tmpsv = NEWSV(0,0); ENTER; SAVEFREESV(tmpsv); ! gv_fullname3(tmpsv, cGVOP->op_gv, Nullch); dump("GV = %s\n", SvPV(tmpsv, na)); LEAVE; } --- 207,248 ---- sv_catpv(tmpsv, ",HV"); break; } ! if (o->op_type == OP_AELEM || o->op_type == OP_HELEM) { ! if (o->op_private & OPpLVAL_DEFER) sv_catpv(tmpsv, ",LVAL_DEFER"); } else { ! if (o->op_private & HINT_STRICT_REFS) sv_catpv(tmpsv, ",STRICT_REFS"); } } ! else if (o->op_type == OP_CONST) { ! if (o->op_private & OPpCONST_BARE) sv_catpv(tmpsv, ",BARE"); } ! else if (o->op_type == OP_FLIP) { ! if (o->op_private & OPpFLIP_LINENUM) sv_catpv(tmpsv, ",LINENUM"); } ! else if (o->op_type == OP_FLOP) { ! if (o->op_private & OPpFLIP_LINENUM) sv_catpv(tmpsv, ",LINENUM"); } ! if (o->op_flags & OPf_MOD && o->op_private & OPpLVAL_INTRO) sv_catpv(tmpsv, ",INTRO"); if (SvCUR(tmpsv)) dump("PRIVATE = (%s)\n", SvPVX(tmpsv) + 1); SvREFCNT_dec(tmpsv); } ! switch (o->op_type) { case OP_GVSV: case OP_GV: ! if (cGVOPo->op_gv) { SV *tmpsv = NEWSV(0,0); ENTER; SAVEFREESV(tmpsv); ! gv_fullname3(tmpsv, cGVOPo->op_gv, Nullch); dump("GV = %s\n", SvPV(tmpsv, na)); LEAVE; } *************** *** 248,288 **** dump("GV = NULL\n"); break; case OP_CONST: ! dump("SV = %s\n", SvPEEK(cSVOP->op_sv)); break; case OP_NEXTSTATE: case OP_DBSTATE: ! if (cCOP->cop_line) ! dump("LINE = %d\n",cCOP->cop_line); ! if (cCOP->cop_label) ! dump("LABEL = \"%s\"\n",cCOP->cop_label); break; case OP_ENTERLOOP: dump("REDO ===> "); ! if (cLOOP->op_redoop) ! PerlIO_printf(Perl_debug_log, "%d\n", cLOOP->op_redoop->op_seq); else PerlIO_printf(Perl_debug_log, "DONE\n"); dump("NEXT ===> "); ! if (cLOOP->op_nextop) ! PerlIO_printf(Perl_debug_log, "%d\n", cLOOP->op_nextop->op_seq); else PerlIO_printf(Perl_debug_log, "DONE\n"); dump("LAST ===> "); ! if (cLOOP->op_lastop) ! PerlIO_printf(Perl_debug_log, "%d\n", cLOOP->op_lastop->op_seq); else PerlIO_printf(Perl_debug_log, "DONE\n"); break; case OP_COND_EXPR: dump("TRUE ===> "); ! if (cCONDOP->op_true) ! PerlIO_printf(Perl_debug_log, "%d\n", cCONDOP->op_true->op_seq); else PerlIO_printf(Perl_debug_log, "DONE\n"); dump("FALSE ===> "); ! if (cCONDOP->op_false) ! PerlIO_printf(Perl_debug_log, "%d\n", cCONDOP->op_false->op_seq); else PerlIO_printf(Perl_debug_log, "DONE\n"); break; --- 250,290 ---- dump("GV = NULL\n"); break; case OP_CONST: ! dump("SV = %s\n", SvPEEK(cSVOPo->op_sv)); break; case OP_NEXTSTATE: case OP_DBSTATE: ! if (cCOPo->cop_line) ! dump("LINE = %d\n",cCOPo->cop_line); ! if (cCOPo->cop_label) ! dump("LABEL = \"%s\"\n",cCOPo->cop_label); break; case OP_ENTERLOOP: dump("REDO ===> "); ! if (cLOOPo->op_redoop) ! PerlIO_printf(Perl_debug_log, "%d\n", cLOOPo->op_redoop->op_seq); else PerlIO_printf(Perl_debug_log, "DONE\n"); dump("NEXT ===> "); ! if (cLOOPo->op_nextop) ! PerlIO_printf(Perl_debug_log, "%d\n", cLOOPo->op_nextop->op_seq); else PerlIO_printf(Perl_debug_log, "DONE\n"); dump("LAST ===> "); ! if (cLOOPo->op_lastop) ! PerlIO_printf(Perl_debug_log, "%d\n", cLOOPo->op_lastop->op_seq); else PerlIO_printf(Perl_debug_log, "DONE\n"); break; case OP_COND_EXPR: dump("TRUE ===> "); ! if (cCONDOPo->op_true) ! PerlIO_printf(Perl_debug_log, "%d\n", cCONDOPo->op_true->op_seq); else PerlIO_printf(Perl_debug_log, "DONE\n"); dump("FALSE ===> "); ! if (cCONDOPo->op_false) ! PerlIO_printf(Perl_debug_log, "%d\n", cCONDOPo->op_false->op_seq); else PerlIO_printf(Perl_debug_log, "DONE\n"); break; *************** *** 291,312 **** case OP_OR: case OP_AND: dump("OTHER ===> "); ! if (cLOGOP->op_other) ! PerlIO_printf(Perl_debug_log, "%d\n", cLOGOP->op_other->op_seq); else PerlIO_printf(Perl_debug_log, "DONE\n"); break; case OP_PUSHRE: case OP_MATCH: case OP_SUBST: ! dump_pm((PMOP*)op); break; default: break; } ! if (op->op_flags & OPf_KIDS) { OP *kid; ! for (kid = cUNOP->op_first; kid; kid = kid->op_sibling) dump_op(kid); } dumplvl--; --- 293,314 ---- case OP_OR: case OP_AND: dump("OTHER ===> "); ! if (cLOGOPo->op_other) ! PerlIO_printf(Perl_debug_log, "%d\n", cLOGOPo->op_other->op_seq); else PerlIO_printf(Perl_debug_log, "DONE\n"); break; case OP_PUSHRE: case OP_MATCH: case OP_SUBST: ! dump_pm(cPMOPo); break; default: break; } ! if (o->op_flags & OPf_KIDS) { OP *kid; ! for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) dump_op(kid); } dumplvl--; *************** *** 368,375 **** } if (pm->op_pmflags) { SV *tmpsv = newSVpv("", 0); ! if (pm->op_pmflags & PMf_USED) sv_catpv(tmpsv, ",USED"); if (pm->op_pmflags & PMf_ONCE) sv_catpv(tmpsv, ",ONCE"); if (pm->op_pmflags & PMf_SCANFIRST) --- 370,379 ---- } if (pm->op_pmflags) { SV *tmpsv = newSVpv("", 0); ! if (pm->op_pmdynflags & PMdf_USED) sv_catpv(tmpsv, ",USED"); + if (pm->op_pmdynflags & PMdf_TAINTED) + sv_catpv(tmpsv, ",TAINTED"); if (pm->op_pmflags & PMf_ONCE) sv_catpv(tmpsv, ",ONCE"); if (pm->op_pmflags & PMf_SCANFIRST) *************** *** 386,391 **** --- 390,397 ---- sv_catpv(tmpsv, ",GLOBAL"); if (pm->op_pmflags & PMf_CONTINUE) sv_catpv(tmpsv, ",CONTINUE"); + if (pm->op_pmflags & PMf_RETAINT) + sv_catpv(tmpsv, ",RETAINT"); if (pm->op_pmflags & PMf_EVAL) sv_catpv(tmpsv, ",EVAL"); dump("PMFLAGS = (%s)\n", SvCUR(tmpsv) ? SvPVX(tmpsv) + 1 : ""); diff -c /dev/null 'perl5.004_05/eg/cgi/caution.xbm' Index: ./eg/cgi/caution.xbm *** ./eg/cgi/caution.xbm Wed Dec 31 19:00:00 1969 --- ./eg/cgi/caution.xbm Sun Nov 22 16:12:04 1998 *************** *** 0 **** --- 1,12 ---- + #define caution_width 32 + #define caution_height 32 + static char caution_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x10,0x01, + 0x00,0x00,0x08,0x07,0x00,0x00,0x08,0x0e,0x00,0x00,0x04,0x0e,0x00,0x00,0x04, + 0x1c,0x00,0x00,0x02,0x1c,0x00,0x00,0xe2,0x38,0x00,0x00,0xf1,0x39,0x00,0x00, + 0xf1,0x71,0x00,0x80,0xf0,0x71,0x00,0x80,0xf0,0xe1,0x00,0x40,0xf0,0xe1,0x00, + 0x40,0xf0,0xc1,0x01,0x20,0xf0,0xc1,0x01,0x20,0xf0,0x81,0x03,0x10,0xe0,0x80, + 0x03,0x10,0xe0,0x00,0x07,0x08,0xe0,0x00,0x07,0x08,0xe0,0x00,0x0e,0x04,0x00, + 0x00,0x0e,0x04,0xe0,0x00,0x1c,0x02,0xf0,0x01,0x1c,0x02,0xf0,0x01,0x38,0x01, + 0xe0,0x00,0x38,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x70,0xff,0xff,0xff,0x7f, + 0xf8,0xff,0xff,0x3f,0x00,0x00,0x00,0x00}; diff -c /dev/null 'perl5.004_05/eg/cgi/dna.small.gif.uu' Index: ./eg/cgi/dna.small.gif.uu *** ./eg/cgi/dna.small.gif.uu Wed Dec 31 19:00:00 1969 --- ./eg/cgi/dna.small.gif.uu Thu Dec 3 10:49:32 1998 *************** *** 0 **** --- 1,64 ---- + begin 444 dna.small.gif + M1TE&.#=A)0 J .< +9%&Y@_&A$_5 Y#3$=2"=#59M((H88,GP\/]X^&+$R + M$"(79"DF33(93"$86=%;&"T4/=Y"&\\A$Q4Z4! 62*T4-Q4B9+X1*BH96SP? + M1<0D/3(F<-TM$! =5:H.(!<64C$W?#8J3* S(S<@3=8V%K$](QT.6Q 43AL4 + M1:$D,;<0,\X9&,8])\@=$A(U244S5U,D6Q=/#YH> + M08$I1B,09S$35R(:4C0?<19$75!()-;4702M =;56)A 25,0K%"X< + M83 N>K H'HDS*1 40,M&%!<@7M,_$AE+#%0>0S0/:4PJ9I,F-6DG420Y<"@09R,0 + M-V$R/R4M<:\H0!(H410Z:AT27&4Q9"L@;=1%(MA-$M5+#RL4+M8Z&AT<7[<: + M(-QA&2,36R$++B(84!0:5ALO:K$A.]X?&!$84V@;/SX<6Q ;2$(B2QD21W4J + M1=TW&@ "P )0 J (_@!]:(N'18\W%15T$1N'C)V? + M0_HH,<$G9YBX!C6<3;+T@AZ-)K@\O*"!KP^$>"KVA L3*8P3)^5ZA)@B:AH+ + M9];F7.$Q+! !0=*.%",&P7J"9XB82L5,48F5K,:" + M'94FU='6;!*R3T->E"%&95DR" /6P,I0PDF)0SG8($$RJN0R FI(H7$A2]VD + M*^^L_6(T3U*V%XH"_AB:HDS8H$AO5@R:P,8.I%^.:*AC(>Z!'":6RC 1L@W- + M%1Q/,%(.'5+1 /"*]=90 PD.F'3SR@-AG) &_A=3'"**#[J(P<0^C0&S/#1""(ZI)'&*6,,$842N%Q!@3NK + M"R'%%4KP0D(Q?" S!3)BVE(/$+)#-80 + M<+, -[QH$LP+0_P!1C>=S("!,N>8XP<8H6131!B;3 #&#)"DTH(L5#P0S#W+ + MQ)* $K1HHD4^;E!2QP%:B &4H$,/Y2C$Y*(1%0(00A)@ 77B"*$0@#3>P + MP&PU4 ,^H!","P!!$')0P^H6((I5L"$'.; ';[Q!@-\PP"$0?)M$ <92!%OG8Q3#@( U2C*)%9-! & K !!EP0@80 + M2,0M;I$.:"C#"D.@P#UJ ]GT"*,K%B&*0+!@TFH8VV*0$(:_/ )?7@#'.'0 + M@R[H8 \:& ,=NC"*"B@!2TTHP5]N((TEH& <)B"!PU 0RQ(P8MNS 9K6@% + M'W31AG%$(BZ2&((PA-&#'I"A& F8!DD\\ H6-,.,X'B'%,+R#FX4 PS&_L!$ + M.4R0#7W<0@%O2,07$($#9@C3"%C8P!5H88\]J$,"-E!;(.X@C5T< !65V,40 + M,'&(0C!" 1JP@"3TH T9=&,5JRC$-]+1 U%TP@@[^,$>Z$&*0%1A%XFK BFD + MX0L6Y"(#A_A$#[JPC@%\@1@02 (SJ#&&. A@'\&$!AALX(4Y=" /TA"",UA! + M@%W<8!*\$ $@C%""+G1A"9AP!"<>9@ME*)$0F\C!$I8 B3\TP@%'@$(QH$ " + M)8@#'(B0ACB P ,@%&,'9"##)S 1!&)\ 0)^&,,^+$ ("QC"#D\X!":HX0!< + ML( &-O!%,&H@BS#F0AI' !LO^" ,/OS!%KJ0_H0HEA E27Q#%T%X0"%"@ 1E + M2, !:F!%+Q#A!G)40A!HP 4OFK #-13# ?I(QCW38(Q/9& %0#!);01BE>$ + M@!TZNL81$G !-]2!&&5@A1N&T0Q<,$$$%*! BR1A5$PPPH<74$%]* #$.RA + M (VP@# X$( 7 (%T=@ .5Q C@:0 P[)D$4'$H ."MB#"908Q=X@,01B9$(7 + MG'A% #8!"QSL@PUAL,0==M"")CQCP4)0QQUDP806H&,!T]A! EH@AC2P P,^ + MT ,*NN%-&&T!&L@X!!Y^<(4.D(,%E>A ,T20C#IXL 6-:, 5F+"#!W"@'%OH + MA IJ$5(#; (;AV/'FA103(EV+(,>GHB&&ZJ !D'P!57 X1F9D 4<0!]FB() { $lines++; --- 33,44 ---- # Process the form if there is a file name entered if ($file = param('filename')) { $tmpfile=tmpFileName($file); + $mimetype = uploadInfo($file)->{'Content-Type'} || ''; print hr(), h2($file), ! h3($tmpfile), ! h4("MIME Type:",em($mimetype)); ! my($lines,$words,$characters,@words) = (0,0,0,0); while (<$file>) { $lines++; *************** *** 51,56 **** --- 55,62 ---- print strong("No statistics selected."); } } + + # print cite("URL parameters: "),url_param(); print hr(), a({href=>"../cgi_docs.html"},"CGI documentation"), diff -c 'perl5.004_04/eg/cgi/index.html' 'perl5.004_05/eg/cgi/index.html' Index: ./eg/cgi/index.html *** ./eg/cgi/index.html Sat Mar 29 18:39:14 1997 --- ./eg/cgi/index.html Sun Nov 22 16:12:04 1998 *************** *** 23,28 **** --- 23,34 ----
  • Look at its source code +

    Server Push

    + +

    Read the coordinates from a clickable image map

    Echo fatal script errors to the browser

    + This script deliberately generates a compile-time error. !

    Permanently customize the appearance of a page

    !

    Permanently customize the appearance of a page with a cookie