# ignore bug*.pl
bug*.pl
+# Exists during ./Configure
+/UU
+
# files produced by './configure.gnu' on a Linux machine
Makefile.old
/Makefile
Anton Berezin <tobez@tobez.org>
Anton Tagunov <tagunov@motor.ru>
Archer Sully <archer@meer.net>
+Aristotle Pagaltzis <pagaltzis@gmx.de>
Arjen Laarhoven <arjen@nl.demon.net>
Arne Ahrend <aahrend@web.de>
Arnold D. Robbins <arnold@gnu.ai.mit.edu>
Craig A. Berry <craigberry@mac.com>
Craig Milo Rogers <Rogers@ISI.EDU>
Curtis Poe <cp@onsitetech.com>
+Curtis Jewell <perl@csjewell.fastmail.us>
Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Dale Amon <amon@vnl.com>
Damian Conway <damian@conway.org>
Nicholas Clark <nick@ccl4.org>
Nicholas Oxhøj
Nicholas Perez <nperez@cpan.org>
+Nick Cleaton <nick@cleaton.net>
Nick Duffek
Nick Gianniotis
Nick Ing-Simmons
Spiros Denaxas <spiros@lokku.com>
Sreeji K Das <sreeji_k@yahoo.com>
Stas Bekman <stas@stason.org>
-Steffen Müller <7k8lrvf02@sneakemail.com>
+Steffen Müller <smueller@cpan.org>
Steffen Ullrich <coyote.frank@gmx.net>
Stéphane Payrard <stef@mongueurs.net>
Stepan Kasal <skasal@redhat.com>
# $Id: Head.U 6 2006-08-25 22:21:46Z rmanfredi $
#
-# Generated on Sat Feb 13 19:05:42 CET 2010 [metaconfig 3.5 PL0]
+# Generated on Mon Mar 29 10:12:43 CEST 2010 [metaconfig 3.5 PL0]
# (with additional metaconfig patches by perlbug@perl.org)
cat >c1$$ <<EOF
d_pipe=''
d_poll=''
d_portable=''
+d_prctl=''
+d_prctl_set_name=''
d_procselfexe=''
procselfexe=''
d_old_pthread_create_joinable=''
set poll d_poll
eval $inlibc
+: see if prctl exists
+set prctl d_prctl
+eval $inlibc
+
+: see if prctl supports PR_SET_NAME
+d_prctl_set_name=$undef
+case $d_prctl in
+ $define)
+ $cat >try.c <<EOM
+#include <sys/prctl.h>
+
+int main (int argc, char *argv[])
+{
+ return (prctl (PR_SET_NAME, "Test"));
+ } /* main */
+EOM
+ set try
+ if eval $compile_ok && $run ./try; then
+ echo "Your prctl (PR_SET_NAME, ...) works"
+ d_prctl_set_name=$define
+ fi
+ $rm_try
+ ;;
+ esac
+
: see if readlink exists
set readlink d_readlink
eval $inlibc
d_pipe='$d_pipe'
d_poll='$d_poll'
d_portable='$d_portable'
+d_prctl='$d_prctl'
+d_prctl_set_name='$d_prctl_set_name'
d_printf_format_null='$d_printf_format_null'
d_procselfexe='$d_procselfexe'
d_pseudofork='$d_pseudofork'
aphostname='/bin/hostname'
api_revision='5'
api_subversion='0'
-api_version='11'
-api_versionstring='5.11.0'
+api_version='13'
+api_versionstring='5.13.0'
ar='ar'
-archlib='/usr/lib/perl5/5.11.5/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.11.5/armv4l-linux'
+archlib='/usr/lib/perl5/5.13.0/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.13.0/armv4l-linux'
archname64=''
archname='armv4l-linux'
archobjs=''
cat='cat'
cc='cc'
cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.11.5/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.13.0/armv4l-linux/CORE'
ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
ccname='arm-linux-gcc'
d_pipe='define'
d_poll='define'
d_portable='define'
+d_prctl='define'
+d_prctl_set_name='define'
d_printf_format_null='undef'
d_procselfexe='define'
d_pseudofork='undef'
inc_version_list_init='0'
incpath=''
inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.11.5/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.13.0/armv4l-linux'
installbin='./install_me_here/usr/bin'
installhtml1dir=''
installhtml3dir=''
installman3dir='./install_me_here/usr/share/man/man3'
installprefix='./install_me_here/usr'
installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.11.5'
+installprivlib='./install_me_here/usr/lib/perl5/5.13.0'
installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.11.5/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.13.0/armv4l-linux'
installsitebin='./install_me_here/usr/bin'
installsitehtml1dir=''
installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.11.5'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.13.0'
installsiteman1dir='./install_me_here/usr/share/man/man1'
installsiteman3dir='./install_me_here/usr/share/man/man3'
installsitescript='./install_me_here/usr/bin'
pr=''
prefix='/usr'
prefixexp='/usr'
-privlib='/usr/lib/perl5/5.11.5'
-privlibexp='/usr/lib/perl5/5.11.5'
+privlib='/usr/lib/perl5/5.13.0'
+privlibexp='/usr/lib/perl5/5.13.0'
procselfexe='"/proc/self/exe"'
prototype='define'
ptrsize='4'
sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0'
sig_size='68'
signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.11.5/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.11.5/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.13.0/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.13.0/armv4l-linux'
sitebin='/usr/bin'
sitebinexp='/usr/bin'
sitehtml1dir=''
sitehtml1direxp=''
sitehtml3dir=''
sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.11.5'
+sitelib='/usr/lib/perl5/site_perl/5.13.0'
sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.11.5'
+sitelibexp='/usr/lib/perl5/site_perl/5.13.0'
siteman1dir='/usr/share/man/man1'
siteman1direxp='/usr/share/man/man1'
siteman3dir='/usr/share/man/man3'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
-subversion='5'
+subversion='0'
sysman='/usr/share/man/man1'
tail=''
tar=''
vendorprefixexp=''
vendorscript=''
vendorscriptexp=''
-version='5.11.5'
-version_patchlevel_string='version 11 subversion 5'
+version='5.13.0'
+version_patchlevel_string='version 13 subversion 0'
versiononly='undef'
vi=''
voidflags='15'
config_args=''
config_argc=0
PERL_REVISION=5
-PERL_VERSION=11
-PERL_SUBVERSION=5
+PERL_VERSION=13
+PERL_SUBVERSION=0
PERL_API_REVISION=5
-PERL_API_VERSION=11
+PERL_API_VERSION=13
PERL_API_SUBVERSION=0
PERL_PATCHLEVEL=
PERL_CONFIG_SH=true
aphostname='/bin/hostname'
api_revision='5'
api_subversion='0'
-api_version='11'
-api_versionstring='5.11.0'
+api_version='13'
+api_versionstring='5.13.0'
ar='ar'
-archlib='/usr/lib/perl5/5.11.5/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.11.5/armv4l-linux'
+archlib='/usr/lib/perl5/5.13.0/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.13.0/armv4l-linux'
archname64=''
archname='armv4l-linux'
archobjs=''
cat='cat'
cc='arm-none-linux-gnueabi-gcc'
cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.11.5/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.13.0/armv4l-linux/CORE'
ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
ccname='arm-linux-gcc'
inc_version_list_init='0'
incpath=''
inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.11.5/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.13.0/armv4l-linux'
installbin='./install_me_here/usr/bin'
installhtml1dir=''
installhtml3dir=''
installman3dir='./install_me_here/usr/share/man/man3'
installprefix='./install_me_here/usr'
installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.11.5'
+installprivlib='./install_me_here/usr/lib/perl5/5.13.0'
installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.11.5/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.13.0/armv4l-linux'
installsitebin='./install_me_here/usr/bin'
installsitehtml1dir=''
installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.11.5'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.13.0'
installsiteman1dir='./install_me_here/usr/share/man/man1'
installsiteman3dir='./install_me_here/usr/share/man/man3'
installsitescript='./install_me_here/usr/bin'
pr=''
prefix='/usr'
prefixexp='/usr'
-privlib='/usr/lib/perl5/5.11.5'
-privlibexp='/usr/lib/perl5/5.11.5'
+privlib='/usr/lib/perl5/5.13.0'
+privlibexp='/usr/lib/perl5/5.13.0'
procselfexe='"/proc/self/exe"'
prototype='define'
ptrsize='4'
sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0'
sig_size='68'
signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.11.5/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.11.5/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.13.0/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.13.0/armv4l-linux'
sitebin='/usr/bin'
sitebinexp='/usr/bin'
sitehtml1dir=''
sitehtml1direxp=''
sitehtml3dir=''
sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.11.5'
+sitelib='/usr/lib/perl5/site_perl/5.13.0'
sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.11.5'
+sitelibexp='/usr/lib/perl5/site_perl/5.13.0'
siteman1dir='/usr/share/man/man1'
siteman1direxp='/usr/share/man/man1'
siteman3dir='/usr/share/man/man3'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
-subversion='5'
+subversion='0'
sysman='/usr/share/man/man1'
tail=''
tar=''
vendorprefixexp=''
vendorscript=''
vendorscriptexp=''
-version='5.11.5'
-version_patchlevel_string='version 11 subversion 5'
+version='5.13.0'
+version_patchlevel_string='version 13 subversion 0'
versiononly='undef'
vi=''
voidflags='15'
config_args=''
config_argc=0
PERL_REVISION=5
-PERL_VERSION=11
-PERL_SUBVERSION=5
+PERL_VERSION=13
+PERL_SUBVERSION=0
PERL_API_REVISION=5
-PERL_API_VERSION=11
+PERL_API_VERSION=13
PERL_API_SUBVERSION=0
PERL_PATCHLEVEL=
PERL_CONFIG_SH=true
L<"Reporting Problems"> below.
For information on what's new in this release, see the
-pod/perl5116delta.pod file. For more information about how to find more
+pod/perl5131delta.pod file. For more information about how to find more
specific detail about changes, see the Changes file.
=head1 DESCRIPTION
=head2 Changes and Incompatibilities
-Please see pod/perl5116delta.pod for a description of the changes and
+Please see pod/perl5131delta.pod for a description of the changes and
potential incompatibilities introduced with this release. A few of
the most important issues are listed below, but you should refer
-to pod/perl5116delta.pod for more detailed information.
+to pod/perl5131delta.pod for more detailed information.
B<WARNING:> This version is not binary compatible with prior releases of Perl.
If you have built extensions (i.e. modules that include C code)
On a related issue, old modules may possibly be affected by the changes
in the Perl language in the current release. Please see
-pod/perl5116delta.pod for a description of what's changed. See your
+pod/perl5131delta.pod for a description of what's changed. See your
installed copy of the perllocal.pod file for a (possibly incomplete)
list of locally installed modules. Also see CPAN::autobundle for one
way to make a "bundle" of your currently installed modules.
On these systems, it might be the default compilation mode, and there
is currently no guarantee that passing no use64bitall option to the
Configure process will build a 32bit perl. Implementing -Duse32bit*
-options is planned for perl 5.12.
+options is planned for a future release of perl.
=head3 Long doubles
=item Directories for the perl distribution
-By default, Configure will use the following directories for 5.11.5.
+By default, Configure will use the following directories for 5.13.1.
$version is the full perl version number, including subversion, e.g.
-5.11.5 or 5.9.5, and $archname is a string like sun4-sunos,
+5.13.1 or 5.9.5, and $archname is a string like sun4-sunos,
determined by Configure. The full definitions of all Configure
variables are in the file Porting/Glossary.
"-Duserelocatableinc" is that everything is relocated. The initial
install is done to the original configured prefix.
+This option is not compatible with the building of a shared libperl
+("-Duseshrplib"), because in that case perl is linked with an hard-coded
+rpath that points at the libperl.so, that cannot be relocated.
+
=head2 Site-wide Policy settings
After Configure runs, it stores a number of common site-wide "policy"
SCO prior to 3.2.4 may be missing dbmclose(). An upgrade to 3.2.4
that includes libdbm.nfs (which includes dbmclose()) may be available.
+=item error: too few arguments to function 'dbmclose'
+
+Building ODBM_File on some (Open)SUSE distributions might run into this
+error, as the header file is broken. There are two ways to deal with this
+
+ 1. Disable the use of ODBM_FILE
+
+ Configure ... -Dnoextensions=ODBM_File
+
+ 2. Fix the header file, somewhat like this:
+
+ --- a/usr/include/dbm.h 2010-03-24 08:54:59.000000000 +0100
+ +++ b/usr/include/dbm.h 2010-03-24 08:55:15.000000000 +0100
+ @@ -59,4 +59,4 @@ extern datum firstkey __P((void));
+
+ extern datum nextkey __P((datum key));
+
+ -extern int dbmclose __P((DBM *));
+ +extern int dbmclose __P((void));
+
=item Note (probably harmless): No library found for -lsomething
If you see such a message during the building of an extension, but
=head1 Coexistence with earlier versions of perl 5
-Perl 5.11 is not binary compatible with earlier versions of Perl.
+Perl 5.12 is not binary compatible with earlier versions of Perl.
In other words, you will have to recompile your XS modules.
In general, you can usually safely upgrade from one version of Perl (e.g.
libraries after 5.6.0, but not for executables. TODO?) One convenient
way to do this is by using a separate prefix for each version, such as
- sh Configure -Dprefix=/opt/perl5.11.5
+ sh Configure -Dprefix=/opt/perl5.13.1
-and adding /opt/perl5.11.5/bin to the shell PATH variable. Such users
+and adding /opt/perl5.13.1/bin to the shell PATH variable. Such users
may also wish to add a symbolic link /usr/local/bin/perl so that
scripts can still start with #!/usr/local/bin/perl.
=head2 Upgrading from 5.11.0 or earlier
-B<Perl 5.11.5 is binary incompatible with Perl 5.11.1 and any earlier
+B<Perl 5.13.1 is binary incompatible with Perl 5.11.1 and any earlier
Perl release.> Perl modules having binary parts
(meaning that a C compiler is used) will have to be recompiled to be
-used with 5.11.5. If you find you do need to rebuild an extension with
-5.11.5, you may safely do so without disturbing the older
+used with 5.13.1. If you find you do need to rebuild an extension with
+5.13.1, you may safely do so without disturbing the older
installations. (See L<"Coexistence with earlier versions of perl 5">
above.)
cpan/CGI/t/uploadInfo.t See if CGI.pm works
cpan/CGI/t/upload_post_text.txt Test data for CGI.pm
cpan/CGI/t/upload.t See if CGI.pm works
+cpan/CGI/t/url.t See if CGI.pm works
cpan/CGI/t/user_agent.t See if CGI->user_agent() works
cpan/CGI/t/utf8.t See if CGI.pm works
cpan/CGI/t/util-58.t See if 5.8-dependent features work
cpan/CGI/t/util.t See if CGI.pm works
-cpan/Class-ISA/ChangeLog Changes for Class::ISA
-cpan/Class-ISA/lib/Class/ISA.pm Class::ISA
-cpan/Class-ISA/t/00_about_verbose.t Tests for Class::ISA
-cpan/Class-ISA/t/01_old_junk.t Tests for Class::ISA
cpan/Compress-Raw-Bzip2/bzip2-src/blocksort.c
cpan/Compress-Raw-Bzip2/bzip2-src/bzlib.c
cpan/Compress-Raw-Bzip2/bzip2-src/bzlib.h
cpan/ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm converts Perl XS code into C code
cpan/ExtUtils-ParseXS/lib/ExtUtils/xsubpp External subroutine preprocessor
cpan/ExtUtils-ParseXS/t/basic.t See if ExtUtils::ParseXS works
+cpan/ExtUtils-ParseXS/t/lib/IncludeTester.pm ExtUtils::ParseXS testing utility
cpan/ExtUtils-ParseXS/t/more.t Extended ExtUtils::ParseXS testing
cpan/ExtUtils-ParseXS/t/typemap Standard typemap for controlled testing
cpan/ExtUtils-ParseXS/t/usage.t ExtUtils::ParseXS tests
cpan/List-Util/t/weak.t Scalar::Util
cpan/List-Util/XS.pp List::Util
cpan/Locale-Codes/ChangeLog Locale::Codes
+cpan/Locale-Codes/lib/Locale/Codes/Changes.pod Locale::Codes documentation
+cpan/Locale-Codes/lib/Locale/Codes/Country.pm Locale::Codes
+cpan/Locale-Codes/lib/Locale/Codes/Currency.pm Locale::Codes
+cpan/Locale-Codes/lib/Locale/Codes/Language.pm Locale::Codes
+cpan/Locale-Codes/lib/Locale/Codes.pm Locale::Codes
+cpan/Locale-Codes/lib/Locale/Codes.pod Locale::Codes documentation
+cpan/Locale-Codes/lib/Locale/Codes/Script.pm Locale::Codes
cpan/Locale-Codes/lib/Locale/Constants.pm Locale::Codes
cpan/Locale-Codes/lib/Locale/Constants.pod Locale::Codes documentation
cpan/Locale-Codes/lib/Locale/Country.pm Locale::Codes
cpan/Locale-Codes/lib/Locale/Language.pod Locale::Codes documentation
cpan/Locale-Codes/lib/Locale/Script.pm Locale::Codes
cpan/Locale-Codes/lib/Locale/Script.pod Locale::Codes documentation
-cpan/Locale-Codes/Makefile.PL
-cpan/Locale-Codes/README Locale::Codes
-cpan/Locale-Codes/t/all.t See if Locale::Codes work
-cpan/Locale-Codes/t/constants.t See if Locale::Codes work
-cpan/Locale-Codes/t/country.t See if Locale::Codes work
-cpan/Locale-Codes/t/currency.t See if Locale::Codes work
-cpan/Locale-Codes/t/language.t See if Locale::Codes work
-cpan/Locale-Codes/t/rename.t See if Locale::Codes work
-cpan/Locale-Codes/t/script.t See if Locale::Codes work
-cpan/Locale-Codes/t/uk.t See if Locale::Codes work
+cpan/Locale-Codes/LICENSE Locale::Codes
+cpan/Locale-Codes/README.first Locale::Codes
+cpan/Locale-Codes/t/alias_code.t Locale::Codes tests
+cpan/Locale-Codes/t/code2country.t Locale::Codes tests
+cpan/Locale-Codes/t/code2currency.t Locale::Codes tests
+cpan/Locale-Codes/t/code2language.t Locale::Codes tests
+cpan/Locale-Codes/t/code2script.t Locale::Codes tests
+cpan/Locale-Codes/t/country2code.t Locale::Codes tests
+cpan/Locale-Codes/t/country_code2code.t Locale::Codes tests
+cpan/Locale-Codes/t/country.t Locale::Codes tests
+cpan/Locale-Codes/t/currency2code.t Locale::Codes tests
+cpan/Locale-Codes/t/language2code.t Locale::Codes tests
+cpan/Locale-Codes/t/language.t Locale::Codes tests
+cpan/Locale-Codes/t/script2code.t Locale::Codes tests
+cpan/Locale-Codes/t/testfunc.pl Locale::Codes tests
cpan/Locale-Maketext-Simple/lib/Locale/Maketext/Simple.pm Locale::Simple
cpan/Locale-Maketext-Simple/t/0-signature.t Locale::Simple tests
cpan/Locale-Maketext-Simple/t/1-basic.t Locale::Simple tests
cpan/Pod-Simple/t/xhtml05.t Pod::Simple test file
cpan/Pod-Simple/t/xhtml10.t Pod::Simple test file
cpan/Pod-Simple/t/x_nixer.t Pod::Simple test file
-cpan/Shell/Shell.pm Make AUTOLOADed system() calls
-cpan/Shell/t/Shell.t Tests for above
cpan/Sys-Syslog/Changes Changlog for Sys::Syslog
cpan/Sys-Syslog/fallback/const-c.inc Sys::Syslog constants fallback file
cpan/Sys-Syslog/fallback/const-xs.inc Sys::Syslog constants fallback file
dist/Data-Dumper/Todo Data pretty printer, futures
dist/Data-Dumper/t/overload.t See if Data::Dumper works for overloaded data
dist/Data-Dumper/t/pair.t See if Data::Dumper pair separator works
+dist/Data-Dumper/t/terse.t See if Data::Dumper terse option works
dist/ExtUtils-Install/Changes ExtUtils-Install change log
dist/ExtUtils-Install/lib/ExtUtils/Installed.pm Information on installed extensions
dist/ExtUtils-Install/lib/ExtUtils/Install.pm Handles 'make install' on extensions
dist/Pod-Perldoc/t/checkerbasic.t test Pod::Perldoc::ToChecker
dist/Pod-Perldoc/t/perldocbasic.t test Pod::Perldoc basic operation
dist/Pod-Perldoc/t/textbasic.t test Pod::Perldoc::ToText
-dist/Pod-Plainer/Plainer.pm Pod migration utility module
-dist/Pod-Plainer/t/plainer.t Test Pod::Plainer
dist/Safe/Changes Changes for Safe.pm
dist/Safe/Makefile.PL Makefile.PL for Safe.pm
dist/Safe/MANIFEST MANIFEST for Safe.pm
dist/Storable/t/utf8hash.t See if Storable works
dist/Storable/t/utf8.t See if Storable works
dist/Storable/t/weak.t Can Storable store weakrefs
-dist/Switch/Changes Changes for Switch.pm
-dist/Switch/Makefile.PL Makefile.PL for Switch.pm
-dist/Switch/MANIFEST MANIFEST for Switch.pm
-dist/Switch/META.yml META.yml for Switch.pm
-dist/Switch/README README for Switch.pm
-dist/Switch/Switch.pm Switch for Perl
-dist/Switch/t/given.t See if Perl 6 given (switch) works
-dist/Switch/t/nested.t See if nested switch works
-dist/Switch/t/switch.t See if Perl 5 switch works
dist/Thread-Queue/lib/Thread/Queue.pm Thread-safe queues
dist/Thread-Queue/t/01_basic.t Thread::Queue tests
dist/Thread-Queue/t/02_refs.t Thread::Queue tests
doop.c Support code for various operations
dosish.h Some defines for MS/DOSish machines
dump.c Debugging output
-emacs/cperl-mode.el An alternate perl-mode
-emacs/e2ctags.pl etags to ctags converter
-emacs/ptags Creates smart TAGS file
embed.fnc Database used by embed.pl
embed.h Maps symbols to safer names
embed.pl Produces {embed,embedvar,proto}.h, global.sym
ext/XS-APItest-KeywordRPN/README XS::APItest::KeywordRPN extension
ext/XS-APItest-KeywordRPN/t/keyword_plugin.t test keyword plugin mechanism
ext/XS-APItest-KeywordRPN/t/multiline.t test plugin parsing across lines
+ext/XS-APItest-KeywordRPN/t/stuff_svcur_bug.t test for a bug in lex_stuff_pvn
ext/XS-APItest/Makefile.PL XS::APItest extension
ext/XS-APItest/MANIFEST XS::APItest extension
ext/XS-APItest/notcore.c Test API functions when PERL_CORE is not defined
ext/XS-APItest/t/my_cxt.t XS::APItest: test MY_CXT interface
ext/XS-APItest/t/my_exit.t XS::APItest: test my_exit
ext/XS-APItest/t/op.t XS::APItest: tests for OP related APIs
-ext/XS-APItest/t/pmflag.t Test deprecation warning for Perl_pmflag()
+ext/XS-APItest/t/pmflag.t Test removal of Perl_pmflag()
ext/XS-APItest/t/printf.t XS::APItest extension
+ext/XS-APItest/t/ptr_table.t Test ptr_table_* APIs
ext/XS-APItest/t/push.t XS::APItest extension
ext/XS-APItest/t/rmagical.t XS::APItest extension
ext/XS-APItest/t/svpeek.t XS::APItest extension
ext/XS-APItest/t/utf16_to_utf8.t Test behaviour of utf16_to_utf8{,reversed}
ext/XS-APItest/t/xs_special_subs_require.t for require too
ext/XS-APItest/t/xs_special_subs.t Test that XS BEGIN/CHECK/INIT/END work
+ext/XS-APItest/typemap
ext/XS-Typemap/Makefile.PL XS::Typemap extension
ext/XS-Typemap/README XS::Typemap extension
ext/XS-Typemap/stdio.c XS::Typemap extension
pod/perl5113delta.pod Perl changes in version 5.11.3
pod/perl5114delta.pod Perl changes in version 5.11.4
pod/perl5115delta.pod Perl changes in version 5.11.5
-pod/perl5116delta.pod Perl changes in version 5.11.6
pod/perl5120delta.pod Perl changes in version 5.12.0
+pod/perl5130delta.pod Perl changes in version 5.13.0
+pod/perl5131delta.pod Perl changes in version 5.13.1
pod/perl561delta.pod Perl changes in version 5.6.1
pod/perl56delta.pod Perl changes in version 5.6
pod/perl570delta.pod Perl changes in version 5.7.0
Porting/config.sh Sample config.sh
Porting/core-cpan-diff Compare core distros with their CPAN equivalents
Porting/corecpan.pl Reports outdated dual-lived modules
-Porting/corelist-perldelta.pl Generates data perldelta from Module::CoreList
+Porting/corelist-diff Tool to produce corelist diffs
+Porting/corelist-perldelta.pl Generates data perldelta from Module::CoreList
Porting/corelist.pl Generates data for Module::CoreList
Porting/curliff.pl Curliff or liff your curliffable files.
Porting/expand-macro.pl A tool to expand C macro definitions in the Perl source
t/io/binmode.t See if binmode() works
t/io/crlf.t See if :crlf works
t/io/crlf_through.t See if pipe passes data intact with :crlf
+t/io/defout.t See if PL_defoutgv works
t/io/dup.t See if >& works right
t/io/errno.t See if $! is correctly set
t/io/fflush.t See if auto-flush on fork/exec/system/qx works
t/op/reverse.t See if reverse operator works
t/op/runlevel.t See if die() works from perl_call_*()
t/op/setpgrpstack.t See if setpgrp works
+t/op/sigdispatch.t See if signals are always dispatched
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
t/op/studytied.t See if study works with tied scalars
t/op/sub_lval.t See if lvalue subroutines work
t/op/sub.t See if subroutines work
+t/op/svleak.t See if stuff leaks SVs
t/op/switch.t See if switches (given/when) work
t/op/symbolcache.t See if undef/delete works on stashes with functions
t/op/sysio.t See if sysread and syswrite work
t/op/upgrade.t See if upgrading and assigning scalars works
t/op/utf8cache.t Tests malfunctions of utf8 cache
t/op/utf8decode.t See if UTF-8 decoding works
+t/op/utf8magic.t See if utf8:: functions handle magic variables
t/op/utfhash.t See if utf8 keys in hashes behave
t/op/utftaint.t See if utf8 and taint work together
t/op/vec.t See if vectors work
name: perl
-version: 5.011005
+version: 5.013000
abstract: Practical Extraction and Report Language
author: perl5-porters@perl.org
license: perl
- dist/XSLoader
- ext/Time-Local
- lib/version
+ - win32
file:
- dist/IO/ChangeLog
- lib/Exporter.t
- lib/Exporter/Heavy.pm
- lib/newgetopt.pl
+ - lib/unicore/mktables
- lib/version.pm
- lib/version.pod
- lib/version.t
- pod/pod2usage.PL
- pod/podchecker.PL
- pod/podselect.PL
+ - Porting/Maintainers.pm
+ - Porting/perldelta_template.pod
+ - TestInit.pm
pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST
$(MINIPERL) $(Icwd) pod/perlmodlib.PL -q
-pod/perldelta.pod: pod/perl5116delta.pod
- $(LNS) perl5116delta.pod pod/perldelta.pod
+pod/perldelta.pod: pod/perl5131delta.pod
+ $(LNS) perl5131delta.pod pod/perldelta.pod
extra.pods: $(MINIPERL_EXE)
-@test ! -f extra.pods || rm -f `cat extra.pods`
# Here comes the CW tools - TO BE FILLED TO BUILD WITH CW -
-MODULE_DESC = "Perl 5.11.5 for NetWare"
+MODULE_DESC = "Perl 5.13.0 for NetWare"
CCTYPE = CodeWarrior
C_COMPILER = mwccnlm -c
CPP_COMPILER = mwccnlm
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-INST_VER = \5.11.5
+INST_VER = \5.13.0
#
# Comment this out if you DON'T want your perl installation to have
d_pipe='define'
d_poll='undef'
d_portable='define'
+d_prctl='undef'
+d_prctl_set_name='undef'
d_printf_format_null='undef'
d_procselfexe='undef'
d_pseudofork='undef'
* This symbol contains the ~name expanded version of ARCHLIB, to be used
* in programs that are not prepared to deal with ~ expansion at run-time.
*/
-#define ARCHLIB "c:\\perl\\5.11.5\\lib\\NetWare-x86-multi-thread" /**/
+#define ARCHLIB "c:\\perl\\5.13.0\\lib\\NetWare-x86-multi-thread" /**/
/*#define ARCHLIB_EXP "" /**/
/* ARCHNAME:
* This symbol is the filename expanded version of the BIN symbol, for
* programs that do not want to deal with that at run-time.
*/
-#define BIN "c:\\perl\\5.11.5\\bin\\NetWare-x86-multi-thread" /**/
-#define BIN_EXP "c:\\perl\\5.11.5\\bin\\NetWare-x86-multi-thread" /**/
+#define BIN "c:\\perl\\5.13.0\\bin\\NetWare-x86-multi-thread" /**/
+#define BIN_EXP "c:\\perl\\5.13.0\\bin\\NetWare-x86-multi-thread" /**/
/* BYTEORDER:
* This symbol holds the hexadecimal constant defined in byteorder,
* This symbol contains the ~name expanded version of SITEARCH, to be used
* in programs that are not prepared to deal with ~ expansion at run-time.
*/
-#define SITEARCH "c:\\perl\\site\\5.11.5\\lib\\NetWare-x86-multi-thread" /**/
+#define SITEARCH "c:\\perl\\site\\5.13.0\\lib\\NetWare-x86-multi-thread" /**/
/*#define SITEARCH_EXP "" /**/
/* SITELIB:
* removed. The elements in inc_version_list (inc_version_list.U) can
* be tacked onto this variable to generate a list of directories to search.
*/
-#define SITELIB "c:\\perl\\site\\5.11.5\\lib" /**/
+#define SITELIB "c:\\perl\\site\\5.13.0\\lib" /**/
/*#define SITELIB_EXP "" /**/
#define SITELIB_STEM "" /**/
indicates to the C program that it should not assume that it is
running on the machine it was compiled on.
+d_prctl (d_prctl.U):
+ This variable conditionally defines the HAS_PRCTL symbol, which
+ indicates to the C program that the prctl() routine is available.
+
+d_prctl_set_name (d_prctl.U):
+ This variable conditionally defines the HAS_PRCTL_SET_NAME symbol,
+ which indicates to the C program that the prctl() routine supports
+ the PR_SET_NAME option.
+
d_PRId64 (quadfio.U):
This variable conditionally defines the PERL_PRId64 symbol, which
indiciates that stdio has a symbol to print 64-bit decimal numbers.
# Also, a "module" does not necessarily mean a CPAN module, it
# might mean a file or files or a subdirectory.
# Most (but not all) of the modules have dual lives in the core
-# and in CPAN. Those that have a CPAN existence, have the CPAN
-# attribute set to true.
+# and in CPAN.
package Maintainers;
'sadahiro' => 'SADAHIRO Tomoyuki <SADAHIRO@cpan.org>',
'salva' => 'Salvador Fandiño GarcÃa <salva@cpan.org>',
'saper' => 'Sébastien Aperghis-Tramoni <saper@cpan.org>',
+ 'sbeck' => 'Sullivan Beck <sbeck@cpan.org>',
'sburke' => 'Sean Burke <sburke@cpan.org>',
'mschwern' => 'Michael Schwern <mschwern@cpan.org>',
'simonw' => 'Simon Wistow <simonw@cpan.org>',
# Each entry in the %Modules hash roughly represents a distribution,
-# except in the case of CPAN=1, where it *exactly* represents a single
+# except when DISTRIBUTION is set, where it *exactly* represents a single
# CPAN distribution.
# The keys of %Modules are human descriptions of the distributions, and
# names to be recursed down, which collectively generate a complete list
# of the files associated with the distribution.
-# CPAN can be either 1 (this distribution is also available on CPAN),
-# or 0 (there is no # valid CPAN release).
-
# UPSTREAM indicates where patches should go. undef implies
# that this hasn't been discussed for the module at hand.
# "blead" indicates that the copy of the module in the blead
'MAINTAINER' => 'kane',
'DISTRIBUTION' => 'BINGOS/Archive-Extract-0.38.tar.gz',
'FILES' => q[cpan/Archive-Extract],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
'BUGS' => 'bug-archive-extract@rt.cpan.org',
},
'MAINTAINER' => 'kane',
'DISTRIBUTION' => 'BINGOS/Archive-Tar-1.54.tar.gz',
'FILES' => q[cpan/Archive-Tar],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
'BUGS' => 'bug-archive-tar@rt.cpan.org',
},
'MAINTAINER' => 'rgarcia',
'DISTRIBUTION' => 'SMUELLER/Attribute-Handlers-0.87.tar.gz',
'FILES' => q[dist/Attribute-Handlers],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
t/system.t
)
],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'DISTRIBUTION' => 'SMUELLER/AutoLoader-5.70.tar.gz',
'FILES' => q[cpan/AutoLoader],
'EXCLUDED' => [ qw( t/00pod.t ) ],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
{
'MAINTAINER' => 'smccam',
'FILES' => q[ext/B/B/Concise.pm ext/B/t/concise.t],
- 'CPAN' => 0,
'UPSTREAM' => undef,
},
'DISTRIBUTION' => 'RURBAN/B-Debug-1.12.tar.gz',
'FILES' => q[cpan/B-Debug],
'EXCLUDED' => [ qw( t/coverage.html t/pod.t ) ],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
{
'MAINTAINER' => 'smccam',
'FILES' => q[dist/B-Deparse],
- 'CPAN' => 0,
'UPSTREAM' => 'blead',
},
'DISTRIBUTION' => 'JJORE/B-Lint-1.11.tar.gz',
'FILES' => q[cpan/B-Lint],
'EXCLUDED' => [ qw( t/test.pl ) ],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'MAINTAINER' => 'rgarcia',
'DISTRIBUTION' => 'RGARCIA/base-2.15.tar.gz',
'FILES' => q[dist/base],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
'DISTRIBUTION' => 'TELS/math/bignum-0.23.tar.gz',
'FILES' => q[cpan/bignum],
'EXCLUDED' => [ qr{^inc/Module/}, qw(t/pod.t t/pod_cov.t) ],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'CGI' =>
{
'MAINTAINER' => 'lstein',
- 'DISTRIBUTION' => 'LDS/CGI.pm-3.48.tar.gz',
+ 'DISTRIBUTION' => 'LDS/CGI.pm-3.49.tar.gz',
'FILES' => q[cpan/CGI],
'EXCLUDED' => [ qr{^t/lib/Test},
qw( cgi-lib_porting.html
t/fast.t
)
],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
- 'Class::ISA' =>
- {
- 'MAINTAINER' => 'smueller',
- 'DISTRIBUTION' => 'SMUELLER/Class-ISA-0.36.tar.gz',
- 'FILES' => q[cpan/Class-ISA],
- 'CPAN' => 1,
- 'UPSTREAM' => 'cpan',
- 'DEPRECATED' => 5.011,
- },
-
'Compress::Raw::Bzip2' =>
{
'MAINTAINER' => 'pmqs',
qw( bzip2-src/bzip2-cpp.patch
)
],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
t/99pod.t
)
],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
eg/synopsis.pl
)
],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
t/yaml_code.yml
},
],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
t/032_CPANPLUS-Internals-Source-via-sqlite.t
},
],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
'BUGS' => 'bug-cpanplus@rt.cpan.org',
},
t/99_pod_coverage.t
},
],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'MAINTAINER' => 'p5p', # Not gsar. Not ilyam
'DISTRIBUTION' => 'SMUELLER/Data-Dumper-2.125.tar.gz',
'FILES' => q[dist/Data-Dumper],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
fallback.xs
},
],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'DISTRIBUTION' => 'MHX/Devel-PPPort-3.19.tar.gz',
'FILES' => q[cpan/Devel-PPPort],
'EXCLUDED' => [ qw{PPPort.pm} ], # we use PPPort_pm.PL instead
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'DISTRIBUTION' => 'GAAS/Digest-1.16.tar.gz',
'FILES' => q[cpan/Digest],
'EXCLUDED' => [ qw{digest-bench} ],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'DISTRIBUTION' => 'GAAS/Digest-MD5-2.39.tar.gz',
'FILES' => q[cpan/Digest-MD5],
'EXCLUDED' => [ qw{rfc1321.txt} ],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'DISTRIBUTION' => 'MSHELOR/Digest-SHA-5.47.tar.gz',
'FILES' => q[cpan/Digest-SHA],
'EXCLUDED' => [ qw{t/pod.t t/podcover.t examples/dups} ],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'MAINTAINER' => 'dankogai',
'DISTRIBUTION' => 'DANKOGAI/Encode-2.39.tar.gz',
'FILES' => q[cpan/Encode],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
qw{t/0-signature.t Makefile.PL MANIFEST META.yml
README SIGNATURE},
],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'MAP' => { 't/' => 'lib/',
'lib/' => 'lib/',
},
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
'MAINTAINER' => 'kwilliams',
'DISTRIBUTION' => 'DAGOLDEN/ExtUtils-CBuilder-0.27.tar.gz',
'FILES' => q[cpan/ExtUtils-CBuilder],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
lib/Shell/Command.pm
},
],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
examples/perl_regcomp_posix_keyword.pl
},
],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
t/pod.t
},
],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
'EXCLUDED' => [ qr{^t/lib/Test/},
qr{^inc/ExtUtils/},
],
- 'CPAN' => 1,
'UPSTREAM' => 'first-come',
},
'MAINTAINER' => 'rkobes',
'DISTRIBUTION' => 'RKOBES/ExtUtils-Manifest-1.57.tar.gz',
'FILES' => q[cpan/ExtUtils-Manifest],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'ExtUtils::ParseXS' =>
{
'MAINTAINER' => 'kwilliams',
- 'DISTRIBUTION' => 'DAGOLDEN/ExtUtils-ParseXS-2.21.tar.gz',
+ 'DISTRIBUTION' => 'DAGOLDEN/ExtUtils-ParseXS-2.2205.tar.gz',
'EXCLUDED' => [ qw{
t/bugs/RT48104.xs
t/bugs/typemap
t/include/nscore.h
}],
'FILES' => q[cpan/ExtUtils-ParseXS],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
{
'MAINTAINER' => 'perlfaq',
'FILES' => q[pod/perlfaq*],
- 'CPAN' => 0,
'UPSTREAM' => undef,
},
'MAINTAINER' => 'kane',
'DISTRIBUTION' => 'BINGOS/File-Fetch-0.24.tar.gz',
'FILES' => q[cpan/File-Fetch],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'MAP' => { '' => 'cpan/File-Path/lib/File/',
't/' => 'cpan/File-Path/t/',
},
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
misc/results.txt
}
],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'EXCLUDED' => [ qw(Makefile.PL MANIFEST README META.yml),
qr{^demo/}
],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
'perlfilter.pod' => 'pod/perlfilter.pod',
'' => 'cpan/Filter-Util-Call/',
},
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'MAP' => { '' => 'cpan/Getopt-Long/',
'lib/newgetopt.pl' => 'lib/newgetopt.pl',
},
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'MAINTAINER' => 'p5p',
'DISTRIBUTION' => 'SBURKE/I18N-LangTags-0.35.tar.gz',
'FILES' => q[dist/I18N-LangTags],
- 'CPAN' => 0,
'UPSTREAM' => 'blead',
},
'MAINTAINER' => 'ilyaz',
'DISTRIBUTION' => 'ILYAZ/modules/if-0.0401.tar.gz',
'FILES' => q[cpan/if],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'DISTRIBUTION' => 'GBARR/IO-1.25.tar.gz',
'FILES' => q[dist/IO/],
'EXCLUDED' => [ qw{t/test.pl}, ],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
'DISTRIBUTION' => 'PMQS/IO-Compress-2.021.tar.gz',
'FILES' => q[cpan/IO-Compress],
'EXCLUDED' => [ qr{t/Test/} ],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'MAINTAINER' => 'tomhughes',
'DISTRIBUTION' => 'TOMHUGHES/IO-Zlib-1.10.tar.gz',
'FILES' => q[cpan/IO-Zlib],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'MAINTAINER' => 'kane',
'DISTRIBUTION' => 'BINGOS/IPC-Cmd-0.54.tar.gz',
'FILES' => q[cpan/IPC-Cmd],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'DISTRIBUTION' => 'MHX/IPC-SysV-2.01.tar.gz',
'FILES' => q[cpan/IPC-SysV],
'EXCLUDED' => [ qw{const-c.inc const-xs.inc} ],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'DISTRIBUTION' => 'SMUELLER/lib-0.62.tar.gz',
'FILES' => q[dist/lib/],
'EXCLUDED' => [ qw{forPAUSE/lib.pm t/00pod.t} ],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
'DISTRIBUTION' => 'GBARR/libnet-1.22.tar.gz',
'FILES' => q[cpan/libnet],
'EXCLUDED' => [ qw{Configure install-nomake} ],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'Locale-Codes' =>
{
- 'MAINTAINER' => 'neilb',
- 'DISTRIBUTION' => 'NEILB/Locale-Codes-2.07.tar.gz',
+ 'MAINTAINER' => 'sbeck',
+ 'DISTRIBUTION' => 'SBECK/Locale-Codes-3.12.tar.gz',
'FILES' => q[cpan/Locale-Codes],
- 'CPAN' => 1,
- 'UPSTREAM' => undef,
+ 'EXCLUDED' => [ qw{t/pod_coverage.t t/pod.t}, qr{^t/runtests},
+ qr{^internal/}, qr{^examples/} ],
+ 'UPSTREAM' => 'cpan',
},
'Locale::Maketext' =>
'DISTRIBUTION' => 'FERREIRA/Locale-Maketext-1.13.tar.gz',
'FILES' => q[dist/Locale-Maketext],
'EXCLUDED' => [ qw{perlcriticrc t/00_load.t t/pod.t} ],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
'DISTRIBUTION' => 'JESSE/Locale-Maketext-Simple-0.21.tar.gz',
'FILES' => q[cpan/Locale-Maketext-Simple],
'EXCLUDED' => [ qr{^inc/} ],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'MAINTAINER' => 'kane',
'DISTRIBUTION' => 'KANE/Log-Message-0.02.tar.gz',
'FILES' => q[cpan/Log-Message],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'MAINTAINER' => 'kane',
'DISTRIBUTION' => 'BINGOS/Log-Message-Simple-0.06.tar.gz',
'FILES' => q[cpan/Log-Message-Simple],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
{
'MAINTAINER' => 'lwall',
'FILES' => q[mad],
- 'CPAN' => 0,
'UPSTREAM' => undef,
},
t/pod_cov.t
}
],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'lib/Math/BigInt/FastCalc.pm'
=> 'cpan/Math-BigInt-FastCalc/FastCalc.pm',
},
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
t/pod_cov.t
},
],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
t/pod-coverage.t
},
],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
Memoize/Saves.pm
},
],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'MIME::Base64' =>
{
'MAINTAINER' => 'gaas',
- 'DISTRIBUTION' => 'GAAS/MIME-Base64-3.08.tar.gz',
+ 'DISTRIBUTION' => 'GAAS/MIME-Base64-3.09.tar.gz',
'FILES' => q[cpan/MIME-Base64],
'EXCLUDED' => [ qw{ t/bad-sv.t }, ],
- 'CPAN' => 1,
- 'UPSTREAM' => undef,
+ 'UPSTREAM' => 'cpan',
},
'Module::Build' =>
'FILES' => q[cpan/Module-Build],
'EXCLUDED' => [ qw{ t/par.t t/signature.t },
qr!^contrib/!, qr!^devtools! ],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'MAINTAINER' => 'rgarcia',
'DISTRIBUTION' => 'BINGOS/Module-CoreList-2.23.tar.gz',
'FILES' => q[dist/Module-CoreList],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
'MAINTAINER' => 'kane',
'DISTRIBUTION' => 'KANE/Module-Load-0.16.tar.gz',
'FILES' => q[cpan/Module-Load],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'Module::Load::Conditional' =>
{
'MAINTAINER' => 'kane',
- 'DISTRIBUTION' => 'BINGOS/Module-Load-Conditional-0.34.tar.gz',
+ 'DISTRIBUTION' => 'BINGOS/Module-Load-Conditional-0.38.tar.gz',
'FILES' => q[cpan/Module-Load-Conditional],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'MAINTAINER' => 'kane',
'DISTRIBUTION' => 'BINGOS/Module-Loaded-0.06.tar.gz',
'FILES' => q[cpan/Module-Loaded],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'MAINTAINER' => 'simonw',
'DISTRIBUTION' => 'SIMONW/Module-Pluggable-3.9.tar.gz',
'FILES' => q[cpan/Module-Pluggable],
- 'CPAN' => 1,
- 'UPSTREAM' => undef,
+ 'UPSTREAM' => 'cpan',
},
'Net::Ping' =>
'MAINTAINER' => 'smpeters',
'DISTRIBUTION' => 'SMPETERS/Net-Ping-2.36.tar.gz',
'FILES' => q[dist/Net-Ping],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
'DISTRIBUTION' => 'FLORA/NEXT-0.64.tar.gz',
'FILES' => q[cpan/NEXT],
'EXCLUDED' => [ qr{^demo/} ],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'MAINTAINER' => 'kane',
'DISTRIBUTION' => 'BINGOS/Object-Accessor-0.36.tar.gz',
'FILES' => q[cpan/Object-Accessor],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'MAINTAINER' => 'kane',
'DISTRIBUTION' => 'KANE/Package-Constants-0.02.tar.gz',
'FILES' => q[cpan/Package-Constants],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
# the tarball. Russell's Paradox eat your heart out.
'EXCLUDED' => [ qw( Params-Check-0.26.tar.gz ) ],
'FILES' => q[cpan/Params-Check],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'MAINTAINER' => 'corion',
'DISTRIBUTION' => 'CORION/parent-0.223.tar.gz',
'FILES' => q[cpan/parent],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'DISTRIBUTION' => 'SMUELLER/Parse-CPAN-Meta-1.40.tar.gz',
'FILES' => q[cpan/Parse-CPAN-Meta],
'EXCLUDED' => [ qw( t/97_meta.t t/98_pod.t t/99_pmv.t ) ],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
# NOTE: 'perl uupacktool.pl t/data/utf_16_le_bom.yml.packed'
# run by hand after import, as the core's test harness doesn't
'DISTRIBUTION' => 'SMUELLER/PathTools-3.31.tar.gz',
'FILES' => q[cpan/Cwd],
'EXCLUDED' => [ qr{^t/lib/Test/} ],
- 'CPAN' => 1,
'UPSTREAM' => "cpan",
# NOTE: PathTools is in cpan/Cwd/ because it contains Cwd.xs and
# something, possibly Makefile.SH, makes an assumption that the
{
'MAINTAINER' => 'pvhp',
'FILES' => q[pod/perlebcdic.pod],
- 'CPAN' => 0,
'UPSTREAM' => undef,
},
{
'MAINTAINER' => 'p5p',
'FILES' => q[ext/PerlIO],
- 'CPAN' => 0,
'UPSTREAM' => undef,
},
'MAINTAINER' => 'elizabeth',
'DISTRIBUTION' => 'ELIZABETH/PerlIO-via-QuotedPrint-0.06.tar.gz',
'FILES' => q[cpan/PerlIO-via-QuotedPrint],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
{
'MAINTAINER' => 'laun',
'FILES' => q[pod/perlpacktut.pod],
- 'CPAN' => 0,
'UPSTREAM' => undef,
},
{
'MAINTAINER' => 'sburke',
'FILES' => q[pod/perlpodspec.pod],
- 'CPAN' => 0,
'UPSTREAM' => undef,
},
'MAINTAINER' => 'abigail',
'FILES' => q[pod/perlrecharclass.pod
pod/perlrebackslash.pod],
- 'CPAN' => 0,
'UPSTREAM' => undef,
},
{
MAINTAINER => 'avar',
FILES => q[pod/perlreapi.pod],
- CPAN => 0,
'UPSTREAM' => undef,
},
{
'MAINTAINER' => 'mjd',
'FILES' => q[pod/perlreftut.pod],
- 'CPAN' => 0,
'UPSTREAM' => undef,
},
{
'MAINTAINER' => 'elizabeth',
'FILES' => q[pod/perlthrtut.pod],
- 'CPAN' => 0,
'UPSTREAM' => undef,
},
'MAINTAINER' => 'arandal',
'DISTRIBUTION' => 'SBURKE/Pod-Escapes-1.04.tar.gz',
'FILES' => q[cpan/Pod-Escapes],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'MAP' => { '' => 'cpan/Pod-LaTeX/',
'pod2latex.PL' => 'pod/pod2latex.PL',
},
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'MAP' => { '' => 'cpan/Pod-Parser/',
'scripts/' => 'pod/',
},
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'MAP' => { '' => 'dist/Pod-Perldoc/',
'lib/perldoc.pod' => 'pod/perldoc.pod',
},
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
- 'Pod::Plainer' =>
- {
- 'DISTRIBUTION' => 'RMBARKER/Pod-Plainer-1.02.tar.gz',
- 'MAINTAINER' => 'rmbarker',
- 'FILES' => q[dist/Pod-Plainer],
- 'CPAN' => 1,
- 'UPSTREAM' => 'blead',
- 'EXCLUDED' => [ qw(t/pod.t t/pod-coverage.t) ],
- 'DEPRECATED' => 5.011,
- },
-
'Pod::Simple' =>
{
'MAINTAINER' => 'arandal',
# have been in blead a long time. I'm going to assume then that
# the blead versions of these two files are authoritative - DAPM
'EXCLUDED' => [ qw( lib/perlpod.pod lib/perlpodspec.pod ) ],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'MAP' => { '' => 'cpan/podlators/',
'scripts/' => 'pod/',
},
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'MAINTAINER' => 'rgarcia',
'DISTRIBUTION' => 'RGARCIA/Safe-2.22.tar.gz',
'FILES' => q[dist/Safe],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
'Scalar-List-Utils' =>
{
'MAINTAINER' => 'gbarr',
- 'DISTRIBUTION' => 'GBARR/Scalar-List-Utils-1.21.tar.gz',
+ 'DISTRIBUTION' => 'GBARR/Scalar-List-Utils-1.23.tar.gz',
# Note that perl uses its own version of Makefile.PL
'FILES' => q[cpan/List-Util],
'EXCLUDED' => [ qr{^inc/Module/},
qr{^inc/Test/},
qw{ mytypemap },
],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'DISTRIBUTION' => 'SMUELLER/SelfLoader-1.17.tar.gz',
'FILES' => q[dist/SelfLoader],
'EXCLUDED' => [ qw{ t/00pod.t } ],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
- 'Shell' =>
- {
- 'MAINTAINER' => 'ferreira',
- 'DISTRIBUTION' => 'FERREIRA/Shell-0.72_01.tar.gz',
- 'FILES' => q[cpan/Shell],
- 'EXCLUDED' => [ qw{ t/01_use.t t/99_pod.t } ],
- 'CPAN' => 1,
- 'UPSTREAM' => undef,
- 'DEPRECATED' => 5.011,
- },
-
'Storable' =>
{
'MAINTAINER' => 'ams',
'DISTRIBUTION' => 'AMS/Storable-2.21.tar.gz',
'FILES' => q[dist/Storable],
'EXCLUDED' => [ qr{^t/Test/} ],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
- 'Switch' =>
- {
- 'MAINTAINER' => 'rgarcia',
- 'DISTRIBUTION' => 'RGARCIA/Switch-2.15.tar.gz',
- 'FILES' => q[dist/Switch],
- 'CPAN' => 1,
- 'UPSTREAM' => 'blead',
- 'DEPRECATED' => 5.011,
- },
-
'Sys::Syslog' =>
{
'MAINTAINER' => 'saper',
win32/PerlLog.RES
},
],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'DISTRIBUTION' => 'RRA/ANSIColor-2.02.tar.gz',
'FILES' => q[cpan/Term-ANSIColor],
'EXCLUDED' => [ qr{^tests/}, qw(t/pod-spelling.t t/pod.t) ],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'MAINTAINER' => 'jstowe',
'DISTRIBUTION' => 'JSTOWE/Term-Cap-1.12.tar.gz',
'FILES' => q[cpan/Term-Cap],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'MAINTAINER' => 'kane',
'DISTRIBUTION' => 'KANE/Term-UI-0.20.tar.gz',
'FILES' => q[cpan/Term-UI],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'MAINTAINER' => 'jesse',
'DISTRIBUTION' => 'JESSE/Test-1.25_02.tar.gz',
'FILES' => q[cpan/Test],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
t/lib/if.pm
}
],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
lib/Test/Builder/IO/Scalar.pm
}
],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'DISTRIBUTION' => 'ADAMK/Text-Balanced-2.02.tar.gz',
'FILES' => q[cpan/Text-Balanced],
'EXCLUDED' => [ qw( t/97_meta.t t/98_pod.t t/99_pmv.t ) ],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'ParseWords.pm' => 'cpan/Text-ParseWords/lib/Text/ParseWords.pm',
'' => 'cpan/Text-ParseWords/',
},
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
# considerably over the years
'test.pl' => 'cpan/Text-Soundex/t/Soundex.t',
},
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'DISTRIBUTION' => 'MUIR/modules/Text-Tabs+Wrap-2009.0305.tar.gz',
'FILES' => q[cpan/Text-Tabs],
'EXCLUDED' => [ qw( t/dnsparks.t ) ], # see af6492bf9e
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
t/99_pod.t
t/test.pl
) ],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
t/99_pod.t
t/test.pl
) ],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
'threads' =>
{
'MAINTAINER' => 'jdhedden',
- 'DISTRIBUTION' => 'JDHEDDEN/threads-1.75.tar.gz',
+ 'DISTRIBUTION' => 'JDHEDDEN/threads-1.77.tar.gz',
'FILES' => q[dist/threads],
'EXCLUDED' => [ qw(examples/pool.pl
t/pod.t
t/test.pl
threads.h
) ],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
'threads::shared' =>
{
'MAINTAINER' => 'jdhedden',
- 'DISTRIBUTION' => 'JDHEDDEN/threads-shared-1.32.tar.gz',
+ 'DISTRIBUTION' => 'JDHEDDEN/threads-shared-1.33.tar.gz',
'FILES' => q[dist/threads-shared],
'EXCLUDED' => [ qw(examples/class.pl
shared.h
t/pod.t
t/test.pl
) ],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
'MAINTAINER' => 'mjd',
'DISTRIBUTION' => 'MJD/Tie-File-0.96.tar.gz',
'FILES' => q[cpan/Tie-File],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'MAINTAINER' => 'nuffin',
'DISTRIBUTION' => 'NUFFIN/Tie-RefHash-1.38.tar.gz',
'FILES' => q[cpan/Tie-RefHash],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'MAINTAINER' => 'zefram',
'DISTRIBUTION' => 'JHI/Time-HiRes-1.9719.tar.gz',
'FILES' => q[cpan/Time-HiRes],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'DISTRIBUTION' => 'DROLSKY/Time-Local-1.1901.tar.gz',
'FILES' => q[ext/Time-Local],
'EXCLUDED' => [ qw(t/pod-coverage.t t/pod.t) ],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
# Currently Time::Local is no longer backwards compatible with Pre-5.11 perls
# the version in core has now deviated from the CPAN version. To re-dual-life
'MAINTAINER' => 'msergeant',
'DISTRIBUTION' => 'MSERGEANT/Time-Piece-1.15.tar.gz',
'FILES' => q[cpan/Time-Piece],
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
'EXCLUDED' => [ qr{X$},
qw{disableXS enableXS }
],
- 'CPAN' => 1,
'UPSTREAM' => 'first-come',
},
'DISTRIBUTION' => 'SADAHIRO/Unicode-Normalize-1.03.tar.gz',
'FILES' => q[cpan/Unicode-Normalize],
'EXCLUDED' => [ qw{MANIFEST.N Normalize.pmN disableXS enableXS }],
- 'CPAN' => 1,
'UPSTREAM' => 'first-come',
},
'MAP' => { 'lib/' => 'lib/',
't/coretests.pm' => 'lib/version.t',
},
- 'CPAN' => 1,
'UPSTREAM' => undef,
},
{
'MAINTAINER' => 'craig',
'FILES' => q[vms configure.com README.vms],
- 'CPAN' => 0,
'UPSTREAM' => undef,
},
{
'MAINTAINER' => 'craig',
'FILES' => q[ext/VMS-DCLsym],
- 'CPAN' => 0,
'UPSTREAM' => undef,
},
{
'MAINTAINER' => 'craig',
'FILES' => q[ext/VMS-Stdio],
- 'CPAN' => 0,
'UPSTREAM' => undef,
},
lib/warnings
t/lib/warnings
],
- 'CPAN' => 0,
'UPSTREAM' => undef,
},
{
'MAINTAINER' => 'jand',
'FILES' => q[win32 t/win32 README.win32 ext/Win32CORE],
- 'CPAN' => 0,
'UPSTREAM' => undef,
},
'MAINTAINER' => 'jand',
'DISTRIBUTION' => "JDB/Win32-0.39.tar.gz",
'FILES' => q[cpan/Win32],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
'EXCLUDED' => [ qr{^ex/},
qw{t/pod.t},
],
- 'CPAN' => 1,
'UPSTREAM' => 'cpan',
},
{
'MAINTAINER' => 'zefram',
'FILES' => q[ext/XS-APItest-KeywordRPN],
- 'CPAN' => 0,
'UPSTREAM' => 'blead',
},
t/portfs.t
XSLoader.pm}, # we use XSLoader_pm.PL
],
- 'CPAN' => 1,
'UPSTREAM' => 'blead',
},
{
'MAINTAINER' => 'laun',
'FILES' => q[x2p/s2p.PL],
- 'CPAN' => 0,
'UPSTREAM' => undef,
},
lib/vars{.pm,.t,_carp.t}
lib/vmsish.{pm,t}
],
- 'CPAN' => 0,
'UPSTREAM' => undef,
},
);
+# legacy CPAN flag
+for (values %Modules) {
+ $_->{CPAN} = !!$_->{DISTRIBUTION};
+}
+
1;
sub eight_dot_three {
return () if $seen{$_[0]}++;
- my ($dir, $base, $ext) = ($_[0] =~ m{^(?:(.+)/)?([^/.]+)(?:\.([^/.]+))?$});
+ my ($dir, $base, $ext) = ($_[0] =~ m{^(?:(.+)/)?([^/.]*)(?:\.([^/.]+))?$});
my $file = $base . ( defined $ext ? ".$ext" : "" );
$base = substr($base, 0, 8);
$ext = substr($ext, 0, 3) if defined $ext;
if (defined $dir && $dir =~ /\./) {
print "directory name contains '.': $dir\n";
}
+ if ($base eq "") {
+ print "filename starts with dot: $_[0]\n";
+ }
if ($file =~ /[^A-Za-z0-9\._-]/) {
print "filename contains non-portable characters: $_[0]\n";
}
next;
}
while (m!/|\z!g) {
- my ($dir, $edt) = eight_dot_three($`);
+ my ($dir, $edt) = eight_dot_three("$`");
next unless defined $dir;
($dir, $edt) = map { lc } ($dir, $edt);
push @{$dir{$dir}->{$edt}}, $_;
use strict;
use Text::Wrap;
$Text::Wrap::columns = 80;
-my ($committer, $patch, $log,$date);
+my ($committer, $patch, $author, $date);
use Getopt::Long;
my ($rank, $percentage, $cumulative, $reverse, $ta, @authors, %authors,
if (!$result or (($rank||0) + ($ta||0) + (@authors ? 1 : 0) != 1) or !@ARGV) {
die <<"EOS";
-$0 --rank Changelogs # rank authors by patches
-$0 --acknowledged <authors file> Changelogs # Display unacknowledged authors
-$0 --thanks-applied Changelogs # ranks committers
+$0 --rank changes # rank authors by patches
+$0 --acknowledged <authors file> changes # Display unacknowledged authors
+$0 --thanks-applied changes # ranks committers of others' patches
$0 --percentage ... # show rankings as percentages
$0 --cumulative ... # show rankings cumulatively
$0 --reverse ... # show rankings in reverse
Specify stdin as - if needs be. Remember that option names can be abbreviated.
+Generate changes with git log --pretty=fuller rev1..rev2
EOS
}
my @lines = split(/^commit\s*/sm,join('',<>));
for ( @lines) {
- next if m/^$/;
+ next if m/^$/;
next if m/^(\S*?)^Merge:/ism; # skip merge commits
- if (m/^(.*?)^Author:\s*(.*?)^Date:\s*(.*?)^(.*)$/gism) {
+if (m/^(.*?)^Author:\s*(.*?)^AuthorDate:\s*(.*?)^Commit:\s*(.*?)^(.*)$/gism) {
# new patch
- ($patch, $committer, $date,$log) = ($1,$2,$3,$4);
+ ($patch, $author, $date, $committer) = ($1,$2,$3,$4);
+ chomp($author);
+ unless ($author) { die $_}
chomp($committer);
unless ($committer) { die $_}
- &process ($committer, $patch, $log);
+ &process($committer, $patch, $author);
} else { die "XXX $_ did not match";}
}
}
sub process {
- my ($committer, $patch, $log) = @_;
+ my ($committer, $patch, $author) = @_;
+ return unless $author;
return unless $committer;
- my @authors = $log =~ /From:\s+.*?([^"\@ \t\n<>]+\@[^"\@ \t\n<>]+)/gm;
- if (@authors) {
- foreach my $addr (@authors) {
+ $author = _raw_address($author);
+ $patchers{$author}++;
- $patchers{_raw_address($addr)}++;
- }
- # print "$patch: @authors\n";
- $committers{_raw_address($committer)}++;
- } else {
- # print "$patch: $committer\n";
- # Not entirely fair as this means that the maint pumpking scores for
- # everything intergrated that wasn't a third party patch in blead
- $patchers{_raw_address($committer)}++;
+ $committer = _raw_address($committer);
+ if ($committer ne $author) {
+ # separate commit credit only if committing someone else's patch
+ $committers{$committer}++;
}
}
$addr =~ s/^\s*(.*)\s*<\s*(.*?)\s*>.*$/$2/ ;
$real_name = $1;
}
+ $addr =~ s/\[mailto://;
+ $addr =~ s/\]//;
$addr = lc $addr;
$addr = $map{$addr} || $addr;
$addr =~ s/\\100/@/g; # Sometimes, there are encoded @ signs in the git log.
+ david\100wheeler.net
dennis\100booking.com dennis\100camel.ams6.corp.booking.com
dev-perl\100pimb.org knew-p5p\100pimb.org
++ lists-p5p\100pimb.org
djberg86\100attbi.com djberg96\100attbi.com
domo\100computer.org shouldbedomo\100mac.com
+ domo\100slipper.ip.lu
rmbarker\100cpan.org rmb1\100cise.npl.co.uk
+ robin.barker\100npl.co.uk
+ rmb\100cise.npl.co.uk
++ robin\100spade-ubuntu.(none)
robertmay\100cpan.org rob\100themayfamily.me.uk
roberto\100keltia.freenix.fr roberto\100eurocontrol.fr
robin\100cpan.org robin\100kitsite.com
use Maintainers;
sub usage {
-die <<'EOF';
+die <<"EOF";
usage: $0 [ -d -x ] source_dir1 source_dir2
EOF
}
aphostname=''
api_revision='5'
api_subversion='0'
-api_version='11'
-api_versionstring='5.11.0'
+api_version='13'
+api_versionstring='5.13.0'
ar='ar'
-archlib='/opt/perl/lib/5.11.5/i686-linux-64int'
-archlibexp='/opt/perl/lib/5.11.5/i686-linux-64int'
+archlib='/opt/perl/lib/5.13.0/i686-linux-64int'
+archlibexp='/opt/perl/lib/5.13.0/i686-linux-64int'
archname64='64int'
archname='i686-linux-64int'
archobjs=''
d_pipe='define'
d_poll='define'
d_portable='define'
+d_prctl='define'
+d_prctl_set_name='define'
d_printf_format_null='define'
d_procselfexe='define'
d_pseudofork='undef'
incpath=''
inews=''
initialinstalllocation='/opt/perl/bin'
-installarchlib='/opt/perl/lib/5.11.5/i686-linux-64int'
+installarchlib='/opt/perl/lib/5.13.0/i686-linux-64int'
installbin='/opt/perl/bin'
installhtml1dir=''
installhtml3dir=''
installman3dir='/opt/perl/man/man3'
installprefix='/opt/perl'
installprefixexp='/opt/perl'
-installprivlib='/opt/perl/lib/5.11.5'
+installprivlib='/opt/perl/lib/5.13.0'
installscript='/opt/perl/bin'
-installsitearch='/opt/perl/lib/site_perl/5.11.5/i686-linux-64int'
+installsitearch='/opt/perl/lib/site_perl/5.13.0/i686-linux-64int'
installsitebin='/opt/perl/bin'
installsitehtml1dir=''
installsitehtml3dir=''
-installsitelib='/opt/perl/lib/site_perl/5.11.5'
+installsitelib='/opt/perl/lib/site_perl/5.13.0'
installsiteman1dir='/opt/perl/man/man1'
installsiteman3dir='/opt/perl/man/man3'
installsitescript='/opt/perl/bin'
perl_patchlevel='34948'
perladmin='yourname@yourhost.yourplace.com'
perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc'
-perlpath='/opt/perl/bin/perl5.11.5'
+perlpath='/opt/perl/bin/perl5.13.0'
pg='pg'
phostname=''
pidtype='pid_t'
pr=''
prefix='/opt/perl'
prefixexp='/opt/perl'
-privlib='/opt/perl/lib/5.11.5'
-privlibexp='/opt/perl/lib/5.11.5'
+privlib='/opt/perl/lib/5.13.0'
+privlibexp='/opt/perl/lib/5.13.0'
procselfexe='"/proc/self/exe"'
prototype='define'
ptrsize='4'
sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0'
sig_size='69'
signal_t='void'
-sitearch='/opt/perl/lib/site_perl/5.11.5/i686-linux-64int'
-sitearchexp='/opt/perl/lib/site_perl/5.11.5/i686-linux-64int'
+sitearch='/opt/perl/lib/site_perl/5.13.0/i686-linux-64int'
+sitearchexp='/opt/perl/lib/site_perl/5.13.0/i686-linux-64int'
sitebin='/opt/perl/bin'
sitebinexp='/opt/perl/bin'
sitehtml1dir=''
sitehtml1direxp=''
sitehtml3dir=''
sitehtml3direxp=''
-sitelib='/opt/perl/lib/site_perl/5.11.5'
+sitelib='/opt/perl/lib/site_perl/5.13.0'
sitelib_stem='/opt/perl/lib/site_perl'
-sitelibexp='/opt/perl/lib/site_perl/5.11.5'
+sitelibexp='/opt/perl/lib/site_perl/5.13.0'
siteman1dir='/opt/perl/man/man1'
siteman1direxp='/opt/perl/man/man1'
siteman3dir='/opt/perl/man/man3'
srandom_r_proto='0'
src='.'
ssizetype='ssize_t'
-startperl='#!/opt/perl/bin/perl5.11.5'
+startperl='#!/opt/perl/bin/perl5.13.0'
startsh='#!/bin/sh'
static_ext=' '
stdchar='char'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
-subversion='5'
+subversion='0'
sysman='/usr/share/man/man1'
tail=''
tar=''
vendorprefixexp=''
vendorscript=''
vendorscriptexp=''
-version='5.11.5'
-version_patchlevel_string='version 11 subversion 5'
+version='5.13.0'
+version_patchlevel_string='version 13 subversion 0'
versiononly='define'
vi=''
voidflags='15'
config_arg8='-Dusedevel'
config_arg9='-dE'
PERL_REVISION=5
-PERL_VERSION=11
-PERL_SUBVERSION=5
+PERL_VERSION=13
+PERL_SUBVERSION=0
PERL_API_REVISION=5
-PERL_API_VERSION=11
+PERL_API_VERSION=13
PERL_API_SUBVERSION=0
PERL_PATCHLEVEL=34948
PERL_CONFIG_SH=true
* This symbol contains the ~name expanded version of ARCHLIB, to be used
* in programs that are not prepared to deal with ~ expansion at run-time.
*/
-#define ARCHLIB "/pro/lib/perl5/5.11.5/i686-linux-64int" /**/
-#define ARCHLIB_EXP "/pro/lib/perl5/5.11.5/i686-linux-64int" /**/
+#define ARCHLIB "/pro/lib/perl5/5.13.0/i686-linux-64int" /**/
+#define ARCHLIB_EXP "/pro/lib/perl5/5.13.0/i686-linux-64int" /**/
/* ARCHNAME:
* This symbol holds a string representing the architecture name.
* This symbol contains the ~name expanded version of PRIVLIB, to be used
* in programs that are not prepared to deal with ~ expansion at run-time.
*/
-#define PRIVLIB "/pro/lib/perl5/5.11.5" /**/
-#define PRIVLIB_EXP "/pro/lib/perl5/5.11.5" /**/
+#define PRIVLIB "/pro/lib/perl5/5.13.0" /**/
+#define PRIVLIB_EXP "/pro/lib/perl5/5.13.0" /**/
/* CAN_PROTOTYPE:
* If defined, this macro indicates that the C compiler can handle
* This symbol contains the ~name expanded version of SITEARCH, to be used
* in programs that are not prepared to deal with ~ expansion at run-time.
*/
-#define SITEARCH "/pro/lib/perl5/site_perl/5.11.5/i686-linux-64int" /**/
-#define SITEARCH_EXP "/pro/lib/perl5/site_perl/5.11.5/i686-linux-64int" /**/
+#define SITEARCH "/pro/lib/perl5/site_perl/5.13.0/i686-linux-64int" /**/
+#define SITEARCH_EXP "/pro/lib/perl5/site_perl/5.13.0/i686-linux-64int" /**/
/* SITELIB:
* This symbol contains the name of the private library for this package.
* removed. The elements in inc_version_list (inc_version_list.U) can
* be tacked onto this variable to generate a list of directories to search.
*/
-#define SITELIB "/pro/lib/perl5/site_perl/5.11.5" /**/
-#define SITELIB_EXP "/pro/lib/perl5/site_perl/5.11.5" /**/
+#define SITELIB "/pro/lib/perl5/site_perl/5.13.0" /**/
+#define SITELIB_EXP "/pro/lib/perl5/site_perl/5.13.0" /**/
#define SITELIB_STEM "/pro/lib/perl5/site_perl" /**/
/* Size_t_size:
* script to make sure (one hopes) that it runs with perl and not
* some shell.
*/
-#define STARTPERL "#!/pro/bin/perl5.11.5" /**/
+#define STARTPERL "#!/pro/bin/perl5.13.0" /**/
/* HAS_STDIO_STREAM_ARRAY:
* This symbol, if defined, tells that there is an array
--- /dev/null
+use strict;
+use 5.010;
+use lib 'dist/Module-CoreList/lib';
+
+use List::MoreUtils qw(uniq);
+use Module::CoreList;
+use Text::Table;
+
+my $old_ver = "5.010000";
+my $new_ver = "5.011005";
+
+my $old = $Module::CoreList::version{ $old_ver };
+my $new = $Module::CoreList::version{ $new_ver };
+
+my $table = Text::Table->new('perl', \' | ', $old_ver, \' | ', $new_ver);
+
+for my $lib (uniq sort (keys %$old, keys %$new)) {
+ my $old = exists $old->{ $lib } ? $old->{ $lib } // '(undef)' : '(absent)';
+ my $new = exists $new->{ $lib } ? $new->{ $lib } // '(undef)' : '(absent)';
+
+ next if $old eq $new;
+
+ $table->add($lib, $old, $new);
+}
+
+print $table;
my ($old, $new) = @ARGV;
$old ||= $versions[-2];
$new ||= $versions[-1];
-
$deprecated = $Module::CoreList::deprecated{$new};
my (@new,@deprecated,@removed,@pragmas,@modules);
# %Modules defines what is currently in core
for my $k ( keys %Modules ) {
+ warn "Considering $k";
next unless exists $corelist->{$new}{$k};
my $old_ver = $corelist->{$old}{$k};
my $new_ver = $corelist->{$new}{$k};
You can find the list of committers and authors by:
- % git log v5.11.1..HEAD | perl -nlwe '$seen{$1}++ if /^Author: ([^<]*)/; END { print for sort keys %seen }'
+ % git log --pretty='format:%an' v5.11.1..HEAD | sort | uniq
And how many files where changed by:
- % git diff v5.11.1..HEAD | diffstat
+ % git diff --stat=200,200 v5.11.1..HEAD
=item Reporting Bugs
use Maintainers qw(%Modules get_module_files get_module_pat);
my @CPAN = grep { $Modules{$_}{CPAN} } keys %Modules;
-my @files = map { get_module_files($_) } @CPAN;
-my @dirs = ('cpan', grep { -d $_ && $_ !~ /^cpan/ } map { get_module_pat($_) } @CPAN);
+my @files = ('lib/unicore/mktables', 'TestInit.pm',
+ 'Porting/Maintainers.pm', 'Porting/perldelta_template.pod',
+ map { get_module_files($_) } @CPAN);
+my @dirs = ('cpan', 'win32', grep { -d $_ && $_ !~ /^cpan/ } map { get_module_pat($_) } @CPAN);
my %dirs;
@dirs{@dirs} = ();
+=encoding utf8
+
=head1 NAME
[ this is a template for a new perldelta file. Any text flagged as
Get perldelta in a mostly finished state.
-Peruse F<Porting/how_to_write_a_perldelta.pod>, and try to make sure that
+Read F<Porting/how_to_write_a_perldelta.pod>, and try to make sure that
every section it lists is, if necessary, populated and complete. Copy
edit the whole document.
Commit your changes:
$ git st
- $ git diff
- B<review the delta carefully>
+ $ git diff
+ B<review the delta carefully>
$ git commit -a -m 'Bump the perl version in various places for 5.x.y'
I<You MAY SKIP this step for SNAPSHOT>
+L<perlport> has a section currently named I<Supported Platforms> that
+indicates which platforms are known to build in the current release.
+If necessary update the list and the indicated version number.
+
+=item *
+
+I<You MAY SKIP this step for SNAPSHOT>
+
Update F<AUTHORS>, using the C<Porting/checkAUTHORS.pl> script, and if
necessary, update the script to include new alias mappings for porters
already in F<AUTHORS>
- $ git log | perl Porting/checkAUTHORS.pl --acknowledged AUTHORS -
+ $ git log --pretty=fuller | perl Porting/checkAUTHORS.pl --acknowledged AUTHORS -
=back
I<You MUST SKIP this step for RC, BLEAD>
-If this was a major release (5.x.0), then create a new maint branch
-based on the commit tagged as the current release and bump the version
-in the blead branch in git, e.g. 5.12.0 to 5.13.0.
+If this was the first release of a new maint series, (5.x.0 where x is
+even), then create a new maint branch based on the commit tagged as
+the current release and bump the version in the blead branch in git,
+e.g. 5.12.0 to 5.13.0.
[ XXX probably lots more stuff to do, including perldelta,
C<lib/feature.pm> ]
-XXX need a git recipe
+Assuming you're using git 1.7.x or newer:
+
+ $ git checkout -b maint-5.12
+ $ git push origin -u maint-5.12
=item *
=item *
+If necessary, send an email to C<perlbug-admin at perl.org> requesting
+that new version numbers be added to the RT fields C<Perl Version> and
+C<Fixed In>.
+
+=item *
+
I<You MUST RETIRE to your preferred PUB, CAFE or SEASIDE VILLA for some
much-needed rest and relaxation>.
=head2 2009
- October 2 - 5.11.0 - Jesse Vincent
- October 20 - 5.11.1 - Jesse Vincent
- November 20 - 5.11.2 - Leon Brocard
- December 20 - 5.11.3 - Jesse Vincent
+ October 2 - Jesse Vincent
+ October 20 - Jesse Vincent
+ November 20 - Leon Brocard
+ December 20 - Jesse Vincent
=head2 2010
- January 20 - 5.11.4 - Ricardo Signes
- February 20 - 5.11.5 - Steve Hay
- March 20 - 5.11.6 - Ask Bjørn Hansen
- April 20 - 5.11.7 - Leon Brocard
- May 20 - 5.11.8 - Ricardo Signes
- June 20 - 5.11.9 - Philippe Bruhat
- July 20 - 5.11.10 - Matt Trout
- August 20 - 5.11.11 - David Golden
- September 20 - 5.11.12 - Steve Hay
+ January 20 - Ricardo Signes
+ February 20 - Steve Hay
+ March 20 - Ask Bjørn Hansen
+ April 20 - Leon Brocard
+ May 20 - Ricardo Signes
+ June 20 - Matt Trout
+ July 20 - David Golden
+ August 20 - Florian Ragwitz
+ September 20 - Steve Hay
+ October 20 - Tatsuhiko Miyagawa
=head1 VICTIMS
David Golden <F<dagolden@cpan.org>>
Philippe Bruhat <F<book@cpan.org>>
Matt Trout <F<mst@shadowcat.co.uk>>
+Florian Ragwitz <F<rafl@debian.org>>
+Tatsuhiko Miyagawa <F<miyagawa@bulknews.net>>
=head2 Reticent victims
-Perl is Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall and others.
-All rights reserved.
+Perl is Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 by Larry Wall
+and others. All rights reserved.
For an introduction to the language's features, see pod/perlintro.pod.
For a discussion of the important changes in this release, see
-pod/perl5116delta.pod. (This will also be installed as perldelta.pod).
+pod/perl5131delta.pod. (This will also be installed as perldelta.pod).
There are also many Perl books available, covering a wide variety of topics,
from various publishers. See pod/perlbook.pod for more information.
=head1 NAME
-README.aix - Perl version 5 on IBM Unix (AIX) systems
+README.aix - Perl version 5 on IBM AIX (UNIX) systems
=head1 DESCRIPTION
-This document describes various features of IBM's Unix operating
-system (AIX) that will affect how Perl version 5 (hereafter just Perl)
+This document describes various features of IBM's UNIX operating
+system AIX that will affect how Perl version 5 (hereafter just Perl)
is compiled and/or runs.
=head2 Compiling Perl 5 on AIX
-For information on compilers on older versions of AIX, see L<Compiling
+For information on compilers on older versions of AIX, see L<Compiling
Perl 5 on older AIX versions up to 4.3.3>.
When compiling Perl, you must use an ANSI C compiler. AIX does not ship
-an ANSI compliant C-compiler with AIX by default, but binary builds of
-gcc for AIX are widely available.
+an ANSI compliant C compiler with AIX by default, but binary builds of
+gcc for AIX are widely available. A version of gcc is also included in
+the AIX Toolbox which is shipped with AIX.
=head2 Supported Compilers
This will not build a threaded Perl, but a thread-enabled Perl. See
also L<Threaded Perl> later on.
-As of writing (2009-08) only the IBM XL C for AIX or XL C/C++ for AIX
-compiler is supported by IBM on AIX 5L/6.1.
+As of writing (2010-03) only the I<IBM XL C for AIX> or I<IBM XL C/C++
+for AIX> compiler is supported by IBM on AIX 5L/6.1.
-The following compiler versions are supported by IBM:
+The following compiler versions are currently supported by IBM:
-XL C and XL C/C++ V7, V8, V9, V10
+ IBM XL C and IBM XL C/C++ V8, V9, V10
-The XL C for AIX is integrated in the XL C/C++ for AIX compiler.
+The XL C for AIX is integrated in the XL C/C++ for AIX compiler and
+therefore also supported.
If you choose XL C/C++ V9 you need APAR IZ35785 installed
otherwise the integrated SDBM_File do not compile correctly due
/opt/freeware/include/gdbm/dbm.h|ndbm.h which conflict with the AIX
system versions. The lib gdbm will be automatically removed from the
wanted libraries if the presence of one of these two header files is
-detected. If you want to bild Perl with GDBM support then please install
-at leas gdbm-devel-1.8.3-5 (or higher).
-
-=head2 Perl 5.10 was successfully compiled and tested on:
-
- AIX Level | Compiler Level | w th | w/o th
- --------------------------+-------------------------+------+-------
- 5.1 TL9 32 bit | XL C/C++ V7 | OK | OK
- 5.1 TL9 32 bit | gcc 3.2.2 | OK | OK
- 5.1 TL9 64 bit | XL C/C++ V7 | OK | OK
- 5.2 TL10 32 bit | XL C/C++ V8 | OK | OK
- 5.2 TL8 64 bit | VA C/C++ V6 | OK | OK
- 5.2 TL10 64 bit | XL C/C++ V8 | OK | OK
- 5.3 TL7 32 bit | XL C/C++ V9 + IZ35785 | OK | OK
- 5.3 TL7 32 bit | gcc 4.2.4 | OK | OK
- 5.3 TL7 64 bit | XL C/C++ V9 + IZ35785 | OK | OK
- 6.1 TL1 32 bit | XL C/C++ V10 | OK | OK
- 6.1 TL1 64 bit + IZ39077 | XL C/C++ V10 | OK | OK
-
- w th = with thread
- w/o th = without thread
+detected. If you want to build Perl with GDBM support then please install
+at least gdbm-devel-1.8.3-5 (or higher).
+
+=head2 Perl 5.12 was successfully compiled and tested on:
+
+ AIX Level | Compiler Level | w th | w/o th
+ ---------------------+-------------------------+------+-------
+ 5.1 TL9 32 bit | XL C/C++ V7 | OK | OK
+ 5.1 TL9 64 bit | XL C/C++ V7 | OK | OK
+ 5.2 TL10 SP8 32 bit | XL C/C++ V8 | OK | OK
+ 5.2 TL10 SP8 32 bit | gcc 3.2.2 | OK | OK
+ 5.2 TL10 SP8 64 bit | XL C/C++ V8 | OK | OK
+ 5.3 TL8 SP8 32 bit | XL C/C++ V9 + IZ35785 | OK | OK
+ 5.3 TL8 SP8 32 bit | gcc 4.2.4 | OK | OK
+ 5.3 TL8 SP8 64 bit | XL C/C++ V9 + IZ35785 | OK | OK
+ 6.1 TL1 SP7 32 bit | XL C/C++ V10 | OK | OK
+ 6.1 TL1 SP7 64 bit | XL C/C++ V10 | OK | OK
+
+ w th = with thread support
+ w/o th = without thread support
OK = tested
-Successfully tested means that all "make test" runs finish with an
+Successfully tested means that all "make test" runs finish with a
result of 100% OK. All tests were conducted with -Duseshrplib set.
+All tests were conducted on the oldest supported AIX technology level
+with the latest support package applied. If the tested AIX version is
+out of support (AIX 4.3.3, 5.1, 5.2) then the last available support
+level was used.
+
=head2 Building Dynamic Extensions on AIX
-Starting from Perl 5.7.2 (and consequently 5.8.x / 5.10.x) and AIX 4.3
-or newer Perl uses the AIX native dynamic loading interface in the so
-called runtime linking mode instead of the emulated interface that was
-used in Perl releases 5.6.1 and earlier or, for AIX releases 4.2 and
-earlier. This change does break backward compatibility with compiled
-modules from earlier Perl releases. The change was made to make Perl
-more compliant with other applications like Apache/mod_perl which are
-using the AIX native interface. This change also enables the use of
-C++ code with static constructors and destructors in Perl extensions,
+Starting from Perl 5.7.2 (and consequently 5.8.x / 5.10.x / 5.12.x)
+and AIX 4.3 or newer Perl uses the AIX native dynamic loading interface
+in the so called runtime linking mode instead of the emulated interface
+that was used in Perl releases 5.6.1 and earlier or, for AIX releases
+4.2 and earlier. This change does break backward compatibility with
+compiled modules from earlier Perl releases. The change was made to make
+Perl more compliant with other applications like Apache/mod_perl which are
+using the AIX native interface. This change also enables the use of
+C++ code with static constructors and destructors in Perl extensions,
which was not possible using the emulated interface.
It is highly recommended to use the new interface.
Should yield no problems with AIX 5.1 / 5.2 / 5.3 and 6.1.
IBM uses the AIX system Perl (V5.6.0 on AIX 5.1 and V5.8.2 on
-AIX 5.2 / 5.3 and 6.1) for some AIX
-system scripts. If you switch the links in /usr/bin from the
+AIX 5.2 / 5.3 and 6.1; V5.8.8 on AIX 5.3 TL11 and AIX 6.1 TL4) for
+some AIX system scripts. If you switch the links in /usr/bin from the
AIX system Perl (/usr/opt/perl5) to the newly build Perl then you
-get the same features as with the IBM AIX system Perl if the
-threaded options are used.
+get the same features as with the IBM AIX system Perl if the threaded
+options are used.
The threaded Perl build works also on AIX 5.1 but the IBM Perl
build (Perl v5.6.0) is not threaded on AIX 5.1.
+Perl 5.12 is not compatible with the IBM fileset perl.libext.
+
=head2 64-bit Perl
If your AIX system is installed with 64-bit support, you can expect 64-bit
configurations to work. If you want to use 64-bit Perl on AIX 6.1
-you need a APAR for a libc.a bug which affects (n)dbm_XXX functions.
+you need an APAR for a libc.a bug which affects (n)dbm_XXX functions.
The APAR number for this problem is IZ39077.
If you need more memory (larger data segment) for your Perl programs you
data = -1 (default is 262144 * 512 byte)
With the default setting the size is limited to 128MB.
-The -1 removes this limit. If the "make test" fails please change
+The -1 removes this limit. If the "make test" fails please change
your /etc/security/limits as stated above.
=head2 Recommended Options AIX 5.1/5.2/5.3 and 6.1 (threaded/32-bit)
=head2 Recommended Options AIX 5.1/5.2/5.3 and 6.1(64-bit)
-With the following options you get a Perl version which passes all
+With the following options you get a Perl version which passes all
make tests in 64-bit mode.
export OBJECT_MODE=64 / setenv OBJECT_MODE 64 (depending on your shell)
-Duse64bitall \
-Dprefix=/usr/opt/perl5_64
-The -Dprefix option will install Perl in a directory parallel to the
+The -Dprefix option will install Perl in a directory parallel to the
IBM AIX system Perl installation.
-If you choose gcc to compile 64-bit Perl then you need to add the
+If you choose gcc to compile 64-bit Perl then you need to add the
following option:
-Dcc='gcc -maix64'
=head2 Compiling Perl 5 on older AIX versions up to 4.3.3
-Due to the fact that AIX 4.3.3 reached end-of-service in December 31,
-2003 this information is provided as is. The Perl versions prior to
-Perl 5.8.9 could be compiled on AIX up to 4.3.3 with the following
+Due to the fact that AIX 4.3.3 reached end-of-service in December 31,
+2003 this information is provided as is. The Perl versions prior to
+Perl 5.8.9 could be compiled on AIX up to 4.3.3 with the following
settings (your mileage may vary):
When compiling Perl, you must use an ANSI C compiler. AIX does not ship
bos.adt.syscalls 5.1.0.36 COMMITTED System Calls Application
#
-=head2 Building Dynamic Extensions on AIX
+=head2 Building Dynamic Extensions on AIX E<lt> 5L
AIX supports dynamically loadable objects as well as shared libraries.
Shared libraries by convention end with the suffix .a, which is a bit
http://www.ibm.com/servers/aix/products/aixos/linux/
-=head2 Using Large Files with Perl
+=head2 Using Large Files with Perl E<lt> 5L
Should yield no problems.
-=head2 Threaded Perl
+=head2 Threaded Perl E<lt> 5L
Threads seem to work OK, though at the moment not all tests pass when
threads are used in combination with 64-bit configurations.
You may get a warning when doing a threaded build:
- "pp_sys.c", line 4640.39: 1506-280 (W) Function argument assignment between types "unsigned char*" and "const void*" is not allowed.
+ "pp_sys.c", line 4640.39: 1506-280 (W) Function argument assignment
+ between types "unsigned char*" and "const void*" is not allowed.
The exact line number may vary, but if the warning (W) comes from a line
line this
different prototype than its non-reentrant variant, but the difference
is not really significant here.
-=head2 64-bit Perl
+=head2 64-bit Perl E<lt> 5L
If your AIX is installed with 64-bit support, you can expect 64-bit
configurations to work. In combination with threads some tests might
=head1 DATE
-Version 0.0.11: 18 Jan 2010
+Version 5.13.0 / 2010-03-20
=cut
Make perl executable and create a symlink for libperl:
chmod a+x /boot/common/bin/perl
- cd /boot/common/lib; ln -s perl5/5.11.5/BePC-haiku/CORE/libperl.so .
+ cd /boot/common/lib; ln -s perl5/5.13.0/BePC-haiku/CORE/libperl.so .
-Replace C<5.11.5> with your respective version of Perl.
+Replace C<5.13.0> with your respective version of Perl.
=head1 KNOWN PROBLEMS
=item Additional Perl modules
- unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.11.5/
+ unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.13.0/
Same remark as above applies. Additionally, if this directory is not
one of directories on @INC (and @INC is influenced by C<PERLLIB_PREFIX>), you
provided with previous versions of Perl, do I<not> use the ODS-2
compatability qualifier. Instead, use a command like the following:
- vmstar -xvf perl-5^.11^.5.tar
+ vmstar -xvf perl-5^.13^.0.tar
Then rename the top-level source directory like so:
- set security/protection=(o:rwed) perl-5^.11^.5.dir
- rename perl-5^.11^.5.dir perl-5_11_5.dir
+ set security/protection=(o:rwed) perl-5^.13^.0.dir
+ rename perl-5^.13^.0.dir perl-5_12_0.dir
The reason for this last step is that while filenames with multiple dots
are generally supported by Perl on VMS, I<directory> names with multiple
The MinGW64 compiler is available at http://sourceforge.net/projects/mingw-w64.
The latter is actually a cross-compiler targeting Win64. There's also a trimmed
down compiler (no java, or gfortran) suitable for building perl available at:
-http://svn.ali.as/cpan/users/kmx/strawberry_gcc-toolchain/
+http://strawberryperl.com/package/kmx/64_gcctoolchain/mingw64-w64-20100123-kmx-v2.zip
NOTE: If you're using a 32-bit compiler to build perl on a 64-bit Windows
operating system, then you should set the WIN64 environment variable to "undef".
+Also, the trimmed down compiler only passes tests when USE_ITHREADS *= define
+(as opposed to undef) and when the CFG *= Debug line is commented out.
This port fully supports MakeMaker (the set of modules that
is used to build extensions to perl). Therefore, you should be
Type "dmake" (or "nmake" if you are using that make).
This should build everything. Specifically, it will create perl.exe,
-perl511.dll at the perl toplevel, and various other extension dll's
+perl513.dll at the perl toplevel, and various other extension dll's
under the lib\auto directory. If the build fails for any reason, make
sure you have done the previous steps correctly.
# define ferror PerlSIO_ferror
# define clearerr PerlSIO_clearerr
# define getc PerlSIO_getc
+# define fgets PerlSIO_fgets
# define fputc PerlSIO_fputc
# define fputs PerlSIO_fputs
# define fflush PerlSIO_fflush
=head1 SEE ALSO
-perlguts(1), perlxs(1), perlxstut(1), perlintern(1)
+L<perlguts>, L<perlxs>, L<perlxstut>, L<perlintern>
_EOE_
=head1 SEE ALSO
-perlguts(1), perlapi(1)
+L<perlguts>, L<perlapi>
END
mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied);
if (mg) {
- dSP;
- ENTER;
- SAVETMPS;
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- EXTEND(SP,2);
- PUSHs(SvTIED_obj(MUTABLE_SV(av), mg));
- mPUSHi(key + 1);
- PUTBACK;
- call_method("EXTEND", G_SCALAR|G_DISCARD);
- POPSTACK;
- FREETMPS;
- LEAVE;
+ SV *arg1 = sv_newmortal();
+ sv_setiv(arg1, (IV)(key + 1));
+ Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, "EXTEND", G_DISCARD, 1,
+ arg1);
return;
}
if (key > AvMAX(av)) {
sv = sv_newmortal();
sv_upgrade(sv, SVt_PVLV);
mg_copy(MUTABLE_SV(av), sv, 0, key);
+ if (!tied_magic) /* for regdata, force leavesub to make copies */
+ SvTEMP_off(sv);
LvTYPE(sv) = 't';
LvTARG(sv) = sv; /* fake (SV**) */
return &(LvTARG(sv));
Perl_croak(aTHX_ "%s", PL_no_modify);
if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
- dSP;
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- EXTEND(SP,2);
- PUSHs(SvTIED_obj(MUTABLE_SV(av), mg));
- PUSHs(val);
- PUTBACK;
- ENTER;
- call_method("PUSH", G_SCALAR|G_DISCARD);
- LEAVE;
- POPSTACK;
+ Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, "PUSH", G_DISCARD, 1,
+ val);
return;
}
av_store(av,AvFILLp(av)+1,val);
if (SvREADONLY(av))
Perl_croak(aTHX_ "%s", PL_no_modify);
if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
- dSP;
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- XPUSHs(SvTIED_obj(MUTABLE_SV(av), mg));
- PUTBACK;
- ENTER;
- if (call_method("POP", G_SCALAR)) {
- retval = newSVsv(*PL_stack_sp--);
- } else {
- retval = &PL_sv_undef;
- }
- LEAVE;
- POPSTACK;
+ retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, "POP", 0, 0);
+ if (retval)
+ retval = newSVsv(retval);
return retval;
}
if (AvFILL(av) < 0)
Perl_croak(aTHX_ "%s", PL_no_modify);
if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
- dSP;
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- EXTEND(SP,1+num);
- PUSHs(SvTIED_obj(MUTABLE_SV(av), mg));
- while (num-- > 0) {
- PUSHs(&PL_sv_undef);
- }
- PUTBACK;
- ENTER;
- call_method("UNSHIFT", G_SCALAR|G_DISCARD);
- LEAVE;
- POPSTACK;
+ Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, "UNSHIFT",
+ G_DISCARD | G_UNDEF_FILL, num);
return;
}
if (SvREADONLY(av))
Perl_croak(aTHX_ "%s", PL_no_modify);
if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
- dSP;
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- XPUSHs(SvTIED_obj(MUTABLE_SV(av), mg));
- PUTBACK;
- ENTER;
- if (call_method("SHIFT", G_SCALAR)) {
- retval = newSVsv(*PL_stack_sp--);
- } else {
- retval = &PL_sv_undef;
- }
- LEAVE;
- POPSTACK;
+ retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, "SHIFT", 0, 0);
+ if (retval)
+ retval = newSVsv(retval);
return retval;
}
if (AvFILL(av) < 0)
if (fill < 0)
fill = -1;
if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) {
- dSP;
- ENTER;
- SAVETMPS;
- PUSHSTACKi(PERLSI_MAGIC);
- PUSHMARK(SP);
- EXTEND(SP,2);
- PUSHs(SvTIED_obj(MUTABLE_SV(av), mg));
- mPUSHi(fill + 1);
- PUTBACK;
- call_method("STORESIZE", G_SCALAR|G_DISCARD);
- POPSTACK;
- FREETMPS;
- LEAVE;
+ SV *arg1 = sv_newmortal();
+ sv_setiv(arg1, (IV)(fill + 1));
+ Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, "STORESIZE", G_DISCARD,
+ 1, arg1);
return;
}
if (fill <= AvMAX(av)) {
mg = mg_find(sv, PERL_MAGIC_tiedelem);
if (mg) {
magic_existspack(sv, mg);
- return (bool)SvTRUE(sv);
+ return cBOOL(SvTRUE(sv));
}
}
#$d_ctime_r HAS_CTIME_R /**/
#define CTIME_R_PROTO $ctime_r_proto /**/
+/* SETUID_SCRIPTS_ARE_SECURE_NOW:
+ * This symbol, if defined, indicates that the bug that prevents
+ * setuid scripts from being secure is not present in this kernel.
+ */
+/* DOSUID:
+ * This symbol, if defined, indicates that the C program should
+ * check the script that it is executing for setuid/setgid bits, and
+ * attempt to emulate setuid/setgid on systems that have disabled
+ * setuid #! scripts because the kernel can't do it securely.
+ * It is up to the package designer to make sure that this emulation
+ * is done securely. Among other things, it should do an fstat on
+ * the script it just opened to make sure it really is a setuid/setgid
+ * script, it should make sure the arguments passed correspond exactly
+ * to the argument on the #! line, and it should not trust any
+ * subprocesses to which it must pass the filename rather than the
+ * file descriptor of the script to be executed.
+ */
+#$d_suidsafe SETUID_SCRIPTS_ARE_SECURE_NOW /**/
+#$d_dosuid DOSUID /**/
+
/* HAS_DRAND48_R:
* This symbol, if defined, indicates that the drand48_r routine
* is available to drand48 re-entrantly.
*/
#$ebcdic EBCDIC /**/
-/* SETUID_SCRIPTS_ARE_SECURE_NOW:
- * This symbol, if defined, indicates that the bug that prevents
- * setuid scripts from being secure is not present in this kernel.
- */
-/* DOSUID:
- * This symbol, if defined, indicates that the C program should
- * check the script that it is executing for setuid/setgid bits, and
- * attempt to emulate setuid/setgid on systems that have disabled
- * setuid #! scripts because the kernel can't do it securely.
- * It is up to the package designer to make sure that this emulation
- * is done securely. Among other things, it should do an fstat on
- * the script it just opened to make sure it really is a setuid/setgid
- * script, it should make sure the arguments passed correspond exactly
- * to the argument on the #! line, and it should not trust any
- * subprocesses to which it must pass the filename rather than the
- * file descriptor of the script to be executed.
- */
-#$d_suidsafe SETUID_SCRIPTS_ARE_SECURE_NOW /**/
-#$d_dosuid DOSUID /**/
-
/* PERL_USE_DEVEL:
* This symbol, if defined, indicates that Perl was configured with
* -Dusedevel, to enable development features. This should not be
*/
#$d_off64_t HAS_OFF64_T /**/
+/* HAS_PRCTL:
+ * This symbol, if defined, indicates that the prctl routine is
+ * available to set process title.
+ */
+/* HAS_PRCTL_SET_NAME:
+ * This symbol, if defined, indicates that the prctl routine is
+ * available to set process title and supports PR_SET_NAME.
+ */
+#$d_prctl HAS_PRCTL /**/
+#$d_prctl_set_name HAS_PRCTL_SET_NAME /**/
+
/* HAS_PROCSELFEXE:
* This symbol is defined if PROCSELFEXE_PATH is a symlink
* to the absolute pathname of the executing program.
$ static_ext = ""
$ dynamic_ext = ""
$ nonxs_ext = ""
+$ nonxs_ext2 = ""
$ vms_default_directory_name = F$ENVIRONMENT("DEFAULT")
$ max_allowed_dir_depth = 3 ! e.g. [A.B.PERLxxx] not [A.B.C.PERLxxx]
$! max_allowed_dir_depth = 2 ! e.g. [A.PERLxxx] not [A.B.PERLxxx]
$ xxx = nonxs_ext
$ gosub may_already_have_extension
$ ENDIF
+$ IF $STATUS .EQ. 1
+$ THEN
+$ xxx = nonxs_ext2
+$ gosub may_already_have_extension
+$ ENDIF
$ IF $STATUS .NE. 1 THEN goto ext_loop
$ goto found_new_extension
$!
$ may_already_have_extension:
$ idx = F$LOCATE(extspec, xxx)
$ extlen = F$LENGTH(xxx)
-$ IF idx .EQ. extlen THEN return 1
-$! But "Flirble" may just be part of "Acme-Flirble"
+$ IF idx .EQ. extlen THEN return 1 ! didn't find it
+$! But "Flirble" may just be part of "Acme-Flirble". This is not
+$! bullet-proof because we may only be looking at one chunk of the
+$! existing extension list.
$ IF idx .GT. 0 .AND. F$EXTRACT(idx - 1, 1, xxx) .NES. " "
$ THEN
$ xxx = F$EXTRACT(idx + F$LENGTH(extspec) + 1, extlen, xxx)
$ found_new_extension:
$ IF F$SEARCH("[-.ext.''extension_dir_name']*.xs") .EQS. "" .AND. F$SEARCH("[-.dist.''extension_dir_name']*.xs") .EQS. "" .AND. F$SEARCH("[-.cpan.''extension_dir_name']*.xs") .EQS. ""
$ THEN
-$ nonxs_ext = nonxs_ext + " ''extspec'"
+$! Bit if a hack to get around the 1K buffer on older systems.
+$ IF F$LENGTH(nonxs_ext) .GT. 950
+$ THEN
+$ nonxs_ext2 = nonxs_ext2 + " ''extspec'"
+$ ELSE
+$ nonxs_ext = nonxs_ext + " ''extspec'"
+$ ENDIF
$ ELSE
$ known_extensions = known_extensions + " ''extspec'"
$ ENDIF
$ ENDIF
$ dflt = dflt - "Win32API/File" - "Win32" ! need Dave Cutler's other project
$ nonxs_ext = nonxs_ext - "Win32CORE"
+$ nonxs_ext2 = nonxs_ext2 - "Win32CORE"
$ dflt = F$EDIT(dflt,"TRIM,COMPRESS")
$ nonxs_ext = F$EDIT(nonxs_ext,"TRIM,COMPRESS")
+$ nonxs_ext2 = F$EDIT(nonxs_ext2,"TRIM,COMPRESS")
$!
$! Ask for their default list of extensions to build
$ echo ""
$ bool_dflt = "y"
$ IF F$TYPE(useperlio) .NES. ""
$ then
-$ if f$extract(0,1,f$edit(useperlio,"collapse,upcase")) .eqs. "N" .or. useperlio .eqs. "undef" then bool_dflt = "n"
+$ if .not. useperlio .or. useperlio .eqs. "undef" then bool_dflt = "n"
$ endif
$ IF .NOT. silent
$ THEN
$ WC "d_attribute_pure='undef'"
$ WC "d_attribute_unused='undef'"
$ WC "d_attribute_warn_unused_result='undef'"
+$ WC "d_prctl='undef'"
+$ WC "d_prctl_set_name='undef'"
$ WC "d_printf_format_null='undef'"
$ WC "d_bcmp='" + d_bcmp + "'"
$ WC "d_bcopy='" + d_bcopy + "'"
$!
$! The extensions symbols may be quite long
$!
-$ tmp = "extensions='" + nonxs_ext + " " + dynamic_ext + "'"
-$ WC/symbol tmp
-$ DELETE/SYMBOL tmp
+$ WC/symbol "extensions='", nonxs_ext, " ", nonxs_ext2, " ", dynamic_ext, "'"
$ WC "fflushNULL='define'"
$ WC "fflushall='undef'"
$ WC "fpostype='fpos_t'"
$ WC "netdb_host_type='" + netdb_host_type + "'"
$ WC "netdb_name_type='" + netdb_name_type + "'"
$ WC "netdb_net_type='" + netdb_net_type + "'"
-$ tmp = "nonxs_ext='" + nonxs_ext + "'"
-$ WC/symbol tmp
-$ DELETE/SYMBOL tmp
+$ WC/symbol "nonxs_ext='", nonxs_ext, " ", nonxs_ext2, "'"
$ WC "nveformat='" + nveformat + "'"
$ WC "nvfformat='" + nvfformat + "'"
$ WC "nvgformat='" + nvgformat + "'"
*/
/* A jmpenv packages the state required to perform a proper non-local jump.
- * Note that there is a start_env initialized when perl starts, and top_env
- * points to this initially, so top_env should always be non-null.
+ * Note that there is a PL_start_env initialized when perl starts, and
+ * PL_top_env points to this initially, so PL_top_env should always be
+ * non-null.
*
- * Existence of a non-null top_env->je_prev implies it is valid to call
- * longjmp() at that runlevel (we make sure start_env.je_prev is always
+ * Existence of a non-null PL_top_env->je_prev implies it is valid to call
+ * longjmp() at that runlevel (we make sure PL_start_env.je_prev is always
* null to ensure this).
*
* je_mustcatch, when set at any runlevel to TRUE, means eval ops must
#define JMPENV_PUSH(v) \
STMT_START { \
- DEBUG_l(Perl_deb(aTHX_ "Setting up jumplevel %p, was %p at %s:%d\n", \
- (void*)&cur_env, (void*)PL_top_env, \
- __FILE__, __LINE__)); \
+ DEBUG_l({ \
+ int i = 0; JMPENV *p = PL_top_env; \
+ while (p) { i++; p = p->je_prev; } \
+ Perl_deb(aTHX_ "JUMPENV_PUSH level=%d at %s:%d\n", \
+ i, __FILE__, __LINE__);}) \
cur_env.je_prev = PL_top_env; \
OP_REG_TO_MEM; \
cur_env.je_ret = PerlProc_setjmp(cur_env.je_buf, SCOPE_SAVES_SIGNAL_MASK); \
#define JMPENV_POP \
STMT_START { \
- DEBUG_l(Perl_deb(aTHX_ "popping jumplevel was %p, now %p at %s:%d\n", \
- (void*)PL_top_env, (void*)cur_env.je_prev, \
- __FILE__, __LINE__)); \
+ DEBUG_l({ \
+ int i = -1; JMPENV *p = PL_top_env; \
+ while (p) { i++; p = p->je_prev; } \
+ Perl_deb(aTHX_ "JUMPENV_POP level=%d at %s:%d\n", \
+ i, __FILE__, __LINE__);}) \
assert(PL_top_env == &cur_env); \
PL_top_env = cur_env.je_prev; \
} STMT_END
#define JMPENV_JUMP(v) \
STMT_START { \
+ DEBUG_l({ \
+ int i = -1; JMPENV *p = PL_top_env; \
+ while (p) { i++; p = p->je_prev; } \
+ Perl_deb(aTHX_ "JUMPENV_JUMP(%d) level=%d at %s:%d\n", \
+ (int)v, i, __FILE__, __LINE__);}) \
OP_REG_TO_MEM; \
if (PL_top_env->je_prev) \
PerlProc_longjmp(PL_top_env->je_buf, (v)); \
} STMT_END
#define CATCH_GET (PL_top_env->je_mustcatch)
-#define CATCH_SET(v) (PL_top_env->je_mustcatch = (v))
+#define CATCH_SET(v) \
+ STMT_START { \
+ DEBUG_l( \
+ Perl_deb(aTHX_ \
+ "JUMPLEVEL set catch %d => %d (for %p) at %s:%d\n", \
+ PL_top_env->je_mustcatch, v, (void*)PL_top_env, \
+ __FILE__, __LINE__);) \
+ PL_top_env->je_mustcatch = (v); \
+ } STMT_END
#include "mydtrace.h"
#define blk_loop cx_u.cx_blk.blk_u.blku_loop
#define blk_givwhen cx_u.cx_blk.blk_u.blku_givwhen
+#define DEBUG_CX(action) \
+ DEBUG_l(WITH_THX( \
+ Perl_deb(aTHX_ "CX %ld %s %s (scope %ld,%ld) at %s:%d\n", \
+ (long)cxstack_ix, \
+ action, \
+ PL_block_type[CxTYPE(&cxstack[cxstack_ix])], \
+ (long)PL_scopestack_ix, \
+ (long)(cxstack[cxstack_ix].blk_oldscopesp), \
+ __FILE__, __LINE__)));
+
/* Enter a block. */
#define PUSHBLOCK(cx,t,sp) CXINC, cx = &cxstack[cxstack_ix], \
cx->cx_type = t, \
cx->blk_oldscopesp = PL_scopestack_ix, \
cx->blk_oldpm = PL_curpm, \
cx->blk_gimme = (U8)gimme; \
- DEBUG_l( PerlIO_printf(Perl_debug_log, "Entering block %ld, type %s\n", \
- (long)cxstack_ix, PL_block_type[CxTYPE(cx)]); )
+ DEBUG_CX("PUSH");
/* Exit a block (RETURN and LAST). */
-#define POPBLOCK(cx,pm) cx = &cxstack[cxstack_ix--], \
+#define POPBLOCK(cx,pm) \
+ DEBUG_CX("POP"); \
+ cx = &cxstack[cxstack_ix--], \
newsp = PL_stack_base + cx->blk_oldsp, \
PL_curcop = cx->blk_oldcop, \
PL_markstack_ptr = PL_markstack + cx->blk_oldmarksp, \
PL_scopestack_ix = cx->blk_oldscopesp, \
pm = cx->blk_oldpm, \
- gimme = cx->blk_gimme; \
- DEBUG_SCOPE("POPBLOCK"); \
- DEBUG_l( PerlIO_printf(Perl_debug_log, "Leaving block %ld, type %s\n", \
- (long)cxstack_ix+1,PL_block_type[CxTYPE(cx)]); )
+ gimme = cx->blk_gimme;
/* Continue a block elsewhere (NEXT and REDO). */
-#define TOPBLOCK(cx) cx = &cxstack[cxstack_ix], \
+#define TOPBLOCK(cx) \
+ DEBUG_CX("TOP"); \
+ cx = &cxstack[cxstack_ix], \
PL_stack_sp = PL_stack_base + cx->blk_oldsp, \
PL_markstack_ptr = PL_markstack + cx->blk_oldmarksp, \
PL_scopestack_ix = cx->blk_oldscopesp, \
- PL_curpm = cx->blk_oldpm; \
- DEBUG_SCOPE("TOPBLOCK");
+ PL_curpm = cx->blk_oldpm;
/* substitution context */
struct subst {
#define G_METHOD 128 /* Calling method. */
#define G_FAKINGEVAL 256 /* Faking an eval context for call_sv or
fold_constants. */
+#define G_UNDEF_FILL 512 /* Fill the stack with &PL_sv_undef
+ A special case for UNSHIFT in
+ Perl_magic_methcall(). */
/* flag bits for PL_in_eval */
#define EVAL_NULL 0 /* not in an eval */
#define PUSHSTACKi(type) \
STMT_START { \
PERL_SI *next = PL_curstackinfo->si_next; \
+ DEBUG_l({ \
+ int i = 0; PERL_SI *p = PL_curstackinfo; \
+ while (p) { i++; p = p->si_prev; } \
+ Perl_deb(aTHX_ "push STACKINFO %d at %s:%d\n", \
+ i, __FILE__, __LINE__);}) \
if (!next) { \
next = new_stackinfo(32, 2048/sizeof(PERL_CONTEXT) - 1); \
next->si_prev = PL_curstackinfo; \
STMT_START { \
dSP; \
PERL_SI * const prev = PL_curstackinfo->si_prev; \
+ DEBUG_l({ \
+ int i = -1; PERL_SI *p = PL_curstackinfo; \
+ while (p) { i++; p = p->si_prev; } \
+ Perl_deb(aTHX_ "pop STACKINFO %d at %s:%d\n", \
+ i, __FILE__, __LINE__);}) \
if (!prev) { \
PerlIO_printf(Perl_error_log, "panic: POPSTACK\n"); \
my_exit(1); \
+Version 3.49
+
+ [BUG FIXES]
+ 1. Fix a regression since 3.44 involving a case when the header includes "Content-Length: 0".
+ Thanks to Alex Vandiver (RT#51109)
+ 2. Suppress uninitialized warnings under -w. Thanks to burak. (RT#50301)
+ 3. url() now uses virtual_port() instead of server_port(). Thanks to MKANAT and Yanick Champoux. (RT#51562)
+
+ [SECURITY]
+ 1. embedded newlines are now filtered out of header values in header().
+ Thanks to Mark Stosberg and Yanick Champoux.
+
+ [DOCUMENTATION]
+ 1. README was updated to reflect that CGI.pm was moved under ./lib.
+ Thanks to Alex Vandiver.
+
+ [INTERNALS]
+ 1. More tests were added for autoescape, thanks to Bob Kuo. (RT#25485)
+ 2. Attempt to avoid test failures with t/fast, thanks to Steve Hay. (RT#49599)
+
Version 3.48
[BUG FIXES]
# http://stein.cshl.org/WWW/software/CGI/
$CGI::revision = '$Id: CGI.pm,v 1.266 2009/07/30 16:32:34 lstein Exp $';
-$CGI::VERSION='3.48';
+$CGI::VERSION='3.49';
# HARD-CODED LOCATION FOR FILE UPLOAD TEMPORARY FILES.
# UNCOMMENT THIS ONLY IF YOU KNOW WHAT YOU'RE DOING.
if ( $content_length > 0 ) {
$self->read_from_client(\$query_string,$content_length,0);
}
- else {
+ elsif (not defined $ENV{CONTENT_LENGTH}) {
$self->read_from_stdin(\$query_string);
# should this be PUTDATA in case of PUT ?
my($param) = $meth . 'DATA' ;
'EXPIRES','NPH','CHARSET',
'ATTACHMENT','P3P'],@p);
+ # CR escaping for values, per RFC 822
+ for my $header ($type,$status,$cookie,$target,$expires,$nph,$charset,$attachment,$p3p,@other) {
+ if (defined $header) {
+ $header =~ s/
+ (?<=\n) # For any character proceeded by a newline
+ (?=\S) # ... that is not whitespace
+ / /xg; # ... inject a leading space in the new line
+ }
+ }
+
$nph ||= $NPH;
$type ||= 'text/html' unless defined($type);
# need to fix it up a little.
for (@other) {
# Don't use \s because of perl bug 21951
- next unless my($header,$value) = /([^ \r\n\t=]+)=\"?(.+?)\"?$/;
+ next unless my($header,$value) = /([^ \r\n\t=]+)=\"?(.+?)\"?$/s;
($_ = $header) =~ s/^(\w)(.*)/"\u$1\L$2" . ': '.$self->unescapeHTML($value)/e;
}
my(@values);
@values = $self->_set_values_and_labels($values,\$labels,$name);
$tabindex = $self->element_tab($tabindex);
+ $name = q{} if ! defined $name;
$result = qq/<select name="$name" $tabindex$other>\n/;
for (@values) {
if (/<optgroup/) {
@values = $self->_set_values_and_labels($values,\$labels,$name,$labeled,$novals);
my($other) = @other ? " @other" : '';
- $name=$self->_maybe_escapeHTML($name);
+ $name = $self->_maybe_escapeHTML($name) || q{};
$result = qq/<optgroup label="$name"$other>\n/;
for (@values) {
if (/<optgroup/) {
# $uri =~ s/\Q$path\E$// if defined $path; # remove path
if ($full) {
- my $protocol = $self->protocol();
- $url = "$protocol://";
- my $vh = http('x_forwarded_host') || http('host') || '';
- $vh =~ s/\:\d+$//; # some clients add the port number (incorrectly). Get rid of it.
- if ($vh) {
- $url .= $vh;
- } else {
- $url .= server_name();
- }
- my $port = $self->server_port;
- $url .= ":" . $port
- unless (lc($protocol) eq 'http' && $port == 80)
- || (lc($protocol) eq 'https' && $port == 443);
+ my $protocol = $self->protocol();
+ $url = "$protocol://";
+ my $vh = http('x_forwarded_host') || http('host') || '';
+ $vh =~ s/\:\d+$//; # some clients add the port number (incorrectly). Get rid of it.
+
+ $url .= $vh || server_name();
+
+ my $port = $self->virtual_port;
+
+ # add the port to the url unless it's the protocol's default port
+ $url .= ':' . $port unless (lc($protocol) eq 'http' && $port == 80)
+ or (lc($protocol) eq 'https' && $port == 443);
+
return $url if $base;
- $url .= $uri;
+
+ $url .= $uri;
} elsif ($relative) {
($url) = $uri =~ m!([^/]+)$!;
} elsif ($absolute) {
use CGI;
- open (OUT,">>test.out") || die;
+ open (OUT,'>>','test.out') || die;
$records = 5;
for (0..$records) {
my $q = CGI->new;
close OUT;
# reopen for reading
- open (IN,"test.out") || die;
+ open (IN,'<','test.out') || die;
while (!eof(IN)) {
my $q = CGI->new(\*IN);
print $q->param('counter'),"\n";
P3P: policyref="/w3c/p3p.xml" cp="CAO DSP LAW CURa"
+Note that if a header value contains a carriage return, a leading space will be
+added to each new line that doesn't already have one as specified by RFC2616
+section 4.2. For example:
+
+ print header( -ingredients => "ham\neggs\nbacon" );
+
+will generate
+
+ Ingredients: ham
+ eggs
+ bacon
+
=head2 GENERATING A REDIRECTION HEADER
print $q->redirect('http://somewhere.else/in/movie/land');
# undef may be returned if it's not a valid file handle
if (defined $lightweight_fh) {
# Upgrade the handle to one compatible with IO::Handle:
- my $io_handle = $lightweight_fh->handle;
+ my $io_handle = $lightweight_fh->handle;
- open (OUTFILE,">>/usr/local/web/users/feedback");
- while ($bytesread = $io_handle->read($buffer,1024)) {
- print OUTFILE $buffer;
- }
+ open (OUTFILE,'>>','/usr/local/web/users/feedback');
+ while ($bytesread = $io_handle->read($buffer,1024)) {
+ print OUTFILE $buffer;
+ }
}
In a list context, upload() will return an array of filehandles.
}
sub do_work {
- my(@values,$key);
print "<h2>Here are the current settings in this form</h2>";
- for $key (param) {
+ for my $key (param) {
print "<strong>$key</strong> -> ";
- @values = param($key);
+ my @values = param($key);
print join(", ",@values),"<br>\n";
}
}
sub die {
my ($arg,@rest) = @_;
- if ($DIE_HANDLER) {
- &$DIE_HANDLER($arg,@rest);
- }
+ &$DIE_HANDLER($arg,@rest) if $DIE_HANDLER;
- if ( ineval() ) {
- if (!ref($arg)) {
- $arg = join("",($arg,@rest)) || "Died";
- my($file,$line,$id) = id(1);
- $arg .= " at $file line $line.\n" unless $arg=~/\n$/;
- realdie($arg);
- }
- else {
- realdie($arg,@rest);
- }
- }
+ # if called as die( $object, 'string' ),
+ # all is stringified, just like with
+ # the real 'die'
+ $arg = join '' => "$arg", @rest if @rest;
+
+ $arg ||= 'Died';
+
+ my($file,$line,$id) = id(1);
+
+ $arg .= " at $file line $line.\n" unless ref $arg or $arg=~/\n$/;
+
+ realdie $arg if ineval();
+ &fatalsToBrowser($arg) if $WRAP;
+
+ $arg=~s/^/ stamp() /gme if $arg =~ /\n$/ or not exists $ENV{MOD_PERL};
+
+ $arg .= "\n" unless $arg =~ /\n$/;
- if (!ref($arg)) {
- $arg = join("", ($arg,@rest));
- my($file,$line,$id) = id(1);
- $arg .= " at $file line $line." unless $arg=~/\n$/;
- &fatalsToBrowser($arg) if $WRAP;
- if (($arg =~ /\n$/) || !exists($ENV{MOD_PERL})) {
- my $stamp = stamp;
- $arg=~s/^/$stamp/gm;
- }
- if ($arg !~ /\n$/) {
- $arg .= "\n";
- }
- }
realdie $arg;
}
# headers
sub fatalsToBrowser {
- my($msg) = @_;
+ my $msg = shift;
+
+ $msg = "$msg" if ref $msg;
+
$msg=~s/&/&/g;
$msg=~s/>/>/g;
$msg=~s/</</g;
- $msg=~s/\"/"/g;
+ $msg=~s/"/"/g;
+
my($wm) = $ENV{SERVER_ADMIN} ?
qq[the webmaster (<a href="mailto:$ENV{SERVER_ADMIN}">$ENV{SERVER_ADMIN}</a>)] :
"this site's webmaster";
package CGI::Cookie;
+use strict;
+use warnings;
+
# See the bottom of this file for the POD documentation. Search for the
# string '=head'.
$r ||= eval { $MOD_PERL == 2 ?
Apache2::RequestUtil->request() :
Apache->request } if $MOD_PERL;
- if ($r) {
- $raw_cookie = $r->headers_in->{'Cookie'};
- } else {
- if ($MOD_PERL && !exists $ENV{REQUEST_METHOD}) {
- die "Run $r->subprocess_env; before calling fetch()";
- }
- $raw_cookie = $ENV{HTTP_COOKIE} || $ENV{COOKIE};
- }
+
+ return $r->headers_in->{'Cookie'} if $r;
+
+ die "Run $r->subprocess_env; before calling fetch()"
+ if $MOD_PERL and !exists $ENV{REQUEST_METHOD};
+
+ return $ENV{HTTP_COOKIE} || $ENV{COOKIE};
}
shift if ref $_[0]
&& eval { $_[0]->isa('Apache::Request::Req') || $_[0]->isa('Apache') };
my($name,$value,$path,$domain,$secure,$expires,$httponly) =
- rearrange([NAME,[VALUE,VALUES],PATH,DOMAIN,SECURE,EXPIRES,HTTPONLY],@_);
+ rearrange([ 'NAME', ['VALUE','VALUES'], qw/ PATH DOMAIN SECURE EXPIRES
+ HTTPONLY / ], @_);
# Pull out our parameters.
my @values;
package CGI::Fast;
use strict;
-$^W=1; # A way to say "use warnings" that's compatible with even older perls.
+
+# A way to say "use warnings" that's compatible with even older perls.
+# making it local will not affect the code that loads this module
+# and since we're not in a BLOCK, warnings are enabled until the EOF
+local $^W = 1;
# See the bottom of this file for the POD documentation. Search for the
# string '=head'.
# wish, but if you redistribute a modified version, please attach a note
# listing the modifications you have made.
-$CGI::Fast::VERSION='1.07';
+$CGI::Fast::VERSION='1.08';
use CGI;
use FCGI;
# was always so and cannot be fixed without breaking the binary data case.
# -- Stepan Kasal <skasal@redhat.com>
#
+if ($] == 5.008) {
+ package utf8;
+
+ no warnings 'redefine'; # needed for Perl 5.8.1+
+
+ my $is_utf8_redefinition = <<'EOR';
+ sub is_utf8 {
+ my ($text) = @_;
+
+ my $ctext = pack q{C0a*}, $text;
+
+ return ($text ne $ctext) && ($ctext =~ m/^(
+ [\x09\x0A\x0D\x20-\x7E]
+ | [\xC2-\xDF][\x80-\xBF]
+ | \xE0[\xA0-\xBF][\x80-\xBF]
+ | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}
+ | \xED[\x80-\x9F][\x80-\xBF]
+ | \xF0[\x90-\xBF][\x80-\xBF]{2}
+ | [\xF1-\xF3][\x80-\xBF]{3}
+ | \xF4[\x80-\x8F][\x80-\xBF]{2}
+ )*$/xo);
+ }
+EOR
+
+ eval $is_utf8_redefinition;
+}
+
sub escape {
shift() if @_ > 1 and ( ref($_[0]) || (defined $_[1] && $_[0] eq $CGI::DefaultClass));
my $toencode = shift;
return undef unless defined($toencode);
- utf8::encode($toencode) if ($] > 5.008001 && utf8::is_utf8($toencode));
+ utf8::encode($toencode) if ($] >= 5.008 && utf8::is_utf8($toencode));
if ($EBCDIC) {
$toencode=~s/([^a-zA-Z0-9_.~-])/uc sprintf("%%%02x",$E2A[ord($1)])/eg;
} else {
use strict;
-use Test::More tests => 41;
+use Test::More tests => 59;
use IO::Handle;
BEGIN { use_ok('CGI::Carp') };
# Test that realwarn is called
{
local $^W = 0;
- eval 'sub CGI::Carp::realdie {my $mess = shift; return $mess};';
-}
+ local *CGI::Carp::realdie = sub { my $mess = shift; return $mess };
-like(CGI::Carp::die('There is a problem'),
- $stamp,
- 'CGI::Carp::die calls CORE::die, but adds stamp');
+ like(CGI::Carp::die('There is a problem'),
+ $stamp,
+ 'CGI::Carp::die calls CORE::die, but adds stamp');
+
+}
#-----------------------------------------------------------------------------
# Test set_message
ok( defined buffer('::STDOUT'), 'STDIN returns proper filehandle');
ok( defined buffer(*main::STDOUT), 'STDIN returns proper filehandle');
ok(!defined buffer("WIBBLE"), '"WIBBLE" doesn\'t returns proper filehandle');
+
+# Calling die with code refs with no WRAP
+{
+ local $CGI::Carp::WRAP = 0;
+
+ eval { CGI::Carp::die( 'regular string' ) };
+ like $@ => qr/regular string/, 'die with string';
+
+ eval { CGI::Carp::die( [ 1..10 ] ) };
+ like $@ => qr/ARRAY\(0x[\da-f]+\)/, 'die with array ref';
+
+ eval { CGI::Carp::die( { a => 1 } ) };
+ like $@ => qr/HASH\(0x[\da-f]+\)/, 'die with hash ref';
+
+ eval { CGI::Carp::die( sub { 'Farewell' } ) };
+ like $@ => qr/CODE\(0x[\da-f]+\)/, 'die with code ref';
+
+ eval { CGI::Carp::die( My::Plain::Object->new ) };
+ isa_ok $@, 'My::Plain::Object';
+
+ eval { CGI::Carp::die( My::Plain::Object->new, ' and another argument' ) };
+ like $@ => qr/My::Plain::Object/, 'object is stringified';
+ like $@ => qr/and another argument/, 'second argument is present';
+
+ eval { CGI::Carp::die( My::Stringified::Object->new ) };
+ isa_ok $@, 'My::Stringified::Object';
+
+ eval { CGI::Carp::die( My::Stringified::Object->new, ' and another argument' ) };
+ like $@ => qr/stringified/, 'object is stringified';
+ like $@ => qr/and another argument/, 'second argument is present';
+
+ eval { CGI::Carp::die() };
+ like $@ => qr/Died at/, 'die with no argument';
+}
+
+# Calling die with code refs when WRAPped
+{
+ local $CGI::Carp::WRAP = 1;
+ local *CGI::Carp::realdie = sub { return @_ };
+ local *STDOUT;
+
+ tie *STDOUT, 'StoreStuff';
+
+ my %result; # store results because stdout is kidnapped
+
+ CGI::Carp::die( 'regular string' );
+ $result{string} .= $_ while <STDOUT>;
+
+ CGI::Carp::die( [ 1..10 ] );
+ $result{array_ref} .= $_ while <STDOUT>;
+
+ CGI::Carp::die( { a => 1 } );
+ $result{hash_ref} .= $_ while <STDOUT>;
+
+ CGI::Carp::die( sub { 'Farewell' } );
+ $result{code_ref} .= $_ while <STDOUT>;
+
+ CGI::Carp::die( My::Plain::Object->new );
+ $result{plain_object} .= $_ while <STDOUT>;
+
+ CGI::Carp::die( My::Stringified::Object->new );
+ $result{string_object} .= $_ while <STDOUT>;
+
+ CGI::Carp::die();
+ $result{no_args} .= $_ while <STDOUT>;
+
+ untie *STDOUT;
+
+ like $result{string} => qr/regular string/, 'regular string, wrapped';
+ like $result{array_ref} => qr/ARRAY\(\w+?\)/, 'array ref, wrapped';
+ like $result{hash_ref} => qr/HASH\(\w+?\)/, 'hash ref, wrapped';
+ like $result{code_ref} => qr/CODE\(\w+?\)/, 'code ref, wrapped';
+ like $result{plain_object} => qr/My::Plain::Object/,
+ 'plain object, wrapped';
+ like $result{string_object} => qr/stringified/,
+ 'stringified object, wrapped';
+ like $result{no_args} => qr/Died at/, 'no args, wrapped';
+
+}
+
+{
+ package My::Plain::Object;
+
+ sub new {
+ return bless {}, shift;
+ }
+}
+
+{
+ package My::Stringified::Object;
+
+ use overload '""' => sub { 'stringified' };
+
+ sub new {
+ return bless {}, shift;
+ }
+}
if (ord("\t") != 9) { $CRLF = "\r\n"; }
-# Web servers on EBCDIC hosts are typically set up to do an EBCDIC -> ASCII
-# translation hence CRLF is used as \r\n within CGI.pm on such machines.
-
-if (ord("\t") != 9) { $CRLF = "\r\n"; }
-
# Set up a CGI environment
$ENV{REQUEST_METHOD}='GET';
$ENV{QUERY_STRING} ='game=chess&game=checkers&weather=dull';
--- /dev/null
+use strict;
+use warnings;
+
+use Test::More tests => 4; # last test to print
+
+use CGI qw/ :all /;
+
+$ENV{HTTP_X_FORWARDED_HOST} = 'proxy:8484';
+$ENV{SERVER_PROTOCOL} = 'HTTP/1.0';
+$ENV{SERVER_PORT} = 8080;
+$ENV{SERVER_NAME} = 'the.good.ship.lollypop.com';
+
+is virtual_port() => 8484, 'virtual_port()';
+is server_port() => 8080, 'server_port()';
+
+is url() => 'http://proxy:8484', 'url()';
+
+# let's see if we do the defaults right
+
+$ENV{HTTP_X_FORWARDED_HOST} = 'proxy:80';
+
+is url() => 'http://proxy', 'url() with default port';
+
use CPAN::InfoObj;
@CPAN::Distribution::ISA = qw(CPAN::InfoObj);
use vars qw($VERSION);
-$VERSION = "1.9456";
+$VERSION = "1.9456_01";
# Accessors
sub cpan_comment {
or $need_version eq '0' # "==" would trigger warning when not numeric
or $need_version eq "undef"
)) {
- next NEED;
+ unless ($nmo->inst_deprecated) {
+ next NEED;
+ }
+
}
$available_version = $nmo->available_version;
### add CPANPLUS' bin dir to the front of $ENV{PATH}, so that cpanp-run-perl
### and friends get picked up, only under PERL_CORE though.
+ $old_env_path = $ENV{PATH};
if ( $ENV{PERL_CORE} ) {
- $old_env_path = $ENV{PATH};
$ENV{'PATH'} = join $Config{'path_sep'},
- grep { defined } "$FindBin::Bin/../../CPANPLUS/bin", $ENV{'PATH'};
-
+ grep { defined } "$FindBin::Bin/../../../utils", $ENV{'PATH'};
}
### Fix up the path to perl, as we're about to chdir
}
}
+ ### CPANPLUS::Config checks 3 specific scenarios first
+ ### when looking for cpanp-run-perl: parallel to cpanp,
+ ### parallel to CPANPLUS.pm, or installed into a custom
+ ### prefix like /tmp/foo. Only *THEN* does it check the
+ ### the path.
+ ### If the perl core is extracted to a directory that has
+ ### cpanp-run-perl installed the same amount of 'uplevels'
+ ### as the /tmp/foo prefix, we'll pull in the wrong script
+ ### by accident.
+ ### Since we set the path to cpanp-run-perl explicitily
+ ### at the top of this script, it's best to update the config
+ ### ourselves with a path lookup, rather than rely on its
+ ### heuristics. Thanks to David Wheeler, Josh Jore and Vincent
+ ### Pit for helping to track this down.
+ if( $ENV{PERL_CORE} ) {
+ $conf->set_program( "perlwrapper" => IPC::Cmd::can_run('cpanp-run-perl') );
+ }
+
$conf->set_conf( source_engine => $ENV{CPANPLUS_SOURCE_ENGINE} )
if $ENV{CPANPLUS_SOURCE_ENGINE};
use CPANPLUS::Error;
use CPANPLUS::Internals::Utils;
+# File::Spec and Cwd might return different values for a
+# symlinked directory, so we need to be careful.
+sub paths_are_same {
+ my($have, $want, $name) = @_;
+
+ $have = _resolve_symlinks($have);
+ $want = _resolve_symlinks($want);
+
+ my $builder = Test::More->builder;
+ return $builder->like( $have, qr/\Q$want/i, $name );
+}
+
+# Resolve any symlinks in a path
+sub _resolve_symlinks {
+ my $path = shift;
+ my($vol, $dirs, $file) = File::Spec->splitpath($path);
+
+ my $resolved = File::Spec->catpath( $vol, "", "" );
+
+ for my $dir (File::Spec->splitdir($dirs)) {
+ # Resolve the next part of the path
+ my $next = File::Spec->catdir( $resolved, $dir );
+ $next = eval { readlink $next } || $next;
+
+ # If its absolute, use it.
+ # Otherwise tack it onto the end of the previous path.
+ $resolved = File::Spec->file_name_is_absolute($next)
+ ? $next
+ : File::Spec->catdir( $resolved, $next );
+ }
+
+ return File::Spec->catfile($resolved, $file);
+}
+
my $Cwd = File::Spec->rel2abs(cwd());
my $Class = 'CPANPLUS::Internals::Utils';
my $Dir = 'foo';
### test _chdir ###
{ ok( $Class->_chdir( dir => $Dir), "Chdir to '$Dir'" );
- my $abs_re = quotemeta File::Spec->rel2abs(File::Spec->catdir($Cwd,$Dir));
- like( File::Spec->rel2abs(cwd()), qr/$abs_re/i,
+ my $abs = File::Spec->rel2abs(File::Spec->catdir($Cwd,$Dir));
+ paths_are_same( File::Spec->rel2abs(cwd()), $abs,
" Cwd() is '$Dir'");
- my $cwd_re = quotemeta $Cwd;
ok( $Class->_chdir( dir => $Cwd), "Chdir back to '$Cwd'" );
- like( File::Spec->rel2abs(cwd()), qr/$cwd_re/i,
+ paths_are_same( File::Spec->rel2abs(cwd()), $Cwd,
" Cwd() is '$Cwd'" );
}
### add our own path to the front of $ENV{PATH}, so that cpanp-run-perl
### and friends get picked up
$old_env_path = $ENV{PATH};
- $ENV{'PATH'} = join $Config{'path_sep'},
+ if ( $ENV{PERL_CORE} ) {
+ $ENV{'PATH'} = join $Config{'path_sep'},
+ grep { defined } "$FindBin::Bin/../../../utils", $ENV{'PATH'};
+ }
+ else {
+ $ENV{'PATH'} = join $Config{'path_sep'},
grep { defined } "$FindBin::Bin/../bin", $ENV{'PATH'};
+ }
### Fix up the path to perl, as we're about to chdir
### but only under perlcore, or if the path contains delimiters,
}
}
+ ### CPANPLUS::Config checks 3 specific scenarios first
+ ### when looking for cpanp-run-perl: parallel to cpanp,
+ ### parallel to CPANPLUS.pm, or installed into a custom
+ ### prefix like /tmp/foo. Only *THEN* does it check the
+ ### the path.
+ ### If the perl core is extracted to a directory that has
+ ### cpanp-run-perl installed the same amount of 'uplevels'
+ ### as the /tmp/foo prefix, we'll pull in the wrong script
+ ### by accident.
+ ### Since we set the path to cpanp-run-perl explicitily
+ ### at the top of this script, it's best to update the config
+ ### ourselves with a path lookup, rather than rely on its
+ ### heuristics. Thanks to David Wheeler, Josh Jore and Vincent
+ ### Pit for helping to track this down.
+ if( $ENV{PERL_CORE} ) {
+ $conf->set_program( "perlwrapper" => IPC::Cmd::can_run('cpanp-run-perl') );
+ }
+
$conf->set_conf( source_engine => $ENV{CPANPLUS_SOURCE_ENGINE} )
if $ENV{CPANPLUS_SOURCE_ENGINE};
+++ /dev/null
-Revision history for Perl extension Class::ISA
-
-2009-09-29 Steffen Mueller smueller@cpan.org
-
- * Release 0.36 -- fix installation dirs.
-
-2009-09-26 Steffen Mueller smueller@cpan.org
-
- * Release 0.35 -- minor documentation nit.
-
-2009-09-22 Steffen Mueller smueller@cpan.org
-
- * Release 0.34 -- add core deprecation logic,
- some distribution shuffling. No code changes.
-
-2004-12-29 Sean M. Burke sburke@cpan.org
-
- * Release 0.33 -- just rebundling. No code changes.
-
-
-2000-05-13 Sean M. Burke sburke@cpan.org
-
- * Release 0.32 -- Just noting my new email address.
-
-
-1999-05-14 Sean M. Burke sburke@netadventure.net
-
- * Release 0.31 -- release version.
-
- No changes in functionality -- just changed the core algorithm to
- something that should behave the same, but is cleaner and faster.
-
-
-1999-01-23 Sean M. Burke sburke@netadventure.net
-
- * Release 0.20 -- first release version.
+++ /dev/null
-package Class::ISA;
-require 5;
-use strict;
-use vars qw($Debug $VERSION);
-$VERSION = '0.36';
-$Debug = 0 unless defined $Debug;
-
-use if $] >= 5.011, 'deprecate';
-
-###########################################################################
-
-sub self_and_super_versions {
- no strict 'refs';
- map {
- $_ => (defined(${"$_\::VERSION"}) ? ${"$_\::VERSION"} : undef)
- } self_and_super_path($_[0])
-}
-
-# Also consider magic like:
-# no strict 'refs';
-# my %class2SomeHashr =
-# map { defined(%{"$_\::SomeHash"}) ? ($_ => \%{"$_\::SomeHash"}) : () }
-# Class::ISA::self_and_super_path($class);
-# to get a hash of refs to all the defined (and non-empty) hashes in
-# $class and its superclasses.
-#
-# Or even consider this incantation for doing something like hash-data
-# inheritance:
-# no strict 'refs';
-# %union_hash =
-# map { defined(%{"$_\::SomeHash"}) ? %{"$_\::SomeHash"}) : () }
-# reverse(Class::ISA::self_and_super_path($class));
-# Consider that reverse() is necessary because with
-# %foo = ('a', 'wun', 'b', 'tiw', 'a', 'foist');
-# $foo{'a'} is 'foist', not 'wun'.
-
-###########################################################################
-sub super_path {
- my @ret = &self_and_super_path(@_);
- shift @ret if @ret;
- return @ret;
-}
-
-#--------------------------------------------------------------------------
-sub self_and_super_path {
- # Assumption: searching is depth-first.
- # Assumption: '' (empty string) can't be a class package name.
- # Note: 'UNIVERSAL' is not given any special treatment.
- return () unless @_;
-
- my @out = ();
-
- my @in_stack = ($_[0]);
- my %seen = ($_[0] => 1);
-
- my $current;
- while(@in_stack) {
- next unless defined($current = shift @in_stack) && length($current);
- print "At $current\n" if $Debug;
- push @out, $current;
- no strict 'refs';
- unshift @in_stack,
- map
- { my $c = $_; # copy, to avoid being destructive
- substr($c,0,2) = "main::" if substr($c,0,2) eq '::';
- # Canonize the :: -> main::, ::foo -> main::foo thing.
- # Should I ever canonize the Foo'Bar = Foo::Bar thing?
- $seen{$c}++ ? () : $c;
- }
- @{"$current\::ISA"}
- ;
- # I.e., if this class has any parents (at least, ones I've never seen
- # before), push them, in order, onto the stack of classes I need to
- # explore.
- }
-
- return @out;
-}
-#--------------------------------------------------------------------------
-1;
-
-__END__
-
-=head1 NAME
-
-Class::ISA - report the search path for a class's ISA tree
-
-=head1 SYNOPSIS
-
- # Suppose you go: use Food::Fishstick, and that uses and
- # inherits from other things, which in turn use and inherit
- # from other things. And suppose, for sake of brevity of
- # example, that their ISA tree is the same as:
-
- @Food::Fishstick::ISA = qw(Food::Fish Life::Fungus Chemicals);
- @Food::Fish::ISA = qw(Food);
- @Food::ISA = qw(Matter);
- @Life::Fungus::ISA = qw(Life);
- @Chemicals::ISA = qw(Matter);
- @Life::ISA = qw(Matter);
- @Matter::ISA = qw();
-
- use Class::ISA;
- print "Food::Fishstick path is:\n ",
- join(", ", Class::ISA::super_path('Food::Fishstick')),
- "\n";
-
-That prints:
-
- Food::Fishstick path is:
- Food::Fish, Food, Matter, Life::Fungus, Life, Chemicals
-
-=head1 DESCRIPTION
-
-Suppose you have a class (like Food::Fish::Fishstick) that is derived,
-via its @ISA, from one or more superclasses (as Food::Fish::Fishstick
-is from Food::Fish, Life::Fungus, and Chemicals), and some of those
-superclasses may themselves each be derived, via its @ISA, from one or
-more superclasses (as above).
-
-When, then, you call a method in that class ($fishstick->calories),
-Perl first searches there for that method, but if it's not there, it
-goes searching in its superclasses, and so on, in a depth-first (or
-maybe "height-first" is the word) search. In the above example, it'd
-first look in Food::Fish, then Food, then Matter, then Life::Fungus,
-then Life, then Chemicals.
-
-This library, Class::ISA, provides functions that return that list --
-the list (in order) of names of classes Perl would search to find a
-method, with no duplicates.
-
-=head1 FUNCTIONS
-
-=over
-
-=item the function Class::ISA::super_path($CLASS)
-
-This returns the ordered list of names of classes that Perl would
-search thru in order to find a method, with no duplicates in the list.
-$CLASS is not included in the list. UNIVERSAL is not included -- if
-you need to consider it, add it to the end.
-
-
-=item the function Class::ISA::self_and_super_path($CLASS)
-
-Just like C<super_path>, except that $CLASS is included as the first
-element.
-
-=item the function Class::ISA::self_and_super_versions($CLASS)
-
-This returns a hash whose keys are $CLASS and its
-(super-)superclasses, and whose values are the contents of each
-class's $VERSION (or undef, for classes with no $VERSION).
-
-The code for self_and_super_versions is meant to serve as an example
-for precisely the kind of tasks I anticipate that self_and_super_path
-and super_path will be used for. You are strongly advised to read the
-source for self_and_super_versions, and the comments there.
-
-=back
-
-=head1 CAUTIONARY NOTES
-
-* Class::ISA doesn't export anything. You have to address the
-functions with a "Class::ISA::" on the front.
-
-* Contrary to its name, Class::ISA isn't a class; it's just a package.
-Strange, isn't it?
-
-* Say you have a loop in the ISA tree of the class you're calling one
-of the Class::ISA functions on: say that Food inherits from Matter,
-but Matter inherits from Food (for sake of argument). If Perl, while
-searching for a method, actually discovers this cyclicity, it will
-throw a fatal error. The functions in Class::ISA effectively ignore
-this cyclicity; the Class::ISA algorithm is "never go down the same
-path twice", and cyclicities are just a special case of that.
-
-* The Class::ISA functions just look at @ISAs. But theoretically, I
-suppose, AUTOLOADs could bypass Perl's ISA-based search mechanism and
-do whatever they please. That would be bad behavior, tho; and I try
-not to think about that.
-
-* If Perl can't find a method anywhere in the ISA tree, it then looks
-in the magical class UNIVERSAL. This is rarely relevant to the tasks
-that I expect Class::ISA functions to be put to, but if it matters to
-you, then instead of this:
-
- @supers = Class::Tree::super_path($class);
-
-do this:
-
- @supers = (Class::Tree::super_path($class), 'UNIVERSAL');
-
-And don't say no-one ever told ya!
-
-* When you call them, the Class::ISA functions look at @ISAs anew --
-that is, there is no memoization, and so if ISAs change during
-runtime, you get the current ISA tree's path, not anything memoized.
-However, changing ISAs at runtime is probably a sign that you're out
-of your mind!
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright (c) 1999-2009 Sean M. Burke. All rights reserved.
-
-This library is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=head1 AUTHOR
-
-Sean M. Burke C<sburke@cpan.org>
-
-=head1 MAINTAINER
-
-Maintained by Steffen Mueller C<smueller@cpan.org>.
-
-=cut
-
+++ /dev/null
-BEGIN {
- chdir 't' if -d 't';
- #@INC = '../lib';
-}
-
-require 5;
-# Time-stamp: "2004-12-29 20:57:15 AST"
-# Summary of, well, things.
-
-use Test;
-BEGIN {plan tests => 2};
-ok 1;
-
-use Class::ISA ();
-
-#chdir "t" if -e "t";
-
-{
- my @out;
- push @out,
- "\n\nPerl v",
- defined($^V) ? sprintf('%vd', $^V) : $],
- " under $^O ",
- (defined(&Win32::BuildNumber) and defined &Win32::BuildNumber())
- ? ("(Win32::BuildNumber ", &Win32::BuildNumber(), ")") : (),
- (defined $MacPerl::Version)
- ? ("(MacPerl version $MacPerl::Version)") : (),
- "\n"
- ;
-
- # Ugly code to walk the symbol tables:
- my %v;
- my @stack = (''); # start out in %::
- my $this;
- my $count = 0;
- my $pref;
- while(@stack) {
- $this = shift @stack;
- die "Too many packages?" if ++$count > 1000;
- next if exists $v{$this};
- next if $this eq 'main'; # %main:: is %::
-
- #print "Peeking at $this => ${$this . '::VERSION'}\n";
-
- if(defined ${$this . '::VERSION'} ) {
- $v{$this} = ${$this . '::VERSION'}
- } elsif(
- defined *{$this . '::ISA'} or defined &{$this . '::import'}
- or ($this ne '' and grep defined *{$_}{'CODE'}, values %{$this . "::"})
- # If it has an ISA, an import, or any subs...
- ) {
- # It's a class/module with no version.
- $v{$this} = undef;
- } else {
- # It's probably an unpopulated package.
- ## $v{$this} = '...';
- }
-
- $pref = length($this) ? "$this\::" : '';
- push @stack, map m/^(.+)::$/ ? "$pref$1" : (), keys %{$this . '::'};
- #print "Stack: @stack\n";
- }
- push @out, " Modules in memory:\n";
- delete @v{'', '[none]'};
- foreach my $p (sort {lc($a) cmp lc($b)} keys %v) {
- $indent = ' ' x (2 + ($p =~ tr/:/:/));
- push @out, ' ', $indent, $p, defined($v{$p}) ? " v$v{$p};\n" : ";\n";
- }
- push @out, sprintf "[at %s (local) / %s (GMT)]\n",
- scalar(gmtime), scalar(localtime);
- my $x = join '', @out;
- $x =~ s/^/#/mg;
- print $x;
-}
-
-print "# Running",
- (chr(65) eq 'A') ? " in an ASCII world.\n" : " in a non-ASCII world.\n",
- "#\n",
-;
-
-print "# \@INC:\n", map("# [$_]\n", @INC), "#\n#\n";
-
-print "# \%INC:\n";
-foreach my $x (sort {lc($a) cmp lc($b)} keys %INC) {
- print "# [$x] = [", $INC{$x} || '', "]\n";
-}
-
-ok 1;
-
+++ /dev/null
-BEGIN {
- chdir 't' if -d 't';
- #@INC = '../lib';
-}
-
-# Time-stamp: "2004-12-29 19:59:33 AST"
-
-BEGIN { $| = 1; print "1..2\n"; }
-END {print "not ok 1\n" unless $loaded;}
-use Class::ISA;
-$loaded = 1;
-print "ok 1\n";
-
- @Food::Fishstick::ISA = qw(Food::Fish Life::Fungus Chemicals);
- @Food::Fish::ISA = qw(Food);
- @Food::ISA = qw(Matter);
- @Life::Fungus::ISA = qw(Life);
- @Chemicals::ISA = qw(Matter);
- @Life::ISA = qw(Matter);
- @Matter::ISA = qw();
-
- use Class::ISA;
- my @path = Class::ISA::super_path('Food::Fishstick');
- my $flat_path = join ' ', @path;
- print "#Food::Fishstick path is:\n# $flat_path\n";
- print
- "Food::Fish Food Matter Life::Fungus Life Chemicals" eq $flat_path ?
- "ok 2\n" : "fail 2!\n";
# If we make $VERSION an our variable parse_version() breaks
use vars qw($VERSION);
-$VERSION = '6.56';
+$VERSION = '6.5601';
require ExtUtils::MM_Any;
our @ISA = qw(ExtUtils::MM_Any);
$inpod = /^=(?!cut)/ ? 1 : /^=cut/ ? 0 : $inpod;
next if !$inpod;
chop;
- next unless /^($package\s-\s)(.*)/;
+ next unless /^($package(?:\.pm)?\s+\-+\s+)(.*)/;
$result = $2;
last;
}
my @Prepend_parent;
my %Recognized_Att_Keys;
-our $VERSION = '6.56';
+our $VERSION = '6.5601';
# Emulate something resembling CVS $Revision$
(our $Revision = $VERSION) =~ s{_}{};
if (!$installed_file) {
warn sprintf "Warning: prerequisite %s %s not found.\n",
$prereq, $required_version
- unless $self->{PREREQ_FATAL};
+ unless $self->{PREREQ_FATAL}
+ or $ENV{PERL_CORE};
$unsatisfied{$prereq} = 'not installed';
}
elsif ($pr_version < $required_version ){
warn sprintf "Warning: prerequisite %s %s not found. We have %s.\n",
$prereq, $required_version, ($pr_version || 'unknown version')
- unless $self->{PREREQ_FATAL};
+ unless $self->{PREREQ_FATAL}
+ or $ENV{PERL_CORE};
$unsatisfied{$prereq} = $required_version ? $required_version : 'unknown version' ;
}
local $SIG{__WARN__} = sub {
$warnings .= join '', @_;
};
+ # prerequisite warnings are disbled while building the perl core:
+ local %ENV = %ENV;
+ delete $ENV{PERL_CORE};
WriteMakefile(
NAME => 'Big::Dummy',
Revision history for Perl extension ExtUtils::ParseXS.
+2.2205 - Wed Mar 10 18:15:36 EST 2010
+
+ Other:
+
+ - No longer ships with Build.PL to avoid creating a circular dependency
+
+2.2204 - Wed Mar 10 14:23:52 EST 2010
+
+ Other:
+
+ - Downgraded warnings on using INCLUDE with a command from "deprecated"
+ to "discouraged" and limited it to the case where the command includes
+ "perl" [Steffen Mueller]
+
+2.2203 - Thu Feb 11 14:00:51 EST 2010
+
+ Bug fixes:
+
+ - Build.PL was not including ExtUtils/xsubpp for installation. Fixed
+ by subclassing M::B::find_pm_files to include it [David Golden]
+
+2.2202 - Wed Jan 27 15:04:59 EST 2010
+
+ Bug fixes:
+
+ - The fix to IN/OUT/OUTLIST was itself broken and is now fixed.
+ [Reported by Serdar Dalgic; fix suggested by Rafael Garcia-Suarez]
+
+ We apologize for the fault in the regex. Those responsible
+ have been sacked.
+
+2.2201 Mon Jan 25 16:12:05 EST 2010
+
+ Bug fixes:
+
+ - IN/OUT/OUTLIST, etc. were broken due to a bad regexp. [Simon Cozens]
+
+2.22 - Mon Jan 11 15:00:07 EST 2010
+
+ No changes from 2.21_02
+
+2.21_02 - Sat Dec 19 10:55:41 EST 2009
+
+ Bug fixes:
+
+ - fixed bugs and added tests for INCLUDE_COMMAND [Steffen Mueller]
+
+2.21_01 - Sat Dec 19 07:22:44 EST 2009
+
+ Enhancements:
+
+ - New 'INCLUDE_COMMAND' directive [Steffen Mueller]
+
+ Bug fixes:
+
+ - Workaround for empty newXS macro found in P5NCI [Goro Fuji]
+
2.21 - Mon Oct 5 11:17:53 EDT 2009
Bug fixes:
Bug fixes:
- Use "char* file" for perl < 5.9, not "char[] file"; fixes mod_perl
- breakage due to prior attempts to fix RT#48104 [David Golden]
+ breakage due to prior attempts to fix RT#48104 [David Golden]
2.20_06 - Fri Oct 2 23:45:45 EDT 2009
2.20_03 - Thu Jul 23 23:14:50 EDT 2009
Bug fixes:
- - Fixed "const char *" errors for 5.8.8 (and older) (RT#48104)
- [Vincent Pit]
+ - Fixed "const char *" errors for 5.8.8 (and older) (RT#48104)
+ [Vincent Pit]
- Added newline before a preprocessor directive (RT#30673)
[patch by hjp]
my($XSS_work_idx, $cpp_next_tmp);
use vars qw($VERSION);
-$VERSION = '2.21';
+$VERSION = '2.2205';
$VERSION = eval $VERSION if $VERSION =~ /_/;
use vars qw(%input_expr %output_expr $ProtoUsed @InitFileCode $FH $proto_re $Overload $errors $Fallback
# Match an XS keyword
$BLOCK_re= '\s*(' . join('|', qw(
- REQUIRE BOOT CASE PREINIT INPUT INIT CODE PPCODE OUTPUT
- CLEANUP ALIAS ATTRS PROTOTYPES PROTOTYPE VERSIONCHECK INCLUDE
- SCOPE INTERFACE INTERFACE_MACRO C_ARGS POSTCALL OVERLOAD FALLBACK
+ REQUIRE BOOT CASE PREINIT INPUT INIT CODE PPCODE
+ OUTPUT CLEANUP ALIAS ATTRS PROTOTYPES PROTOTYPE
+ VERSIONCHECK INCLUDE INCLUDE_COMMAND SCOPE INTERFACE
+ INTERFACE_MACRO C_ARGS POSTCALL OVERLOAD FALLBACK
)) . "|$END)\\s*:";
$xsreturn = 0;
$_ = shift(@line);
- while (my $kwd = check_keyword("REQUIRE|PROTOTYPES|FALLBACK|VERSIONCHECK|INCLUDE|SCOPE")) {
+ while (my $kwd = check_keyword("REQUIRE|PROTOTYPES|FALLBACK|VERSIONCHECK|INCLUDE(?:_COMMAND)?|SCOPE")) {
&{"${kwd}_handler"}() ;
next PARAGRAPH unless @line ;
$_ = shift(@line);
next unless defined($pre) && length($pre);
my $out_type = '';
my $inout_var;
- if ($process_inout and s/^(IN|IN_OUTLIST|OUTLIST|OUT|IN_OUT)\s+//) {
+ if ($process_inout and s/^(IN|IN_OUTLIST|OUTLIST|OUT|IN_OUT)\b\s*//) {
my $type = $1;
$out_type = $type if $type ne 'IN';
- $arg =~ s/^(IN|IN_OUTLIST|OUTLIST|OUT|IN_OUT)\s+//;
- $pre =~ s/^(IN|IN_OUTLIST|OUTLIST|OUT|IN_OUT)\s+//;
+ $arg =~ s/^(IN|IN_OUTLIST|OUTLIST|OUT|IN_OUT)\b\s*//;
+ $pre =~ s/^(IN|IN_OUTLIST|OUTLIST|OUT|IN_OUT)\b\s*//;
}
my $islength;
if ($name =~ /^length\( \s* (\w+) \s* \)\z/x) {
} else {
@args = split(/\s*,\s*/, $orig_args);
for (@args) {
- if ($process_inout and s/^(IN|IN_OUTLIST|OUTLIST|IN_OUT|OUT)\s+//) {
+ if ($process_inout and s/^(IN|IN_OUTLIST|OUTLIST|IN_OUT|OUT)\b\s*//) {
my $out_type = $1;
next if $out_type eq 'IN';
$only_C_inlist{$_} = 1 if $out_type eq "OUTLIST";
EOF
}
}
+ elsif($newXS eq 'newXS'){ # work around P5NCI's empty newXS macro
+ push(@InitFileCode,
+ " ${newXS}(\"$pname\", XS_$Full_func_name, file$proto);\n");
+ }
else {
push(@InitFileCode,
" (void)${newXS}(\"$pname\", XS_$Full_func_name, file$proto);\n");
}
+sub PushXSStack
+ {
+ # Save the current file context.
+ push(@XSStack, {
+ type => 'file',
+ LastLine => $lastline,
+ LastLineNo => $lastline_no,
+ Line => \@line,
+ LineNo => \@line_no,
+ Filename => $filename,
+ Filepathname => $filepathname,
+ Handle => $FH,
+ }) ;
+
+ }
+
sub INCLUDE_handler ()
{
# the rest of the current line should contain a valid filename
++ $IncludedFiles{$_} unless /\|\s*$/ ;
- # Save the current file context.
- push(@XSStack, {
- type => 'file',
- LastLine => $lastline,
- LastLineNo => $lastline_no,
- Line => \@line,
- LineNo => \@line_no,
- Filename => $filename,
- Filepathname => $filepathname,
- Handle => $FH,
- }) ;
+ if (/\|\s*$/ && /^\s*perl\s/) {
+ Warn("The INCLUDE directive with a command is discouraged." .
+ " Use INCLUDE_COMMAND instead! In particular using 'perl'" .
+ " in an 'INCLUDE: ... |' directive is not guaranteed to pick" .
+ " up the correct perl. The INCLUDE_COMMAND directive allows" .
+ " the use of \$^X as the currently running perl, see" .
+ " 'perldoc perlxs' for details.");
+ }
+
+ PushXSStack();
$FH = Symbol::gensym();
$lastline = $_ ;
$lastline_no = $. ;
+ }
+
+sub INCLUDE_COMMAND_handler ()
+ {
+ # the rest of the current line should contain a valid command
+
+ TrimWhitespace($_) ;
+
+ death("INCLUDE_COMMAND: command missing")
+ unless $_ ;
+
+ death("INCLUDE_COMMAND: pipes are illegal")
+ if /^\s*\|/ or /\|\s*$/ ;
+
+ PushXSStack();
+
+ $FH = Symbol::gensym();
+
+ # If $^X is used in INCLUDE_COMMAND, we know it's supposed to be
+ # the same perl interpreter as we're currently running
+ s/^\s*\$\^X/$^X/;
+
+ # open the new file
+ open ($FH, "-|", "$_")
+ or death("Cannot run command '$_' to include its output: $!") ;
+
+ print Q(<<"EOF");
+#
+#/* INCLUDE_COMMAND: Including output of '$_' from '$filename' */
+#
+EOF
+
+ $filename = $_ ;
+ $filepathname = "$dir/$filename";
+
+ # Prime the pump by reading the first
+ # non-blank line
+ # skip leading blank lines
+ while (<$FH>) {
+ last unless /^\s*$/ ;
+ }
+
+ $lastline = $_ ;
+ $lastline_no = $. ;
}
sub PopFile()
int
len(char* s, int length(s))
+INCLUDE_COMMAND: $^X -Ilib -It/lib -MIncludeTester -e IncludeTester::print_xs
+
#if 1
INCLUDE: XSInclude.xsh
--- /dev/null
+package IncludeTester;
+use strict;
+
+sub print_xs {
+ print <<'HERE';
+
+int
+sum(a, b)
+ int a
+ int b
+ CODE:
+ RETVAL = a + b;
+ OUTPUT:
+ RETVAL
+
+HERE
+}
+
+1;
+
use attributes;
use overload;
-plan tests => 24;
+plan tests => 25;
my ($source_file, $obj_file, $lib_file);
}
SKIP: {
- skip "no dynamic loading", 5
+ skip "no dynamic loading", 6
if !$b->have_compiler || !$Config{usedl};
my $module = 'XSMore';
$lib_file = $b->link( objects => $obj_file, module_name => $module );
is XSMore::len("foo"), 3, 'the length keyword';
+ is XSMore::sum(5, 9), 14, 'the INCLUDE_COMMAND directive';
+
# Win32 needs to close the DLL before it can unlink it, but unfortunately
# dl_unload_file was missing on Win32 prior to perl change #24679!
if ($^O eq 'MSWin32' and defined &DynaLoader::dl_unload_file) {
unless $Config{d_getgrent};
skip 'not running as root', $skip_count
unless $< == 0;
+ skip "darwin's nobody and nogroup are -1", $skip_count
+ if $^O eq 'darwin';
my $dir_stem = $dir = catdir($tmp_base, 'owned-by');
+1.23 -- Wed Mar 10 20:50:00 CST 2010
+
+ * Add a test file to ensure 'GETMAGIC' called once [gfx]
+ * "GETMAGIC" should be called only once [gfx]
+ * Use PERL_NO_GET_CONTEXT for efficiency (see perlguts) [gfx]
+ * Don't care about dVAR. ExtUtils::ParseXS deals with it. [gfx]
+ * t/p_max.t, t/p_min.t fail on perl5.8.1. [tokuhirom]
+ * avoid non-portable warnings
+ * Fix PP::reftype in edge cases [gfx]
+
1.22 -- Sat Nov 14 09:26:15 CST 2009
* silence a compiler warning about an unreferenced local variable [Steve Hay]
* This program is free software; you can redistribute it and/or
* modify it under the same terms as Perl itself.
*/
-
+#define PERL_NO_GET_CONTEXT /* we want efficiency */
#include <EXTERN.h>
#include <perl.h>
#include <XSUB.h>
# ifndef SvTAINTED
static bool
-sv_tainted(SV *sv)
+sv_tainted(pTHX_ SV *sv)
{
if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
MAGIC *mg = mg_find(sv, 't');
}
# define SvTAINTED_on(sv) sv_magic((sv), Nullsv, 't', Nullch, 0)
-# define SvTAINTED(sv) (SvMAGICAL(sv) && sv_tainted(sv))
+# define SvTAINTED(sv) (SvMAGICAL(sv) && sv_tainted(aTHX_ sv))
# endif
# define PL_defgv defgv
# define PL_op op
#define dNOOP extern int Perl___notused PERL_UNUSED_DECL
#endif
-#ifndef dVAR
-#define dVAR dNOOP
-#endif
-
#ifndef GvSVn
# define GvSVn GvSV
#endif
PROTOTYPE: &@
CODE:
{
- dVAR; dMULTICALL;
+ dMULTICALL;
SV *ret = sv_newmortal();
int index;
GV *agv,*bgv,*gv;
PROTOTYPE: &@
CODE:
{
- dVAR; dMULTICALL;
+ dMULTICALL;
int index;
GV *gv;
HV *stash;
PROTOTYPE: @
CODE:
{
- dVAR;
int index;
#if (PERL_VERSION < 9)
struct op dmy_op;
{
if (SvMAGICAL(sv))
mg_get(sv);
- if(!sv_isobject(sv)) {
+ if(!(SvROK(sv) && SvOBJECT(SvRV(sv)))) {
XSRETURN_UNDEF;
}
RETVAL = (char*)sv_reftype(SvRV(sv),TRUE);
@ISA = qw(Exporter);
@EXPORT_OK = qw(first min max minstr maxstr reduce sum shuffle);
-$VERSION = "1.22";
+$VERSION = "1.23";
$XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
@ISA = qw(Exporter);
@EXPORT = qw(first min max minstr maxstr reduce sum shuffle);
-$VERSION = "1.22";
+$VERSION = "1.23";
$VERSION = eval $VERSION;
sub reduce (&@) {
use vars qw($VERSION);
use List::Util;
-$VERSION = "1.22"; # FIXUP
+$VERSION = "1.23"; # FIXUP
$VERSION = eval $VERSION; # FIXUP
sub _VERSION { # FIXUP
@ISA = qw(Exporter);
@EXPORT_OK = qw(blessed dualvar reftype weaken isweak tainted readonly openhandle refaddr isvstring looks_like_number set_prototype);
-$VERSION = "1.22";
+$VERSION = "1.23";
$VERSION = eval $VERSION;
unless (defined &dualvar) {
@ISA = qw(Exporter);
@EXPORT = qw(blessed reftype tainted readonly refaddr looks_like_number);
-$VERSION = "1.22";
+$VERSION = "1.23";
$VERSION = eval $VERSION;
sub blessed ($) {
$addr =~ /0x(\w+)/;
local $^W;
+ no warnings 'portable';
hex($1);
}
{
my %tmap = qw(
- B::HV HASH
- B::AV ARRAY
- B::CV CODE
- B::IO IO
- B::NULL SCALAR
- B::NV SCALAR
- B::PV SCALAR
- B::GV GLOB
- B::RV REF
+ B::NULL SCALAR
+
+ B::HV HASH
+ B::AV ARRAY
+ B::CV CODE
+ B::IO IO
+ B::GV GLOB
B::REGEXP REGEXP
);
use overload
'""' => sub { ${$_[0]} },
'+0' => sub { ${$_[0]} },
+ '>' => sub { ${$_[0]} > ${$_[1]} },
fallback => 1;
sub new {
my $class = shift;
use overload
'""' => sub { ${$_[0]} },
'+0' => sub { ${$_[0]} },
+ '<' => sub { ${$_[0]} < ${$_[1]} },
fallback => 1;
sub new {
my $class = shift;
ChangeLog for Locale-Codes Distribution
+As of 3.00, the codes are autogenerated from the standards. With each release, codes will
+be re-generated and tested to see if any code changed. Any time there are any changes to
+the codes, it will be flagged below with a change: NEW CODE(s).
+
+3.13
+
+3.12 2010-04-06 sbeck
+ * NEW CODE(s)
+ * Renamed test.pl to testfunc.pl to avoid causing an error
+ when built as part of perl.
+
+3.11 2010-03-01 sbeck
+ * NEW CODE(s)
+ * Added the IANA domain names to Country
+ * Fixed a problem that produced warnings with perl 5.11.5.
+ Jerry D. Hedden
+
+3.10 2010-02-18 sbeck
+ * NEW CODE(s)
+ * Moved support files into the Locale::Codes namespace.
+ * The work done in each of the Locale::XXX modules was
+ virtually identical to each other. It has all
+ been moved to a central module and the
+ Locale::XXX moduels are now just wrappers.
+ * The XXX_code2code functions would return undef if the
+ same codeset were passed in for both the 2nd and
+ 3rd arguments. This doesn't make sense and has
+ been changed.
+ * Added all semi-private routines (except for the
+ couple that were already present):
+ rename_XXX
+ add_XXX
+ delete_XXX
+ add_XXX_alias
+ delete_XXX_alias
+ rename_XXX_code
+ add_XXX_code_alias
+ delete_XXX_code_alias
+ * Added "UK" alias. Steve Hay
+
+3.01 2010-02-15 sbeck
+ * Fixed Makefile.PL and Build.PL to install as core
+ modules.
+
+3.00 2010-02-10 sbeck
+ * NEW CODE(s)
+ * Took over maintenance of the code
+ * All codes and country names come from the official
+ standards
+ * code2country now returns the name of the country specified
+ in the standard (if the different standards refer
+ to the country by different variations in the name,
+ the results will differe based on the CODESET)
+ * Added code sets
+ FIPS 10 country codes
+ Alpha-3 and Term language codes
+ Numeric currency codes
+ * The rename_country funcion from 2.07 would guess the
+ CODESET (unlike all other functions which used
+ a default of LOCALE_CODE_ALPHA_2). The guess can
+ cause problems since (with the addition of FIPS)
+ codes may appear in different codesets for different
+ countries. The behavior has been changed to be
+ the same as other functions (default to
+ LOCALE_CODE_ALPHA_2).
+ * Dropped support for _alias_code
+ * Added language_code2code, currency_code2code
+
2.07 2004-06-10 neilb
* made $_ local in the initialisation code for each module
change back-propagated from Perl distribution
--- /dev/null
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+++ /dev/null
-use strict;
-use ExtUtils::MakeMaker;
-
-WriteMakefile (
- NAME => 'Locale-Codes',
- DISTNAME => 'Locale-Codes',
- VERSION => '2.07',
- AUTHOR => 'Neil Bowers <neil@bowers.com>',
- ABSTRACT => 'modules for ISO codes identifying countries, languages, currencies, and scripts',
-);
+++ /dev/null
-
- Locale-Codes Distribution
- v2.07
-
-For changes in this release, please see the ChangeLog file.
-
-This distribution contains four Perl modules which can be used to process
-ISO codes for identifying languages, countries, scripts,
-and currencies & funds.
-
- Locale::Language
- Two letter codes for language identification (ISO 639).
- For example, 'en' is the code for 'English'.
-
- Locale::Country
- Codes for country identification (ISO 3166). This module
- supports the three different code sets defined by the
- standard: alpha-2, alpha-3, and numeric codes.
- For example, 'bo' is the code for 'Bolivia'.
-
- Locale::Currency
- Three letter codes for currency and fund identification (ISO 4217).
- For example, 'sek' is the code for 'Swedish Krona'.
-
- Locale::Script
- Codes for script identification (ISO 15924). This module supports
- the three different code sets defined by the standard:
- alpha-2, alpha-3, and numeric codes.
-
-To install these modules, you should just have to run the following:
-
- % perl Makefile.PL
- % make
- % make test
- % make install
-
-The modules are documented using pod. When you "make install", you
-will get four man-pages: Locale::Language, Locale::Country,
-Locale::Currency, Locale::Script.
-
-The first version of Locale::Currency was written by Michael Hennecke,
-with modifications for inclusion by me. Kudos to Michael.
-
-Please let me know if you experience any problems with these modules,
-or have any ideas for additions.
-
-
-Neil Bowers
-<neil@bowers.com>
--- /dev/null
+
+ Locale-Codes Distribution
+
+For changes in this release, please refer to the Locale::Changes
+man-page.
+
+For changes prior to 3.00, please see the ChangeLog file.
+
+This distribution contains Perl modules which can be used to process
+ISO codes for identifying languages, countries, scripts,
+and currencies & funds.
+
+ Locale::Language
+
+ Codes for language identification including ISO 639.
+
+ For example, 'en' is the code for 'English'.
+
+ Locale::Country
+
+ Codes for country identification including ISO 3166
+ and FIPS 10.
+
+ For example, 'us' is the code for 'United States'.
+
+ Locale::Currency
+
+ Codes for currency and fund identification including
+ ISO 4217.
+
+ For example, 'sek' is the code for 'Swedish Krona'.
+
+ Locale::Script
+
+ Codes for script identification including ISO 15924.
+
+ For example, 'Phnx' is the code for 'Phoenician'.
+
+The modules are documented using pod. When you "make install", you
+will get man-pages: Local::Codes and each of the modules listed above.
+
+The first version of Locale::Currency was written by Michael Hennecke,
+with modifications by Neil Bowers for inclusion.
+
+The first versions of Locale::Language, Locale::Country, and Locale::Script
+were written by Neil Bowers.
+
+Please let me know if you experience any problems with these modules,
+or have any ideas for additions.
+
+Also, I plan on releasing a new version a couple of times a year to make
+sure that all of the codes are current. If a code changes in any standard,
+and you want a new release, just email me and I'll put out a new release.
+
--- /dev/null
+package Locale::Codes;
+# Copyright (C) 2001 Canon Research Centre Europe (CRE).
+# Copyright (C) 2002-2009 Neil Bowers
+# Copyright (c) 2010-2010 Sullivan Beck
+# This program is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+
+use strict;
+use warnings;
+require 5.002;
+
+use Carp;
+
+#=======================================================================
+# Public Global Variables
+#=======================================================================
+
+# This module is not called directly... %Data is filled in by the
+# calling modules.
+
+use vars qw($VERSION %Data);
+
+# $Data{ TYPE }{ code2id }{ CODESET } { CODE } = [ ID, I ]
+# { id2code }{ CODESET } { ID } = CODE
+# { id2names }{ ID } = [ NAME, NAME, ... ]
+# { alias2id }{ NAME } = [ ID, I ]
+# { id } = FIRST_UNUSED_ID
+# { codealias }{ CODESET } { ALIAS } = CODE
+
+$VERSION='3.12';
+
+#=======================================================================
+#
+# _code2name ( TYPE,CODE,CODESET )
+#
+#=======================================================================
+
+sub _code2name {
+ my($type,$code,$codeset) = @_;
+
+ $code = $Data{$type}{'codealias'}{$codeset}{$code}
+ if (exists $Data{$type}{'codealias'}{$codeset}{$code});
+
+ if (exists $Data{$type}{'code2id'}{$codeset} &&
+ exists $Data{$type}{'code2id'}{$codeset}{$code}) {
+ my ($id,$i) = @{ $Data{$type}{'code2id'}{$codeset}{$code} };
+ my $name = $Data{$type}{'id2names'}{$id}[$i];
+ return $name;
+ } else {
+ #---------------------------------------------------------------
+ # no such code!
+ #---------------------------------------------------------------
+ return undef;
+ }
+}
+
+#=======================================================================
+#
+# _name2code ( TYPE,NAME,CODESET )
+#
+#=======================================================================
+
+sub _name2code {
+ my($type,$name,$codeset) = @_;
+ $name = "" if (! $name);
+ $name = lc($name);
+
+ if (exists $Data{$type}{'alias2id'}{$name}) {
+ my $id = $Data{$type}{'alias2id'}{$name}[0];
+ if (exists $Data{$type}{'id2code'}{$codeset}{$id}) {
+ return $Data{$type}{'id2code'}{$codeset}{$id};
+ }
+ }
+
+ #---------------------------------------------------------------
+ # no such name!
+ #---------------------------------------------------------------
+ return undef;
+ }
+
+#=======================================================================
+#
+# _code2code ( TYPE,CODE,CODESET )
+#
+#=======================================================================
+
+sub _code2code {
+ my($type,$code,$inset,$outset) = @_;
+
+ my $name = _code2name($type,$code,$inset);
+ my $outcode = _name2code($type,$name,$outset);
+ return $outcode;
+}
+
+#=======================================================================
+#
+# _all_codes ( TYPE,CODESET )
+#
+#=======================================================================
+
+sub _all_codes {
+ my($type,$codeset) = @_;
+
+ if (! exists $Data{$type}{'code2id'}{$codeset}) {
+ return ();
+ }
+ my @codes = keys %{ $Data{$type}{'code2id'}{$codeset} };
+ return (sort @codes);
+}
+
+#=======================================================================
+#
+# _all_names ( TYPE,CODESET )
+#
+#=======================================================================
+
+sub _all_names {
+ my($type,$codeset) = @_;
+
+ my @codes = _all_codes($type,$codeset);
+ return () if (! @codes);
+ my @names;
+
+ foreach my $code (@codes) {
+ my($id,$i) = @{ $Data{$type}{'code2id'}{$codeset}{$code} };
+ my $name = $Data{$type}{'id2names'}{$id}[$i];
+ push(@names,$name);
+ }
+ return (sort @names);
+}
+
+#=======================================================================
+#
+# _rename ( TYPE,CODE,NAME,CODESET )
+#
+# Change the official name for a code. The original is retained
+# as an alias, but the new name will be returned if you lookup the
+# name from code.
+#
+#=======================================================================
+
+sub _rename {
+ my($type,$code,$new_name,$codeset,$nowarn) = @_;
+
+ if (! $codeset) {
+ carp "rename_$type(): unknown codeset\n" unless ($nowarn);
+ return 0;
+ }
+
+ $code = $Data{$type}{'codealias'}{$codeset}{$code}
+ if (exists $Data{$type}{'codealias'}{$codeset}{$code});
+
+ # Check that $code exists in the codeset.
+
+ my $id;
+ if (exists $Data{$type}{'code2id'}{$codeset}{$code}) {
+ $id = $Data{$type}{'code2id'}{$codeset}{$code}[0];
+ } else {
+ carp "rename_$type(): unknown code: $code\n" unless ($nowarn);
+ return 0;
+ }
+
+ # Cases:
+ # 1. Renaming to a name which exists with a different ID
+ # Error
+ #
+ # 2. Renaming to a name which exists with the same ID
+ # Just change code2id (I value)
+ #
+ # 3. Renaming to a new name
+ # Create a new alias
+ # Change code2id (I value)
+
+ if (exists $Data{$type}{'alias2id'}{lc($new_name)}) {
+ # Existing name (case 1 and 2)
+
+ my ($new_id,$i) = @{ $Data{$type}{'alias2id'}{lc($new_name)} };
+ if ($new_id != $id) {
+ # Case 1
+ carp "rename_$type(): rename to an existing $type not allowed\n"
+ unless ($nowarn);
+ return 0;
+ }
+
+ # Case 2
+
+ $Data{$type}{'code2id'}{$codeset}{$code}[1] = $i;
+
+ } else {
+
+ # Case 3
+
+ push @{ $Data{$type}{'id2names'}{$id} },$new_name;
+ my $i = $#{ $Data{$type}{'id2names'}{$id} };
+ $Data{$type}{'alias2id'}{lc($new_name)} = [ $id,$i ];
+ $Data{$type}{'code2id'}{$codeset}{$code}[1] = $i;
+ }
+
+ return 1;
+}
+
+#=======================================================================
+#
+# _add_code ( TYPE,CODE,NAME,CODESET )
+#
+# Add a new code to the codeset. Both CODE and NAME must be
+# unused in the code set.
+#
+#=======================================================================
+
+sub _add_code {
+ my($type,$code,$name,$codeset,$nowarn) = @_;
+
+ if (! $codeset) {
+ carp "add_$type(): unknown codeset\n" unless ($nowarn);
+ return 0;
+ }
+
+ # Check that $code is unused.
+
+ if (exists $Data{$type}{'code2id'}{$codeset}{$code} ||
+ exists $Data{$type}{'codealias'}{$codeset}{$code}) {
+ carp "add_$type(): code already in use: $code\n" unless ($nowarn);
+ return 0;
+ }
+
+ # Check to see that $name is unused in this code set. If it is
+ # used (but not in this code set), we'll use that ID. Otherwise,
+ # we'll need to get the next available ID.
+
+ my ($id,$i);
+ if (exists $Data{$type}{'alias2id'}{lc($name)}) {
+ ($id,$i) = @{ $Data{$type}{'alias2id'}{lc($name)} };
+ if (exists $Data{$type}{'id2code'}{$codeset}{$id}) {
+ carp "add_$type(): name already in use: $name\n" unless ($nowarn);
+ return 0;
+ }
+
+ } else {
+ $id = $Data{$type}{'id'}++;
+ $i = 0;
+ $Data{$type}{'alias2id'}{lc($name)} = [ $id,$i ];<