Upgrade to Devel::PPPort 3.06_01
[p5sagit/p5-mst-13.2.git] / ext / Devel / PPPort / PPPort.pm
index 8aebac5..133799d 100644 (file)
@@ -8,9 +8,9 @@
 #
 ################################################################################
 #
-#  $Revision: 33 $
+#  $Revision: 36 $
 #  $Author: mhx $
-#  $Date: 2005/01/31 08:10:55 +0100 $
+#  $Date: 2005/06/25 17:56:28 +0200 $
 #
 ################################################################################
 #
@@ -45,12 +45,12 @@ C<Devel::PPPort> contains a single function, called C<WriteFile>. Its
 only purpose is to write the F<ppport.h> C header file. This file
 contains a series of macros and, if explicitly requested, functions that
 allow XS modules to be built using older versions of Perl. Currently,
-Perl versions from 5.003 to 5.9.2 are supported.
+Perl versions from 5.003 to 5.9.3 are supported.
 
-This module is used by C<h2xs> to write the file F<ppport.h>. 
+This module is used by C<h2xs> to write the file F<ppport.h>.
 
 =head2 Why use ppport.h?
+
 You should use F<ppport.h> in modern code so that your code will work
 with the widest range of Perl interpreters possible, without significant
 additional work.
@@ -69,7 +69,7 @@ They are most probably no XS writers. Also, don't make F<ppport.h>
 optional. Rather, just take the most recent copy of F<ppport.h> that
 you can find (e.g. by generating it with the latest C<Devel::PPPort>
 release from CPAN), copy it into your project, adjust your project to
-use it, and distribute the header along with your module. 
+use it, and distribute the header along with your module.
 
 =head2 Running ppport.h
 
@@ -99,7 +99,7 @@ Otherwise it returns a false value.
 
 =head1 COMPATIBILITY
 
-F<ppport.h> supports Perl versions from 5.003 to 5.9.2
+F<ppport.h> supports Perl versions from 5.003 to 5.9.3
 in threaded and non-threaded configurations.
 
 =head2 Provided Perl compatibility API
@@ -384,6 +384,27 @@ Perl below which it is unsupported:
 
 =over 4
 
+=item perl 5.9.3
+
+  SvMAGIC_set
+  SvRV_set
+  SvSTASH_set
+  SvUV_set
+  av_arylen_p
+  dAXMARK
+  hv_eiter_p
+  hv_eiter_set
+  hv_name_set
+  hv_placeholders_get
+  hv_placeholders_p
+  hv_placeholders_set
+  hv_riter_p
+  hv_riter_set
+  is_utf8_string_loclen
+  newSVhek
+  newWHILEOP
+  stashpv_hvname_match
+
 =item perl 5.9.2
 
   SvPVbyte_force
@@ -764,10 +785,6 @@ Perl below which it is unsupported:
   save_aelem
   save_helem
 
-=item perl 5.004_04
-
-  newWHILEOP
-
 =item perl 5.004
 
   GIMME_V
@@ -884,12 +901,13 @@ require DynaLoader;
 use strict;
 use vars qw($VERSION @ISA $data);
 
-$VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.06 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' };
+$VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.06_01 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' };
 
 @ISA = qw(DynaLoader);
 
 bootstrap Devel::PPPort;
 
