#
################################################################################
#
-# $Revision: 33 $
+# $Revision: 36 $
# $Author: mhx $
-# $Date: 2005/01/31 08:10:55 +0100 $
+# $Date: 2005/06/25 17:56:28 +0200 $
#
################################################################################
#
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.
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
=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
=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
save_aelem
save_helem
-=item perl 5.004_04
-
- newWHILEOP
-
=item perl 5.004
GIMME_V
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;
$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;
/*
----------------------------------------------------------------------
- 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
hints => 1,
changes => 1,
cplusplus => 0,
+ filter => 1,
);
my($ppport) = $0 =~ /([\w.]+)$/;
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();
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 {
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 ) : ()),
PAD_BASE_SV|||
PAD_CLONE_VARS|||
PAD_COMPNAME_FLAGS|||
+PAD_COMPNAME_GEN_set|||
PAD_COMPNAME_GEN|||
PAD_COMPNAME_OURSTASH|||
PAD_COMPNAME_PV|||
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
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|||
SvNOKp|||
SvNOK|||
SvNVX|||
+SvNV_set|||
SvNVx|||
SvNV|||
SvOK|||
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|
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|
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|
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|
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|||
cx_dump||5.005000|
cx_dup|||
cxinc|||
+dAXMARK||5.009003|
dAX|5.007002||p
dITEMS|5.007002||p
dMARK|||
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|||
do_vop|||
docatch_body|||
docatch|||
-doencodes|||
doeval|||
dofile|||
dofindlabel|||
form||5.004000|v
fp_dup|||
fprintf_nocontext|||vn
+free_global_struct|||
free_tied_hv_pool|||
free_tmps|||
gen_constant_list|||
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|||
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|
ingroup|||
init_argv_symbols|||
init_debugger|||
+init_global_struct|||
init_i18nl10n||5.006000|
init_i18nl14n||5.006000|
init_ids|||
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|
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|
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|
lex_end|||
lex_start|||
linklist|||
-list_assignment|||
listkids|||
list|||
load_module_nocontext|||vn
magic_clearsig|||
magic_dump||5.006000|
magic_existspack|||
+magic_freearylen_p|||
magic_freeovrld|||
magic_freeregexp|||
magic_getarylen|||
magic_sizepack|||
magic_wipepack|||
magicname|||
+make_trie|||
malloced_size|||n
malloc||5.007002|n
markstack_grow|||
mg_free|||
mg_get|||
mg_length||5.005000|
+mg_localize|||
mg_magical|||
mg_set|||
mg_size||5.005000|
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
newSUB|||
newSVOP|||
newSVREF|||
+newSVhek||5.009003|
newSViv|||
newSVnv|||
newSVpvf_nocontext|||vn
newSVuv|5.006000||p
newSV|||
newUNOP|||
-newWHILEOP||5.004040|
+newWHILEOP||5.009003|
newXSproto||5.006000|
newXS||5.006000|
new_collate||5.006000|
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|||
pad_alloc|||
pad_block_start|||
pad_check_dup|||
+pad_compname_type|||
pad_findlex|||
pad_findmy|||
pad_fixup_inner_anons|||
run_body|||
runops_debug||5.005000|
runops_standard||5.005000|
+rvpv_dup|||
rxres_free|||
rxres_restore|||
rxres_save|||
stack_grow|||
start_glob|||
start_subparse||5.004000|
+stashpv_hvname_match||5.009003|
stdize_locale|||
strEQ|||
strGE|||
uvuni_to_utf8_flags||5.007003|
uvuni_to_utf8||5.007001|
validate_suid|||
+varname|||
vcmp||5.009000|
vcroak||5.006000|
vdeb||5.007003|
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;
#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
# 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 */
#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)
#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
char *
DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv)
-{
+{
STRLEN n_a;
return sv_2pv(sv, &n_a);
}
char *
DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp)
-{
+{
sv_utf8_downgrade(sv,0);
return SvPV(sv,*lp);
}
{
#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
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 */
warn("Illegal binary digit '%c' ignored", *s);
break;
}
-
+
if ( ( overflowed && value_nv > 4294967295.0)
#if UVSIZE > 4
|| (!overflowed && value > 0xffffffff )
warn("Illegal hexadecimal digit '%c' ignored", *s);
break;
}
-
+
if ( ( overflowed && value_nv > 4294967295.0)
#if UVSIZE > 4
|| (!overflowed && value > 0xffffffff )
}
break;
}
-
+
if ( ( overflowed && value_nv > 4294967295.0)
#if UVSIZE > 4
|| (!overflowed && value > 0xffffffff )