From: Nicholas Clark Date: Fri, 20 May 2005 21:50:03 +0000 (+0000) Subject: Updaate ppport.h to get a conditional PERL_UNUSED_DECL X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=ab9184c907a73e26d04db8741a60e1abb3ead566;p=p5sagit%2Fp5-mst-13.2.git Updaate ppport.h to get a conditional PERL_UNUSED_DECL p4raw-id: //depot/perl@24520 --- diff --git a/ext/Cwd/ppport.h b/ext/Cwd/ppport.h index 69533f0..be16d86 100644 --- a/ext/Cwd/ppport.h +++ b/ext/Cwd/ppport.h @@ -4,10 +4,10 @@ /* ---------------------------------------------------------------------- - ppport.h -- Perl/Pollution/Portability Version 3.03 + ppport.h -- Perl/Pollution/Portability Version 3.06 Automatically created by Devel::PPPort running under - perl 5.008001 on Tue Nov 16 20:43:38 2004. + perl 5.009003 on Fri May 20 22:14:30 2005. Do NOT edit this file directly! -- Edit PPPort_pm.PL and the includes in parts/inc/ instead. @@ -22,7 +22,7 @@ SKIP =head1 NAME -ppport.h - Perl/Pollution/Portability version 3.03 +ppport.h - Perl/Pollution/Portability version 3.06 =head1 SYNOPSIS @@ -44,6 +44,7 @@ ppport.h - Perl/Pollution/Portability version 3.03 --list-provided list provided API --list-unsupported list unsupported API + --api-info=name show Perl API portability information =head1 COMPATIBILITY @@ -124,6 +125,12 @@ Lists the API elements that are known not to be supported by F and below which version of Perl they probably won't be available or work. +=head2 --api-info=I + +Show portability information for API elements matching I. +If I 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 @@ -238,6 +245,22 @@ the C<--diff> option: This would output context diffs with 10 lines of context. +To display portability information for the C 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 is causing failure during @@ -280,7 +303,7 @@ module from CPAN. =head1 COPYRIGHT -Version 3.x, Copyright (c) 2004, Marcus Holland-Moritz. +Version 3.x, Copyright (c) 2004-2005, Marcus Holland-Moritz. Version 2.x, Copyright (C) 2001, Paul Marquess. @@ -314,7 +337,7 @@ eval { Getopt::Long::GetOptions(\%opt, qw( help quiet diag! hints! changes! cplusplus patch=s copy=s diff=s compat-version=s - list-provided list-unsupported + list-provided list-unsupported api-info=s )) or usage(); }; @@ -749,6 +772,10 @@ UVXf|5.007001||p UVof|5.006000||p UVuf|5.006000||p UVxf|5.006000||p +XCPT_CATCH|5.009002||p +XCPT_RETHROW|5.009002||p +XCPT_TRY_END|5.009002||p +XCPT_TRY_START|5.009002||p XPUSHi||| XPUSHmortal|5.009002||p XPUSHn||| @@ -879,8 +906,10 @@ dTHXa|5.006000||p dTHXoa|5.006000||p dTHX|5.006000||p dUNDERBAR|5.009002||p +dXCPT|5.009002||p dXSARGS||| dXSI32||| +dXSTARG|5.006000||p deb_curcv||| deb_nocontext|||vn deb_stack_all||| @@ -891,7 +920,6 @@ debprof||| debstackptrs||5.007003| debstack||5.007003| deb||5.007003|v -default_protect|||v del_he||| del_sv||| del_xiv||| @@ -1070,7 +1098,9 @@ gv_fetchmeth_autoload||5.007003| gv_fetchmethod_autoload||5.004000| gv_fetchmethod||| gv_fetchmeth||| +gv_fetchpvn_flags||5.009002| gv_fetchpv||| +gv_fetchsv||5.009002| gv_fullname3||5.004000| gv_fullname4||5.006001| gv_fullname||| @@ -1146,6 +1176,7 @@ isLOWER||| isSPACE||| isUPPER||| is_an_int||| +is_gv_magical_sv||| is_gv_magical||| is_handle_constructor||| is_lvalue_sub||5.007001| @@ -1468,6 +1499,8 @@ op_const_sv||| op_dump||5.006000| op_free||| op_null||5.007002| +op_refcnt_lock||5.009002| +op_refcnt_unlock||5.009002| open_script||| pMY_CXT_|5.007003||p pMY_CXT|5.007003||p @@ -1645,6 +1678,7 @@ savepv||| savesharedpv||5.007003| savestack_grow_cnt||5.008001| savestack_grow||| +savesvpv||5.009002| sawparens||| scalar_mod_type||| scalarboolean||| @@ -1910,14 +1944,10 @@ uvchr_to_utf8||5.007001| uvuni_to_utf8_flags||5.007003| uvuni_to_utf8||5.007001| validate_suid||| -vcall_body||| -vcall_list_body||| vcmp||5.009000| vcroak||5.006000| vdeb||5.007003| -vdefault_protect||| vdie||| -vdocatch_body||| vform||5.006000| visit||| vivify_defelem||| @@ -1927,8 +1957,6 @@ vmess||5.006000| vnewSVpvf|5.006000|5.004000|p vnormal||5.009002| vnumify||5.009000| -vparse_body||| -vrun_body||| vstringify||5.009000| vwarner||5.006000| vwarn||5.006000| @@ -1985,6 +2013,41 @@ while () { $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)}; } +if (exists $opt{'api-info'}) { + my $f; + my $count = 0; + my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$"; + for $f (sort { lc $a cmp lc $b } keys %API) { + next unless $f =~ /$match/; + print "\n=== $f ===\n\n"; + my $info = 0; + if ($API{$f}{base} || $API{$f}{todo}) { + my $base = format_version($API{$f}{base} || $API{$f}{todo}); + print "Supported at least starting from perl-$base.\n"; + $info++; + } + if ($API{$f}{provided}) { + my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003"; + print "Support by $ppport provided back to perl-$todo.\n"; + print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f}; + print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f}; + print "$hints{$f}" if exists $hints{$f}; + $info++; + } + unless ($info) { + print "No portability information available.\n"; + } + $count++; + } + if ($count > 0) { + print "\n"; + } + else { + print "Found no API matching '$opt{'api-info'}'.\n"; + } + exit 0; +} + if (exists $opt{'list-provided'}) { my $f; for $f (sort { lc $a cmp lc $b } keys %API) { @@ -2969,14 +3032,16 @@ __DATA__ /* Replace: 0 */ #endif -#ifdef HASATTRIBUTE -# if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER) -# define PERL_UNUSED_DECL +#ifndef PERL_UNUSED_DECL +# ifdef HASATTRIBUTE +# if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER) +# define PERL_UNUSED_DECL +# else +# define PERL_UNUSED_DECL __attribute__((unused)) +# endif # else -# define PERL_UNUSED_DECL __attribute__((unused)) +# define PERL_UNUSED_DECL # endif -#else -# define PERL_UNUSED_DECL #endif #ifndef NOOP # define NOOP (void)0 @@ -3165,6 +3230,9 @@ typedef NVTYPE NV; #ifndef dITEMS # define dITEMS I32 items = SP - MARK #endif +#ifndef dXSTARG +# define dXSTARG SV * targ = sv_newmortal() +#endif #ifndef dTHR # define dTHR dNOOP #endif @@ -3619,7 +3687,7 @@ DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp) # define sv_pvn(sv, len) SvPV(sv, len) #endif -/* Hint: sv_pvn +/* Hint: sv_pvn_force * Always use the SvPV_force() macro instead of sv_pvn_force(). */ #ifndef sv_pvn_force @@ -4807,6 +4875,22 @@ DPPP_(my_grok_oct)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result) #endif #endif +#ifdef NO_XSLOCKS +# ifdef dJMPENV +# define dXCPT dJMPENV; int rEtV = 0 +# define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0) +# define XCPT_TRY_END JMPENV_POP; +# define XCPT_CATCH if (rEtV != 0) +# define XCPT_RETHROW JMPENV_JUMP(rEtV) +# else +# define dXCPT Sigjmp_buf oldTOP; int rEtV = 0 +# define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0) +# define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf); +# define XCPT_CATCH if (rEtV != 0) +# define XCPT_RETHROW Siglongjmp(top_env, rEtV) +# endif +#endif + #endif /* _P_P_PORTABILITY_H_ */ /* End of File ppport.h */ diff --git a/ext/Time/HiRes/ppport.h b/ext/Time/HiRes/ppport.h index 23d8894..be16d86 100644 --- a/ext/Time/HiRes/ppport.h +++ b/ext/Time/HiRes/ppport.h @@ -4,10 +4,10 @@ /* ---------------------------------------------------------------------- - ppport.h -- Perl/Pollution/Portability Version 3.03 + ppport.h -- Perl/Pollution/Portability Version 3.06 Automatically created by Devel::PPPort running under - perl 5.008004 on Thu Sep 16 09:09:58 2004. + perl 5.009003 on Fri May 20 22:14:30 2005. Do NOT edit this file directly! -- Edit PPPort_pm.PL and the includes in parts/inc/ instead. @@ -22,7 +22,7 @@ SKIP =head1 NAME -ppport.h - Perl/Pollution/Portability version 3.03 +ppport.h - Perl/Pollution/Portability version 3.06 =head1 SYNOPSIS @@ -44,6 +44,7 @@ ppport.h - Perl/Pollution/Portability version 3.03 --list-provided list provided API --list-unsupported list unsupported API + --api-info=name show Perl API portability information =head1 COMPATIBILITY @@ -124,6 +125,12 @@ Lists the API elements that are known not to be supported by F and below which version of Perl they probably won't be available or work. +=head2 --api-info=I + +Show portability information for API elements matching I. +If I 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 @@ -238,6 +245,22 @@ the C<--diff> option: This would output context diffs with 10 lines of context. +To display portability information for the C 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 is causing failure during @@ -280,7 +303,7 @@ module from CPAN. =head1 COPYRIGHT -Version 3.x, Copyright (c) 2004, Marcus Holland-Moritz. +Version 3.x, Copyright (c) 2004-2005, Marcus Holland-Moritz. Version 2.x, Copyright (C) 2001, Paul Marquess. @@ -314,7 +337,7 @@ eval { Getopt::Long::GetOptions(\%opt, qw( help quiet diag! hints! changes! cplusplus patch=s copy=s diff=s compat-version=s - list-provided list-unsupported + list-provided list-unsupported api-info=s )) or usage(); }; @@ -749,6 +772,10 @@ UVXf|5.007001||p UVof|5.006000||p UVuf|5.006000||p UVxf|5.006000||p +XCPT_CATCH|5.009002||p +XCPT_RETHROW|5.009002||p +XCPT_TRY_END|5.009002||p +XCPT_TRY_START|5.009002||p XPUSHi||| XPUSHmortal|5.009002||p XPUSHn||| @@ -879,8 +906,10 @@ dTHXa|5.006000||p dTHXoa|5.006000||p dTHX|5.006000||p dUNDERBAR|5.009002||p +dXCPT|5.009002||p dXSARGS||| dXSI32||| +dXSTARG|5.006000||p deb_curcv||| deb_nocontext|||vn deb_stack_all||| @@ -891,7 +920,6 @@ debprof||| debstackptrs||5.007003| debstack||5.007003| deb||5.007003|v -default_protect|||v del_he||| del_sv||| del_xiv||| @@ -1070,7 +1098,9 @@ gv_fetchmeth_autoload||5.007003| gv_fetchmethod_autoload||5.004000| gv_fetchmethod||| gv_fetchmeth||| +gv_fetchpvn_flags||5.009002| gv_fetchpv||| +gv_fetchsv||5.009002| gv_fullname3||5.004000| gv_fullname4||5.006001| gv_fullname||| @@ -1146,6 +1176,7 @@ isLOWER||| isSPACE||| isUPPER||| is_an_int||| +is_gv_magical_sv||| is_gv_magical||| is_handle_constructor||| is_lvalue_sub||5.007001| @@ -1468,6 +1499,8 @@ op_const_sv||| op_dump||5.006000| op_free||| op_null||5.007002| +op_refcnt_lock||5.009002| +op_refcnt_unlock||5.009002| open_script||| pMY_CXT_|5.007003||p pMY_CXT|5.007003||p @@ -1645,6 +1678,7 @@ savepv||| savesharedpv||5.007003| savestack_grow_cnt||5.008001| savestack_grow||| +savesvpv||5.009002| sawparens||| scalar_mod_type||| scalarboolean||| @@ -1910,14 +1944,10 @@ uvchr_to_utf8||5.007001| uvuni_to_utf8_flags||5.007003| uvuni_to_utf8||5.007001| validate_suid||| -vcall_body||| -vcall_list_body||| vcmp||5.009000| vcroak||5.006000| vdeb||5.007003| -vdefault_protect||| vdie||| -vdocatch_body||| vform||5.006000| visit||| vivify_defelem||| @@ -1927,8 +1957,6 @@ vmess||5.006000| vnewSVpvf|5.006000|5.004000|p vnormal||5.009002| vnumify||5.009000| -vparse_body||| -vrun_body||| vstringify||5.009000| vwarner||5.006000| vwarn||5.006000| @@ -1985,6 +2013,41 @@ while () { $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)}; } +if (exists $opt{'api-info'}) { + my $f; + my $count = 0; + my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$"; + for $f (sort { lc $a cmp lc $b } keys %API) { + next unless $f =~ /$match/; + print "\n=== $f ===\n\n"; + my $info = 0; + if ($API{$f}{base} || $API{$f}{todo}) { + my $base = format_version($API{$f}{base} || $API{$f}{todo}); + print "Supported at least starting from perl-$base.\n"; + $info++; + } + if ($API{$f}{provided}) { + my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003"; + print "Support by $ppport provided back to perl-$todo.\n"; + print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f}; + print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f}; + print "$hints{$f}" if exists $hints{$f}; + $info++; + } + unless ($info) { + print "No portability information available.\n"; + } + $count++; + } + if ($count > 0) { + print "\n"; + } + else { + print "Found no API matching '$opt{'api-info'}'.\n"; + } + exit 0; +} + if (exists $opt{'list-provided'}) { my $f; for $f (sort { lc $a cmp lc $b } keys %API) { @@ -2969,14 +3032,16 @@ __DATA__ /* Replace: 0 */ #endif -#ifdef HASATTRIBUTE -# if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER) -# define PERL_UNUSED_DECL +#ifndef PERL_UNUSED_DECL +# ifdef HASATTRIBUTE +# if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER) +# define PERL_UNUSED_DECL +# else +# define PERL_UNUSED_DECL __attribute__((unused)) +# endif # else -# define PERL_UNUSED_DECL __attribute__((unused)) +# define PERL_UNUSED_DECL # endif -#else -# define PERL_UNUSED_DECL #endif #ifndef NOOP # define NOOP (void)0 @@ -3165,6 +3230,9 @@ typedef NVTYPE NV; #ifndef dITEMS # define dITEMS I32 items = SP - MARK #endif +#ifndef dXSTARG +# define dXSTARG SV * targ = sv_newmortal() +#endif #ifndef dTHR # define dTHR dNOOP #endif @@ -3619,7 +3687,7 @@ DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp) # define sv_pvn(sv, len) SvPV(sv, len) #endif -/* Hint: sv_pvn +/* Hint: sv_pvn_force * Always use the SvPV_force() macro instead of sv_pvn_force(). */ #ifndef sv_pvn_force @@ -4807,6 +4875,22 @@ DPPP_(my_grok_oct)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result) #endif #endif +#ifdef NO_XSLOCKS +# ifdef dJMPENV +# define dXCPT dJMPENV; int rEtV = 0 +# define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0) +# define XCPT_TRY_END JMPENV_POP; +# define XCPT_CATCH if (rEtV != 0) +# define XCPT_RETHROW JMPENV_JUMP(rEtV) +# else +# define dXCPT Sigjmp_buf oldTOP; int rEtV = 0 +# define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0) +# define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf); +# define XCPT_CATCH if (rEtV != 0) +# define XCPT_RETHROW Siglongjmp(top_env, rEtV) +# endif +#endif + #endif /* _P_P_PORTABILITY_H_ */ /* End of File ppport.h */