+3.02 - 2004-09-08
+
+ * added support for the following API:
+ END_EXTERN_C
+ EXTERN_C
+ MY_CXT_CLONE
+ PERL_GCC_BRACE_GROUPS_FORBIDDEN
+ START_EXTERN_C
+ STMT_END
+ STMT_START
+
3.01 - 2004-08-23
* patchlevel.h tweak
# http://module-build.sourceforge.net/META-spec.html
#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
name: Devel-PPPort
-version: 3.01
+version: 3.02
version_from: PPPort_pm.PL
installdirs: perl
requires:
dTHXa
dTHXoa
dUNDERBAR
+ END_EXTERN_C
ERRSV
eval_pv
eval_sv
+ EXTERN_C
get_av
get_cv
get_hv
mXPUSHp
mXPUSHu
MY_CXT
+ MY_CXT_CLONE
MY_CXT_INIT
newCONSTSUB
newRV_inc
NVgf
NVTYPE
PERL_BCDVERSION
+ PERL_GCC_BRACE_GROUPS_FORBIDDEN
PERL_INT_MAX
PERL_INT_MIN
PERL_LONG_MAX
PUSHmortal
PUSHu
SAVE_DEFSV
+ START_EXTERN_C
START_MY_CXT
+ STMT_END
+ STMT_START
sv_2pv_nolen
sv_2pvbyte
sv_2uv
use strict;
use vars qw($VERSION @ISA $data);
-$VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.01 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' };
+$VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.02 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' };
@ISA = qw(DynaLoader);
CvSTASH|||
CvWEAKOUTSIDE|||
DEFSV|5.004050||p
+END_EXTERN_C|5.005000||p
ENTER|||
ERRSV|5.004050||p
EXTEND|||
+EXTERN_C|5.005000||p
FREETMPS|||
GIMME_V||5.004000|n
GIMME|||n
LEAVE|||
LVRET|||
MARK|||
+MY_CXT_CLONE|5.009002||p
MY_CXT_INIT|5.007003||p
MY_CXT|5.007003||p
MoveD|5.009002||p
PAD_SVl|||
PAD_SV|||
PERL_BCDVERSION|5.009002||p
+PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p
PERL_INT_MAX|5.004000||p
PERL_INT_MIN|5.004000||p
PERL_LONG_MAX|5.004000||p
PL_copline|5.005000||p
PL_curcop|5.004050||p
PL_curstash|5.004050||p
-PL_debstash|||p
+PL_debstash|5.004050||p
PL_defgv|5.004050||p
-PL_diehook|||p
+PL_diehook|5.004050||p
PL_dirty|5.004050||p
PL_dowarn|||pn
-PL_errgv|||p
+PL_errgv|5.004050||p
PL_hexdigit|5.005000||p
PL_hints|5.005000||p
PL_last_in_gv|||n
PL_modglobal||5.005000|n
PL_na|5.004050||pn
-PL_no_modify|||p
+PL_no_modify|5.006000||p
PL_ofs_sv|||n
-PL_perl_destruct_level|||p
+PL_perl_destruct_level|5.004050||p
PL_perldb|5.004050||p
-PL_ppaddr|||p
+PL_ppaddr|5.006000||p
PL_rsfp_filters|5.004050||p
PL_rsfp|5.004050||p
PL_rs|||n
-PL_stack_base|||p
-PL_stack_sp|||p
+PL_stack_base|5.004050||p
+PL_stack_sp|5.004050||p
PL_stdingv|5.004050||p
-PL_sv_arenaroot|||p
+PL_sv_arenaroot|5.004050||p
PL_sv_no|5.004050||pn
PL_sv_undef|5.004050||pn
PL_sv_yes|5.004050||pn
-PL_tainted|||p
-PL_tainting|||p
+PL_tainted|5.004050||p
+PL_tainting|5.004050||p
POPi|||n
POPl|||n
POPn|||n
SAVE_DEFSV|5.004050||p
SPAGAIN|||
SP|||
+START_EXTERN_C|5.005000||p
START_MY_CXT|5.007003||p
+STMT_END|||p
+STMT_START|||p
ST|||
SVt_IV|||
SVt_NV|||
# endif
#endif /* !INT2PTR */
+
+#undef START_EXTERN_C
+#undef END_EXTERN_C
+#undef EXTERN_C
+#ifdef __cplusplus
+# define START_EXTERN_C extern "C" {
+# define END_EXTERN_C }
+# define EXTERN_C extern "C"
+#else
+# define START_EXTERN_C
+# define END_EXTERN_C
+# define EXTERN_C extern
+#endif
+
+#ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN
+# if defined(__STRICT_ANSI__) && defined(PERL_GCC_PEDANTIC)
+# define PERL_GCC_BRACE_GROUPS_FORBIDDEN
+# endif
+#endif
+
+#undef STMT_START
+#undef STMT_END
+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus)
+# define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */
+# define STMT_END )
+#else
+# if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__)
+# define STMT_START if (1)
+# define STMT_END else (void)0
+# else
+# define STMT_START do
+# define STMT_END while (0)
+# endif
+#endif
#ifndef boolSV
# define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no)
#endif
Zero(my_cxtp, 1, my_cxt_t); \
sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
+/* Clones the per-interpreter data. */
+#define MY_CXT_CLONE \
+ dMY_CXT_SV; \
+ my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
+ Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\
+ sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
+
/* This macro must be used to access members of the my_cxt_t structure.
* e.g. MYCXT.some_data */
#define MY_CXT (*my_cxtp)
#define dMY_CXT_SV dNOOP
#define dMY_CXT dNOOP
#define MY_CXT_INIT NOOP
+#define MY_CXT_CLONE NOOP
#define MY_CXT my_cxt
#define pMY_CXT void
use strict;
use vars qw($VERSION @ISA $data);
-$VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.01 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' };
+$VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.02 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' };
@ISA = qw(DynaLoader);
#
################################################################################
#
-# $Revision: 3 $
+# $Revision: 4 $
# $Author: mhx $
-# $Date: 2004/08/13 12:50:11 +0200 $
+# $Date: 2004/09/08 21:08:46 +0200 $
#
################################################################################
#
use strict;
require 'parts/ppptools.pl';
-my $file = 'provided.c';
+die "Usage: $0 [check|write]\n" unless @ARGV && $ARGV[0] =~ /^(check|write)$/;
+my $mode = $1;
my %embed = map { ( $_->{name} => 1 ) }
parse_embed(qw(parts/embed.fnc parts/apidoc.fnc));
my %v;
for my $p (@perls) {
+ print "checking perl $p->{version}...\n";
my $archlib = `$p->{path} -MConfig -l -e 'print \$Config{archlib}'`;
chomp $archlib;
local @ARGV = glob "$archlib/CORE/*.h";
}
my $out = 'parts/base';
+my $todo = parse_todo($out);
for my $v (keys %v) {
+ my @new = sort grep { !exists $todo->{$_} } keys %{$v{$v}};
+ @new or next;
my $file = $v;
$file =~ s/\.//g;
$file = "$out/$file";
-e $file or die "non-existent: $file\n";
- open F, ">>$file" or die "$file: $!\n";
- printf F "%-30s # added by $0\n", $_ for sort keys %{$v{$v}};
- close F;
+ print "-- $file --\n";
+ $mode eq 'write' and (open F, ">>$file" or die "$file: $!\n");
+ for (@new) {
+ print "adding $_\n";
+ $mode eq 'write' and printf F "%-30s # added by $0\n", $_;
+ }
+ $mode eq 'write' and close F;
}
#
################################################################################
#
-# $Revision: 17 $
+# $Revision: 18 $
# $Author: mhx $
-# $Date: 2004/08/16 11:31:29 +0200 $
+# $Date: 2004/08/30 20:49:12 +0200 $
#
################################################################################
#
@INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
require Config; import Config;
use vars '%Config';
- if (" $Config{'extensions'} " !~ m[ Devel/PPPort ] ) {
+ if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
exit 0;
}
PL_stdingv # added by devel/scanprov
SAVE_DEFSV # added by devel/scanprov
dTHR # added by devel/scanprov
+PL_debstash # added by devel/scanprov
+PL_diehook # added by devel/scanprov
+PL_errgv # added by devel/scanprov
+PL_perl_destruct_level # added by devel/scanprov
+PL_stack_base # added by devel/scanprov
+PL_stack_sp # added by devel/scanprov
+PL_sv_arenaroot # added by devel/scanprov
+PL_tainted # added by devel/scanprov
+PL_tainting # added by devel/scanprov
PL_copline # added by devel/scanprov
PL_hexdigit # added by devel/scanprov
PL_hints # added by devel/scanprov
+END_EXTERN_C # added by devel/scanprov
+EXTERN_C # added by devel/scanprov
+START_EXTERN_C # added by devel/scanprov
dTHXoa # added by devel/scanprov
pTHX # added by devel/scanprov
pTHX_ # added by devel/scanprov
+PL_no_modify # added by devel/scanprov
+PL_ppaddr # added by devel/scanprov
PERL_MAGIC_vstring # added by devel/scanprov
PERL_SCAN_SILENT_ILLDIGIT # added by devel/scanprov
XST_mUV # added by devel/scanprov
+PERL_GCC_BRACE_GROUPS_FORBIDDEN # added by devel/scanprov
mXPUSHu # U
vnormal # E
PERL_BCDVERSION # added by devel/scanprov
+MY_CXT_CLONE # added by devel/scanprov
################################################################################
##
-## $Revision: 7 $
+## $Revision: 8 $
## $Author: mhx $
-## $Date: 2004/08/13 12:45:55 +0200 $
+## $Date: 2004/09/08 21:12:15 +0200 $
##
################################################################################
##
dMY_CXT_SV
dMY_CXT
MY_CXT_INIT
+MY_CXT_CLONE
MY_CXT
pMY_CXT
pMY_CXT_
Zero(my_cxtp, 1, my_cxt_t); \
sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
+/* Clones the per-interpreter data. */
+#define MY_CXT_CLONE \
+ dMY_CXT_SV; \
+ my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
+ Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\
+ sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
+
/* This macro must be used to access members of the my_cxt_t structure.
* e.g. MYCXT.some_data */
#define MY_CXT (*my_cxtp)
#define dMY_CXT_SV dNOOP
#define dMY_CXT dNOOP
#define MY_CXT_INIT NOOP
+#define MY_CXT_CLONE NOOP
#define MY_CXT my_cxt
#define pMY_CXT void
################################################################################
##
-## $Revision: 16 $
+## $Revision: 17 $
## $Author: mhx $
-## $Date: 2004/08/17 13:49:30 +0200 $
+## $Date: 2004/09/08 21:10:12 +0200 $
##
################################################################################
##
__UNDEFINED__
PERL_UNUSED_DECL
+PERL_GCC_BRACE_GROUPS_FORBIDDEN
NVTYPE
INT2PTR
PTRV
PTR2UV
PTR2NV
PTR2ul
+START_EXTERN_C
+END_EXTERN_C
+EXTERN_C
+STMT_START
+STMT_END
/PL_\w+/
=implementation
#endif /* !INT2PTR */
+#undef START_EXTERN_C
+#undef END_EXTERN_C
+#undef EXTERN_C
+#ifdef __cplusplus
+# define START_EXTERN_C extern "C" {
+# define END_EXTERN_C }
+# define EXTERN_C extern "C"
+#else
+# define START_EXTERN_C
+# define END_EXTERN_C
+# define EXTERN_C extern
+#endif
+
+#ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN
+# if defined(__STRICT_ANSI__) && defined(PERL_GCC_PEDANTIC)
+# define PERL_GCC_BRACE_GROUPS_FORBIDDEN
+# endif
+#endif
+
+#undef STMT_START
+#undef STMT_END
+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus)
+# define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */
+# define STMT_END )
+#else
+# if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__)
+# define STMT_START if (1)
+# define STMT_END else (void)0
+# else
+# define STMT_START do
+# define STMT_END while (0)
+# endif
+#endif
+
__UNDEFINED__ boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no)
/* DEFSV appears first in 5.004_56 */
@INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
require Config; import Config;
use vars '%Config';
- if (" $Config{'extensions'} " !~ m[ Devel/PPPort ] ) {
+ if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
exit 0;
}
@INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
require Config; import Config;
use vars '%Config';
- if (" $Config{'extensions'} " !~ m[ Devel/PPPort ] ) {
+ if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
exit 0;
}
@INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
require Config; import Config;
use vars '%Config';
- if (" $Config{'extensions'} " !~ m[ Devel/PPPort ] ) {
+ if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
exit 0;
}
@INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
require Config; import Config;
use vars '%Config';
- if (" $Config{'extensions'} " !~ m[ Devel/PPPort ] ) {
+ if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
exit 0;
}
@INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
require Config; import Config;
use vars '%Config';
- if (" $Config{'extensions'} " !~ m[ Devel/PPPort ] ) {
+ if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
exit 0;
}
@INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
require Config; import Config;
use vars '%Config';
- if (" $Config{'extensions'} " !~ m[ Devel/PPPort ] ) {
+ if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
exit 0;
}
@INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
require Config; import Config;
use vars '%Config';
- if (" $Config{'extensions'} " !~ m[ Devel/PPPort ] ) {
+ if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
exit 0;
}
@INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
require Config; import Config;
use vars '%Config';
- if (" $Config{'extensions'} " !~ m[ Devel/PPPort ] ) {
+ if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
exit 0;
}
@INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
require Config; import Config;
use vars '%Config';
- if (" $Config{'extensions'} " !~ m[ Devel/PPPort ] ) {
+ if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
exit 0;
}
@INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
require Config; import Config;
use vars '%Config';
- if (" $Config{'extensions'} " !~ m[ Devel/PPPort ] ) {
+ if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
exit 0;
}
@INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
require Config; import Config;
use vars '%Config';
- if (" $Config{'extensions'} " !~ m[ Devel/PPPort ] ) {
+ if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
exit 0;
}
@INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
require Config; import Config;
use vars '%Config';
- if (" $Config{'extensions'} " !~ m[ Devel/PPPort ] ) {
+ if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
exit 0;
}
@INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
require Config; import Config;
use vars '%Config';
- if (" $Config{'extensions'} " !~ m[ Devel/PPPort ] ) {
+ if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
exit 0;
}
@INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
require Config; import Config;
use vars '%Config';
- if (" $Config{'extensions'} " !~ m[ Devel/PPPort ] ) {
+ if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
exit 0;
}
@INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
require Config; import Config;
use vars '%Config';
- if (" $Config{'extensions'} " !~ m[ Devel/PPPort ] ) {
+ if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
exit 0;
}