+sub _init_data
 {
   $data = do { local $/; <DATA> };
   my $now = localtime;
@@ -898,12 +916,13 @@ bootstrap Devel::PPPort;
   $data =~ s/__VERSION__/$VERSION/g;
   $data =~ s/__DATE__/$now/g;
   $data =~ s/__PKG__/$pkg/g;
-  $data =~ s/^POD\s//gm;
+  $data =~ s/^\|>//gm;
 }
 
 sub WriteFile
 {
   my $file = shift || 'ppport.h';
+  defined $data or _init_data();
   my $copy = $data;
   $copy =~ s/\bppport\.h\b/$file/g;
 
@@ -923,317 +942,325 @@ __DATA__
 /*
 ----------------------------------------------------------------------
 
-    ppport.h -- Perl/Pollution/Portability Version __VERSION__ 
-   
+    ppport.h -- Perl/Pollution/Portability Version __VERSION__
+
     Automatically created by __PKG__ running under
     perl __PERL_VERSION__ on __DATE__.
-    
+
     Do NOT edit this file directly! -- Edit PPPort_pm.PL and the
     includes in parts/inc/ instead.
+
     Use 'perldoc ppport.h' to view the documentation below.
 
 ----------------------------------------------------------------------
 
 SKIP
 
-POD =pod
-POD 
-POD =head1 NAME
-POD 
-POD ppport.h - Perl/Pollution/Portability version __VERSION__
-POD 
-POD =head1 SYNOPSIS
-POD 
-POD   perl ppport.h [options] [files]
-POD 
-POD   --help                      show short help
-POD 
-POD   --patch=file                write one patch file with changes
-POD   --copy=suffix               write changed copies with suffix
-POD   --diff=program              use diff program and options
-POD 
-POD   --compat-version=version    provide compatibility with Perl version
-POD   --cplusplus                 accept C++ comments
-POD 
-POD   --quiet                     don't output anything except fatal errors
-POD   --nodiag                    don't show diagnostics
-POD   --nohints                   don't show hints
-POD   --nochanges                 don't suggest changes
-POD 
-POD   --list-provided             list provided API
-POD   --list-unsupported          list unsupported API
-POD   --api-info=name             show Perl API portability information
-POD 
-POD =head1 COMPATIBILITY
-POD 
-POD This version of F<ppport.h> is designed to support operation with Perl
-POD installations back to 5.003, and has been tested up to 5.9.2.
-POD 
-POD =head1 OPTIONS
-POD 
-POD =head2 --help
-POD 
-POD Display a brief usage summary.
-POD 
-POD =head2 --patch=I<file>
-POD 
-POD If this option is given, a single patch file will be created if
-POD any changes are suggested. This requires a working diff program
-POD to be installed on your system.
-POD 
-POD =head2 --copy=I<suffix>
-POD 
-POD If this option is given, a copy of each file will be saved with
-POD the given suffix that contains the suggested changes. This does
-POD not require any external programs.
-POD 
-POD If neither C<--patch> or C<--copy> are given, the default is to
-POD simply print the diffs for each file. This requires either
-POD C<Text::Diff> or a C<diff> program to be installed.
-POD 
-POD =head2 --diff=I<program>
-POD 
-POD Manually set the diff program and options to use. The default
-POD is to use C<Text::Diff>, when installed, and output unified
-POD context diffs.
-POD 
-POD =head2 --compat-version=I<version>
-POD 
-POD Tell F<ppport.h> to check for compatibility with the given
-POD Perl version. The default is to check for compatibility with Perl
-POD version 5.003. You can use this option to reduce the output
-POD of F<ppport.h> if you intend to be backward compatible only
-POD up to a certain Perl version.
-POD 
-POD =head2 --cplusplus
-POD 
-POD Usually, F<ppport.h> will detect C++ style comments and
-POD replace them with C style comments for portability reasons.
-POD Using this option instructs F<ppport.h> to leave C++
-POD comments untouched.
-POD 
-POD =head2 --quiet
-POD 
-POD Be quiet. Don't print anything except fatal errors.
-POD 
-POD =head2 --nodiag
-POD 
-POD Don't output any diagnostic messages. Only portability
-POD alerts will be printed.
-POD 
-POD =head2 --nohints
-POD 
-POD Don't output any hints. Hints often contain useful portability
-POD notes.
-POD 
-POD =head2 --nochanges
-POD 
-POD Don't suggest any changes. Only give diagnostic output and hints
-POD unless these are also deactivated.
-POD 
-POD =head2 --list-provided
-POD 
-POD Lists the API elements for which compatibility is provided by
-POD F<ppport.h>. Also lists if it must be explicitly requested,
-POD if it has dependencies, and if there are hints for it.
-POD 
-POD =head2 --list-unsupported
-POD 
-POD Lists the API elements that are known not to be supported by
-POD F<ppport.h> and below which version of Perl they probably
-POD won't be available or work.
-POD 
-POD =head2 --api-info=I<name>
-POD 
-POD Show portability information for API elements matching I<name>.
-POD If I<name> is surrounded by slashes, it is interpreted as a regular
-POD expression.
-POD 
-POD =head1 DESCRIPTION
-POD 
-POD In order for a Perl extension (XS) module to be as portable as possible
-POD across differing versions of Perl itself, certain steps need to be taken.
-POD 
-POD =over 4
-POD 
-POD =item *
-POD 
-POD Including this header is the first major one. This alone will give you
-POD access to a large part of the Perl API that hasn't been available in
-POD earlier Perl releases. Use
-POD 
-POD     perl ppport.h --list-provided
-POD 
-POD to see which API elements are provided by ppport.h.
-POD 
-POD =item *
-POD 
-POD You should avoid using deprecated parts of the API. For example, using
-POD global Perl variables without the C<PL_> prefix is deprecated. Also,
-POD some API functions used to have a C<perl_> prefix. Using this form is
-POD also deprecated. You can safely use the supported API, as F<ppport.h>
-POD will provide wrappers for older Perl versions.
-POD 
-POD =item *
-POD 
-POD If you use one of a few functions that were not present in earlier
-POD versions of Perl, and that can't be provided using a macro, you have
-POD to explicitly request support for these functions by adding one or
-POD more C<#define>s in your source code before the inclusion of F<ppport.h>.
-POD 
-POD These functions will be marked C<explicit> in the list shown by
-POD C<--list-provided>.
-POD 
-POD Depending on whether you module has a single or multiple files that
-POD use such functions, you want either C<static> or global variants.
-POD 
-POD For a C<static> function, use:
-POD 
-POD     #define NEED_function
-POD 
-POD For a global function, use:
-POD 
-POD     #define NEED_function_GLOBAL
-POD 
-POD Note that you mustn't have more than one global request for one
-POD function in your project.
-POD 
-POD     Function                  Static Request               Global Request                    
-POD     -----------------------------------------------------------------------------------------
-POD     eval_pv()                 NEED_eval_pv                 NEED_eval_pv_GLOBAL               
-POD     grok_bin()                NEED_grok_bin                NEED_grok_bin_GLOBAL              
-POD     grok_hex()                NEED_grok_hex                NEED_grok_hex_GLOBAL              
-POD     grok_number()             NEED_grok_number             NEED_grok_number_GLOBAL           
-POD     grok_numeric_radix()      NEED_grok_numeric_radix      NEED_grok_numeric_radix_GLOBAL    
-POD     grok_oct()                NEED_grok_oct                NEED_grok_oct_GLOBAL              
-POD     newCONSTSUB()             NEED_newCONSTSUB             NEED_newCONSTSUB_GLOBAL           
-POD     newRV_noinc()             NEED_newRV_noinc             NEED_newRV_noinc_GLOBAL           
-POD     sv_2pv_nolen()            NEED_sv_2pv_nolen            NEED_sv_2pv_nolen_GLOBAL          
-POD     sv_2pvbyte()              NEED_sv_2pvbyte              NEED_sv_2pvbyte_GLOBAL            
-POD     sv_catpvf_mg()            NEED_sv_catpvf_mg            NEED_sv_catpvf_mg_GLOBAL          
-POD     sv_catpvf_mg_nocontext()  NEED_sv_catpvf_mg_nocontext  NEED_sv_catpvf_mg_nocontext_GLOBAL
-POD     sv_setpvf_mg()            NEED_sv_setpvf_mg            NEED_sv_setpvf_mg_GLOBAL          
-POD     sv_setpvf_mg_nocontext()  NEED_sv_setpvf_mg_nocontext  NEED_sv_setpvf_mg_nocontext_GLOBAL
-POD     vnewSVpvf()               NEED_vnewSVpvf               NEED_vnewSVpvf_GLOBAL             
-POD 
-POD To avoid namespace conflicts, you can change the namespace of the
-POD explicitly exported functions using the C<DPPP_NAMESPACE> macro.
-POD Just C<#define> the macro before including C<ppport.h>:
-POD 
-POD     #define DPPP_NAMESPACE MyOwnNamespace_
-POD     #include "ppport.h"
-POD 
-POD The default namespace is C<DPPP_>.
-POD 
-POD =back
-POD 
-POD The good thing is that most of the above can be checked by running
-POD F<ppport.h> on your source code. See the next section for
-POD details.
-POD 
-POD =head1 EXAMPLES
-POD 
-POD To verify whether F<ppport.h> is needed for your module, whether you
-POD should make any changes to your code, and whether any special defines
-POD should be used, F<ppport.h> can be run as a Perl script to check your
-POD source code. Simply say:
-POD 
-POD     perl ppport.h
-POD 
-POD The result will usually be a list of patches suggesting changes
-POD that should at least be acceptable, if not necessarily the most
-POD efficient solution, or a fix for all possible problems.
-POD 
-POD If you know that your XS module uses features only available in
-POD newer Perl releases, if you're aware that it uses C++ comments,
-POD and if you want all suggestions as a single patch file, you could
-POD use something like this:
-POD 
-POD     perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff
-POD 
-POD If you only want your code to be scanned without any suggestions
-POD for changes, use:
-POD 
-POD     perl ppport.h --nochanges
-POD 
-POD You can specify a different C<diff> program or options, using
-POD the C<--diff> option:
-POD 
-POD     perl ppport.h --diff='diff -C 10'
-POD 
-POD This would output context diffs with 10 lines of context.
-POD 
-POD To display portability information for the C<newSVpvn> function,
-POD use:
-POD 
-POD     perl ppport.h --api-info=newSVpvn
-POD 
-POD Since the argument to C<--api-info> can be a regular expression,
-POD you can use
-POD 
-POD     perl ppport.h --api-info=/_nomg$/
-POD 
-POD to display portability information for all C<_nomg> functions or
-POD 
-POD     perl ppport.h --api-info=/./
-POD 
-POD to display information for all known API elements.
-POD 
-POD =head1 BUGS
-POD 
-POD If this version of F<ppport.h> is causing failure during
-POD the compilation of this module, please check if newer versions
-POD of either this module or C<Devel::PPPort> are available on CPAN
-POD before sending a bug report.
-POD 
-POD If F<ppport.h> was generated using the latest version of
-POD C<Devel::PPPort> and is causing failure of this module, please
-POD file a bug report using the CPAN Request Tracker at L<http://rt.cpan.org/>.
-POD 
-POD Please include the following information:
-POD 
-POD =over 4
-POD 
-POD =item 1.
-POD 
-POD The complete output from running "perl -V"
-POD 
-POD =item 2.
-POD 
-POD This file.
-POD 
-POD =item 3.
-POD 
-POD The name and version of the module you were trying to build.
-POD 
-POD =item 4.
-POD 
-POD A full log of the build that failed.
-POD 
-POD =item 5.
-POD 
-POD Any other information that you think could be relevant.
-POD 
-POD =back
-POD 
-POD For the latest version of this code, please get the C<Devel::PPPort>
-POD module from CPAN.
-POD 
-POD =head1 COPYRIGHT
-POD 
-POD Version 3.x, Copyright (c) 2004-2005, Marcus Holland-Moritz.
-POD 
-POD Version 2.x, Copyright (C) 2001, Paul Marquess.
-POD 
-POD Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
-POD 
-POD This program is free software; you can redistribute it and/or
-POD modify it under the same terms as Perl itself.
-POD 
-POD =head1 SEE ALSO
-POD 
-POD See L<Devel::PPPort>.
+|>=pod
+|>
+|>=head1 NAME
+|>
+|>ppport.h - Perl/Pollution/Portability version __VERSION__
+|>
+|>=head1 SYNOPSIS
+|>
+|>  perl ppport.h [options] [source files]
+|>
+|>  Searches current directory for files if no [source files] are given
+|>
+|>  --help                      show short help
+|>
+|>  --patch=file                write one patch file with changes
+|>  --copy=suffix               write changed copies with suffix
+|>  --diff=program              use diff program and options
+|>
+|>  --compat-version=version    provide compatibility with Perl version
+|>  --cplusplus                 accept C++ comments
+|>
+|>  --quiet                     don't output anything except fatal errors
+|>  --nodiag                    don't show diagnostics
+|>  --nohints                   don't show hints
+|>  --nochanges                 don't suggest changes
+|>  --nofilter                  don't filter input files
+|>
+|>  --list-provided             list provided API
+|>  --list-unsupported          list unsupported API
+|>  --api-info=name             show Perl API portability information
+|>
+|>=head1 COMPATIBILITY
+|>
+|>This version of F<ppport.h> is designed to support operation with Perl
+|>installations back to 5.003, and has been tested up to 5.9.3.
+|>
+|>=head1 OPTIONS
+|>
+|>=head2 --help
+|>
+|>Display a brief usage summary.
+|>
+|>=head2 --patch=I<file>
+|>
+|>If this option is given, a single patch file will be created if
+|>any changes are suggested. This requires a working diff program
+|>to be installed on your system.
+|>
+|>=head2 --copy=I<suffix>
+|>
+|>If this option is given, a copy of each file will be saved with
+|>the given suffix that contains the suggested changes. This does
+|>not require any external programs.
+|>
+|>If neither C<--patch> or C<--copy> are given, the default is to
+|>simply print the diffs for each file. This requires either
+|>C<Text::Diff> or a C<diff> program to be installed.
+|>
+|>=head2 --diff=I<program>
+|>
+|>Manually set the diff program and options to use. The default
+|>is to use C<Text::Diff>, when installed, and output unified
+|>context diffs.
+|>
+|>=head2 --compat-version=I<version>
+|>
+|>Tell F<ppport.h> to check for compatibility with the given
+|>Perl version. The default is to check for compatibility with Perl
+|>version 5.003. You can use this option to reduce the output
+|>of F<ppport.h> if you intend to be backward compatible only
+|>up to a certain Perl version.
+|>
+|>=head2 --cplusplus
+|>
+|>Usually, F<ppport.h> will detect C++ style comments and
+|>replace them with C style comments for portability reasons.
+|>Using this option instructs F<ppport.h> to leave C++
+|>comments untouched.
+|>
+|>=head2 --quiet
+|>
+|>Be quiet. Don't print anything except fatal errors.
+|>
+|>=head2 --nodiag
+|>
+|>Don't output any diagnostic messages. Only portability
+|>alerts will be printed.
+|>
+|>=head2 --nohints
+|>
+|>Don't output any hints. Hints often contain useful portability
+|>notes.
+|>
+|>=head2 --nochanges
+|>
+|>Don't suggest any changes. Only give diagnostic output and hints
+|>unless these are also deactivated.
+|>
+|>=head2 --nofilter
+|>
+|>Don't filter the list of input files. By default, files not looking
+|>like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped.
+|>
+|>=head2 --list-provided
+|>
+|>Lists the API elements for which compatibility is provided by
+|>F<ppport.h>. Also lists if it must be explicitly requested,
+|>if it has dependencies, and if there are hints for it.
+|>
+|>=head2 --list-unsupported
+|>
+|>Lists the API elements that are known not to be supported by
+|>F<ppport.h> and below which version of Perl they probably
+|>won't be available or work.
+|>
+|>=head2 --api-info=I<name>
+|>
+|>Show portability information for API elements matching I<name>.
+|>If I<name> is surrounded by slashes, it is interpreted as a regular
+|>expression.
+|>
+|>=head1 DESCRIPTION
+|>
+|>In order for a Perl extension (XS) module to be as portable as possible
+|>across differing versions of Perl itself, certain steps need to be taken.
+|>
+|>=over 4
+|>
+|>=item *
+|>
+|>Including this header is the first major one. This alone will give you
+|>access to a large part of the Perl API that hasn't been available in
+|>earlier Perl releases. Use
+|>
+|>    perl ppport.h --list-provided
+|>
+|>to see which API elements are provided by ppport.h.
+|>
+|>=item *
+|>
+|>You should avoid using deprecated parts of the API. For example, using
+|>global Perl variables without the C<PL_> prefix is deprecated. Also,
+|>some API functions used to have a C<perl_> prefix. Using this form is
+|>also deprecated. You can safely use the supported API, as F<ppport.h>
+|>will provide wrappers for older Perl versions.
+|>
+|>=item *
+|>
+|>If you use one of a few functions that were not present in earlier
+|>versions of Perl, and that can't be provided using a macro, you have
+|>to explicitly request support for these functions by adding one or
+|>more C<#define>s in your source code before the inclusion of F<ppport.h>.
+|>
+|>These functions will be marked C<explicit> in the list shown by
+|>C<--list-provided>.
+|>
+|>Depending on whether you module has a single or multiple files that
+|>use such functions, you want either C<static> or global variants.
+|>
+|>For a C<static> function, use:
+|>
+|>    #define NEED_function
+|>
+|>For a global function, use:
+|>
+|>    #define NEED_function_GLOBAL
+|>
+|>Note that you mustn't have more than one global request for one
+|>function in your project.
+|>
+|>    Function                  Static Request               Global Request
+|>    -----------------------------------------------------------------------------------------
+|>    eval_pv()                 NEED_eval_pv                 NEED_eval_pv_GLOBAL
+|>    grok_bin()                NEED_grok_bin                NEED_grok_bin_GLOBAL
+|>    grok_hex()                NEED_grok_hex                NEED_grok_hex_GLOBAL
+|>    grok_number()             NEED_grok_number             NEED_grok_number_GLOBAL
+|>    grok_numeric_radix()      NEED_grok_numeric_radix      NEED_grok_numeric_radix_GLOBAL
+|>    grok_oct()                NEED_grok_oct                NEED_grok_oct_GLOBAL
+|>    newCONSTSUB()             NEED_newCONSTSUB             NEED_newCONSTSUB_GLOBAL
+|>    newRV_noinc()             NEED_newRV_noinc             NEED_newRV_noinc_GLOBAL
+|>    sv_2pv_nolen()            NEED_sv_2pv_nolen            NEED_sv_2pv_nolen_GLOBAL
+|>    sv_2pvbyte()              NEED_sv_2pvbyte              NEED_sv_2pvbyte_GLOBAL
+|>    sv_catpvf_mg()            NEED_sv_catpvf_mg            NEED_sv_catpvf_mg_GLOBAL
+|>    sv_catpvf_mg_nocontext()  NEED_sv_catpvf_mg_nocontext  NEED_sv_catpvf_mg_nocontext_GLOBAL
+|>    sv_setpvf_mg()            NEED_sv_setpvf_mg            NEED_sv_setpvf_mg_GLOBAL
+|>    sv_setpvf_mg_nocontext()  NEED_sv_setpvf_mg_nocontext  NEED_sv_setpvf_mg_nocontext_GLOBAL
+|>    vnewSVpvf()               NEED_vnewSVpvf               NEED_vnewSVpvf_GLOBAL
+|>
+|>To avoid namespace conflicts, you can change the namespace of the
+|>explicitly exported functions using the C<DPPP_NAMESPACE> macro.
+|>Just C<#define> the macro before including C<ppport.h>:
+|>
+|>    #define DPPP_NAMESPACE MyOwnNamespace_
+|>    #include "ppport.h"
+|>
+|>The default namespace is C<DPPP_>.
+|>
+|>=back
+|>
+|>The good thing is that most of the above can be checked by running
+|>F<ppport.h> on your source code. See the next section for
+|>details.
+|>
+|>=head1 EXAMPLES
+|>
+|>To verify whether F<ppport.h> is needed for your module, whether you
+|>should make any changes to your code, and whether any special defines
+|>should be used, F<ppport.h> can be run as a Perl script to check your
+|>source code. Simply say:
+|>
+|>    perl ppport.h
+|>
+|>The result will usually be a list of patches suggesting changes
+|>that should at least be acceptable, if not necessarily the most
+|>efficient solution, or a fix for all possible problems.
+|>
+|>If you know that your XS module uses features only available in
+|>newer Perl releases, if you're aware that it uses C++ comments,
+|>and if you want all suggestions as a single patch file, you could
+|>use something like this:
+|>
+|>    perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff
+|>
+|>If you only want your code to be scanned without any suggestions
+|>for changes, use:
+|>
+|>    perl ppport.h --nochanges
+|>
+|>You can specify a different C<diff> program or options, using
+|>the C<--diff> option:
+|>
+|>    perl ppport.h --diff='diff -C 10'
+|>
+|>This would output context diffs with 10 lines of context.
+|>
+|>To display portability information for the C<newSVpvn> function,
+|>use:
+|>
+|>    perl ppport.h --api-info=newSVpvn
+|>
+|>Since the argument to C<--api-info> can be a regular expression,
+|>you can use
+|>
+|>    perl ppport.h --api-info=/_nomg$/
+|>
+|>to display portability information for all C<_nomg> functions or
+|>
+|>    perl ppport.h --api-info=/./
+|>
+|>to display information for all known API elements.
+|>
+|>=head1 BUGS
+|>
+|>If this version of F<ppport.h> is causing failure during
+|>the compilation of this module, please check if newer versions
+|>of either this module or C<Devel::PPPort> are available on CPAN
+|>before sending a bug report.
+|>
+|>If F<ppport.h> was generated using the latest version of
+|>C<Devel::PPPort> and is causing failure of this module, please
+|>file a bug report using the CPAN Request Tracker at L<http://rt.cpan.org/>.
+|>
+|>Please include the following information:
+|>
+|>=over 4
+|>
+|>=item 1.
+|>
+|>The complete output from running "perl -V"
+|>
+|>=item 2.
+|>
+|>This file.
+|>
+|>=item 3.
+|>
+|>The name and version of the module you were trying to build.
+|>
+|>=item 4.
+|>
+|>A full log of the build that failed.
+|>
+|>=item 5.
+|>
+|>Any other information that you think could be relevant.
+|>
+|>=back
+|>
+|>For the latest version of this code, please get the C<Devel::PPPort>
+|>module from CPAN.
+|>
+|>=head1 COPYRIGHT
+|>
+|>Version 3.x, Copyright (c) 2004-2005, Marcus Holland-Moritz.
+|>
+|>Version 2.x, Copyright (C) 2001, Paul Marquess.
+|>
+|>Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
+|>
+|>This program is free software; you can redistribute it and/or
+|>modify it under the same terms as Perl itself.
+|>
+|>=head1 SEE ALSO
+|>
+|>See L<Devel::PPPort>.
 
 =cut
 
@@ -1245,6 +1272,7 @@ my %opt = (
   hints     => 1,
   changes   => 1,
   cplusplus => 0,
+  filter    => 1,
 );
 
 my($ppport) = $0 =~ /([\w.]+)$/;
@@ -1254,7 +1282,7 @@ my $HS = "[ \t]";             # horizontal whitespace
 eval {
   require Getopt::Long;
   Getopt::Long::GetOptions(\%opt, qw(
-    help quiet diag! hints! changes! cplusplus
+    help quiet diag! filter! hints! changes! cplusplus
     patch=s copy=s diff=s compat-version=s
     list-provided list-unsupported api-info=s
   )) or usage();
@@ -1273,7 +1301,7 @@ if (exists $opt{'compat-version'}) {
     die "Invalid version number format: '$opt{'compat-version'}'\n";
   }
   die "Only Perl 5 is supported\n" if $r != 5;
-  die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $v >= 1000;
+  die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000;
   $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s;
 }
 else {
@@ -1286,32 +1314,8 @@ my $cce  = '*'.'/';
 my $rccs = quotemeta $ccs;
 my $rcce = quotemeta $cce;
 
-my @files;
-
-if (@ARGV) {
-  @files = map { glob $_ } @ARGV;
-}
-else {
-  eval {
-    require File::Find;
-    File::Find::find(sub {
-      $File::Find::name =~ /\.(xs|c|h|cc)$/i
-          and push @files, $File::Find::name;
-    }, '.');
-  };
-  if ($@) {
-    @files = map { glob $_ } qw(*.xs *.c *.h *.cc);
-  }
-  my %filter = map { /(.*)\.xs$/ ? ("$1.c" => 1) : () } @files;
-  @files = grep { !/\b\Q$ppport\E$/i && !exists $filter{$_} } @files;
-}
-
-unless (@files) {
-  die "No input files given!\n";
-}
-
 my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/
-                ? ( $1 => { 
+                ? ( $1 => {
                       ($2                  ? ( base     => $2 ) : ()),
                       ($3                  ? ( todo     => $3 ) : ()),
                       (index($4, 'v') >= 0 ? ( varargs  => 1  ) : ()),
@@ -1410,6 +1414,7 @@ ORIGMARK|||
 PAD_BASE_SV|||
 PAD_CLONE_VARS|||
 PAD_COMPNAME_FLAGS|||
+PAD_COMPNAME_GEN_set|||
 PAD_COMPNAME_GEN|||
 PAD_COMPNAME_OURSTASH|||
 PAD_COMPNAME_PV|||
@@ -1422,7 +1427,7 @@ PAD_SET_CUR_NOSAVE|||
 PAD_SET_CUR|||
 PAD_SVl|||
 PAD_SV|||
-PERL_BCDVERSION|5.009002||p
+PERL_BCDVERSION|5.009003||p
 PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p
 PERL_INT_MAX|5.004000||p
 PERL_INT_MIN|5.004000||p
@@ -1609,12 +1614,15 @@ SvIOKp|||
 SvIOK|||
 SvIVX|||
 SvIV_nomg|5.009001||p
+SvIV_set|||
 SvIVx|||
 SvIV|||
 SvIsCOW_shared_hash||5.008003|
 SvIsCOW||5.008003|
+SvLEN_set|||
 SvLEN|||
 SvLOCK||5.007003|
+SvMAGIC_set||5.009003|
 SvNIOK_off|||
 SvNIOKp|||
 SvNIOK|||
@@ -1624,6 +1632,7 @@ SvNOK_on|||
 SvNOKp|||
 SvNOK|||
 SvNVX|||
+SvNV_set|||
 SvNVx|||
 SvNV|||
 SvOK|||
@@ -1639,6 +1648,7 @@ SvPV_force_nomg|5.007002||p
 SvPV_force|||
 SvPV_nolen|5.006000||p
 SvPV_nomg|5.007002||p
+SvPV_set|||
 SvPVbyte_force||5.009002|
 SvPVbyte_nolen||5.006000|
 SvPVbytex_force||5.006000|
@@ -1657,9 +1667,11 @@ SvREFCNT|||
 SvROK_off|||
 SvROK_on|||
 SvROK|||
+SvRV_set||5.009003|
 SvRV|||
 SvSETMAGIC|||
 SvSHARE||5.007003|
+SvSTASH_set||5.009003|
 SvSTASH|||
 SvSetMagicSV_nosteal||5.004000|
 SvSetMagicSV||5.004000|
@@ -1680,6 +1692,7 @@ SvUTF8||5.006000|
 SvUVXx|5.004000||p
 SvUVX|5.004000||p
 SvUV_nomg|5.009001||p
+SvUV_set||5.009003|
 SvUVx|5.004000||p
 SvUV|5.004000||p
 SvVOK||5.008001|
@@ -1743,6 +1756,7 @@ asIV|||
 asUV|||
 atfork_lock||5.007003|n
 atfork_unlock||5.007003|n
+av_arylen_p||5.009003|
 av_clear|||
 av_delete||5.006000|
 av_exists||5.006000|
@@ -1789,6 +1803,47 @@ cast_uv||5.006000|
 check_uni|||
 checkcomma|||
 checkposixcc|||
+ck_anoncode|||
+ck_bitop|||
+ck_concat|||
+ck_defined|||
+ck_delete|||
+ck_die|||
+ck_eof|||
+ck_eval|||
+ck_exec|||
+ck_exists|||
+ck_exit|||
+ck_ftst|||
+ck_fun|||
+ck_glob|||
+ck_grep|||
+ck_index|||
+ck_join|||
+ck_lengthconst|||
+ck_lfun|||
+ck_listiob|||
+ck_match|||
+ck_method|||
+ck_null|||
+ck_open|||
+ck_repeat|||
+ck_require|||
+ck_retarget|||
+ck_return|||
+ck_rfun|||
+ck_rvconst|||
+ck_sassign|||
+ck_select|||
+ck_shift|||
+ck_sort|||
+ck_spair|||
+ck_split|||
+ck_subr|||
+ck_substr|||
+ck_svconst|||
+ck_trunc|||
+ck_unpack|||
 cl_and|||
 cl_anything|||
 cl_init_zero|||
@@ -1812,6 +1867,7 @@ cv_undef|||
 cx_dump||5.005000|
 cx_dup|||
 cxinc|||
+dAXMARK||5.009003|
 dAX|5.007002||p
 dITEMS|5.007002||p
 dMARK|||
@@ -1841,18 +1897,6 @@ debstack||5.007003|
 deb||5.007003|v
 del_he|||
 del_sv|||
-del_xiv|||
-del_xnv|||
-del_xpvav|||
-del_xpvbm|||
-del_xpvcv|||
-del_xpvhv|||
-del_xpviv|||
-del_xpvlv|||
-del_xpvmg|||
-del_xpvnv|||
-del_xpv|||
-del_xrv|||
 delimcpy||5.004000|
 depcom|||
 deprecate_old|||
@@ -1916,7 +1960,6 @@ do_vecset|||
 do_vop|||
 docatch_body|||
 docatch|||
-doencodes|||
 doeval|||
 dofile|||
 dofindlabel|||
@@ -1972,6 +2015,7 @@ form_nocontext|||vn
 form||5.004000|v
 fp_dup|||
 fprintf_nocontext|||vn
+free_global_struct|||
 free_tied_hv_pool|||
 free_tmps|||
 gen_constant_list|||
@@ -2031,15 +2075,19 @@ gv_stashpvn|5.006000||p
 gv_stashpv|||
 gv_stashsv|||
 he_dup|||
+hek_dup|||
 hfreeentries|||
 hsplit|||
 hv_assert||5.009001|
+hv_auxinit|||
 hv_clear_placeholders||5.009001|
 hv_clear|||
 hv_delayfree_ent||5.004000|
 hv_delete_common|||
 hv_delete_ent||5.004000|
 hv_delete|||
+hv_eiter_p||5.009003|
+hv_eiter_set||5.009003|
 hv_exists_ent||5.004000|
 hv_exists|||
 hv_fetch_common|||
@@ -2056,7 +2104,13 @@ hv_iterval|||
 hv_ksplit||5.004000|
 hv_magic_check|||
 hv_magic|||
+hv_name_set||5.009003|
 hv_notallowed|||
+hv_placeholders_get||5.009003|
+hv_placeholders_p||5.009003|
+hv_placeholders_set||5.009003|
+hv_riter_p||5.009003|
+hv_riter_set||5.009003|
 hv_scalar||5.009001|
 hv_store_ent||5.004000|
 hv_store_flags||5.008000|
@@ -2071,6 +2125,7 @@ incpush|||
 ingroup|||
 init_argv_symbols|||
 init_debugger|||
+init_global_struct|||
 init_i18nl10n||5.006000|
 init_i18nl14n||5.006000|
 init_ids|||
@@ -2098,6 +2153,7 @@ is_an_int|||
 is_gv_magical_sv|||
 is_gv_magical|||
 is_handle_constructor|||
+is_list_assignment|||
 is_lvalue_sub||5.007001|
 is_uni_alnum_lc||5.006000|
 is_uni_alnumc_lc||5.006000|
@@ -2131,6 +2187,7 @@ is_utf8_alnumc||5.006000|
 is_utf8_alnum||5.006000|
 is_utf8_alpha||5.006000|
 is_utf8_ascii||5.006000|
+is_utf8_char_slow|||
 is_utf8_char||5.006000|
 is_utf8_cntrl||5.006000|
 is_utf8_digit||5.006000|
@@ -2142,6 +2199,7 @@ is_utf8_mark||5.006000|
 is_utf8_print||5.006000|
 is_utf8_punct||5.006000|
 is_utf8_space||5.006000|
+is_utf8_string_loclen||5.009003|
 is_utf8_string_loc||5.008001|
 is_utf8_string||5.006001|
 is_utf8_upper||5.006000|
@@ -2155,7 +2213,6 @@ leave_scope|||
 lex_end|||
 lex_start|||
 linklist|||
-list_assignment|||
 listkids|||
 list|||
 load_module_nocontext|||vn
@@ -2177,6 +2234,7 @@ magic_clearpack|||
 magic_clearsig|||
 magic_dump||5.006000|
 magic_existspack|||
+magic_freearylen_p|||
 magic_freeovrld|||
 magic_freeregexp|||
 magic_getarylen|||
@@ -2226,6 +2284,7 @@ magic_set|||
 magic_sizepack|||
 magic_wipepack|||
 magicname|||
+make_trie|||
 malloced_size|||n
 malloc||5.007002|n
 markstack_grow|||
@@ -2245,6 +2304,7 @@ mg_find|||
 mg_free|||
 mg_get|||
 mg_length||5.005000|
+mg_localize|||
 mg_magical|||
 mg_set|||
 mg_size||5.005000|
@@ -2253,20 +2313,6 @@ missingterm|||
 mode_from_discipline|||
 modkids|||
 mod|||
-more_he|||
-more_sv|||
-more_xiv|||
-more_xnv|||
-more_xpvav|||
-more_xpvbm|||
-more_xpvcv|||
-more_xpvhv|||
-more_xpviv|||
-more_xpvlv|||
-more_xpvmg|||
-more_xpvnv|||
-more_xpv|||
-more_xrv|||
 moreswitches|||
 mul128|||
 mulexp10|||n
@@ -2364,6 +2410,7 @@ newSTATEOP|||
 newSUB|||
 newSVOP|||
 newSVREF|||
+newSVhek||5.009003|
 newSViv|||
 newSVnv|||
 newSVpvf_nocontext|||vn
@@ -2376,7 +2423,7 @@ newSVsv|||
 newSVuv|5.006000||p
 newSV|||
 newUNOP|||
-newWHILEOP||5.004040|
+newWHILEOP||5.009003|
 newXSproto||5.006000|
 newXS||5.006000|
 new_collate||5.006000|
@@ -2387,18 +2434,6 @@ new_logop|||
 new_numeric||5.006000|
 new_stackinfo||5.005000|
 new_version||5.009000|
-new_xiv|||
-new_xnv|||
-new_xpvav|||
-new_xpvbm|||
-new_xpvcv|||
-new_xpvhv|||
-new_xpviv|||
-new_xpvlv|||
-new_xpvmg|||
-new_xpvnv|||
-new_xpv|||
-new_xrv|||
 next_symbol|||
 nextargv|||
 nextchar|||
@@ -2434,6 +2469,7 @@ pad_add_name|||
 pad_alloc|||
 pad_block_start|||
 pad_check_dup|||
+pad_compname_type|||
 pad_findlex|||
 pad_findmy|||
 pad_fixup_inner_anons|||
@@ -2540,6 +2576,7 @@ rsignal||5.004000|
 run_body|||
 runops_debug||5.005000|
 runops_standard||5.005000|
+rvpv_dup|||
 rxres_free|||
 rxres_restore|||
 rxres_save|||
@@ -2643,6 +2680,7 @@ ss_dup|||
 stack_grow|||
 start_glob|||
 start_subparse||5.004000|
+stashpv_hvname_match||5.009003|
 stdize_locale|||
 strEQ|||
 strGE|||
@@ -2863,6 +2901,7 @@ uvchr_to_utf8||5.007001|
 uvuni_to_utf8_flags||5.007003|
 uvuni_to_utf8||5.007001|
 validate_suid|||
+varname|||
 vcmp||5.009000|
 vcroak||5.006000|
 vdeb||5.007003|
@@ -2981,6 +3020,44 @@ if (exists $opt{'list-provided'}) {
   exit 0;
 }
 
+my @files;
+my @srcext = qw( xs c h cc cpp );
+my $srcext = join '|', @srcext;
+
+if (@ARGV) {
+  my %seen;
+  @files = grep { -f && !exists $seen{$_} } map { glob $_ } @ARGV;
+}
+else {
+  eval {
+    require File::Find;
+    File::Find::find(sub {
+      $File::Find::name =~ /\.($srcext)$/i
+          and push @files, $File::Find::name;
+    }, '.');
+  };
+  if ($@) {
+    @files = map { glob "*.$_" } @srcext;
+  }
+}
+
+if (!@ARGV || $opt{filter}) {
+  my(@in, @out);
+  my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files;
+  for (@files) {
+    my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/\.($srcext)$/i;
+    push @{ $out ? \@out : \@in }, $_;
+  }
+  if (@ARGV && @out) {
+    warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out);
+  }
+  @files = @in;
+}
+
+unless (@files) {
+  die "No input files given!\n";
+}
+
 my(%files, %global, %revreplace);
 %revreplace = reverse %replace;
 my $filename;
@@ -3515,7 +3592,7 @@ __DATA__
 
 #define PERL_BCDVERSION ((PERL_REVISION * 0x1000000L) + (PERL_VERSION * 0x1000L) + PERL_SUBVERSION)
 
-/* It is very unlikely that anyone will try to use this with Perl 6 
+/* It is very unlikely that anyone will try to use this with Perl 6
    (or greater), but who knows.
  */
 #if PERL_REVISION != 5
@@ -4001,7 +4078,7 @@ typedef NVTYPE NV;
 #  if PTRSIZE == LONGSIZE
 #    define PTR2ul(p)     (unsigned long)(p)
 #  else
-#    define PTR2ul(p)     INT2PTR(unsigned long,p)        
+#    define PTR2ul(p)     INT2PTR(unsigned long,p)
 #  endif
 
 #endif /* !INT2PTR */
@@ -4167,15 +4244,15 @@ typedef NVTYPE NV;
 #endif
 
 #ifndef pTHX_
-#  define pTHX_                          
+#  define pTHX_
 #endif
 
 #ifndef aTHX
-#  define aTHX                           
+#  define aTHX
 #endif
 
 #ifndef aTHX_
-#  define aTHX_                          
+#  define aTHX_
 #endif
 #ifndef dTHXoa
 #  define dTHXoa(x)                      dTHXa(x)
@@ -4493,7 +4570,7 @@ DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv)
 
 #ifndef NVef
 #  if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \
