summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
Diffstat (limited to 'base')
-rw-r--r--base/perl/.footprint5
-rw-r--r--base/perl/.md5sum2
-rwxr-xr-xbase/perl/Pkgfile23
-rw-r--r--base/perl/perl-5.10.0-debian-23.patch3239
-rw-r--r--base/perl/perl-5.8.6-picdl.patch013
5 files changed, 3272 insertions, 10 deletions
diff --git a/base/perl/.footprint b/base/perl/.footprint
index e1978cb29..c7b20d8cf 100644
--- a/base/perl/.footprint
+++ b/base/perl/.footprint
@@ -1346,6 +1346,7 @@ drwxr-xr-x root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/Compress/Raw
-rw-r--r-- root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/Config.pod
-rw-r--r-- root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/Config_heavy.pl
-rw-r--r-- root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/Cwd.pm
+-rw-r--r-- root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/DB_File.pm
drwxr-xr-x root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/Data/
-rw-r--r-- root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/Data/Dumper.pm
drwxr-xr-x root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/Devel/
@@ -1495,6 +1496,9 @@ drwxr-xr-x root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/auto/Compres
-rw-r--r-- root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/auto/Compress/Zlib/autosplit.ix
drwxr-xr-x root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/auto/Cwd/
-rwxr-xr-x root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/auto/Cwd/Cwd.so
+drwxr-xr-x root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/auto/DB_File/
+-rwxr-xr-x root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/auto/DB_File/DB_File.so
+-rw-r--r-- root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/auto/DB_File/autosplit.ix
drwxr-xr-x root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/auto/Data/
drwxr-xr-x root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/auto/Data/Dumper/
-rwxr-xr-x root/root usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/auto/Data/Dumper/Dumper.so
@@ -2096,6 +2100,7 @@ drwxr-xr-x root/root usr/share/man/man3/
-rw-r--r-- root/root usr/share/man/man3/DBM_Filter::int32.3.gz
-rw-r--r-- root/root usr/share/man/man3/DBM_Filter::null.3.gz
-rw-r--r-- root/root usr/share/man/man3/DBM_Filter::utf8.3.gz
+-rw-r--r-- root/root usr/share/man/man3/DB_File.3.gz
-rw-r--r-- root/root usr/share/man/man3/Data::Dumper.3.gz
-rw-r--r-- root/root usr/share/man/man3/Devel::DProf.3.gz
-rw-r--r-- root/root usr/share/man/man3/Devel::InnerPackage.3.gz
diff --git a/base/perl/.md5sum b/base/perl/.md5sum
index 1e50170f7..0a8874809 100644
--- a/base/perl/.md5sum
+++ b/base/perl/.md5sum
@@ -1,2 +1,4 @@
d1bcffb5d671bd659f7ca5c451a0c752 perl-5.10.0-consolidated-1.patch
+714997fea6b12929b7759403cf2e051f perl-5.10.0-debian-23.patch
d2c39b002ebfd2c3c5dba589365c5a71 perl-5.10.0.tar.gz
+319b56a7ce715fb7a494fe4d5cb9474c perl-5.8.6-picdl.patch0
diff --git a/base/perl/Pkgfile b/base/perl/Pkgfile
index 818bec1db..72bac9529 100755
--- a/base/perl/Pkgfile
+++ b/base/perl/Pkgfile
@@ -6,30 +6,33 @@
name=perl
version=5.10.0
-release=1
+release=2
source=(ftp://ftp.funet.fi/pub/CPAN/src/$name-$version.tar.gz \
- http://www.linuxfromscratch.org/patches/lfs/development/perl-$version-consolidated-1.patch)
+ http://www.linuxfromscratch.org/patches/lfs/development/perl-$version-consolidated-1.patch\
+ perl-5.10.0-debian-23.patch perl-5.8.6-picdl.patch0)
build() {
cd $name-$version
-patch -Np1 -i ../perl-$version-consolidated-1.patch
+patch -Np1 -i ../perl-5.10.0-debian-23.patch
+if [ "`uname -m`" == "x86_64" ]; then
+ _ARCH="-Dcccdlflags='-fPIC'"
+ patch -Np0 -i ../perl-5.8.6-picdl.patch0
+else
+ _ARCH=""
+fi
+
sed -i -e "s|BUILD_ZLIB\s*= True|BUILD_ZLIB = False|" \
-e "s|INCLUDE\s*= ./zlib-src|INCLUDE = /usr/include|" \
-e "s|LIB\s*= ./zlib-src|LIB = /usr/lib|" \
ext/Compress/Raw/Zlib/config.in
-sh Configure -des -Dusethreads\
+sh Configure -des -Dusethreads \
-Dprefix=/usr \
-Dman1dir=/usr/share/man/man1 \
-Dman3dir=/usr/share/man/man3 \
-Dpager="/usr/bin/less isR" \
- -Doptimize="$CFLAGS"
+ -Doptimize="$CFLAGS" ${_ARCH}
make
make DESTDIR=$PKG install
-# ln -sf perl$version $PKG/usr/bin/perl
-# ln -sf c2ph $PKG/usr/bin/pstruct
-# ln -sf s2p $PKG/usr/bin/psed
-# ln -sf c2ph.1pm $PKG/usr/man/man1/pstruct.1pm
-# ln -sf s2p.1pm $PKG/usr/man/man1/psed.1pm
find $PKG -iname 'TODO*' -or \
-iname 'Change*' -or \
-iname 'README*' -or \
diff --git a/base/perl/perl-5.10.0-debian-23.patch b/base/perl/perl-5.10.0-debian-23.patch
new file mode 100644
index 000000000..85f84a440
--- /dev/null
+++ b/base/perl/perl-5.10.0-debian-23.patch
@@ -0,0 +1,3239 @@
+This patch is from Debian:
+
+http://patch-tracking.debian.net/patch/nondebian/dl/perl/5.10.0-23
+
+We are omitting a few Debian-specific bits here
+
+--- perl-5.10.0.orig/perl.c
++++ perl-5.10.0/perl.c
+@@ -1364,10 +1364,17 @@
+ */
+ const char * const s = PerlEnv_getenv("PERL_DESTRUCT_LEVEL");
+ if (!s || atoi(s) == 0) {
++ const U32 old_debug = PL_debug;
+ /* Emulate the PerlHost behaviour of free()ing all memory allocated in this
+ thread at thread exit. */
++ if (DEBUG_m_TEST) {
++ PerlIO_puts(Perl_debug_log, "Disabling memory debugging as we "
++ "free this thread's memory\n");
++ PL_debug &= ~ DEBUG_m_FLAG;
++ }
+ while(aTHXx->Imemory_debug_header.next != &(aTHXx->Imemory_debug_header))
+ safesysfree(sTHX + (char *)(aTHXx->Imemory_debug_header.next));
++ PL_debug = old_debug;
+ }
+ }
+ #endif
+--- perl-5.10.0.orig/embed.fnc
++++ perl-5.10.0/embed.fnc
+@@ -140,7 +140,7 @@
+ Afnp |OP* |die_nocontext |NN const char* pat|...
+ Afnp |void |deb_nocontext |NN const char* pat|...
+ Afnp |char* |form_nocontext |NN const char* pat|...
+-Anp |void |load_module_nocontext|U32 flags|NN SV* name|NN SV* ver|...
++Anp |void |load_module_nocontext|U32 flags|NN SV* name|NULLOK SV* ver|...
+ Afnp |SV* |mess_nocontext |NN const char* pat|...
+ Afnp |void |warn_nocontext |NN const char* pat|...
+ Afnp |void |warner_nocontext|U32 err|NN const char* pat|...
+@@ -296,7 +296,7 @@
+ Apd |HV* |gv_stashpvn |NN const char* name|U32 namelen|I32 flags
+ Apd |HV* |gv_stashsv |NULLOK SV* sv|I32 flags
+ Apd |void |hv_clear |NULLOK HV* tb
+-poM |HV * |hv_copy_hints_hv|NN HV *const ohv
++poM |HV * |hv_copy_hints_hv|NULLOK HV *const ohv
+ Ap |void |hv_delayfree_ent|NN HV* hv|NULLOK HE* entry
+ Abmd |SV* |hv_delete |NULLOK HV* tb|NN const char* key|I32 klen \
+ |I32 flags
+@@ -486,8 +486,8 @@
+ Afp |SV* |mess |NN const char* pat|...
+ Ap |SV* |vmess |NN const char* pat|NULLOK va_list* args
+ EXp |void |qerror |NN SV* err
+-Apd |void |sortsv |NN SV** array|size_t num_elts|NN SVCOMPARE_t cmp
+-Apd |void |sortsv_flags |NN SV** array|size_t num_elts|NN SVCOMPARE_t cmp|U32 flags
++Apd |void |sortsv |NULLOK SV** array|size_t num_elts|NN SVCOMPARE_t cmp
++Apd |void |sortsv_flags |NULLOK SV** array|size_t num_elts|NN SVCOMPARE_t cmp|U32 flags
+ Apd |int |mg_clear |NN SV* sv
+ Apd |int |mg_copy |NN SV* sv|NN SV* nsv|NULLOK const char* key|I32 klen
+ pd |void |mg_localize |NN SV* sv|NN SV* nsv
+@@ -768,7 +768,7 @@
+ Ap |void |save_list |NN SV** sarg|I32 maxsarg
+ Ap |void |save_long |NN long* longp
+ Ap |void |save_mortalizesv|NN SV* sv
+-Ap |void |save_nogv |NULLOK GV* gv
++Ap |void |save_nogv |NN GV* gv
+ p |void |save_op
+ Ap |SV* |save_scalar |NN GV* gv
+ Ap |void |save_pptr |NN char** pptr
+@@ -842,8 +842,8 @@
+ pd |I32 |sv_clean_all
+ pd |void |sv_clean_objs
+ Apd |void |sv_clear |NN SV* sv
+-Apd |I32 |sv_cmp |NN SV* sv1|NN SV* sv2
+-Apd |I32 |sv_cmp_locale |NN SV* sv1|NN SV* sv2
++Apd |I32 |sv_cmp |NULLOK SV* sv1|NULLOK SV* sv2
++Apd |I32 |sv_cmp_locale |NULLOK SV* sv1|NULLOK SV* sv2
+ #if defined(USE_LOCALE_COLLATE)
+ Apd |char* |sv_collxfrm |NN SV* sv|NN STRLEN* nxp
+ #endif
+@@ -1094,7 +1094,7 @@
+ Ap |yy_parser*|parser_dup |NN const yy_parser *proto|NN CLONE_PARAMS* param
+ #endif
+ Apa |PTR_TBL_t*|ptr_table_new
+-ApR |void* |ptr_table_fetch|NN PTR_TBL_t *tbl|NN const void *sv
++ApR |void* |ptr_table_fetch|NN PTR_TBL_t *tbl|NULLOK const void *sv
+ Ap |void |ptr_table_store|NN PTR_TBL_t *tbl|NULLOK const void *oldsv|NN void *newsv
+ Ap |void |ptr_table_split|NN PTR_TBL_t *tbl
+ Ap |void |ptr_table_clear|NULLOK PTR_TBL_t *tbl
+@@ -1352,7 +1352,7 @@
+ s |I32 |sortcv |NN SV *a|NN SV *b
+ s |I32 |sortcv_xsub |NN SV *a|NN SV *b
+ s |I32 |sortcv_stacked |NN SV *a|NN SV *b
+-s |void |qsortsvu |NN SV** array|size_t num_elts|NN SVCOMPARE_t compare
++s |void |qsortsvu |NULLOK SV** array|size_t num_elts|NN SVCOMPARE_t compare
+ #endif
+
+ #if defined(PERL_IN_PP_SYS_C) || defined(PERL_DECL_PROT)
+@@ -1623,7 +1623,8 @@
+ Ap |int |PerlIO_flush |NULLOK PerlIO *f
+ Ap |void |PerlIO_clearerr |NULLOK PerlIO *f
+ Ap |void |PerlIO_set_cnt |NULLOK PerlIO *f|int cnt
+-Ap |void |PerlIO_set_ptrcnt |NULLOK PerlIO *f|NN STDCHAR *ptr|int cnt
++Ap |void |PerlIO_set_ptrcnt |NULLOK PerlIO *f|NULLOK STDCHAR *ptr \
++ |int cnt
+ Ap |void |PerlIO_setlinebuf |NULLOK PerlIO *f
+ Ap |SSize_t|PerlIO_read |NULLOK PerlIO *f|NN void *buf|Size_t count
+ Ap |SSize_t|PerlIO_write |NULLOK PerlIO *f|NN const void *buf|Size_t count
+--- perl-5.10.0.orig/util.c
++++ perl-5.10.0/util.c
+@@ -178,11 +178,11 @@
+ ptr = (Malloc_t)PerlMem_realloc(where,size);
+ PERL_ALLOC_CHECK(ptr);
+
+- DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) rfree\n",PTR2UV(where),(long)PL_an++));
+- DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) realloc %ld bytes\n",PTR2UV(ptr),(long)PL_an++,(long)size));
+-
+- if (ptr != NULL) {
++ /* MUST do this fixup first, before doing ANYTHING else, as anything else
++ might allocate memory/free/move memory, and until we do the fixup, it
++ may well be chasing (and writing to) free memory. */
+ #ifdef PERL_TRACK_MEMPOOL
++ if (ptr != NULL) {
+ struct perl_memory_debug_header *const header
+ = (struct perl_memory_debug_header *)ptr;
+
+@@ -198,7 +198,17 @@
+ header->prev->next = header;
+
+ ptr = (Malloc_t)((char*)ptr+sTHX);
++ }
+ #endif
++
++ /* In particular, must do that fixup above before logging anything via
++ *printf(), as it can reallocate memory, which can cause SEGVs. */
++
++ DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) rfree\n",PTR2UV(where),(long)PL_an++));
++ DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) realloc %ld bytes\n",PTR2UV(ptr),(long)PL_an++,(long)size));
++
++
++ if (ptr != NULL) {
+ return ptr;
+ }
+ else if (PL_nomemok)
+--- perl-5.10.0.orig/toke.c
++++ perl-5.10.0/toke.c
+@@ -692,6 +692,7 @@
+ #else
+ parser->nexttoke = 0;
+ #endif
++ parser->error_count = oparser ? oparser->error_count : 0;
+ parser->copline = NOLINE;
+ parser->lex_state = LEX_NORMAL;
+ parser->expect = XSTATE;
+--- perl-5.10.0.orig/MANIFEST
++++ perl-5.10.0/MANIFEST
+@@ -3804,6 +3804,7 @@
+ t/op/reverse.t See if reverse operator works
+ t/op/runlevel.t See if die() works from perl_call_*()
+ t/op/rxcode.t See if /(?{ code })/ works
++t/op/setpgrpstack.t See if setpgrp works
+ t/op/sleep.t See if sleep works
+ t/op/smartmatch.t See if the ~~ operator works
+ t/op/sort.t See if sort works
+--- perl-5.10.0.orig/pp_sort.c
++++ perl-5.10.0/pp_sort.c
+@@ -1553,11 +1553,12 @@
+ max = AvFILL(av) + 1;
+ if (SvMAGICAL(av)) {
+ MEXTEND(SP, max);
+- p2 = SP;
+ for (i=0; i < max; i++) {
+ SV **svp = av_fetch(av, i, FALSE);
+ *SP++ = (svp) ? *svp : NULL;
+ }
++ SP--;
++ p1 = p2 = SP - (max-1);
+ }
+ else {
+ if (SvREADONLY(av))
+@@ -1713,7 +1714,7 @@
+ SvREADONLY_off(av);
+ else if (av && !sorting_av) {
+ /* simulate pp_aassign of tied AV */
+- SV** const base = ORIGMARK+1;
++ SV** const base = MARK+1;
+ for (i=0; i < max; i++) {
+ base[i] = newSVsv(base[i]);
+ }
+--- perl-5.10.0.orig/perliol.h
++++ perl-5.10.0/perliol.h
+@@ -170,7 +170,7 @@
+
+ /* PerlIO_teardown doesn't need exporting, but the EXTERN_C is needed
+ * for compiling as C++. Must also match with what perl.h says. */
+-EXTERN_C void PerlIO_teardown();
++EXTERN_C void PerlIO_teardown(void);
+
+ /*--------------------------------------------------------------------------------------*/
+ /* Generic, or stub layer functions */
+--- perl-5.10.0.orig/hv.c
++++ perl-5.10.0/hv.c
+@@ -1961,6 +1961,7 @@
+ if (av) {
+ HvAUX(hv)->xhv_backreferences = 0;
+ Perl_sv_kill_backrefs(aTHX_ (SV*) hv, av);
++ SvREFCNT_dec(av);
+ }
+ }
+
+--- perl-5.10.0.orig/pp_sys.c
++++ perl-5.10.0/pp_sys.c
+@@ -3002,7 +3002,7 @@
+
+ case OP_FTEEXEC:
+ #ifdef PERL_EFF_ACCESS
+- access_mode = W_OK;
++ access_mode = X_OK;
+ #else
+ use_access = 0;
+ #endif
+@@ -4289,6 +4289,7 @@
+ if (MAXARG < 2) {
+ pgrp = 0;
+ pid = 0;
++ XPUSHi(-1);
+ }
+ else {
+ pgrp = POPi;
+--- perl-5.10.0.orig/perlio.c
++++ perl-5.10.0/perlio.c
+@@ -2413,7 +2413,7 @@
+ }
+ }
+
+-void PerlIO_teardown() /* Call only from PERL_SYS_TERM(). */
++void PerlIO_teardown(void) /* Call only from PERL_SYS_TERM(). */
+ {
+ dVAR;
+ #if 0
+--- perl-5.10.0.orig/Makefile.SH
++++ perl-5.10.0/Makefile.SH
+@@ -43,12 +43,7 @@
+ true)
+ # Prefix all runs of 'miniperl' and 'perl' with
+ # $ldlibpth so that ./perl finds *this* shared libperl.
+- case "$LD_LIBRARY_PATH" in
+- '')
+- ldlibpth="LD_LIBRARY_PATH=`pwd`";;
+- *)
+- ldlibpth="LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}";;
+- esac
++ ldlibpth=LD_LIBRARY_PATH=`pwd`'$${LD_LIBRARY_PATH:+:}$$LD_LIBRARY_PATH'
+
+ pldlflags="$cccdlflags"
+ static_target='static_pic'
+@@ -101,7 +96,7 @@
+ ;;
+ esac
+ case "$ldlibpthname" in
+- '') ;;
++ ''|LD_LIBRARY_PATH) ;;
+ *)
+ case "$osname" in
+ os2)
+--- perl-5.10.0.orig/pp_ctl.c
++++ perl-5.10.0/pp_ctl.c
+@@ -218,7 +218,6 @@
+ if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs))
+ cx->sb_rxtainted |= 2;
+ sv_catsv(dstr, POPs);
+- FREETMPS; /* Prevent excess tmp stack */
+
+ /* Are we done */
+ if (cx->sb_once || !CALLREGEXEC(rx, s, cx->sb_strend, orig,
+@@ -3076,14 +3075,6 @@
+
+ sv = POPs;
+ if ( (SvNIOKp(sv) || SvVOK(sv)) && PL_op->op_type != OP_DOFILE) {
+- if ( SvVOK(sv) && ckWARN(WARN_PORTABLE) ) { /* require v5.6.1 */
+- HV * hinthv = GvHV(PL_hintgv);
+- SV ** ptr = NULL;
+- if (hinthv) ptr = hv_fetchs(hinthv, "v_string", FALSE);
+- if ( !(ptr && *ptr && SvIOK(*ptr) && SvIV(*ptr)) )
+- Perl_warner(aTHX_ packWARN(WARN_PORTABLE),
+- "v-string in use/require non-portable");
+- }
+ sv = new_version(sv);
+ if (!sv_derived_from(PL_patchlevel, "version"))
+ upg_version(PL_patchlevel, TRUE);
+@@ -3135,26 +3126,14 @@
+
+ /* We do this only with use, not require. */
+ if (PL_compcv &&
+- /* If we request a version >= 5.6.0, then v-string are OK
+- so set $^H{v_string} to suppress the v-string warning */
+- vcmp(sv, sv_2mortal(upg_version(newSVnv(5.006), FALSE))) >= 0) {
+- HV * hinthv = GvHV(PL_hintgv);
+- if( hinthv ) {
+- SV *hint = newSViv(1);
+- (void)hv_stores(hinthv, "v_string", hint);
+- /* This will call through to Perl_magic_sethint() which in turn
+- sets PL_hints correctly. */
+- SvSETMAGIC(hint);
+- }
+ /* If we request a version >= 5.9.5, load feature.pm with the
+ * feature bundle that corresponds to the required version. */
+- if (vcmp(sv, sv_2mortal(upg_version(newSVnv(5.009005), FALSE))) >= 0) {
++ vcmp(sv, sv_2mortal(upg_version(newSVnv(5.009005), FALSE))) >= 0) {
+ SV *const importsv = vnormal(sv);
+ *SvPVX_mutable(importsv) = ':';
+ ENTER;
+ Perl_load_module(aTHX_ 0, newSVpvs("feature"), NULL, importsv, NULL);
+ LEAVE;
+- }
+ }
+
+ RETPUSHYES;
+--- perl-5.10.0.orig/sv.c
++++ perl-5.10.0/sv.c
+@@ -3557,8 +3557,10 @@
+ GvMULTI_on(dstr);
+ return;
+ }
+- glob_assign_glob(dstr, sstr, dtype);
+- return;
++ if (isGV_with_GP(sstr)) {
++ glob_assign_glob(dstr, sstr, dtype);
++ return;
++ }
+ }
+
+ if (dtype >= SVt_PV) {
+@@ -10263,10 +10265,11 @@
+ daux->xhv_eiter = saux->xhv_eiter
+ ? he_dup(saux->xhv_eiter,
+ (bool)!!HvSHAREKEYS(sstr), param) : 0;
++ /* backref array needs refcnt=2; see sv_add_backref */
+ daux->xhv_backreferences =
+ saux->xhv_backreferences
+ ? (AV*) SvREFCNT_inc(
+- sv_dup((SV*)saux->xhv_backreferences, param))
++ sv_dup_inc((SV*)saux->xhv_backreferences, param))
+ : 0;
+
+ daux->xhv_mro_meta = saux->xhv_mro_meta
+--- perl-5.10.0.orig/av.c
++++ perl-5.10.0/av.c
+@@ -433,7 +433,7 @@
+ /* Give any tie a chance to cleanup first */
+ if (SvRMAGICAL(av)) {
+ const MAGIC* const mg = SvMAGIC(av);
+- if (PL_delaymagic && mg->mg_type == PERL_MAGIC_isa)
++ if (PL_delaymagic && mg && mg->mg_type == PERL_MAGIC_isa)
+ PL_delaymagic |= DM_ARRAY;
+ else
+ mg_clear((SV*)av);
+--- perl-5.10.0.orig/mg.c
++++ perl-5.10.0/mg.c
+@@ -1543,10 +1543,11 @@
+ stash = GvSTASH(
+ SvTYPE(mg->mg_obj) == SVt_PVGV
+ ? (GV*)mg->mg_obj
+- : (GV*)SvMAGIC(mg->mg_obj)->mg_obj
++ : (GV*)mg_find(mg->mg_obj, PERL_MAGIC_isa)->mg_obj
+ );
+
+- mro_isa_changed_in(stash);
++ if (stash)
++ mro_isa_changed_in(stash);
+
+ return 0;
+ }
+--- perl-5.10.0.orig/proto.h
++++ perl-5.10.0/proto.h
+@@ -260,8 +260,7 @@
+ __attribute__nonnull__(1);
+
+ PERL_CALLCONV void Perl_load_module_nocontext(U32 flags, SV* name, SV* ver, ...)
+- __attribute__nonnull__(2)
+- __attribute__nonnull__(3);
++ __attribute__nonnull__(2);
+
+ PERL_CALLCONV SV* Perl_mess_nocontext(const char* pat, ...)
+ __attribute__format__(__printf__,1,2)
+@@ -678,9 +677,7 @@
+
+ PERL_CALLCONV HV* Perl_gv_stashsv(pTHX_ SV* sv, I32 flags);
+ PERL_CALLCONV void Perl_hv_clear(pTHX_ HV* tb);
+-PERL_CALLCONV HV * Perl_hv_copy_hints_hv(pTHX_ HV *const ohv)
+- __attribute__nonnull__(pTHX_1);
+-
++PERL_CALLCONV HV * Perl_hv_copy_hints_hv(pTHX_ HV *const ohv);
+ PERL_CALLCONV void Perl_hv_delayfree_ent(pTHX_ HV* hv, HE* entry)
+ __attribute__nonnull__(pTHX_1);
+
+@@ -1303,11 +1300,9 @@
+ __attribute__nonnull__(pTHX_1);
+
+ PERL_CALLCONV void Perl_sortsv(pTHX_ SV** array, size_t num_elts, SVCOMPARE_t cmp)
+- __attribute__nonnull__(pTHX_1)
+ __attribute__nonnull__(pTHX_3);
+
+ PERL_CALLCONV void Perl_sortsv_flags(pTHX_ SV** array, size_t num_elts, SVCOMPARE_t cmp, U32 flags)
+- __attribute__nonnull__(pTHX_1)
+ __attribute__nonnull__(pTHX_3);
+
+ PERL_CALLCONV int Perl_mg_clear(pTHX_ SV* sv)
+@@ -2079,7 +2074,9 @@
+ PERL_CALLCONV void Perl_save_mortalizesv(pTHX_ SV* sv)
+ __attribute__nonnull__(pTHX_1);
+
+-PERL_CALLCONV void Perl_save_nogv(pTHX_ GV* gv);
++PERL_CALLCONV void Perl_save_nogv(pTHX_ GV* gv)
++ __attribute__nonnull__(pTHX_1);
++
+ PERL_CALLCONV void Perl_save_op(pTHX);
+ PERL_CALLCONV SV* Perl_save_scalar(pTHX_ GV* gv)
+ __attribute__nonnull__(pTHX_1);
+@@ -2263,14 +2260,8 @@
+ PERL_CALLCONV void Perl_sv_clear(pTHX_ SV* sv)
+ __attribute__nonnull__(pTHX_1);
+
+-PERL_CALLCONV I32 Perl_sv_cmp(pTHX_ SV* sv1, SV* sv2)
+- __attribute__nonnull__(pTHX_1)
+- __attribute__nonnull__(pTHX_2);
+-
+-PERL_CALLCONV I32 Perl_sv_cmp_locale(pTHX_ SV* sv1, SV* sv2)
+- __attribute__nonnull__(pTHX_1)
+- __attribute__nonnull__(pTHX_2);
+-
++PERL_CALLCONV I32 Perl_sv_cmp(pTHX_ SV* sv1, SV* sv2);
++PERL_CALLCONV I32 Perl_sv_cmp_locale(pTHX_ SV* sv1, SV* sv2);
+ #if defined(USE_LOCALE_COLLATE)
+ PERL_CALLCONV char* Perl_sv_collxfrm(pTHX_ SV* sv, STRLEN* nxp)
+ __attribute__nonnull__(pTHX_1)
+@@ -2936,8 +2927,7 @@
+
+ PERL_CALLCONV void* Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, const void *sv)
+ __attribute__warn_unused_result__
+- __attribute__nonnull__(pTHX_1)
+- __attribute__nonnull__(pTHX_2);
++ __attribute__nonnull__(pTHX_1);
+
+ PERL_CALLCONV void Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, const void *oldsv, void *newsv)
+ __attribute__nonnull__(pTHX_1)
+@@ -3625,7 +3615,6 @@
+ __attribute__nonnull__(pTHX_2);
+
+ STATIC void S_qsortsvu(pTHX_ SV** array, size_t num_elts, SVCOMPARE_t compare)
+- __attribute__nonnull__(pTHX_1)
+ __attribute__nonnull__(pTHX_3);
+
+ #endif
+@@ -4245,9 +4234,7 @@
+ PERL_CALLCONV int Perl_PerlIO_flush(pTHX_ PerlIO *f);
+ PERL_CALLCONV void Perl_PerlIO_clearerr(pTHX_ PerlIO *f);
+ PERL_CALLCONV void Perl_PerlIO_set_cnt(pTHX_ PerlIO *f, int cnt);
+-PERL_CALLCONV void Perl_PerlIO_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR *ptr, int cnt)
+- __attribute__nonnull__(pTHX_2);
+-
++PERL_CALLCONV void Perl_PerlIO_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR *ptr, int cnt);
+ PERL_CALLCONV void Perl_PerlIO_setlinebuf(pTHX_ PerlIO *f);
+ PERL_CALLCONV SSize_t Perl_PerlIO_read(pTHX_ PerlIO *f, void *buf, Size_t count)
+ __attribute__nonnull__(pTHX_2);
+--- perl-5.10.0.orig/regcomp.c
++++ perl-5.10.0/regcomp.c
+@@ -8239,6 +8239,9 @@
+ *STRING(ret)= (char)value;
+ STR_LEN(ret)= 1;
+ RExC_emit += STR_SZ(1);
++ if (listsv) {
++ SvREFCNT_dec(listsv);
++ }
+ return ret;
+ }
+ /* optimize case-insensitive simple patterns (e.g. /[a-z]/i) */
+--- perl-5.10.0.orig/doop.c
++++ perl-5.10.0/doop.c
+@@ -1204,7 +1204,13 @@
+
+ if (sv != left || (optype != OP_BIT_AND && !SvOK(sv) && !SvGMAGICAL(sv)))
+ sv_setpvn(sv, "", 0); /* avoid undef warning on |= and ^= */
+- lsave = lc = SvPV_nomg_const(left, leftlen);
++ if (sv == left) {
++ lsave = lc = SvPV_force_nomg(left, leftlen);
++ }
++ else {
++ lsave = lc = SvPV_nomg_const(left, leftlen);
++ SvPV_force_nomg_nolen(sv);
++ }
+ rsave = rc = SvPV_nomg_const(right, rightlen);
+
+ /* This need to come after SvPV to ensure that string overloading has
+--- perl-5.10.0.orig/perl.h
++++ perl-5.10.0/perl.h
+@@ -663,6 +663,11 @@
+ # include <unistd.h>
+ #endif
+
++/* for WCOREDUMP */
++#ifdef I_SYS_WAIT
++# include <sys/wait.h>
++#endif
++
+ #ifdef __SYMBIAN32__
+ # undef _SC_ARG_MAX /* Symbian has _SC_ARG_MAX but no sysconf() */
+ #endif
+@@ -2652,6 +2657,25 @@
+ # define PERL_SYS_INIT3_BODY(argvp,argcp,envp) PERL_SYS_INIT_BODY(argvp,argcp)
+ #endif
+
++/*
++=for apidoc Am|void|PERL_SYS_INIT|int argc|char** argv
++Provides system-specific tune up of the C runtime environment necessary to
++run Perl interpreters. This should be called only once, before creating
++any Perl interpreters.
++
++=for apidoc Am|void|PERL_SYS_INIT3|int argc|char** argv|char** env
++Provides system-specific tune up of the C runtime environment necessary to
++run Perl interpreters. This should be called only once, before creating
++any Perl interpreters.
++
++=for apidoc Am|void|PERL_SYS_TERM|
++Provides system-specific clean up of the C runtime environment after
++running Perl interpreters. This should be called only once, after
++freeing any remaining Perl interpreters.
++
++=cut
++ */
++
+ #define PERL_SYS_INIT(argc, argv) Perl_sys_init(argc, argv)
+ #define PERL_SYS_INIT3(argc, argv, env) Perl_sys_init3(argc, argv, env)
+ #define PERL_SYS_TERM() Perl_sys_term()
+@@ -3966,7 +3990,7 @@
+ #endif
+
+ #ifdef USE_PERLIO
+-EXTERN_C void PerlIO_teardown();
++EXTERN_C void PerlIO_teardown(void);
+ # ifdef USE_ITHREADS
+ # define PERLIO_INIT MUTEX_INIT(&PL_perlio_mutex)
+ # define PERLIO_TERM \
+--- perl-5.10.0.orig/pp_hot.c
++++ perl-5.10.0/pp_hot.c
+@@ -1028,8 +1028,14 @@
+ *(relem++) = sv;
+ didstore = av_store(ary,i++,sv);
+ if (magic) {
+- if (SvSMAGICAL(sv))
++ if (SvSMAGICAL(sv)) {
++ /* More magic can happen in the mg_set callback, so we
++ * backup the delaymagic for now. */
++ U16 dmbak = PL_delaymagic;
++ PL_delaymagic = 0;
+ mg_set(sv);
++ PL_delaymagic = dmbak;
++ }
+ if (!didstore)
+ sv_2mortal(sv);
+ }
+@@ -1059,8 +1065,12 @@
+ duplicates += 2;
+ didstore = hv_store_ent(hash,sv,tmpstr,0);
+ if (magic) {
+- if (SvSMAGICAL(tmpstr))
++ if (SvSMAGICAL(tmpstr)) {
++ U16 dmbak = PL_delaymagic;
++ PL_delaymagic = 0;
+ mg_set(tmpstr);
++ PL_delaymagic = dmbak;
++ }
+ if (!didstore)
+ sv_2mortal(tmpstr);
+ }
+@@ -1084,7 +1094,13 @@
+ }
+ else
+ sv_setsv(sv, &PL_sv_undef);
+- SvSETMAGIC(sv);
++
++ if (SvSMAGICAL(sv)) {
++ U16 dmbak = PL_delaymagic;
++ PL_delaymagic = 0;
++ mg_set(sv);
++ PL_delaymagic = dmbak;
++ }
+ break;
+ }
+ }
+@@ -1198,6 +1214,9 @@
+ if (rx->extflags & RXf_TAINTED)
+ SvTAINTED_on(rv);
+ sv_magic(sv,(SV*)ReREFCNT_inc(rx), PERL_MAGIC_qr,0,0);
++ if (pkg) {
++ SvREFCNT_dec(pkg);
++ }
+ XPUSHs(rv);
+ RETURN;
+ }
+--- perl-5.10.0.orig/t/comp/require.t
++++ perl-5.10.0/t/comp/require.t
+@@ -15,7 +15,7 @@
+
+ my $Is_EBCDIC = (ord('A') == 193) ? 1 : 0;
+ my $Is_UTF8 = (${^OPEN} || "") =~ /:utf8/;
+-my $total_tests = 49;
++my $total_tests = 50;
+ if ($Is_EBCDIC || $Is_UTF8) { $total_tests -= 3; }
+ print "1..$total_tests\n";
+
+@@ -258,6 +258,20 @@
+ }
+ }
+
++# [perl #49472] Attributes + Unkown Error
++
++{
++ do_require
++ 'use strict;sub MODIFY_CODE_ATTRIBUTE{} sub f:Blah {$nosuchvar}';
++ my $err = $@;
++ $err .= "\n" unless $err =~ /\n$/;
++ unless ($err =~ /Global symbol "\$nosuchvar" requires /) {
++ $err =~ s/^/# /mg;
++ print "${err}not ";
++ }
++ print "ok ", ++$i, " [perl #49472]\n";
++}
++
+ ##########################################
+ # What follows are UTF-8 specific tests. #
+ # Add generic tests before this point. #
+--- perl-5.10.0.orig/t/op/fork.t
++++ perl-5.10.0/t/op/fork.t
+@@ -445,16 +445,14 @@
+ my $pid = fork;
+ die "fork: $!" if !defined $pid;
+ if ($pid == 0) {
+- my $rand_child = rand;
+ close RDR;
+- print WTR $rand_child, "\n";
++ print WTR "STRING_FROM_CHILD\n";
+ close WTR;
+ } else {
+- my $rand_parent = rand;
+ close WTR;
+- chomp(my $rand_child = <RDR>);
++ chomp(my $string_from_child = <RDR>);
+ close RDR;
+- print $rand_child ne $rand_parent, "\n";
++ print $string_from_child eq "STRING_FROM_CHILD", "\n";
+ }
+ EXPECT
+ 1
+--- perl-5.10.0.orig/t/op/setpgrpstack.t
++++ perl-5.10.0/t/op/setpgrpstack.t
+@@ -0,0 +1,16 @@
++#!./perl -w
++
++BEGIN {
++ chdir 't' if -d 't';
++ @INC = '../lib';
++ require './test.pl';
++}
++
++use Config;
++plan tests => 2;
++
++SKIP: {
++ skip "setpgrp() is not available", 2 unless $Config{d_setpgrp};
++ ok(!eval { package A;sub foo { die("got here") }; package main; A->foo(setpgrp())});
++ ok($@ =~ /got here/, "setpgrp() should extend the stack before modifying it");
++}
+--- perl-5.10.0.orig/t/op/bop.t
++++ perl-5.10.0/t/op/bop.t
+@@ -15,7 +15,7 @@
+ # If you find tests are failing, please try adding names to tests to track
+ # down where the failure is, and supply your new names as a patch.
+ # (Just-in-time test naming)
+-plan tests => 161;
++plan tests => 161 + (10*13*2) + 4;
+
+ # numerics
+ ok ((0xdead & 0xbeef) == 0x9ead);
+@@ -428,3 +428,105 @@
+ my $ref = "\x{10000}\0";
+ is(~~$str, $ref);
+ }
++
++# ref tests
++
++my %res;
++
++for my $str ("x", "\x{100}") {
++ for my $chr (qw/S A H G X ( * F/) {
++ for my $op (qw/| & ^/) {
++ my $co = ord $chr;
++ my $so = ord $str;
++ $res{"$chr$op$str"} = eval qq/chr($co $op $so)/;
++ }
++ }
++ $res{"undef|$str"} = $str;
++ $res{"undef&$str"} = "";
++ $res{"undef^$str"} = $str;
++}
++
++sub PVBM () { "X" }
++index PVBM, "foo";
++
++my $warn = 0;
++local $^W = 1;
++local $SIG{__WARN__} = sub { $warn++ };
++
++sub is_first {
++ my ($got, $orig, $op, $str, $name) = @_;
++ is(substr($got, 0, 1), $res{"$orig$op$str"}, $name);
++}
++
++for (
++ # [object to test, first char of stringification, name]
++ [undef, "undef", "undef" ],
++ [\1, "S", "scalar ref" ],
++ [[], "A", "array ref" ],
++ [{}, "H", "hash ref" ],
++ [qr/x/, "(", "qr//" ],
++ [*foo, "*", "glob" ],
++ [\*foo, "G", "glob ref" ],
++ [PVBM, "X", "PVBM" ],
++ [\PVBM, "S", "PVBM ref" ],
++ [bless([], "Foo"), "F", "object" ],
++) {
++ my ($val, $orig, $type) = @$_;
++
++ for (["x", "string"], ["\x{100}", "utf8"]) {
++ my ($str, $desc) = @$_;
++
++ $warn = 0;
++
++ is_first($val | $str, $orig, "|", $str, "$type | $desc");
++ is_first($val & $str, $orig, "&", $str, "$type & $desc");
++ is_first($val ^ $str, $orig, "^", $str, "$type ^ $desc");
++
++ is_first($str | $val, $orig, "|", $str, "$desc | $type");
++ is_first($str & $val, $orig, "&", $str, "$desc & $type");
++ is_first($str ^ $val, $orig, "^", $str, "$desc ^ $type");
++
++ my $new;
++ ($new = $val) |= $str;
++ is_first($new, $orig, "|", $str, "$type |= $desc");
++ ($new = $val) &= $str;
++ is_first($new, $orig, "&", $str, "$type &= $desc");
++ ($new = $val) ^= $str;
++ is_first($new, $orig, "^", $str, "$type ^= $desc");
++
++ ($new = $str) |= $val;
++ is_first($new, $orig, "|", $str, "$desc |= $type");
++ ($new = $str) &= $val;
++ is_first($new, $orig, "&", $str, "$desc &= $type");
++ ($new = $str) ^= $val;
++ is_first($new, $orig, "^", $str, "$desc ^= $type");
++
++ if ($orig eq "undef") {
++ # undef |= and undef ^= don't warn
++ is($warn, 10, "no duplicate warnings");
++ }
++ else {
++ is($warn, 0, "no warnings");
++ }
++ }
++}
++
++my $strval;
++
++{
++ package Bar;
++ use overload q/""/ => sub { $strval };
++
++ package Baz;
++ use overload q/|/ => sub { "y" };
++}
++
++ok(!eval { bless([], "Bar") | "x"; 1 }, "string overload can't use |");
++like($@, qr/no method found/, "correct error");
++is(eval { bless([], "Baz") | "x" }, "y", "| overload works");
++
++my $obj = bless [], "Bar";
++$strval = "x";
++eval { $obj |= "Q" };
++$strval = "z";
++is("$obj", "z", "|= doesn't break string overload");
+--- perl-5.10.0.orig/t/mro/pkg_gen.t
++++ perl-5.10.0/t/mro/pkg_gen.t
+@@ -4,7 +4,7 @@
+ use warnings;
+
+ chdir 't' if -d 't';
+-require q(./test.pl); plan(tests => 6);
++require q(./test.pl); plan(tests => 7);
+
+ {
+ package Foo;
+@@ -34,3 +34,7 @@
+
+ delete $::{"Foo::"};
+ is(mro::get_pkg_gen('Foo'), 0, 'pkg_gen 0 for delete $::{Pkg::}');
++
++delete $::{"Quux::"};
++push @Quux::ISA, "Woot"; # should not segfault
++ok(1, "No segfault on modification of ISA in a deleted stash");
+--- perl-5.10.0.orig/t/lib/h2ph.h
++++ perl-5.10.0/t/lib/h2ph.h
+@@ -26,6 +26,10 @@
+ #undef MAX
+ #define MAX(a,b) ((a) > (b) ? (a) : (b))
+
++/* Test #undef'ining an existing constant function */
++#define NOTTRUE 0
++#undef NOTTRUE
++
+ /* Test #ifdef */
+ #ifdef __SOME_UNIMPORTANT_PROPERTY
+ #define MIN(a,b) ((a) < (b) ? (a) : (b))
+@@ -68,9 +72,11 @@
+ * with `use lib qw(/opt/perl5/lib/site_perl/i586-linux/linux);' or whatever
+ * your equivalent is...
+ */
++#if 0
+ #include <sys/socket.h>
+ #import "sys/ioctl.h"
+ #include_next <sys/fcntl.h>
++#endif
+
+ /* typedefs should be ignored */
+ typedef struct a_struct {
+--- perl-5.10.0.orig/t/lib/proxy_constant_subs.t
++++ perl-5.10.0/t/lib/proxy_constant_subs.t
+@@ -7,20 +7,20 @@
+ print "1..0 # Skip -- Perl configured without B module\n";
+ exit 0;
+ }
+- if ($Config::Config{'extensions'} !~ /\bPOSIX\b/) {
+- print "1..0 # Skip -- Perl configured without POSIX\n";
++ if ($Config::Config{'extensions'} !~ /\bFcntl\b/) {
++ print "1..0 # Skip -- Perl configured without Fcntl\n";
+ exit 0;
+ }
+- # errno is a real subroutine, and acts as control
++ # S_IFMT is a real subroutine, and acts as control
+ # SEEK_SET is a proxy constant subroutine.
+- @symbols = qw(errno SEEK_SET);
++ @symbols = qw(S_IFMT SEEK_SET);
+ }
+
+ use strict;
+ use warnings;
+ use Test::More tests => 4 * @symbols;
+ use B qw(svref_2object GVf_IMPORTED_CV);
+-use POSIX @symbols;
++use Fcntl @symbols;
+
+ # GVf_IMPORTED_CV should not be set on the original, but should be set on the
+ # imported GV.
+@@ -29,7 +29,7 @@
+ my ($ps, $ms);
+ {
+ no strict 'refs';
+- $ps = svref_2object(\*{"POSIX::$symbol"});
++ $ps = svref_2object(\*{"Fcntl::$symbol"});
+ $ms = svref_2object(\*{"::$symbol"});
+ }
+ isa_ok($ps, 'B::GV');
+--- perl-5.10.0.orig/t/lib/h2ph.pht
++++ perl-5.10.0/t/lib/h2ph.pht
+@@ -1,6 +1,6 @@
+ require '_h2ph_pre.ph';
+
+-no warnings 'redefine';
++no warnings qw(redefine misc);
+
+ unless(defined(&SQUARE)) {
+ sub SQUARE {
+@@ -22,6 +22,8 @@
+ my($a,$b) = @_;
+ eval q((($a) > ($b) ? ($a) : ($b)));
+ }' unless defined(&MAX);
++ eval 'sub NOTTRUE () {0;}' unless defined(&NOTTRUE);
++ undef(&NOTTRUE) if defined(&NOTTRUE);
+ if(defined(&__SOME_UNIMPORTANT_PROPERTY)) {
+ eval 'sub MIN {
+ my($a,$b) = @_;
+@@ -47,15 +49,17 @@
+ } else {
+ eval 'sub WHATEVER () {1000;}' unless defined(&WHATEVER);
+ }
+- require 'sys/socket.ph';
+- require 'sys/ioctl.ph';
+- eval {
+- my(@REM);
+- my(%INCD) = map { $INC{$_} => 1 } (grep { $_ eq "sys/fcntl.ph" } keys(%INC));
+- @REM = map { "$_/sys/fcntl.ph" } (grep { not exists($INCD{"$_/sys/fcntl.ph"}) and -f "$_/sys/fcntl.ph" } @INC);
+- require "$REM[0]" if @REM;
+- };
+- warn($@) if $@;
++ if(0) {
++ require 'sys/socket.ph';
++ require 'sys/ioctl.ph';
++ eval {
++ my(@REM);
++ my(%INCD) = map { $INC{$_} => 1 } (grep { $_ eq "sys/fcntl.ph" } keys(%INC));
++ @REM = map { "$_/sys/fcntl.ph" } (grep { not exists($INCD{"$_/sys/fcntl.ph"}) and -f "$_/sys/fcntl.ph" } @INC);
++ require "$REM[0]" if @REM;
++ };
++ warn($@) if $@;
++ }
+ eval("sub sun () { 0; }") unless defined(&sun);
+ eval("sub mon () { 1; }") unless defined(&mon);
+ eval("sub tue () { 2; }") unless defined(&tue);
+--- perl-5.10.0.orig/t/lib/warnings/pp_ctl
++++ perl-5.10.0/t/lib/warnings/pp_ctl
+@@ -222,18 +222,6 @@
+ Use of uninitialized value $foo in print at (eval 1) line 1.
+ ########
+ # pp_ctl.c
+-use warnings 'portable';
+-eval 'use 5.6.1';
+-EXPECT
+-v-string in use/require non-portable at (eval 1) line 2.
+-########
+-# pp_ctl.c
+-use warnings 'portable';
+-eval 'use v5.6.1';
+-EXPECT
+-v-string in use/require non-portable at (eval 1) line 2.
+-########
+-# pp_ctl.c
+ use warnings;
+ {
+ no warnings;
+@@ -245,15 +233,3 @@
+ use warnings;
+ eval 'use 5.006; use 5.10.0';
+ EXPECT
+-########
+-# pp_ctl.c
+-use warnings;
+-eval '{use 5.006;} use 5.10.0';
+-EXPECT
+-v-string in use/require non-portable at (eval 1) line 2.
+-########
+-# pp_ctl.c
+-use warnings;
+-eval 'use vars; use 5.10.0';
+-EXPECT
+-v-string in use/require non-portable at (eval 1) line 2.
+--- perl-5.10.0.orig/lib/h2ph.t
++++ perl-5.10.0/lib/h2ph.t
+@@ -15,7 +15,7 @@
+ exit 0;
+ }
+
+-print "1..2\n";
++print "1..4\n";
+
+ # quickly compare two text files
+ sub txt_compare {
+@@ -32,6 +32,14 @@
+ $ok = txt_compare("lib/h2ph.ph", "lib/h2ph.pht");
+ print(($ok == 0 ? "" : "not "), "ok 2\n");
+
++# does the output compile?
++$ok = system($^X, "-I../lib", "lib/h2ph.pht");
++print(($ok == 0 ? "" : "not "), "ok 3\n");
++
++# is the output warning free?
++$ok = system($^X, "-w", "-I../lib", "-e", '$SIG{__WARN__} = sub { die $_[0] }; require "lib/h2ph.pht"');
++print(($ok == 0 ? "" : "not "), "ok 4\n");
++
+ # cleanup - should this be in an END block?
+ unlink("lib/h2ph.ph");
+ unlink("_h2ph_pre.ph");
+--- perl-5.10.0.orig/lib/CGI.pm
++++ perl-5.10.0/lib/CGI.pm
+@@ -4032,7 +4032,7 @@
+ my $filename;
+ find_tempdir() unless -w $TMPDIRECTORY;
+ for (my $i = 0; $i < $MAXTRIES; $i++) {
+- last if ! -f ($filename = sprintf("${TMPDIRECTORY}${SL}CGItemp%d",$sequence++));
++ last if ! -f ($filename = sprintf("\%s${SL}CGItemp%d",$TMPDIRECTORY,$sequence++));
+ }
+ # check that it is a more-or-less valid filename
+ return unless $filename =~ m!^([a-zA-Z0-9_ \'\":/.\$\\-]+)$!;
+@@ -4109,6 +4109,8 @@
+ hr;
+ }
+
++ print end_html;
++
+ =head1 ABSTRACT
+
+ This perl library uses perl5 objects to make it easy to create Web
+@@ -5388,7 +5390,7 @@
+ If Apache's mod_rewrite is turned on, then the script name and path
+ info probably won't match the request that the user sent. Set
+ -rewrite=>1 (default) to return URLs that match what the user sent
+-(the original request URI). Set -rewrite->0 to return URLs that match
++(the original request URI). Set -rewrite=>0 to return URLs that match
+ the URL after mod_rewrite's rules have run. Because the additional
+ path information only makes sense in the context of the rewritten URL,
+ -rewrite is set to false when you request path info in the URL.
+--- perl-5.10.0.orig/lib/Pod/Html.pm
++++ perl-5.10.0/lib/Pod/Html.pm
+@@ -246,8 +246,8 @@
+ my $Doindex;
+
+ my $Backlink;
+-my($Listlevel, @Listend);
+-my $After_Lpar;
++my($Listlevel, @Listtype);
++my $ListNewTerm;
+ use vars qw($Ignore); # need to localize it later.
+
+ my(%Items_Named, @Items_Seen);
+@@ -286,7 +286,7 @@
+ $Htmldir = ""; # The directory to which the html pages
+ # will (eventually) be written.
+ $Htmlfile = ""; # write to stdout by default
+- $Htmlfileurl = "" ; # The url that other files would use to
++ $Htmlfileurl = ""; # The url that other files would use to
+ # refer to this file. This is only used
+ # to make relative urls that point to
+ # other files.
+@@ -302,8 +302,9 @@
+ $Doindex = 1; # non-zero if we should generate an index
+ $Backlink = ''; # text for "back to top" links
+ $Listlevel = 0; # current list depth
+- @Listend = (); # the text to use to end the list.
+- $After_Lpar = 0; # set to true after a par in an =item
++ @Listtype = (); # list types for open lists
++ $ListNewTerm = 0; # indicates new term in definition list; used
++ # to correctly open/close <dd> tags
+ $Ignore = 1; # whether or not to format text. we don't
+ # format text until we hit our first pod
+ # directive.
+@@ -519,7 +520,6 @@
+
+ # now convert this file
+ my $after_item; # set to true after an =item
+- my $need_dd = 0;
+ warn "Converting input file $Podfile\n" if $Verbose;
+ foreach my $i (0..$#poddata){
+ $_ = $poddata[$i];
+@@ -527,7 +527,6 @@
+ if (/^(=.*)/s) { # is it a pod directive?
+ $Ignore = 0;
+ $after_item = 0;
+- $need_dd = 0;
+ $_ = $1;
+ if (/^=begin\s+(\S+)\s*(.*)/si) {# =begin
+ process_begin($1, $2);
+@@ -543,12 +542,12 @@
+ if (/^=(head[1-6])\s+(.*\S)/s) { # =head[1-6] heading
+ process_head( $1, $2, $Doindex && $index );
+ } elsif (/^=item\s*(.*\S)?/sm) { # =item text
+- $need_dd = process_item( $1 );
++ process_item( $1 );
+ $after_item = 1;
+ } elsif (/^=over\s*(.*)/) { # =over N
+ process_over();
+ } elsif (/^=back/) { # =back
+- process_back($need_dd);
++ process_back();
+ } elsif (/^=for\s+(\S+)\s*(.*)/si) {# =for
+ process_for($1,$2);
+ } else {
+@@ -563,8 +562,14 @@
+ next if $Ignore;
+ next if @Begin_Stack && $Begin_Stack[-1] ne 'html';
+ print HTML and next if @Begin_Stack && $Begin_Stack[-1] eq 'html';
+- print HTML "<dd>\n" if $need_dd;
+ my $text = $_;
++
++ # Open tag for definition list as we have something to put in it
++ if( $ListNewTerm ){
++ print HTML "<dd>\n";
++ $ListNewTerm = 0;
++ }
++
+ if( $text =~ /\A\s+/ ){
+ process_pre( \$text );
+ print HTML "<pre>\n$text</pre>\n";
+@@ -594,12 +599,8 @@
+ }
+ ## end of experimental
+
+- if( $after_item ){
+- $After_Lpar = 1;
+- }
+ print HTML "<p>$text</p>\n";
+ }
+- print HTML "</dd>\n" if $need_dd;
+ $after_item = 0;
+ }
+ }
+@@ -1074,12 +1075,12 @@
+
+ # figure out what kind of item it is.
+ # Build string for referencing this item.
+- if ( $txt =~ /\A=item\s+\*\s*(.*)\Z/s ) { # bullet
++ if ( $txt =~ /\A=item\s+\*\s*(.*)\Z/s ) { # bulleted list
+ next unless $1;
+ $item = $1;
+ } elsif( $txt =~ /\A=item\s+(?>\d+\.?)\s*(.*)\Z/s ) { # numbered list
+ $item = $1;
+- } elsif( $txt =~ /\A=item\s+(.*)\Z/s ) { # plain item
++ } elsif( $txt =~ /\A=item\s+(.*)\Z/s ) { # definition list
+ $item = $1;
+ } else {
+ next;
+@@ -1099,12 +1100,7 @@
+ $tag =~ /head([1-6])/;
+ my $level = $1;
+
+- if( $Listlevel ){
+- warn "$0: $Podfile: unterminated list at =head in paragraph $Paragraph. ignoring.\n" unless $Quiet;
+- while( $Listlevel ){
+- process_back();
+- }
+- }
++ finish_list();
+
+ print HTML "<p>\n";
+ if( $level == 1 && ! $Top ){
+@@ -1143,19 +1139,32 @@
+ $name = anchorify($name);
+ print HTML qq{<a name="$name" class="item">}, process_text( \$otext ), '</a>';
+ }
+- print HTML "</strong>\n";
++ print HTML "</strong>";
+ undef( $EmittedItem );
+ }
+
+-sub emit_li {
++sub new_listitem {
+ my( $tag ) = @_;
++ # Open tag for definition list as we have something to put in it
++ if( ($tag ne 'dl') && ($ListNewTerm) ){
++ print HTML "<dd>\n";
++ $ListNewTerm = 0;
++ }
++
+ if( $Items_Seen[$Listlevel]++ == 0 ){
+- push( @Listend, "</$tag>" );
++ # start of new list
++ push( @Listtype, "$tag" );
+ print HTML "<$tag>\n";
++ } else {
++ # if this is not the first item, close the previous one
++ if ( $tag eq 'dl' ){
++ print HTML "</dd>\n" unless $ListNewTerm;
++ } else {
++ print HTML "</li>\n";
++ }
+ }
+- my $emitted = $tag eq 'dl' ? 'dt' : 'li';
+- print HTML "<$emitted>";
+- return $emitted;
++ my $opentag = $tag eq 'dl' ? 'dt' : 'li';
++ print HTML "<$opentag>";
+ }
+
+ #
+@@ -1163,7 +1172,6 @@
+ #
+ sub process_item {
+ my( $otext ) = @_;
+- my $need_dd = 0; # set to 1 if we need a <dd></dd> after an item
+
+ # lots of documents start a list without doing an =over. this is
+ # bad! but, the proper thing to do seems to be to just assume
+@@ -1173,43 +1181,41 @@
+ process_over();
+ }
+
+- # formatting: insert a paragraph if preceding item has >1 paragraph
+- if( $After_Lpar ){
+- print HTML $need_dd ? "</dd>\n" : "</li>\n" if $After_Lpar;
+- $After_Lpar = 0;
+- }
+-
+ # remove formatting instructions from the text
+ my $text = depod( $otext );
+
+- my $emitted; # the tag actually emitted, used for closing
+-
+ # all the list variants:
+ if( $text =~ /\A\*/ ){ # bullet
+- $emitted = emit_li( 'ul' );
++ new_listitem( 'ul' );
+ if ($text =~ /\A\*\s+(\S.*)\Z/s ) { # with additional text
+ my $tag = $1;
+ $otext =~ s/\A\*\s+//;
+ emit_item_tag( $otext, $tag, 1 );
++ print HTML "\n";
+ }
+
+ } elsif( $text =~ /\A\d+/ ){ # numbered list
+- $emitted = emit_li( 'ol' );
++ new_listitem( 'ol' );
+ if ($text =~ /\A(?>\d+\.?)\s*(\S.*)\Z/s ) { # with additional text
+ my $tag = $1;
+ $otext =~ s/\A\d+\.?\s*//;
+ emit_item_tag( $otext, $tag, 1 );
++ print HTML "\n";
+ }
+
+ } else { # definition list
+- $emitted = emit_li( 'dl' );
++ # new_listitem takes care of opening the <dt> tag
++ new_listitem( 'dl' );
+ if ($text =~ /\A(.+)\Z/s ){ # should have text
+ emit_item_tag( $otext, $text, 1 );
++ # write the definition term and close <dt> tag
++ print HTML "</dt>\n";
+ }
+- $need_dd = 1;
++ # trigger opening a <dd> tag for the actual definition; will not
++ # happen if next paragraph is also a definition term (=item)
++ $ListNewTerm = 1;
+ }
+ print HTML "\n";
+- return $need_dd;
+ }
+
+ #
+@@ -1219,30 +1225,31 @@
+ # start a new list
+ $Listlevel++;
+ push( @Items_Seen, 0 );
+- $After_Lpar = 0;
+ }
+
+ #
+ # process_back - process a pod back tag and convert it to HTML format.
+ #
+ sub process_back {
+- my $need_dd = shift;
+ if( $Listlevel == 0 ){
+ warn "$0: $Podfile: unexpected =back directive in paragraph $Paragraph. ignoring.\n" unless $Quiet;
+ return;
+ }
+
+- # close off the list. note, I check to see if $Listend[$Listlevel] is
++ # close off the list. note, I check to see if $Listtype[$Listlevel] is
+ # defined because an =item directive may have never appeared and thus
+- # $Listend[$Listlevel] may have never been initialized.
++ # $Listtype[$Listlevel] may have never been initialized.
+ $Listlevel--;
+- if( defined $Listend[$Listlevel] ){
+- print HTML $need_dd ? "</dd>\n" : "</li>\n" if $After_Lpar;
+- print HTML $Listend[$Listlevel];
+- print HTML "\n";
+- pop( @Listend );
++ if( defined $Listtype[$Listlevel] ){
++ if ( $Listtype[$Listlevel] eq 'dl' ){
++ print HTML "</dd>\n" unless $ListNewTerm;
++ } else {
++ print HTML "</li>\n";
++ }
++ print HTML "</$Listtype[$Listlevel]>\n";
++ pop( @Listtype );
++ $ListNewTerm = 0;
+ }
+- $After_Lpar = 0;
+
+ # clean up item count
+ pop( @Items_Seen );
+@@ -2025,9 +2032,11 @@
+ # after the entire pod file has been read and converted.
+ #
+ sub finish_list {
+- while ($Listlevel > 0) {
+- print HTML "</dl>\n";
+- $Listlevel--;
++ if( $Listlevel ){
++ warn "$0: $Podfile: unterminated list(s) at =head in paragraph $Paragraph. ignoring.\n" unless $Quiet;
++ while( $Listlevel ){
++ process_back();
++ }
+ }
+ }
+
+--- perl-5.10.0.orig/lib/Pod/Usage.pm
++++ perl-5.10.0/lib/Pod/Usage.pm
+@@ -631,7 +631,7 @@
+ $$self{PENDING}[-1][1] = $_;
+ }
+ }
+- if ($$self{USAGE_SKIPPING}) {
++ if ($$self{USAGE_SKIPPING} && $element !~ m/^over-/) {
+ pop @{ $$self{PENDING} };
+ } else {
+ $self->SUPER::_handle_element_end($element);
+--- perl-5.10.0.orig/lib/Pod/Man.pm
++++ perl-5.10.0/lib/Pod/Man.pm
+@@ -1,7 +1,6 @@
+ # Pod::Man -- Convert POD data to formatted *roff input.
+-# $Id: Man.pm,v 2.16 2007-11-29 01:35:53 eagle Exp $
+ #
+-# Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
++# Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ # Russ Allbery <rra@stanford.edu>
+ # Substantial contributions by Sean Burke <sburke@cpan.org>
+ #
+@@ -37,10 +36,9 @@
+
+ @ISA = qw(Pod::Simple);
+
+-# Don't use the CVS revision as the version, since this module is also in Perl
+-# core and too many things could munge CVS magic revision strings. This
+-# number should ideally be the same as the CVS revision in podlators, however.
+-$VERSION = '2.16';
++# Custom Debian version, see http://bugs.debian.org/500210
++$VERSION = '2.18_01';
++$VERSION = eval $VERSION;
+
+ # Set the debugging level. If someone has inserted a debug function into this
+ # class already, use that. Otherwise, use any Pod::Simple debug function
+@@ -73,7 +71,9 @@
+ my $class = shift;
+ my $self = $class->SUPER::new;
+
+- # Tell Pod::Simple to handle S<> by automatically inserting &nbsp;.
++ # Tell Pod::Simple not to handle S<> by automatically inserting &nbsp;.
++ # Note that this messes up Unicode output by embedding explicit ISO 8859-1
++ # non-breaking spaces that we have to clean up later.
+ $self->nbsp_for_S (1);
+
+ # Tell Pod::Simple to keep whitespace whenever possible.
+@@ -348,23 +348,22 @@
+ my $convert = $$options{convert};
+ my $literal = $$options{literal};
+
+- # Normally we do character translation, but we won't even do that in
+- # <Data> blocks.
+- if ($convert) {
+- if (ASCII) {
+- $text =~ s/(\\|[^\x00-\x7F])/$ESCAPES{ord ($1)} || "X"/eg;
+- } else {
+- $text =~ s/(\\)/$ESCAPES{ord ($1)} || "X"/eg;
+- }
+- }
+-
+ # Cleanup just tidies up a few things, telling *roff that the hyphens are
+- # hard and putting a bit of space between consecutive underscores.
++ # hard, putting a bit of space between consecutive underscores, and
++ # escaping backslashes. Be careful not to mangle our character
++ # translations by doing this before processing character translation.
+ if ($cleanup) {
++ $text =~ s/\\/\\e/g;
+ $text =~ s/-/\\-/g;
+ $text =~ s/_(?=_)/_\\|/g;
+ }
+
++ # Normally we do character translation, but we won't even do that in
++ # <Data> blocks or if UTF-8 output is desired.
++ if ($convert && !$$self{utf8} && ASCII) {
++ $text =~ s/([^\x00-\x7F])/$ESCAPES{ord ($1)} || "X"/eg;
++ }
++
+ # Ensure that *roff doesn't convert literal quotes to UTF-8 single quotes,
+ # but don't mess up our accept escapes.
+ if ($literal) {
+@@ -641,10 +640,10 @@
+ # to Roman rather than the actual previous font when used in headings.
+ # troff output may still be broken, but at least we can fix nroff by
+ # just switching the font changes to the non-fixed versions.
+- $nroff =~ s/\Q$$self{FONTS}{100}\E(.*)\\f[PR]/$1/g;
+- $nroff =~ s/\Q$$self{FONTS}{101}\E(.*)\\f([PR])/\\fI$1\\f$2/g;
+- $nroff =~ s/\Q$$self{FONTS}{110}\E(.*)\\f([PR])/\\fB$1\\f$2/g;
+- $nroff =~ s/\Q$$self{FONTS}{111}\E(.*)\\f([PR])/\\f\(BI$1\\f$2/g;
++ $nroff =~ s/\Q$$self{FONTS}{100}\E(.*?)\\f[PR]/$1/g;
++ $nroff =~ s/\Q$$self{FONTS}{101}\E(.*?)\\f([PR])/\\fI$1\\f$2/g;
++ $nroff =~ s/\Q$$self{FONTS}{110}\E(.*?)\\f([PR])/\\fB$1\\f$2/g;
++ $nroff =~ s/\Q$$self{FONTS}{111}\E(.*?)\\f([PR])/\\f\(BI$1\\f$2/g;
+
+ # Now finally output the command. Bother with .ie only if the nroff
+ # and troff output aren't the same.
+@@ -710,6 +709,7 @@
+ for (@output) {
+ my ($type, $entry) = @$_;
+ $entry =~ s/\"/\"\"/g;
++ $entry =~ s/\\/\\\\/g;
+ $self->output (".IX $type " . '"' . $entry . '"' . "\n");
+ }
+ }
+@@ -734,6 +734,19 @@
+ return;
+ }
+
++ # If we were given the utf8 option, set an output encoding on our file
++ # handle. Wrap in an eval in case we're using a version of Perl too old
++ # to understand this.
++ #
++ # This is evil because it changes the global state of a file handle that
++ # we may not own. However, we can't just blindly encode all output, since
++ # there may be a pre-applied output encoding (such as from PERL_UNICODE)
++ # and then we would double-encode. This seems to be the least bad
++ # approach.
++ if ($$self{utf8}) {
++ eval { binmode ($$self{output_fh}, ':encoding(UTF-8)') };
++ }
++
+ # Determine information for the preamble and then output it.
+ my ($name, $section);
+ if (defined $$self{name}) {
+@@ -851,7 +864,7 @@
+ # module, but this order is correct for both Solaris and Linux.
+ sub preamble {
+ my ($self, $name, $section, $date) = @_;
+- my $preamble = $self->preamble_template;
++ my $preamble = $self->preamble_template (!$$self{utf8});
+
+ # Build the index line and make sure that it will be syntactically valid.
+ my $index = "$name $section";
+@@ -1025,7 +1038,7 @@
+ sub cmd_head2 {
+ my ($self, $attrs, $text) = @_;
+ $text = $self->heading_common ($text, $$attrs{start_line});
+- $self->output ($self->switchquotes ('.Sh', $self->mapfonts ($text)));
++ $self->output ($self->switchquotes ('.SS', $self->mapfonts ($text)));
+ $self->outindex ('Subsection', $text);
+ $$self{NEEDSPACE} = 0;
+ return '';
+@@ -1273,7 +1286,7 @@
+ # results are pretty poor.
+ #
+ # This only works in an ASCII world. What to do in a non-ASCII world is very
+-# unclear.
++# unclear -- hopefully we can assume UTF-8 and just leave well enough alone.
+ @ESCAPES{0xA0 .. 0xFF} = (
+ "\\ ", undef, undef, undef, undef, undef, undef, undef,
+ undef, undef, undef, undef, undef, "\\%", undef, undef,
+@@ -1294,27 +1307,18 @@
+ "o\\*/" , "u\\*`", "u\\*'", "u\\*^", "u\\*:", "y\\*'", "\\*(th", "y\\*:",
+ ) if ASCII;
+
+-# Make sure that at least this works even outside of ASCII.
+-$ESCAPES{ord("\\")} = "\\e";
+-
+ ##############################################################################
+ # Premable
+ ##############################################################################
+
+ # The following is the static preamble which starts all *roff output we
+-# generate. It's completely static except for the font to use as a
+-# fixed-width font, which is designed by @CFONT@, and the left and right
+-# quotes to use for C<> text, designated by @LQOUTE@ and @RQUOTE@.
++# generate. Most is static except for the font to use as a fixed-width font,
++# which is designed by @CFONT@, and the left and right quotes to use for C<>
++# text, designated by @LQOUTE@ and @RQUOTE@. However, the second part, which
++# defines the accent marks, is only used if $escapes is set to true.
+ sub preamble_template {
+- return <<'----END OF PREAMBLE----';
+-.de Sh \" Subsection heading
+-.br
+-.if t .Sp
+-.ne 5
+-.PP
+-\fB\\$1\fR
+-.PP
+-..
++ my ($self, $accents) = @_;
++ my $preamble = <<'----END OF PREAMBLE----';
+ .de Sp \" Vertical space (when we can't use .PP)
+ .if t .sp .5v
+ .if n .sp
+@@ -1358,7 +1362,7 @@
+ .el .ds Aq '
+ .\"
+ .\" If the F register is turned on, we'll generate index entries on stderr for
+-.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
++.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+ .\" entries marked with X<> in POD. Of course, you'll have to process the
+ .\" output yourself in some meaningful fashion.
+ .ie \nF \{\
+@@ -1372,6 +1376,10 @@
+ . de IX
+ ..
+ .\}
++----END OF PREAMBLE----
++
++ if ($accents) {
++ $preamble .= <<'----END OF PREAMBLE----'
+ .\"
+ .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+ .\" Fear. Run. Save yourself. No user-serviceable parts.
+@@ -1436,6 +1444,8 @@
+ .rm #[ #] #H #V #F C
+ ----END OF PREAMBLE----
+ #`# for cperl-mode
++ }
++ return $preamble;
+ }
+
+ ##############################################################################
+@@ -1582,6 +1592,28 @@
+ By default, section 1 will be used unless the file ends in .pm in which case
+ section 3 will be selected.
+
++=item utf8
++
++By default, Pod::Man produces the most conservative possible *roff output
++to try to ensure that it will work with as many different *roff
++implementations as possible. Many *roff implementations cannot handle
++non-ASCII characters, so this means all non-ASCII characters are converted
++either to a *roff escape sequence that tries to create a properly accented
++character (at least for troff output) or to C<X>.
++
++If this option is set, Pod::Man will instead output UTF-8. If your *roff
++implementation can handle it, this is the best output format to use and
++avoids corruption of documents containing non-ASCII characters. However,
++be warned that *roff source with literal UTF-8 characters is not supported
++by many implementations and may even result in segfaults and other bad
++behavior.
++
++Be aware that, when using this option, the input encoding of your POD
++source must be properly declared unless it is US-ASCII or Latin-1. POD
++input without an C<=encoding> command will be assumed to be in Latin-1,
++and if it's actually in UTF-8, the output will be double-encoded. See
++L<perlpod(1)> for more information on the C<=encoding> command.
++
+ =back
+
+ The standard Pod::Simple method parse_file() takes one argument naming the
+@@ -1617,14 +1649,11 @@
+
+ =head1 BUGS
+
+-Eight-bit input data isn't handled at all well at present. The correct
+-approach would be to map EE<lt>E<gt> escapes to the appropriate UTF-8
+-characters and then do a translation pass on the output according to the
+-user-specified output character set. Unfortunately, we can't send eight-bit
+-data directly to the output unless the user says this is okay, since some
+-vendor *roff implementations can't handle eight-bit data. If the *roff
+-implementation can, however, that's far superior to the current hacked
+-characters that only work under troff.
++Encoding handling assumes that PerlIO is available and does not work
++properly if it isn't since encode and decode do not work well in
++combination with PerlIO encoding layers. It's very unclear how to
++correctly handle this without PerlIO encoding layers. The C<utf8> option
++is therefore not supported unless Perl is built with PerlIO support.
+
+ There is currently no way to turn off the guesswork that tries to format
+ unmarked text appropriately, and sometimes it isn't wanted (particularly
+@@ -1651,6 +1680,13 @@
+
+ =head1 CAVEATS
+
++If Pod::Man is given the C<utf8> option, the encoding of its output file
++handle will be forced to UTF-8 if possible, overriding any existing
++encoding. This will be done even if the file handle is not created by
++Pod::Man and was passed in from outside. This seems to be the only way to
++consistently enforce UTF-8-encoded output regardless of PERL_UNICODE and
++other settings.
++
+ The handling of hyphens and em dashes is somewhat fragile, and one may get
+ the wrong one under some circumstances. This should only matter for
+ B<troff> output.
+--- perl-5.10.0.orig/lib/Pod/t/htmlview.pod
++++ perl-5.10.0/lib/Pod/t/htmlview.pod
+@@ -110,7 +110,7 @@
+
+ =head1 TESTING FOR AND BEGIN
+
+-=for html <br>
++=for html <br />
+ <p>
+ blah blah
+ </p>
+--- perl-5.10.0.orig/lib/Pod/t/htmlview.t
++++ perl-5.10.0/lib/Pod/t/htmlview.t
+@@ -86,17 +86,15 @@
+ <h2><a name="new__"><code>new()</code></a></h2>
+ <p>Constructor method. Accepts the following config options:</p>
+ <dl>
+-<dt><strong><a name="foo" class="item">foo</a></strong>
++<dt><strong><a name="foo" class="item">foo</a></strong></dt>
+
+ <dd>
+ <p>The foo item.</p>
+ </dd>
+-</li>
+-<dt><strong><a name="bar" class="item">bar</a></strong>
++<dt><strong><a name="bar" class="item">bar</a></strong></dt>
+
+ <dd>
+ <p>The bar item.</p>
+-</dd>
+ <p>This is a list within a list</p>
+ <ul>
+ <li>
+@@ -106,30 +104,36 @@
+ <p>The waz item.</p>
+ </li>
+ </ul>
+-<dt><strong><a name="baz" class="item">baz</a></strong>
++</dd>
++<dt><strong><a name="baz" class="item">baz</a></strong></dt>
+
+ <dd>
+ <p>The baz item.</p>
+ </dd>
+-</li>
+ </dl>
+ <p>Title on the same line as the =item + * bullets</p>
+ <ul>
+ <li><strong><a name="black_cat" class="item"><code>Black</code> Cat</a></strong>
+
++</li>
+ <li><strong><a name="sat_on_the" class="item">Sat <em>on</em>&nbsp;the</a></strong>
+
++</li>
+ <li><strong><a name="mat" class="item">Mat&lt;!&gt;</a></strong>
+
++</li>
+ </ul>
+ <p>Title on the same line as the =item + numerical bullets</p>
+ <ol>
+ <li><strong><a name="cat" class="item">Cat</a></strong>
+
++</li>
+ <li><strong><a name="sat" class="item">Sat</a></strong>
+
++</li>
+ <li><strong><a name="mat2" class="item">Mat</a></strong>
+
++</li>
+ </ol>
+ <p>No bullets, no title</p>
+ <dl>
+@@ -137,17 +141,14 @@
+ <dd>
+ <p>Cat</p>
+ </dd>
+-</li>
+ <dt>
+ <dd>
+ <p>Sat</p>
+ </dd>
+-</li>
+ <dt>
+ <dd>
+ <p>Mat</p>
+ </dd>
+-</li>
+ </dl>
+ <p>
+ </p>
+@@ -157,7 +158,7 @@
+ </p>
+ <hr />
+ <h1><a name="testing_for_and_begin">TESTING FOR AND BEGIN</a></h1>
+-<br>
++<br />
+ <p>
+ blah blah
+ </p><p>intermediate text</p>
+--- perl-5.10.0.orig/lib/Pod/t/htmllink.t
++++ perl-5.10.0/lib/Pod/t/htmllink.t
+@@ -108,24 +108,21 @@
+ <h2><a name="section_three">section three</a></h2>
+ <p>This is section three.</p>
+ <dl>
+-<dt><strong><a name="item1" class="item">item1</a></strong>
++<dt><strong><a name="item1" class="item">item1</a></strong></dt>
+
+ <dd>
+ <p>This is item one.</p>
+ </dd>
+-</li>
+-<dt><strong><a name="item_2" class="item">item 2</a></strong>
++<dt><strong><a name="item_2" class="item">item 2</a></strong></dt>
+
+ <dd>
+ <p>This is item two.</p>
+ </dd>
+-</li>
+-<dt><strong><a name="item_three" class="item">item three</a></strong>
++<dt><strong><a name="item_three" class="item">item three</a></strong></dt>
+
+ <dd>
+ <p>This is item three.</p>
+ </dd>
+-</li>
+ </dl>
+
+ </body>
+--- perl-5.10.0.orig/lib/Pod/t/man.t
++++ perl-5.10.0/lib/Pod/t/man.t
+@@ -17,7 +17,7 @@
+ }
+ unshift (@INC, '../blib/lib');
+ $| = 1;
+- print "1..22\n";
++ print "1..23\n";
+ }
+
+ END {
+@@ -344,7 +344,7 @@
+ ###
+ .SH "NAME"
+ "Stuff" (no guesswork)
+-.Sh "\s-1THINGS\s0"
++.SS "\s-1THINGS\s0"
+ .IX Subsection "THINGS"
+ Oboy, is this \*(C+ \*(L"fun\*(R" yet! (guesswork)
+ ###
+@@ -431,3 +431,14 @@
+ .IX Header "Quote escaping"
+ Don't escape `this' but do escape \f(CW\`this\*(Aq\fR (and don't surround it in quotes).
+ ###
++
++###
++=head1 INDEX
++
++Index entry matching a whitespace escape.X<\n>
++###
++.SH "INDEX"
++.IX Header "INDEX"
++Index entry matching a whitespace escape.
++.IX Xref "\\n"
++###
+--- perl-5.10.0.orig/lib/Pod/t/basic.man
++++ perl-5.10.0/lib/Pod/t/basic.man
+@@ -7,7 +7,7 @@
+ .ie n .SH "This ""is"" a ""level 1"" heading"
+ .el .SH "This \f(CWis\fP a ``level 1'' heading"
+ .IX Header "This is a level 1 heading"
+-.Sh "``Level'' ""2 \fIheading\fP"
++.SS "``Level'' ""2 \fIheading\fP"
+ .IX Subsection "``Level'' ""2 heading"
+ \fILevel 3 \f(BIheading \f(BIwith \f(CB\*(C`weird \f(CBstuff "" (double quote)\f(CB\*(C'\f(BI\f(BI\fI\fR
+ .IX Subsection "Level 3 heading with weird stuff """" (double quote)"
+@@ -20,7 +20,7 @@
+ .el .SH "This \f(CWis\fP a ``level 1'' heading"
+ .IX Header "This is a level 1 heading"
+ Text.
+-.Sh "``Level'' 2 \fIheading\fP"
++.SS "``Level'' 2 \fIheading\fP"
+ .IX Subsection "``Level'' 2 heading"
+ Text.
+ .PP
+--- perl-5.10.0.orig/lib/Object/Accessor.pm
++++ perl-5.10.0/lib/Object/Accessor.pm
+@@ -621,6 +621,7 @@
+
+ See C<perldoc perlsub> for details.
+
++=back
+
+ =cut
+
+--- perl-5.10.0.orig/lib/Net/SMTP.pm
++++ perl-5.10.0/lib/Net/SMTP.pm
+@@ -625,6 +625,7 @@
+
+ B<Debug> - Enable debugging information
+
++B<Port> - Select a port on the remote host to connect to (default is 25)
+
+ Example:
+
+--- perl-5.10.0.orig/lib/Net/Config.pm
++++ perl-5.10.0/lib/Net/Config.pm
+@@ -57,9 +57,8 @@
+ }
+ TRY_INTERNET_CONFIG
+
+-my $file = __FILE__;
++my $file = '/etc/perl/Net/libnet.cfg';
+ my $ref;
+-$file =~ s/Config.pm/libnet.cfg/;
+ if (-f $file) {
+ $ref = eval { local $SIG{__DIE__}; do $file };
+ if (ref($ref) eq 'HASH') {
+@@ -132,8 +131,8 @@
+ C<Net::Config> holds configuration data for the modules in the libnet
+ distribution. During installation you will be asked for these values.
+
+-The configuration data is held globally in a file in the perl installation
+-tree, but a user may override any of these values by providing their own. This
++The configuration data is held globally in C</etc/perl/Net/libnet.cfg>,
++but a user may override any of these values by providing their own. This
+ can be done by having a C<.libnetrc> file in their home directory. This file
+ should return a reference to a HASH containing the keys described below.
+ For example
+--- perl-5.10.0.orig/lib/Net/hostent.t
++++ perl-5.10.0/lib/Net/hostent.t
+@@ -16,6 +16,9 @@
+ }
+ if ($^O eq 'MacOS' || ($^O eq 'irix' && $Config{osvers} == 5)) {
+ plan skip_all => "Test relies on resolution of localhost, fails on $^O ($Config{osvers})";
++ } elsif (!-f '/etc/hosts') {
++ # /etc/hosts is not always present on buildds
++ plan skip_all => "Test requires /etc/hosts: not found";
+ }
+ }
+
+--- perl-5.10.0.orig/lib/ExtUtils/CBuilder.pm
++++ perl-5.10.0/lib/ExtUtils/CBuilder.pm
+@@ -36,6 +36,8 @@
+ sunos Unix
+ cygwin Unix
+ os2 Unix
++ gnukfreebsd Unix
++ gnu Unix
+
+ dos Windows
+ MSWin32 Windows
+--- perl-5.10.0.orig/lib/ExtUtils/MM_Unix.pm
++++ perl-5.10.0/lib/ExtUtils/MM_Unix.pm
+@@ -2088,16 +2088,16 @@
+ my(@m);
+
+ push @m, q{
+-install :: all pure_install doc_install
++install :: pure_install doc_install
+ $(NOECHO) $(NOOP)
+
+-install_perl :: all pure_perl_install doc_perl_install
++install_perl :: pure_perl_install doc_perl_install
+ $(NOECHO) $(NOOP)
+
+-install_site :: all pure_site_install doc_site_install
++install_site :: pure_site_install doc_site_install
+ $(NOECHO) $(NOOP)
+
+-install_vendor :: all pure_vendor_install doc_vendor_install
++install_vendor :: pure_vendor_install doc_vendor_install
+ $(NOECHO) $(NOOP)
+
+ pure_install :: pure_$(INSTALLDIRS)_install
+@@ -2112,10 +2112,8 @@
+ doc__install : doc_site_install
+ $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+-pure_perl_install ::
+- $(NOECHO) $(MOD_INSTALL) \
+- read }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
+- write }.$self->catfile('$(DESTINSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
++pure_perl_install :: all
++ $(NOECHO) umask 022; $(MOD_INSTALL) \
+ $(INST_LIB) $(DESTINSTALLPRIVLIB) \
+ $(INST_ARCHLIB) $(DESTINSTALLARCHLIB) \
+ $(INST_BIN) $(DESTINSTALLBIN) \
+@@ -2126,8 +2124,8 @@
+ }.$self->catdir('$(SITEARCHEXP)','auto','$(FULLEXT)').q{
+
+
+-pure_site_install ::
+- $(NOECHO) $(MOD_INSTALL) \
++pure_site_install :: all
++ $(NOECHO) umask 02; $(MOD_INSTALL) \
+ read }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \
+ write }.$self->catfile('$(DESTINSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q{ \
+ $(INST_LIB) $(DESTINSTALLSITELIB) \
+@@ -2139,10 +2137,8 @@
+ $(NOECHO) $(WARN_IF_OLD_PACKLIST) \
+ }.$self->catdir('$(PERL_ARCHLIB)','auto','$(FULLEXT)').q{
+
+-pure_vendor_install ::
+- $(NOECHO) $(MOD_INSTALL) \
+- read }.$self->catfile('$(VENDORARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \
+- write }.$self->catfile('$(DESTINSTALLVENDORARCH)','auto','$(FULLEXT)','.packlist').q{ \
++pure_vendor_install :: all
++ $(NOECHO) umask 022; $(MOD_INSTALL) \
+ $(INST_LIB) $(DESTINSTALLVENDORLIB) \
+ $(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \
+ $(INST_BIN) $(DESTINSTALLVENDORBIN) \
+@@ -2150,38 +2146,20 @@
+ $(INST_MAN1DIR) $(DESTINSTALLVENDORMAN1DIR) \
+ $(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR)
+
+-doc_perl_install ::
+- $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+- -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+- -$(NOECHO) $(DOC_INSTALL) \
+- "Module" "$(NAME)" \
+- "installed into" "$(INSTALLPRIVLIB)" \
+- LINKTYPE "$(LINKTYPE)" \
+- VERSION "$(VERSION)" \
+- EXE_FILES "$(EXE_FILES)" \
+- >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
++doc_perl_install :: all
+
+-doc_site_install ::
+- $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+- -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+- -$(NOECHO) $(DOC_INSTALL) \
++doc_site_install :: all
++ $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLSITEARCH)/perllocal.pod
++ -$(NOECHO) umask 02; $(MKPATH) $(DESTINSTALLSITEARCH)
++ -$(NOECHO) umask 02; $(DOC_INSTALL) \
+ "Module" "$(NAME)" \
+ "installed into" "$(INSTALLSITELIB)" \
+ LINKTYPE "$(LINKTYPE)" \
+ VERSION "$(VERSION)" \
+ EXE_FILES "$(EXE_FILES)" \
+- >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
++ >> }.$self->catfile('$(DESTINSTALLSITEARCH)','perllocal.pod').q{
+
+-doc_vendor_install ::
+- $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+- -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+- -$(NOECHO) $(DOC_INSTALL) \
+- "Module" "$(NAME)" \
+- "installed into" "$(INSTALLVENDORLIB)" \
+- LINKTYPE "$(LINKTYPE)" \
+- VERSION "$(VERSION)" \
+- EXE_FILES "$(EXE_FILES)" \
+- >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
++doc_vendor_install :: all
+
+ };
+
+@@ -2190,13 +2168,12 @@
+ $(NOECHO) $(NOOP)
+
+ uninstall_from_perldirs ::
+- $(NOECHO) $(UNINSTALL) }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{
+
+ uninstall_from_sitedirs ::
+ $(NOECHO) $(UNINSTALL) }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{
+
+ uninstall_from_vendordirs ::
+- $(NOECHO) $(UNINSTALL) }.$self->catfile('$(VENDORARCHEXP)','auto','$(FULLEXT)','.packlist').q{
++
+ };
+
+ join("",@m);
+@@ -2474,7 +2451,7 @@
+ ($lperl = $libperl) =~ s/\$\(A\)/$self->{LIB_EXT}/;
+ }
+ unless ($libperl && -f $lperl) { # Ilya's code...
+- my $dir = $self->{PERL_SRC} || "$self->{PERL_ARCHLIB}/CORE";
++ my $dir = $self->{PERL_SRC} || "/usr/lib";
+ $dir = "$self->{PERL_ARCHLIB}/.." if $self->{UNINSTALLED_PERL};
+ $libperl ||= "libperl$self->{LIB_EXT}";
+ $libperl = "$dir/$libperl";
+@@ -3065,8 +3042,7 @@
+ print STDERR " prefixify $var => $path\n" if $Verbose >= 2;
+ print STDERR " from $sprefix to $rprefix\n" if $Verbose >= 2;
+
+- if( $self->{ARGS}{PREFIX} && $self->file_name_is_absolute($path) &&
+- $path !~ s{^\Q$sprefix\E\b}{$rprefix}s )
++ if( $path !~ s{^\Q$sprefix\E\b}{$rprefix}s && $self->{ARGS}{PREFIX} )
+ {
+
+ print STDERR " cannot prefix, using default.\n" if $Verbose >= 2;
+@@ -3110,14 +3086,11 @@
+ # pm_to_blib depends on then it can't depend on pm_to_blib
+ # else we have a dependency loop.
+ my $pm_dep;
+- my $perlrun;
+ if( defined $self->{PM}{$target} ) {
+ $pm_dep = '';
+- $perlrun = 'PERLRUN';
+ }
+ else {
+ $pm_dep = 'pm_to_blib';
+- $perlrun = 'PERLRUNINST';
+ }
+
+ $m .= <<MAKE_FRAG;
+@@ -3126,7 +3099,7 @@
+ \$(NOECHO) \$(NOOP)
+
+ $target :: $plfile $pm_dep
+- \$($perlrun) $plfile $target
++ \$(PERLRUNINST) $plfile $target
+ MAKE_FRAG
+
+ }
+--- perl-5.10.0.orig/lib/ExtUtils/MM_Any.pm
++++ perl-5.10.0/lib/ExtUtils/MM_Any.pm
+@@ -685,8 +685,6 @@
+ sub manifypods_target {
+ my($self) = shift;
+
+- my $man1pods = '';
+- my $man3pods = '';
+ my $dependencies = '';
+
+ # populate manXpods & dependencies:
+@@ -702,7 +700,7 @@
+ foreach my $section (qw(1 3)) {
+ my $pods = $self->{"MAN${section}PODS"};
+ push @man_cmds, $self->split_command(<<CMD, %$pods);
+- \$(NOECHO) \$(POD2MAN) --section=$section --perm_rw=\$(PERM_RW)
++ \$(NOECHO) \$(POD2MAN) --section=\$(MAN${section}EXT) --perm_rw=\$(PERM_RW)
+ CMD
+ }
+
+@@ -1157,9 +1155,11 @@
+ $self->{SITEPREFIX} ||= $sprefix;
+ $self->{VENDORPREFIX} ||= $vprefix;
+
+- # Lots of MM extension authors like to use $(PREFIX) so we
+- # put something sensible in there no matter what.
+- $self->{PREFIX} = '$('.uc $self->{INSTALLDIRS}.'PREFIX)';
++ my $p = $self->{PREFIX} = $self->{PERLPREFIX};
++ for my $t (qw/PERL SITE VENDOR/)
++ {
++ $self->{"${t}PREFIX"} =~ s!^\Q$p\E(?=/|$)!\$(PREFIX)!;
++ }
+ }
+
+ my $arch = $Config{archname};
+--- perl-5.10.0.orig/lib/ExtUtils/Install.pm
++++ perl-5.10.0/lib/ExtUtils/Install.pm
+@@ -453,7 +453,7 @@
+ return 0;
+ }
+
+-=item _mkpath($dir,$show,$mode,$verbose,$fake)
++=item _mkpath($dir,$show,$verbose,$fake)
+
+ Wrapper around File::Path::mkpath() to handle errors.
+
+@@ -470,13 +470,13 @@
+ =cut
+
+ sub _mkpath {
+- my ($dir,$show,$mode,$verbose,$fake)=@_;
++ my ($dir,$show,$verbose,$fake)=@_;
+ if ( $verbose && $verbose > 1 && ! -d $dir) {
+ $show= 1;
+- printf "mkpath(%s,%d,%#o)\n", $dir, $show, $mode;
++ printf "mkpath(%s,%d)\n", $dir, $show;
+ }
+ if (!$fake) {
+- if ( ! eval { File::Path::mkpath($dir,$show,$mode); 1 } ) {
++ if ( ! eval { File::Path::mkpath($dir,$show); 1 } ) {
+ _choke("Can't create '$dir'","$@");
+ }
+
+@@ -644,7 +644,7 @@
+ }
+
+ foreach my $targetdir (sort keys %check_dirs) {
+- _mkpath( $targetdir, 0, 0755, $verbose, $nonono );
++ _mkpath( $targetdir, 0, $verbose, $nonono );
+ }
+ foreach my $found (@found_files) {
+ my ($diff, $ffd, $origfile, $mode, $size, $atime, $mtime,
+@@ -657,7 +657,7 @@
+ $targetfile= _unlink_or_rename( $targetfile, 'tryhard', 'install' )
+ unless $nonono;
+ } elsif ( ! -d $targetdir ) {
+- _mkpath( $targetdir, 0, 0755, $verbose, $nonono );
++ _mkpath( $targetdir, 0, $verbose, $nonono );
+ }
+ print "Installing $targetfile\n";
+ _copy( $sourcefile, $targetfile, $verbose, $nonono, );
+@@ -686,7 +686,7 @@
+
+ if ($pack{'write'}) {
+ $dir = install_rooted_dir(dirname($pack{'write'}));
+- _mkpath( $dir, 0, 0755, $verbose, $nonono );
++ _mkpath( $dir, 0, $verbose, $nonono );
+ print "Writing $pack{'write'}\n";
+ $packlist->write(install_rooted_file($pack{'write'})) unless $nonono;
+ }
+@@ -984,7 +984,7 @@
+ sub pm_to_blib {
+ my($fromto,$autodir,$pm_filter) = @_;
+
+- _mkpath($autodir,0,0755);
++ _mkpath($autodir,0);
+ while(my($from, $to) = each %$fromto) {
+ if( -f $to && -s $from == -s $to && -M $to < -M $from ) {
+ print "Skip $to (unchanged)\n";
+@@ -1007,7 +1007,7 @@
+ # we wont try hard here. its too likely to mess things up.
+ forceunlink($to);
+ } else {
+- _mkpath(dirname($to),0,0755);
++ _mkpath(dirname($to),0);
+ }
+ if ($need_filtering) {
+ run_filter($pm_filter, $from, $to);
+--- perl-5.10.0.orig/lib/ExtUtils/t/INST.t
++++ perl-5.10.0/lib/ExtUtils/t/INST.t
+@@ -65,9 +65,7 @@
+ is( $mm->{NAME}, 'Big::Dummy', 'NAME' );
+ is( $mm->{VERSION}, 0.01, 'VERSION' );
+
+-my $config_prefix = $Config{installprefixexp} || $Config{installprefix} ||
+- $Config{prefixexp} || $Config{prefix};
+-is( $mm->{PERLPREFIX}, $config_prefix, 'PERLPREFIX' );
++is( $mm->{PERLPREFIX}, '$(PREFIX)', 'PERLPREFIX' );
+
+ is( !!$mm->{PERL_CORE}, !!$ENV{PERL_CORE}, 'PERL_CORE' );
+
+--- perl-5.10.0.orig/lib/ExtUtils/t/INST_PREFIX.t
++++ perl-5.10.0/lib/ExtUtils/t/INST_PREFIX.t
+@@ -16,7 +16,7 @@
+ }
+
+ use strict;
+-use Test::More tests => 52;
++use Test::More tests => 47;
+ use MakeMaker::Test::Utils;
+ use MakeMaker::Test::Setup::BFD;
+ use ExtUtils::MakeMaker;
+@@ -62,16 +62,16 @@
+ Writing\ $Makefile\ for\ Big::Dummy\n
+ }x );
+
+-is( $mm->{PREFIX}, '$(SITEPREFIX)', 'PREFIX set based on INSTALLDIRS' );
++#is( $mm->{PREFIX}, '$(SITEPREFIX)', 'PREFIX set based on INSTALLDIRS' );
+
+ isa_ok( $mm, 'ExtUtils::MakeMaker' );
+
+ is( $mm->{NAME}, 'Big::Dummy', 'NAME' );
+ is( $mm->{VERSION}, 0.01, 'VERSION' );
+
+-foreach my $prefix (qw(PREFIX PERLPREFIX SITEPREFIX VENDORPREFIX)) {
+- unlike( $mm->{$prefix}, qr/\$\(PREFIX\)/ );
+-}
++#foreach my $prefix (qw(PREFIX PERLPREFIX SITEPREFIX VENDORPREFIX)) {
++# unlike( $mm->{$prefix}, qr/\$\(PREFIX\)/ );
++#}
+
+
+ my $PREFIX = File::Spec->catdir('foo', 'bar');
+--- perl-5.10.0.orig/lib/Getopt/Long.pm
++++ perl-5.10.0/lib/Getopt/Long.pm
+@@ -1483,7 +1483,6 @@
+ use overload
+ # Treat this object as an oridinary string for legacy API.
+ '""' => \&name,
+- '0+' => sub { 0 },
+ fallback => 1;
+
+ 1;
+--- perl-5.10.0.orig/lib/File/Temp.pm
++++ perl-5.10.0/lib/File/Temp.pm
+@@ -890,7 +890,12 @@
+ @{ $dirs_to_unlink{$$} } : () );
+ foreach my $dir (@dirs) {
+ if (-d $dir) {
+- rmtree($dir, $DEBUG, 0);
++ # Some versions of rmtree will abort if you attempt to remove
++ # the directory you are sitting in. We protect that and turn it
++ # into a warning. We do this because this occurs during
++ # cleanup and so can not be caught by the user.
++ eval { rmtree($dir, $DEBUG, 0); };
++ warn $@ if ($@ && $^W);
+ }
+ }
+
+@@ -2234,6 +2239,12 @@
+ through the same set of random file names and may well cause
+ themselves to give up if they exceed the number of retry attempts.
+
++=head2 Directory removal
++
++Note that if you have chdir'ed into the temporary directory and it is
++subsequently cleaned up in the END block, then you will get a warning
++from File::Path::rmtree().
++
+ =head2 BINMODE
+
+ The file returned by File::Temp will have been opened in binary mode
+--- perl-5.10.0.orig/lib/File/Find.pm
++++ perl-5.10.0/lib/File/Find.pm
+@@ -84,7 +84,7 @@
+
+ Reports the name of a directory only AFTER all its entries
+ have been reported. Entry point C<finddepth()> is a shortcut for
+-specifying C<<{ bydepth => 1 }>> in the first argument of C<find()>.
++specifying C<{ bydepth =E<gt> 1 }> in the first argument of C<find()>.
+
+ =item C<preprocess>
+
+--- perl-5.10.0.orig/lib/File/Path.pm
++++ perl-5.10.0/lib/File/Path.pm
+@@ -316,10 +316,8 @@
+ print "skipped $root\n" if $arg->{verbose};
+ next ROOT_DIR;
+ }
+- if (!chmod $perm | 0700, $root) {
+- if ($Force_Writeable) {
+- _error($arg, "cannot make directory writeable", $canon);
+- }
++ if ($Force_Writeable && !chmod $perm | 0700, $root) {
++ _error($arg, "cannot make directory writeable", $canon);
+ }
+ print "rmdir $root\n" if $arg->{verbose};
+ if (rmdir $root) {
+@@ -328,7 +326,7 @@
+ }
+ else {
+ _error($arg, "cannot remove directory", $canon);
+- if (!chmod($perm, ($Is_VMS ? VMS::Filespec::fileify($root) : $root))
++ if ($Force_Writeable && !chmod($perm, ($Is_VMS ? VMS::Filespec::fileify($root) : $root))
+ ) {
+ _error($arg, sprintf("cannot restore permissions to 0%o",$perm), $canon);
+ }
+@@ -351,10 +349,8 @@
+ }
+
+ my $nperm = $perm & 07777 | 0600;
+- if ($nperm != $perm and not chmod $nperm, $root) {
+- if ($Force_Writeable) {
+- _error($arg, "cannot make file writeable", $canon);
+- }
++ if ($Force_Writeable && $nperm != $perm and not chmod $nperm, $root) {
++ _error($arg, "cannot make file writeable", $canon);
+ }
+ print "unlink $canon\n" if $arg->{verbose};
+ # delete all versions under VMS
+--- perl-5.10.0.orig/lib/Math/Complex.t
++++ perl-5.10.0/lib/Math/Complex.t
+@@ -34,6 +34,11 @@
+ } # cos(), sin(), cosh(), sinh(). The division
+ # of doubles is the current suspect.
+
++my %skip;
++if (`uname -m` =~ /^arm/) {
++ $skip{$_} = 'non-IEEE fp rounding' for 289, 509;
++}
++
+ while (<DATA>) {
+ s/^\s+//;
+ next if $_ eq '' || /^\#/;
+@@ -563,7 +568,9 @@
+
+ print "# @_\n";
+
+- if ("$got" eq "$expected"
++ if ($skip{$test}) {
++ print "ok $test # skipped: $skip{$test}\n";
++ } elsif ("$got" eq "$expected"
+ ||
+ ($expected =~ /^-?\d/ && $got == $expected)
+ ||
+--- perl-5.10.0.orig/lib/Math/BigFloat.pm
++++ perl-5.10.0/lib/Math/BigFloat.pm
+@@ -2142,8 +2142,9 @@
+ # But we need at least $scale digits, so calculate how many are missing
+ my $shift = $scale - $digits;
+
+- # That should never happen (we take care of integer guesses above)
+- # $shift = 0 if $shift < 0;
++ # This happens if the input had enough digits
++ # (we take care of integer guesses above)
++ $shift = 0 if $shift < 0;
+
+ # Multiply in steps of 100, by shifting left two times the "missing" digits
+ my $s2 = $shift * 2;
+--- perl-5.10.0.orig/lib/Math/BigInt/CalcEmu.pm
++++ perl-5.10.0/lib/Math/BigInt/CalcEmu.pm
+@@ -295,7 +295,7 @@
+ =head1 DESCRIPTION
+
+ Contains routines that emulate low-level math functions in BigInt, e.g.
+-optional routines the low-level math package does not provide on it's own.
++optional routines the low-level math package does not provide on its own.
+
+ Will be loaded on demand and called automatically by BigInt.
+
+--- perl-5.10.0.orig/lib/Math/BigInt/t/mbimbf.t
++++ perl-5.10.0/lib/Math/BigInt/t/mbimbf.t
+@@ -32,7 +32,7 @@
+ print "# INC = @INC\n";
+
+ plan tests => 684
+- + 23; # own tests
++ + 26; # own tests
+ }
+
+ use Math::BigInt 1.70;
+@@ -100,3 +100,9 @@
+ $x = $x->blog(Math::BigInt->new(10));
+
+ ok ($x,2);
++
++for my $i (80,88,100) {
++ $x = Math::BigFloat->new("1." . ("0" x $i) . "1");
++ $x = $x->bsqrt;
++ ok ($x, 1);
++}
+--- perl-5.10.0.orig/lib/CPAN/FirstTime.pm
++++ perl-5.10.0/lib/CPAN/FirstTime.pm
+@@ -940,7 +940,7 @@
+ }
+
+ if (!$matcher or 'makepl_arg make_arg' =~ /$matcher/) {
+- my_dflt_prompt(makepl_arg => "", $matcher);
++ my_dflt_prompt(makepl_arg => "INSTALLDIRS=site", $matcher);
+ my_dflt_prompt(make_arg => "", $matcher);
+ }
+
+--- perl-5.10.0.orig/lib/CPAN/HandleConfig.pm
++++ perl-5.10.0/lib/CPAN/HandleConfig.pm
+@@ -526,7 +526,7 @@
+ $configpm = $INC{"CPAN/MyConfig.pm"};
+ $redo++;
+ } else {
+- my($path_to_cpan) = File::Basename::dirname($INC{"CPAN.pm"});
++ my($path_to_cpan) = '/etc/perl';
+ my($configpmdir) = File::Spec->catdir($path_to_cpan,"CPAN");
+ my($configpmtest) = File::Spec->catfile($configpmdir,"Config.pm");
+ my $inc_key;
+--- perl-5.10.0.orig/lib/Module/Build.pm
++++ perl-5.10.0/lib/Module/Build.pm
+@@ -49,6 +49,8 @@
+ cygwin Unix
+ os2 Unix
+ interix Unix
++ gnukfreebsd Unix
++ gnu Unix
+
+ dos Windows
+ MSWin32 Windows
+--- perl-5.10.0.orig/lib/Module/Build/Base.pm
++++ perl-5.10.0/lib/Module/Build/Base.pm
+@@ -2552,7 +2552,7 @@
+ foreach my $file (keys %$files) {
+ # Pod::Simple based parsers only support one document per instance.
+ # This is expected to change in a future version (Pod::Simple > 3.03).
+- my $parser = Pod::Man->new( section => 1 ); # binaries go in section 1
++ my $parser = Pod::Man->new( section => '1p' ); # binaries go in section 1p
+ my $manpage = $self->man1page_name( $file ) . '.' .
+ $self->config( 'man1ext' );
+ my $outfile = File::Spec->catfile($mandir, $manpage);
+@@ -2576,7 +2576,7 @@
+ while (my ($file, $relfile) = each %$files) {
+ # Pod::Simple based parsers only support one document per instance.
+ # This is expected to change in a future version (Pod::Simple > 3.03).
+- my $parser = Pod::Man->new( section => 3 ); # libraries go in section 3
++ my $parser = Pod::Man->new( section => '3pm' ); # libraries go in section 3pm
+ my $manpage = $self->man3page_name( $relfile ) . '.' .
+ $self->config( 'man3ext' );
+ my $outfile = File::Spec->catfile( $mandir, $manpage);
+--- perl-5.10.0.orig/lib/Archive/Tar.pm
++++ perl-5.10.0/lib/Archive/Tar.pm
+@@ -261,6 +261,13 @@
+ $self->_error( qq[Cannot read compressed format in tar-mode] );
+ return;
+ }
++
++ ### size is < HEAD, which means a corrupted file, as the minimum
++ ### length is _at least_ HEAD
++ if (length $chunk != HEAD) {
++ $self->_error( qq[Cannot read enough bytes from the tarfile] );
++ return;
++ }
+ }
+
+ ### if we can't read in all bytes... ###
+@@ -561,26 +568,61 @@
+
+ ### it's a relative path ###
+ } else {
+- my $cwd = (defined $self->{cwd} ? $self->{cwd} : cwd());
++ my $cwd = (ref $self and defined $self->{cwd})
++ ? $self->{cwd}
++ : cwd();
+
+ my @dirs = defined $alt
+ ? File::Spec->splitdir( $dirs ) # It's a local-OS path
+ : File::Spec::Unix->splitdir( $dirs ); # it's UNIX-style, likely
+ # straight from the tarball
+
+- ### paths that leave the current directory are not allowed under
+- ### strict mode, so only allow it if a user tells us to do this.
+ if( not defined $alt and
+- not $INSECURE_EXTRACT_MODE and
+- grep { $_ eq '..' } @dirs
+- ) {
+- $self->_error(
+- q[Entry ']. $entry->full_path .q[' is attempting to leave the ].
+- q[current working directory. Not extracting under SECURE ].
+- q[EXTRACT MODE]
+- );
+- return;
+- }
++ not $INSECURE_EXTRACT_MODE
++ ) {
++
++ ### paths that leave the current directory are not allowed under
++ ### strict mode, so only allow it if a user tells us to do this.
++ if( grep { $_ eq '..' } @dirs ) {
++
++ $self->_error(
++ q[Entry ']. $entry->full_path .q[' is attempting to leave ].
++ q[the current working directory. Not extracting under ].
++ q[SECURE EXTRACT MODE]
++ );
++ return;
++ }
++
++ ### the archive may be asking us to extract into a symlink. This
++ ### is not sane and a possible security issue, as outlined here:
++ ### https://rt.cpan.org/Ticket/Display.html?id=30380
++ ### https://bugzilla.redhat.com/show_bug.cgi?id=295021
++ ### https://issues.rpath.com/browse/RPL-1716
++ my $full_path = $cwd;
++ for my $d ( @dirs ) {
++ $full_path = File::Spec->catdir( $full_path, $d );
++
++ ### we've already checked this one, and it's safe. Move on.
++ next if ref $self and $self->{_link_cache}->{$full_path};
++
++ if( -l $full_path ) {
++ my $to = readlink $full_path;
++ my $diag = "symlinked directory ($full_path => $to)";
++
++ $self->_error(
++ q[Entry ']. $entry->full_path .q[' is attempting to ].
++ qq[extract to a $diag. This is considered a security ].
++ q[vulnerability and not allowed under SECURE EXTRACT ].
++ q[MODE]
++ );
++ return;
++ }
++
++ ### XXX keep a cache if possible, so the stats become cheaper:
++ $self->{_link_cache}->{$full_path} = 1 if ref $self;
++ }
++ }
++
+
+ ### '.' is the directory delimiter, of which the first one has to
+ ### be escaped/changed.
+@@ -622,7 +664,8 @@
+ unless ( -d _ ) {
+ eval { File::Path::mkpath( $dir, 0, 0777 ) };
+ if( $@ ) {
+- $self->_error( qq[Could not create directory '$dir': $@] );
++ my $fp = $entry->full_path;
++ $self->_error(qq[Could not create directory '$dir' for '$fp': $@]);
+ return;
+ }
+
+@@ -672,8 +715,13 @@
+ $self->_make_special_file( $entry, $full ) or return;
+ }
+
+- utime time, $entry->mtime - TIME_OFFSET, $full or
+- $self->_error( qq[Could not update timestamp] );
++ ### only update the timestamp if it's not a symlink; that will change the
++ ### timestamp of the original. This addresses bug #33669: Could not update
++ ### timestamp warning on symlinks
++ if( not -l $full ) {
++ utime time, $entry->mtime - TIME_OFFSET, $full or
++ $self->_error( qq[Could not update timestamp] );
++ }
+
+ if( $CHOWN && CAN_CHOWN ) {
+ chown $entry->uid, $entry->gid, $full or
+@@ -707,8 +755,8 @@
+ or $fail++;
+ }
+
+- $err = qq[Making symbolink link from '] . $entry->linkname .
+- qq[' to '$file' failed] if $fail;
++ $err = qq[Making symbolic link '$file' to '] .
++ $entry->linkname .q[' failed] if $fail;
+
+ } elsif ( $entry->is_hardlink ) {
+ my $fail;
+--- perl-5.10.0.orig/lib/Archive/Extract.pm
++++ perl-5.10.0/lib/Archive/Extract.pm
+@@ -550,12 +550,19 @@
+ $self->bin_tar, '-tf', '-'] :
+ [$self->bin_tar, '-tf', $self->archive];
+
+- ### run the command ###
+- my $buffer = '';
+- unless( scalar run( command => $cmd,
++ ### run the command
++ ### newer versions of 'tar' (1.21 and up) now print record size
++ ### to STDERR as well if v OR t is given (used to be both). This
++ ### is a 'feature' according to the changelog, so we must now only
++ ### inspect STDOUT, otherwise, failures like these occur:
++ ### nntp.perl.org/group/perl.cpan.testers/2009/02/msg3230366.html
++ my $buffer = '';
++ my @out = run( command => $cmd,
+ buffer => \$buffer,
+- verbose => $DEBUG )
+- ) {
++ verbose => $DEBUG );
++
++ ### command was unsuccessful
++ unless( $out[0] ) {
+ return $self->_error(loc(
+ "Error listing contents of archive '%1': %2",
+ $self->archive, $buffer ));
+@@ -578,7 +585,8 @@
+ \s+ [\d,.]+ \s tape \s blocks
+ |x ? $1 : $_);
+
+- } split $/, $buffer;
++ ### only STDOUT, see above
++ } map { split $/, $_ } @{$out[3]};
+
+ ### store the files that are in the archive ###
+ $self->files(\@files);
+--- perl-5.10.0.orig/lib/Archive/Tar/File.pm
++++ perl-5.10.0/lib/Archive/Tar/File.pm
+@@ -445,7 +445,14 @@
+
+ ### don't know why this one is different from the one we /write/ ###
+ substr ($raw, 148, 8) = " ";
+- return unpack ("%16C*", $raw) == $self->chksum ? 1 : 0;
++
++ ### bug #43513: [PATCH] Accept wrong checksums from SunOS and HP-UX tar
++ ### like GNU tar does. See here for details:
++ ### http://www.gnu.org/software/tar/manual/tar.html#SEC139
++ ### so we do both a signed AND unsigned validate. if one succeeds, that's
++ ### good enough
++ return ( (unpack ("%16C*", $raw) == $self->chksum)
++ or (unpack ("%16c*", $raw) == $self->chksum)) ? 1 : 0;
+ }
+
+ =head2 has_content
+--- perl-5.10.0.orig/lib/Archive/Tar/t/04_resolved_issues.t
++++ perl-5.10.0/lib/Archive/Tar/t/04_resolved_issues.t
+@@ -159,3 +159,27 @@
+
+
+ }
++
++### return error properly on corrupted archives
++### Addresses RT #44680: Improve error reporting on short corrupted archives
++{ ok( 1, "Testing bug 44680" );
++
++ { ### XXX whitebox test -- resetting the error string
++ no warnings 'once';
++ $Archive::Tar::error = "";
++ }
++
++ my $src = File::Spec->catfile( qw[src short b] );
++ my $tar = $Class->new;
++
++ isa_ok( $tar, $Class, " Object" );
++
++
++ ### we quell the error on STDERR
++ local $Archive::Tar::WARN = 0;
++
++ ok( !$tar->read( $src ), " No files in the corrupted archive" );
++ like( $tar->error, qr/enough bytes/,
++ " Expected error reported" );
++}
++
+--- perl-5.10.0.orig/ext/POSIX/POSIX.pm
++++ perl-5.10.0/ext/POSIX/POSIX.pm
+@@ -13,7 +13,9 @@
+ use Fcntl qw(FD_CLOEXEC F_DUPFD F_GETFD F_GETFL F_GETLK F_RDLCK F_SETFD
+ F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK O_ACCMODE O_APPEND
+ O_CREAT O_EXCL O_NOCTTY O_NONBLOCK O_RDONLY O_RDWR O_TRUNC
+- O_WRONLY);
++ O_WRONLY SEEK_CUR SEEK_END SEEK_SET
++ S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU S_ISGID S_ISUID
++ S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR);
+
+ # Grandfather old foo_h form to new :foo_h form
+ my $loaded;
+--- perl-5.10.0.orig/ext/POSIX/Makefile.PL
++++ perl-5.10.0/ext/POSIX/Makefile.PL
+@@ -48,13 +48,11 @@
+ MAX_INPUT MB_LEN_MAX MSG_CTRUNC MSG_DONTROUTE MSG_EOR MSG_OOB MSG_PEEK
+ MSG_TRUNC MSG_WAITALL NAME_MAX NCCS NGROUPS_MAX NOFLSH OPEN_MAX OPOST
+ PARENB PARMRK PARODD PATH_MAX PIPE_BUF RAND_MAX R_OK SCHAR_MAX
+- SCHAR_MIN SEEK_CUR SEEK_END SEEK_SET SHRT_MAX SHRT_MIN SIGABRT SIGALRM
++ SCHAR_MIN SHRT_MAX SHRT_MIN SIGABRT SIGALRM
+ SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT
+ SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN SIGTTOU
+ SIGUSR1 SIGUSR2 SIG_BLOCK SIG_SETMASK SIG_UNBLOCK SSIZE_MAX
+- STDERR_FILENO STDIN_FILENO STDOUT_FILENO STREAM_MAX
+- S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU S_ISGID S_ISUID
+- S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR TCIFLUSH TCIOFF
++ STDERR_FILENO STDIN_FILENO STDOUT_FILENO STREAM_MAX TCIFLUSH TCIOFF
+ TCIOFLUSH TCION TCOFLUSH TCOOFF TCOON TCSADRAIN TCSAFLUSH TCSANOW
+ TMP_MAX TOSTOP TZNAME_MAX VEOF VEOL VERASE VINTR VKILL VMIN VQUIT
+ VSTART VSTOP VSUSP VTIME WNOHANG WUNTRACED W_OK X_OK
+--- perl-5.10.0.orig/ext/NDBM_File/NDBM_File.xs
++++ perl-5.10.0/ext/NDBM_File/NDBM_File.xs
+@@ -1,7 +1,7 @@
+ #include "EXTERN.h"
+ #include "perl.h"
+ #include "XSUB.h"
+-#include <ndbm.h>
++#include <gdbm-ndbm.h>
+
+ typedef struct {
+ DBM * dbp ;
+--- perl-5.10.0.orig/ext/NDBM_File/hints/linux.pl
++++ perl-5.10.0/ext/NDBM_File/hints/linux.pl
+@@ -2,7 +2,4 @@
+ # Prefer gdbm to avoid the broken ndbm in some distributions
+ # (no null key support)
+ # Jonathan Stowe <gellyfish@gellyfish.com>
+-use Config;
+-use ExtUtils::Liblist;
+-($self->{LIBS}) = ExtUtils::Liblist->ext('-lgdbm -lgdbm_compat')
+- if $Config{libs} =~ /(?:^|\s)-lgdbm(?:\s|$)/;
++$self->{LIBS} = ['-lgdbm_compat'];
+--- perl-5.10.0.orig/ext/Data/Dumper/Dumper.pm
++++ perl-5.10.0/ext/Data/Dumper/Dumper.pm
+@@ -65,7 +65,7 @@
+
+ croak "Usage: PACKAGE->new(ARRAYREF, [ARRAYREF])"
+ unless (defined($v) && (ref($v) eq 'ARRAY'));
+- $n = [] unless (defined($n) && (ref($v) eq 'ARRAY'));
++ $n = [] unless (defined($n) && (ref($n) eq 'ARRAY'));
+
+ my($s) = {
+ level => 0, # current recursive depth
+--- perl-5.10.0.orig/ext/Compress/Raw/Zlib/config.in
++++ perl-5.10.0/ext/Compress/Raw/Zlib/config.in
+@@ -16,9 +16,9 @@
+ # Setting the Gzip OS Code
+ #
+
+-BUILD_ZLIB = True
+-INCLUDE = ./zlib-src
+-LIB = ./zlib-src
++BUILD_ZLIB = False
++INCLUDE = /usr/include
++LIB = /usr/lib
+
+ OLD_ZLIB = False
+ GZIP_OS_CODE = AUTO_DETECT
+--- perl-5.10.0.orig/ext/Compress/Raw/Zlib/Zlib.xs
++++ perl-5.10.0/ext/Compress/Raw/Zlib/Zlib.xs
+@@ -1295,7 +1295,7 @@
+
+ if (s->stream.avail_out == 0 ) {
+ /* out of space in the output buffer so make it bigger */
+- Sv_Grow(output, SvLEN(output) + bufinc) ;
++ Sv_Grow(output, SvLEN(output) + bufinc +1) ;
+ cur_length += increment ;
+ s->stream.next_out = (Bytef*) SvPVbyte_nolen(output) + cur_length ;
+ increment = bufinc ;
+--- perl-5.10.0.orig/ext/Errno/Errno_pm.PL
++++ perl-5.10.0/ext/Errno/Errno_pm.PL
+@@ -337,13 +337,8 @@
+ package Errno;
+ our (\@EXPORT_OK,\%EXPORT_TAGS,\@ISA,\$VERSION,\%errno,\$AUTOLOAD);
+ use Exporter ();
+-use Config;
+ use strict;
+
+-"\$Config{'archname'}-\$Config{'osvers'}" eq
+-"$Config{'archname'}-$Config{'osvers'}" or
+- die "Errno architecture ($Config{'archname'}-$Config{'osvers'}) does not match executable architecture (\$Config{'archname'}-\$Config{'osvers'})";
+-
+ \$VERSION = "$VERSION";
+ \$VERSION = eval \$VERSION;
+ \@ISA = qw(Exporter);
+--- perl-5.10.0.orig/ext/ODBM_File/hints/linux.pl
++++ perl-5.10.0/ext/ODBM_File/hints/linux.pl
+@@ -1,8 +1,2 @@
+ # uses GDBM dbm compatibility feature - at least on SuSE 8.0
+-$self->{LIBS} = ['-lgdbm'];
+-
+-# Debian/Ubuntu have /usr/lib/libgdbm_compat.so.3* but not this file,
+-# so linking may fail
+-if (-e '/usr/lib/libgdbm_compat.so' or -e '/usr/lib64/libgdbm_compat.so') {
+- $self->{LIBS}->[0] .= ' -lgdbm_compat';
+-}
++$self->{LIBS} = ['-lgdbm_compat'];
+--- perl-5.10.0.orig/ext/B/B/Deparse.pm
++++ perl-5.10.0/ext/B/B/Deparse.pm
+@@ -1456,7 +1456,6 @@
+ my %ignored_hints = (
+ 'open<' => 1,
+ 'open>' => 1,
+- 'v_string' => 1,
+ );
+
+ sub declare_hinthash {
+--- perl-5.10.0.orig/ext/DB_File/version.c
++++ perl-5.10.0/ext/DB_File/version.c
+@@ -48,12 +48,14 @@
+
+ (void)db_version(&Major, &Minor, &Patch) ;
+
++#ifndef DEBIAN
+ /* Check that the versions of db.h and libdb.a are the same */
+ if (Major != DB_VERSION_MAJOR || Minor != DB_VERSION_MINOR
+ || Patch != DB_VERSION_PATCH)
+ croak("\nDB_File needs compatible versions of libdb & db.h\n\tyou have db.h version %d.%d.%d and libdb version %d.%d.%d\n",
+ DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
+ Major, Minor, Patch) ;
++#endif /* DEBIAN */
+
+ /* check that libdb is recent enough -- we need 2.3.4 or greater */
+ if (Major == 2 && (Minor < 3 || (Minor == 3 && Patch < 4)))
+--- perl-5.10.0.orig/ext/Sys/Syslog/Syslog.pm
++++ perl-5.10.0/ext/Sys/Syslog/Syslog.pm
+@@ -741,7 +741,7 @@
+
+ my $rin = '';
+ vec($rin, fileno(SYSLOG), 1) = 1;
+- my $ret = select $rin, undef, $rin, 0.25;
++ my $ret = select $rin, undef, $rin, 0;
+ return ($ret ? 0 : 1);
+ }
+
+--- perl-5.10.0.orig/ext/Sys/Syslog/t/syslog.t
++++ perl-5.10.0/ext/Sys/Syslog/t/syslog.t
+@@ -189,6 +189,9 @@
+ skip "the 'unix' mechanism works, so the tests will likely fail with the 'stream' mechanism", 10
+ if grep {/unix/} @passed;
+
++ skip "can't connect to Unix socket: _PATH_LOG unavailable", 10
++ unless -e Sys::Syslog::_PATH_LOG();
++
+ # setlogsock() with "stream" and an undef path
+ $r = eval { setlogsock("stream", undef ) } || '';
+ is( $@, '', "setlogsock() called, with 'stream' and an undef path" );
+--- perl-5.10.0.orig/ext/PerlIO/via/via.xs
++++ perl-5.10.0/ext/PerlIO/via/via.xs
+@@ -89,7 +89,7 @@
+ if (!s->fh) {
+ GV *gv = newGVgen(HvNAME_get(s->stash));
+ GvIOp(gv) = newIO();
+- s->fh = newRV_noinc((SV *) gv);
++ s->fh = newRV((SV *) gv);
+ s->io = GvIOp(gv);
+ }
+ IoIFP(s->io) = PerlIONext(f);
+--- perl-5.10.0.orig/ext/Time/HiRes/t/HiRes.t
++++ perl-5.10.0/ext/Time/HiRes/t/HiRes.t
+@@ -68,7 +68,7 @@
+
+ my $have_alarm = $Config{d_alarm};
+ my $have_fork = $Config{d_fork};
+-my $waitfor = 180; # 30-45 seconds is normal (load affects this).
++my $waitfor = 300; # 30-45 seconds is normal (load affects this).
+ my $timer_pid;
+ my $TheEnd;
+
+--- perl-5.10.0.orig/ext/IO/lib/IO/Socket/INET.pm
++++ perl-5.10.0/ext/IO/lib/IO/Socket/INET.pm
+@@ -27,7 +27,7 @@
+ );
+ my %proto_number;
+ $proto_number{tcp} = Socket::IPPROTO_TCP() if defined &Socket::IPPROTO_TCP;
+-$proto_number{upd} = Socket::IPPROTO_UDP() if defined &Socket::IPPROTO_UDP;
++$proto_number{udp} = Socket::IPPROTO_UDP() if defined &Socket::IPPROTO_UDP;
+ $proto_number{icmp} = Socket::IPPROTO_ICMP() if defined &Socket::IPPROTO_ICMP;
+ my %proto_name = reverse %proto_number;
+
+--- perl-5.10.0.orig/ext/Encode/Encode.pm
++++ perl-5.10.0/ext/Encode/Encode.pm
+@@ -734,7 +734,7 @@
+
+ =back
+
+-=Head2 coderef for CHECK
++=head2 coderef for CHECK
+
+ As of Encode 2.12 CHECK can also be a code reference which takes the
+ ord value of unmapped caharacter as an argument and returns a string
+--- perl-5.10.0.orig/ext/Encode/bin/enc2xs
++++ perl-5.10.0/ext/Encode/bin/enc2xs
+@@ -924,11 +924,11 @@
+ sub find_e2x{
+ eval { require File::Find; };
+ my (@inc, %e2x_dir);
+- for my $inc (@INC){
++ for my $inc (grep -d, @INC){
+ push @inc, $inc unless $inc eq '.'; #skip current dir
+ }
+ File::Find::find(
+- sub {
++ { wanted => sub {
+ my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
+ $atime,$mtime,$ctime,$blksize,$blocks)
+ = lstat($_) or return;
+@@ -938,7 +938,7 @@
+ $e2x_dir{$File::Find::dir} ||= $mtime;
+ }
+ return;
+- }, @inc);
++ }, follow => 1}, @inc);
+ warn join("\n", keys %e2x_dir), "\n";
+ for my $d (sort {$e2x_dir{$a} <=> $e2x_dir{$b}} keys %e2x_dir){
+ $_E2X = $d;
+@@ -1005,7 +1005,7 @@
+ $LocalMod{$enc} ||= $mod;
+ }
+ };
+- File::Find::find({wanted => $wanted}, @INC);
++ File::Find::find({wanted => $wanted, follow => 1}, grep -d, @INC);
+ $_ModLines = "";
+ for my $enc ( sort keys %LocalMod ) {
+ $_ModLines .=
+--- perl-5.10.0.orig/utils/h2xs.PL
++++ perl-5.10.0/utils/h2xs.PL
+@@ -901,6 +901,7 @@
+
+ # Remove C and C++ comments
+ $src =~ s#/\*[^*]*\*+([^/*][^*]*\*+)*/|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)#$2#gs;
++ $src =~ s#//.*$##gm;
+
+ while ($src =~ /\benum\s*([\w_]*)\s*\{\s([^}]+)\}/gsc) {
+ my ($enum_name, $enum_body) = ($1, $2);
+@@ -912,7 +913,7 @@
+ my ($key, $declared_val) = $item =~ /(\w+)\s*(?:=\s*(.*))?/;
+ $val = defined($declared_val) && length($declared_val) ? $declared_val : 1 + $val;
+ $seen_define{$key} = $val;
+- $const_names{$key}++;
++ $const_names{$key} = { name => $key, macro => 1 };
+ }
+ } # while (...)
+ } # if (!defined $opt_e or $opt_e)
+@@ -1076,7 +1077,14 @@
+ }
+ }
+ }
+-my @const_names = sort keys %const_names;
++my (@const_specs, @const_names);
++
++for (sort(keys(%const_names))) {
++ my $v = $const_names{$_};
++
++ push(@const_specs, ref($v) ? $v : $_);
++ push(@const_names, $_);
++}
+
+ -d $modpmdir || mkpath([$modpmdir], 0, 0775);
+ open(PM, ">$modpmname") || die "Can't create $ext$modpname/$modpmname: $!\n";
+@@ -1465,7 +1473,7 @@
+ XS_FILE => $xsfallback,
+ DEFAULT_TYPE => $opt_t,
+ NAME => $module,
+- NAMES => \@const_names,
++ NAMES => \@const_specs,
+ );
+ print XS "#include \"$constscfname\"\n";
+ }
+@@ -1950,7 +1958,7 @@
+ XS_FILE => $constsxsfname,
+ DEFAULT_TYPE => $opt_t,
+ NAME => $module,
+- NAMES => \@const_names,
++ NAMES => \@const_specs,
+ );
+ print PL <<"END";
+ if (eval {require ExtUtils::Constant; 1}) {
+--- perl-5.10.0.orig/utils/perlivp.PL
++++ perl-5.10.0/utils/perlivp.PL
+@@ -142,6 +142,7 @@
+ my $INC_there = 0;
+ foreach (@INC) {
+ next if $_ eq '.'; # skip -d test here
++ next if m|/usr/local|;
+ if ($^O eq 'MacOS') {
+ next if $_ eq ':'; # skip -d test here
+ next if $_ eq 'Dev:Pseudo:'; # why is this in @INC?
+--- perl-5.10.0.orig/utils/h2ph.PL
++++ perl-5.10.0/utils/h2ph.PL
+@@ -85,7 +85,7 @@
+ }
+
+ my ($t, $tab, %curargs, $new, $eval_index, $dir, $name, $args, $outfile);
+-my ($incl, $incl_type, $next);
++my ($incl, $incl_type, $incl_quote, $next);
+ while (defined (my $file = next_file())) {
+ if (-l $file and -d $file) {
+ link_if_possible($file) if ($opt_l);
+@@ -123,7 +123,7 @@
+
+ print OUT
+ "require '_h2ph_pre.ph';\n\n",
+- "no warnings 'redefine';\n\n";
++ "no warnings qw(redefine misc);\n\n";
+
+ while (defined (local $_ = next_line($file))) {
+ if (s/^\s*\#\s*//) {
+@@ -186,9 +186,10 @@
+ print OUT $t,"unless(defined(\&$name)) {\n sub $name () {\t",$new,";}\n}\n";
+ }
+ }
+- } elsif (/^(include|import|include_next)\s*[<\"](.*)[>\"]/) {
++ } elsif (/^(include|import|include_next)\s*([<\"])(.*)[>\"]/) {
+ $incl_type = $1;
+- $incl = $2;
++ $incl_quote = $2;
++ $incl = $3;
+ if (($incl_type eq 'include_next') ||
+ ($opt_e && exists($bad_file{$incl}))) {
+ $incl =~ s/\.h$/.ph/;
+@@ -221,6 +222,10 @@
+ "warn(\$\@) if \$\@;\n");
+ } else {
+ $incl =~ s/\.h$/.ph/;
++ # copy the prefix in the quote syntax (#include "x.h") case
++ if ($incl !~ m|/| && $incl_quote eq q{"} && $file =~ m|^(.*)/|) {
++ $incl = "$1/$incl";
++ }
+ print OUT $t,"require '$incl';\n";
+ }
+ } elsif (/^ifdef\s+(\w+)/) {
+@@ -724,8 +729,13 @@
+ $line .= <HEADER>;
+ }
+
+- if ($line =~ /^#\s*include\s+<(.*?)>/) {
+- push(@ARGV, $1) unless $Is_converted{$1};
++ if ($line =~ /^#\s*include\s+([<"])(.*?)[>"]/) {
++ my ($delimiter, $new_file) = ($1, $2);
++ # copy the prefix in the quote syntax (#include "x.h") case
++ if ($delimiter eq q{"} && $file =~ m|^(.*)/|) {
++ $new_file = "$1/$new_file";
++ }
++ push(@ARGV, $new_file) unless $Is_converted{$new_file};
+ }
+ }
+ close HEADER;
+@@ -733,7 +743,7 @@
+
+
+ # Determine include directories; $Config{usrinc} should be enough for (all
+-# non-GCC?) C compilers, but gcc uses an additional include directory.
++# non-GCC?) C compilers, but gcc uses additional include directories.
+ sub inc_dirs
+ {
+ my $from_gcc = `LC_ALL=C $Config{cc} -v 2>&1`;
+@@ -745,7 +755,7 @@
+ $from_gcc = '';
+ };
+ };
+- length($from_gcc) ? ($from_gcc, $Config{usrinc}) : ($Config{usrinc});
++ length($from_gcc) ? ($from_gcc, $from_gcc . "-fixed", $Config{usrinc}) : ($Config{usrinc});
+ }
+
+
+--- perl-5.10.0.orig/pod/perldoc.pod
++++ perl-5.10.0/pod/perldoc.pod
+@@ -222,6 +222,10 @@
+ even more descriptive output than the C<-v> switch does -- the higher the
+ number, the more it emits.
+
++=head1 SEE ALSO
++
++L<perlpod>, L<Pod::Perldoc>
++
+ =head1 AUTHOR
+
+ Current maintainer: Sean M. Burke, <sburke@cpan.org>
+--- perl-5.10.0.orig/pod/perlapi.pod
++++ perl-5.10.0/pod/perlapi.pod
+@@ -1193,6 +1193,50 @@
+
+ =back
+
++=head1 Functions in file perl.h
++
++
++=over 8
++
++=item PERL_SYS_INIT
++X<PERL_SYS_INIT>
++
++Provides system-specific tune up of the C runtime environment necessary to
++run Perl interpreters. This should be called only once, before creating
++any Perl interpreters.
++
++ void PERL_SYS_INIT(int argc, char** argv)
++
++=for hackers
++Found in file perl.h
++
++=item PERL_SYS_INIT3
++X<PERL_SYS_INIT3>
++
++Provides system-specific tune up of the C runtime environment necessary to
++run Perl interpreters. This should be called only once, before creating
++any Perl interpreters.
++
++ void PERL_SYS_INIT3(int argc, char** argv, char** env)
++
++=for hackers
++Found in file perl.h
++
++=item PERL_SYS_TERM
++X<PERL_SYS_TERM>
++
++Provides system-specific clean up of the C runtime environment after
++running Perl interpreters. This should be called only once, after
++freeing any remaining Perl interpreters.
++
++ void PERL_SYS_TERM()
++
++=for hackers
++Found in file perl.h
++
++
++=back
++
+ =head1 Functions in file pp_ctl.c
+
+
+--- perl-5.10.0.orig/pod/perlpodspec.pod
++++ perl-5.10.0/pod/perlpodspec.pod
+@@ -338,7 +338,7 @@
+ before any non-US-ASCII data!), declares that this document is
+ encoded in the encoding I<encodingname>, which must be
+ an encoding name that L<Encoding> recognizes. (Encoding's list
+-of supported encodings, in L<Encoding::Supported>, is useful here.)
++of supported encodings, in L<Encode::Supported>, is useful here.)
+ If the Pod parser cannot decode the declared encoding, it
+ should emit a warning and may abort parsing the document
+ altogether.
+--- perl-5.10.0.orig/pod/pod2man.PL
++++ perl-5.10.0/pod/pod2man.PL
+@@ -36,9 +36,9 @@
+ print OUT <<'!NO!SUBS!';
+
+ # pod2man -- Convert POD data to formatted *roff input.
+-# $Id: pod2man.PL,v 1.16 2006-01-21 01:53:55 eagle Exp $
+ #
+-# Copyright 1999, 2000, 2001, 2004, 2006 by Russ Allbery <rra@stanford.edu>
++# Copyright 1999, 2000, 2001, 2004, 2006, 2008
++# Russ Allbery <rra@stanford.edu>
+ #
+ # This program is free software; you may redistribute it and/or modify it
+ # under the same terms as Perl itself.
+@@ -66,7 +66,7 @@
+ GetOptions (\%options, 'section|s=s', 'release|r:s', 'center|c=s',
+ 'date|d=s', 'fixed=s', 'fixedbold=s', 'fixeditalic=s',
+ 'fixedbolditalic=s', 'name|n=s', 'official|o', 'quotes|q=s',
+- 'lax|l', 'help|h', 'verbose|v') or exit 1;
++ 'lax|l', 'help|h', 'verbose|v', 'utf8|u') or exit 1;
+ pod2usage (0) if $options{help};
+
+ # Official sets --center, but don't override things explicitly set.
+@@ -104,7 +104,7 @@
+ [B<--center>=I<string>] [B<--date>=I<string>] [B<--fixed>=I<font>]
+ [B<--fixedbold>=I<font>] [B<--fixeditalic>=I<font>]
+ [B<--fixedbolditalic>=I<font>] [B<--name>=I<name>] [B<--official>]
+-[B<--lax>] [B<--quotes>=I<quotes>] [B<--verbose>]
++[B<--lax>] [B<--quotes>=I<quotes>] [B<--utf8>] [B<--verbose>]
+ [I<input> [I<output>] ...]
+
+ pod2man B<--help>
+@@ -243,6 +243,28 @@
+ By default, section 1 will be used unless the file ends in .pm in which case
+ section 3 will be selected.
+
++=item B<-u>, B<--utf8>
++
++By default, B<pod2man> produces the most conservative possible *roff
++output to try to ensure that it will work with as many different *roff
++implementations as possible. Many *roff implementations cannot handle
++non-ASCII characters, so this means all non-ASCII characters are converted
++either to a *roff escape sequence that tries to create a properly accented
++character (at least for troff output) or to C<X>.
++
++This option says to instead output literal UTF-8 characters. If your
++*roff implementation can handle it, this is the best output format to use
++and avoids corruption of documents containing non-ASCII characters.
++However, be warned that *roff source with literal UTF-8 characters is not
++supported by many implementations and may even result in segfaults and
++other bad behavior.
++
++Be aware that, when using this option, the input encoding of your POD
++source must be properly declared unless it is US-ASCII or Latin-1. POD
++input without an C<=encoding> command will be assumed to be in Latin-1,
++and if it's actually in UTF-8, the output will be double-encoded. See
++L<perlpod(1)> for more information on the C<=encoding> command.
++
+ =item B<-v>, B<--verbose>
+
+ Print out the name of each output file as it is being generated.
+@@ -518,8 +540,8 @@
+
+ =head1 SEE ALSO
+
+-L<Pod::Man>, L<Pod::Simple>, L<man(1)>, L<nroff(1)>, L<podchecker(1)>,
+-L<troff(1)>, L<man(7)>
++L<Pod::Man>, L<Pod::Simple>, L<man(1)>, L<nroff(1)>, L<perlpod(1)>,
++L<podchecker(1)>, L<troff(1)>, L<man(7)>
+
+ The man page documenting the an macro set may be L<man(5)> instead of
+ L<man(7)> on your system.
+@@ -537,7 +559,8 @@
+
+ =head1 COPYRIGHT AND LICENSE
+
+-Copyright 1999, 2000, 2001, 2004, 2006 by Russ Allbery <rra@stanford.edu>.
++Copyright 1999, 2000, 2001, 2004, 2006, 2008 Russ Allbery
++<rra@stanford.edu>.
+
+ This program is free software; you may redistribute it and/or modify it
+ under the same terms as Perl itself.
+--- perl-5.10.0.orig/pod/perlre.pod
++++ perl-5.10.0/pod/perlre.pod
+@@ -102,7 +102,7 @@
+
+ =head3 Metacharacters
+
+-The patterns used in Perl pattern matching evolved from the ones supplied in
++The patterns used in Perl pattern matching evolved from those supplied in
+ the Version 8 regex routines. (The routines are derived
+ (distantly) from Henry Spencer's freely redistributable reimplementation
+ of the V8 routines.) See L<Version 8 Regular Expressions> for
+--- perl-5.10.0.orig/pod/perlxs.pod
++++ perl-5.10.0/pod/perlxs.pod
+@@ -1212,6 +1212,12 @@
+
+ VERSIONCHECK: DISABLE
+
++Note that if the version of the PM module is an NV (a floating point
++number), it will be stringified with a possible loss of precision
++(currently chopping to nine decimal places) so that it may not match
++the version of the XS module anymore. Quoting the $VERSION declaration
++to make it a string is recommended if long version numbers are used.
++
+ =head2 The PROTOTYPES: Keyword
+
+ The PROTOTYPES: keyword corresponds to B<xsubpp>'s C<-prototypes> and
+--- perl-5.10.0.orig/pod/perlembed.pod
++++ perl-5.10.0/pod/perlembed.pod
+@@ -196,11 +196,20 @@
+
+ Notice that we don't use the C<env> pointer. Normally handed to
+ C<perl_parse> as its final argument, C<env> here is replaced by
+-C<NULL>, which means that the current environment will be used. The macros
+-PERL_SYS_INIT3() and PERL_SYS_TERM() provide system-specific tune up
+-of the C runtime environment necessary to run Perl interpreters; since
+-PERL_SYS_INIT3() may change C<env>, it may be more appropriate to provide
+-C<env> as an argument to perl_parse().
++C<NULL>, which means that the current environment will be used.
++
++The macros PERL_SYS_INIT3() and PERL_SYS_TERM() provide system-specific
++tune up of the C runtime environment necessary to run Perl interpreters;
++they should only be called once regardless of how many interpreters you
++create or destroy. Call PERL_SYS_INIT3() before you create your first
++interpreter, and PERL_SYS_TERM() after you free your last interpreter.
++
++Since PERL_SYS_INIT3() may change C<env>, it may be more appropriate to
++provide C<env> as an argument to perl_parse().
++
++Also notice that no matter what arguments you pass to perl_parse(),
++PERL_SYS_INIT3() must be invoked on the C main() argc, argv and env and
++only once.
+
+ Now compile this program (I'll call it I<interp.c>) into an executable:
+
+--- perl-5.10.0.orig/pod/perlfunc.pod
++++ perl-5.10.0/pod/perlfunc.pod
+@@ -1556,6 +1556,10 @@
+ is implemented. It is also Perl's exception trapping mechanism, where
+ the die operator is used to raise exceptions.
+
++If you want to trap errors when loading an XS module, some problems with
++the binary interface (such as Perl version skew) may be fatal even with
++C<eval> unless C<$ENV{PERL_DL_NONLAZY}> is set. See L<perlrun>.
++
+ If the code to be executed doesn't vary, you may use the eval-BLOCK
+ form to trap run-time errors without incurring the penalty of
+ recompiling each time. The error, if any, is still returned in C<$@>.
+@@ -5214,7 +5218,7 @@
+ limited control of the sort. Its rather blunt control of the
+ underlying algorithm may not persist into future Perls, but the
+ ability to characterize the input or output in implementation
+-independent ways quite probably will. See L<sort>.
++independent ways quite probably will. See L<the sort pragma|sort>.
+
+ Examples:
+
+@@ -6855,22 +6859,16 @@
+
+ Specifying VERSION as a literal of the form v5.6.1 should generally be
+ avoided, because it leads to misleading error messages under earlier
+-versions of Perl that do not support this syntax. The equivalent numeric
+-version should be used instead.
+-
+-Alternatively, you can use a numeric version C<use 5.006> followed by a
+-v-string version like C<use v5.10.1>, to avoid the unintuitive C<use
+-5.010_001>. (older perl versions fail gracefully at the first C<use>,
+-later perl versions understand the v-string syntax in the second).
++versions of Perl (that is, prior to 5.6.0) that do not support this
++syntax. The equivalent numeric version should be used instead.
+
+ use v5.6.1; # compile time version check
+ use 5.6.1; # ditto
+ use 5.006_001; # ditto; preferred for backwards compatibility
+- use 5.006; use 5.6.1; # ditto, for compatibility and readability
+
+ This is often useful if you need to check the current Perl version before
+-C<use>ing library modules that have changed in incompatible ways from
+-older versions of Perl. (We try not to do this more than we have to.)
++C<use>ing library modules that won't work with older versions of Perl.
++(We try not to do this more than we have to.)
+
+ Also, if the specified perl version is greater than or equal to 5.9.5,
+ C<use VERSION> will also load the C<feature> pragma and enable all
+--- perl-5.10.0.orig/pod/perldiag.pod
++++ perl-5.10.0/pod/perldiag.pod
+@@ -4935,18 +4935,6 @@
+ (W misc) The version string contains invalid characters at the end, which
+ are being ignored.
+
+-=item v-string in use/require is non-portable
+-
+-(W portable) The use of v-strings is non-portable to older, pre-5.6, Perls.
+-If you want your scripts to be backward portable, use the floating
+-point version number: for example, instead of C<use 5.6.1> say
+-C<use 5.006_001>. This of course won't make older Perls suddenly start
+-understanding newer features, but at least they will show a sensible
+-error message indicating the required minimum version.
+-
+-This warning is suppressed if the C<use 5.x.y> is preceded by a
+-C<use 5.006> (see C<use VERSION> in L<perlfunc/use>).
+-
+ =item Warning: something's wrong
+
+ (W) You passed warn() an empty string (the equivalent of C<warn "">) or
+--- perl-5.10.0.orig/pod/perllol.pod
++++ perl-5.10.0/pod/perllol.pod
+@@ -276,7 +276,7 @@
+
+ @newAoA = map { [ @{ $AoA[$_] } [ 7..12 ] ] } 4 .. 8;
+
+-Although if your manager accused of seeking job security (or rapid
++Although if your manager accused you of seeking job security (or rapid
+ insecurity) through inscrutable code, it would be hard to argue. :-)
+ If I were you, I'd put that in a function:
+
+
diff --git a/base/perl/perl-5.8.6-picdl.patch0 b/base/perl/perl-5.8.6-picdl.patch0
new file mode 100644
index 000000000..f69a6800c
--- /dev/null
+++ b/base/perl/perl-5.8.6-picdl.patch0
@@ -0,0 +1,13 @@
+--- Makefile.SH.orig 2003-11-29 01:16:15.000000000 -0800
++++ Makefile.SH 2003-11-29 01:16:52.000000000 -0800
+@@ -129,8 +129,8 @@
+
+ ;;
+
+-*) pldlflags=''
+- static_target='static'
++*) pldlflags="$cccdlflags"
++ static_target='static_pic'
+ ;;
+ esac
+