From e1baeeeda2217d5a7358b7b4b309a770e46b1059 Mon Sep 17 00:00:00 2001 From: Tom Callaway Date: Fri, 7 Mar 2008 22:11:53 +0000 Subject: [PATCH] change 32891, sitedir/sitearch in /usr/local --- 32891.patch | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++ perl.spec | 16 ++++-- 2 files changed, 152 insertions(+), 4 deletions(-) create mode 100644 32891.patch diff --git a/32891.patch b/32891.patch new file mode 100644 index 0000000..d9981db --- /dev/null +++ b/32891.patch @@ -0,0 +1,140 @@ +--- perl-5.10.0/op.c 2007-12-18 05:47:07.000000000 -0500 ++++ perl-5.10.0/op.c 2007-12-31 11:15:57.000000000 -0500 +@@ -3992,6 +3992,7 @@ + static const char no_list_state[] = "Initialization of state variables" + " in list context currently forbidden"; + OP *curop; ++ bool maybe_common_vars = TRUE; + + PL_modcount = 0; + /* Grandfathering $[ assignment here. Bletch.*/ +@@ -4009,6 +4010,65 @@ + o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop); + o->op_private = (U8)(0 | (flags >> 8)); + ++ if ((left->op_type == OP_LIST ++ || (left->op_type == OP_NULL && left->op_targ == OP_LIST))) ++ { ++ OP* lop = ((LISTOP*)left)->op_first; ++ maybe_common_vars = FALSE; ++ while (lop) { ++ if (lop->op_type == OP_PADSV || ++ lop->op_type == OP_PADAV || ++ lop->op_type == OP_PADHV || ++ lop->op_type == OP_PADANY) { ++ if (!(lop->op_private & OPpLVAL_INTRO)) ++ maybe_common_vars = TRUE; ++ ++ if (lop->op_private & OPpPAD_STATE) { ++ if (left->op_private & OPpLVAL_INTRO) { ++ /* Each variable in state($a, $b, $c) = ... */ ++ } ++ else { ++ /* Each state variable in ++ (state $a, my $b, our $c, $d, undef) = ... */ ++ } ++ yyerror(no_list_state); ++ } else { ++ /* Each my variable in ++ (state $a, my $b, our $c, $d, undef) = ... */ ++ } ++ } else if (lop->op_type == OP_UNDEF || ++ lop->op_type == OP_PUSHMARK) { ++ /* undef may be interesting in ++ (state $a, undef, state $c) */ ++ } else { ++ /* Other ops in the list. */ ++ maybe_common_vars = TRUE; ++ } ++ lop = lop->op_sibling; ++ } ++ } ++ else if ((left->op_private & OPpLVAL_INTRO) ++ && ( left->op_type == OP_PADSV ++ || left->op_type == OP_PADAV ++ || left->op_type == OP_PADHV ++ || left->op_type == OP_PADANY)) ++ { ++ maybe_common_vars = FALSE; ++ if (left->op_private & OPpPAD_STATE) { ++ /* All single variable list context state assignments, hence ++ state ($a) = ... ++ (state $a) = ... ++ state @a = ... ++ state (@a) = ... ++ (state @a) = ... ++ state %a = ... ++ state (%a) = ... ++ (state %a) = ... ++ */ ++ yyerror(no_list_state); ++ } ++ } ++ + /* PL_generation sorcery: + * an assignment like ($a,$b) = ($c,$d) is easier than + * ($a,$b) = ($c,$a), since there is no need for temporary vars. +@@ -4023,7 +4083,7 @@ + * to store these values, evil chicanery is done with SvUVX(). + */ + +- { ++ if (maybe_common_vars) { + OP *lastop = o; + PL_generation++; + for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) { +@@ -4084,54 +4144,6 @@ + o->op_private |= OPpASSIGN_COMMON; + } + +- if ((left->op_type == OP_LIST +- || (left->op_type == OP_NULL && left->op_targ == OP_LIST))) { +- OP* lop = ((LISTOP*)left)->op_first; +- while (lop) { +- if (lop->op_type == OP_PADSV || +- lop->op_type == OP_PADAV || +- lop->op_type == OP_PADHV || +- lop->op_type == OP_PADANY) { +- if (lop->op_private & OPpPAD_STATE) { +- if (left->op_private & OPpLVAL_INTRO) { +- /* Each variable in state($a, $b, $c) = ... */ +- } +- else { +- /* Each state variable in +- (state $a, my $b, our $c, $d, undef) = ... */ +- } +- yyerror(no_list_state); +- } else { +- /* Each my variable in +- (state $a, my $b, our $c, $d, undef) = ... */ +- } +- } else { +- /* Other ops in the list. undef may be interesting in +- (state $a, undef, state $c) */ +- } +- lop = lop->op_sibling; +- } +- } +- else if (((left->op_private & (OPpLVAL_INTRO | OPpPAD_STATE)) +- == (OPpLVAL_INTRO | OPpPAD_STATE)) +- && ( left->op_type == OP_PADSV +- || left->op_type == OP_PADAV +- || left->op_type == OP_PADHV +- || left->op_type == OP_PADANY)) +- { +- /* All single variable list context state assignments, hence +- state ($a) = ... +- (state $a) = ... +- state @a = ... +- state (@a) = ... +- (state @a) = ... +- state %a = ... +- state (%a) = ... +- (state %a) = ... +- */ +- yyerror(no_list_state); +- } +- + if (right && right->op_type == OP_SPLIT && !PL_madskills) { + OP* tmpop = ((LISTOP*)right)->op_first; + if (tmpop && (tmpop->op_type == OP_PUSHRE)) { diff --git a/perl.spec b/perl.spec index 9c58ac0..7e49c54 100644 --- a/perl.spec +++ b/perl.spec @@ -16,7 +16,7 @@ Name: perl Version: %{perl_version} -Release: 7%{?dist} +Release: 8%{?dist} Epoch: %{perl_epoch} Summary: The Perl programming language Group: Development/Languages @@ -62,6 +62,9 @@ Patch9: perl-5.10.0-SysSyslog-0.24.patch # systems. Patch10: perl-5.10.0-x86_64-io-test-failure.patch +# http://public.activestate.com/cgi-bin/perlbrowse/p/32891 +Patch11: 32891.patch + BuildRoot: %{_tmppath}/%{name}-%{perl_version}-%{release}-root-%(%{__id_u} -n) BuildRequires: tcsh, dos2unix, man, groff BuildRequires: gdbm-devel, db4-devel, zlib-devel @@ -131,6 +134,7 @@ Provides: perl-File-Temp = 0.18 Obsoletes: perl-File-Temp < 0.18 Conflicts: perl-File-Temp + Requires: perl-libs = %{perl_epoch}:%{perl_version}-%{release} Requires: db4 = %{db4_major}.%{db4_minor}.%{db4_patch} @@ -778,6 +782,7 @@ upstream tarball from perl.org. %patch8 -p1 %patch9 -p1 %patch10 -p1 +%patch11 -p1 # # Candidates for doc recoding (need case by case review): @@ -849,10 +854,10 @@ echo "RPM Build arch: %{_arch}" %ifarch %{multilib_64_archs} -Dlibpth="/usr/local/lib64 /lib64 %{_prefix}/lib64" \ -Dprivlib="%{_prefix}/lib/perl5/%{perl_version}" \ - -Dsitelib="%{_prefix}/lib/perl5/site_perl/%{perl_version}" \ + -Dsitelib="%{_prefix}/local/lib/perl5/site_perl/%{perl_version}" \ -Dvendorlib="%{_prefix}/lib/perl5/vendor_perl/%{perl_version}" \ -Darchlib="%{_libdir}/perl5/%{perl_version}/%{perl_archname}" \ - -Dsitearch="%{_libdir}/perl5/site_perl/%{perl_version}/%{perl_archname}" \ + -Dsitearch="%{_prefix}/local/%{_lib}/perl5/site_perl/%{perl_version}/%{perl_archname}" \ -Dvendorarch="%{_libdir}/perl5/vendor_perl/%{perl_version}/%{perl_archname}" \ %endif -Darchname=%{_arch}-%{_os} \ @@ -892,7 +897,6 @@ make install DESTDIR=$RPM_BUILD_ROOT %ifarch %{multilib_64_archs} mkdir -p -m 755 $RPM_BUILD_ROOT%{_prefix}/lib/perl5/%{perl_version} -mkdir -p -m 755 $RPM_BUILD_ROOT%{_prefix}/lib/perl5/site_perl/%{perl_version} mkdir -p -m 755 $RPM_BUILD_ROOT%{_prefix}/lib/perl5/vendor_perl/%{perl_version} mkdir -p -m 755 $RPM_BUILD_ROOT%{_prefix}/lib/perl5/vendor_perl/%{perl_version}/auto %endif @@ -1564,6 +1568,10 @@ make test # Old changelog entries are preserved in CVS. %changelog +* Fri Mar 7 2008 Tom "spot" Callaway 4:5.10.0-8 +- use /usr/local for sitelib/sitearch dirs +- patch 32891 for significant performance improvement + * Fri Feb 22 2008 Stepan Kasal - 4:5.10.0-7 - Add perl-File-Temp provides/obsoletes/conflicts (#433836), reported by Bill McGonigle