-      defined(PERL_PRIfldbl) /* Not very likely, but let's try anyway. */ 
+      defined(PERL_PRIfldbl) /* Not very likely, but let's try anyway. */
 #    define NVef          PERL_PRIeldbl
 #    define NVff          PERL_PRIfldbl
 #    define NVgf          PERL_PRIgldbl
@@ -4523,7 +4600,7 @@ extern char * DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv);
 
 char *
 DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv)
-{   
+{
   STRLEN n_a;
   return sv_2pv(sv, &n_a);
 }
@@ -4567,7 +4644,7 @@ extern char * DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp);
 
 char *
 DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp)
-{   
+{
   sv_utf8_downgrade(sv,0);
   return SvPV(sv,*lp);
 }
@@ -5245,12 +5322,12 @@ DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send)
 {
 #ifdef USE_LOCALE_NUMERIC
 #ifdef PL_numeric_radix_sv
-    if (PL_numeric_radix_sv && IN_LOCALE) { 
+    if (PL_numeric_radix_sv && IN_LOCALE) {
         STRLEN len;
         char* radix = SvPV(PL_numeric_radix_sv, len);
         if (*sp + len <= send && memEQ(*sp, radix, len)) {
             *sp += len;
-            return TRUE; 
+            return TRUE;
         }
     }
 #else
@@ -5261,11 +5338,11 @@ DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send)
     dTHR;  /* needed for older threaded perls */
     struct lconv *lc = localeconv();
     char *radix = lc->decimal_point;
-    if (radix && IN_LOCALE) { 
+    if (radix && IN_LOCALE) {
         STRLEN len = strlen(radix);
         if (*sp + len <= send && memEQ(*sp, radix, len)) {
             *sp += len;
-            return TRUE; 
+            return TRUE;
         }
     }
 #endif /* PERL_VERSION */
@@ -5578,7 +5655,7 @@ DPPP_(my_grok_bin)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result)
             warn("Illegal binary digit '%c' ignored", *s);
         break;
     }
-    
+
     if (   ( overflowed && value_nv > 4294967295.0)
 #if UVSIZE > 4
        || (!overflowed && value > 0xffffffff  )
@@ -5680,7 +5757,7 @@ DPPP_(my_grok_hex)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result)
             warn("Illegal hexadecimal digit '%c' ignored", *s);
         break;
     }
-    
+
     if (   ( overflowed && value_nv > 4294967295.0)
 #if UVSIZE > 4
        || (!overflowed && value > 0xffffffff  )
@@ -5773,7 +5850,7 @@ DPPP_(my_grok_oct)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result)
         }
         break;
     }
-    
+
     if (   ( overflowed && value_nv > 4294967295.0)
 #if UVSIZE > 4
        || (!overflowed && value > 0xffffffff  )