Mercurial > pidgin
changeset 6678:eb95f31fa4eb
[gaim-migrate @ 7203]
The perl plugin should now work with perl v5.6.0. This is not tested yet,
but it compiles and should work now.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Mon, 01 Sep 2003 22:16:10 +0000 |
parents | cce494e69d68 |
children | 75233cd117fc |
files | plugins/perl/Makefile.am plugins/perl/common/Makefile.PL.in plugins/perl/common/fallback/const-c.inc plugins/perl/common/fallback/const-xs.inc plugins/perl/common/typemap plugins/perl/perl.c |
diffstat | 6 files changed, 223 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/plugins/perl/Makefile.am Mon Sep 01 20:34:53 2003 +0000 +++ b/plugins/perl/Makefile.am Mon Sep 01 22:16:10 2003 +0000 @@ -36,6 +36,8 @@ fi common_sources = \ + common/fallback/const-c.inc \ + common/fallback/const-xs.inc \ common/Account.xs \ common/BuddyList.xs \ common/BuddyList_Buddy.xs \
--- a/plugins/perl/common/Makefile.PL.in Mon Sep 01 20:34:53 2003 +0000 +++ b/plugins/perl/common/Makefile.PL.in Mon Sep 01 22:16:10 2003 +0000 @@ -1,4 +1,4 @@ -use 5.008; +use 5.006; use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. @@ -22,7 +22,18 @@ } ExtUtils::Constant::WriteConstants( - NAME => 'Gaim::DebugLevel', - NAMES => \@names + NAME => 'Gaim::DebugLevel', + NAMES => \@names, + C_FILE => 'const-c.inc', + XS_FILE => 'const-xs.inc' ); } +else { + use File::Copy; + use File::Spec; + + foreach my $file ('const-c.inc', 'const-xs.inc') { + my $fallback = File::Spec->catfile('fallback', $file); + copy ($fallback, $file) or die "Can't copy $fallback to $file: $!"; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/perl/common/fallback/const-c.inc Mon Sep 01 22:16:10 2003 +0000 @@ -0,0 +1,115 @@ +#define PERL_constant_NOTFOUND 1 +#define PERL_constant_NOTDEF 2 +#define PERL_constant_ISIV 3 +#define PERL_constant_ISNO 4 +#define PERL_constant_ISNV 5 +#define PERL_constant_ISPV 6 +#define PERL_constant_ISPVN 7 +#define PERL_constant_ISSV 8 +#define PERL_constant_ISUNDEF 9 +#define PERL_constant_ISUV 10 +#define PERL_constant_ISYES 11 + +#ifndef NVTYPE +typedef double NV; /* 5.6 and later define NVTYPE, and typedef NV to it. */ +#endif +#ifndef aTHX_ +#define aTHX_ /* 5.6 or later define this for threading support. */ +#endif +#ifndef pTHX_ +#define pTHX_ /* 5.6 or later define this for threading support. */ +#endif + +static int +constant (pTHX_ const char *name, STRLEN len, IV *iv_return) { + /* Initially switch on the length of the name. */ + /* When generated this function returned values for the list of names given + in this section of perl code. Rather than manually editing these functions + to add or remove constants, which would result in this comment and section + of code becoming inaccurate, we recommend that you edit this section of + code, and use it to regenerate a new set of constant functions which you + then use to replace the originals. + + Regenerate these constant functions by feeding this entire source file to + perl -x + +#!/usr/bin/perl -w +use ExtUtils::Constant qw (constant_types C_constant XS_constant); + +my $types = {map {($_, 1)} qw(IV)}; +my @names = (qw(), + {name=>"GAIM_DEBUG_ALL", type=>"IV", macro=>"1"}, + {name=>"GAIM_DEBUG_ERROR", type=>"IV", macro=>"1"}, + {name=>"GAIM_DEBUG_FATAL", type=>"IV", macro=>"1"}, + {name=>"GAIM_DEBUG_INFO", type=>"IV", macro=>"1"}, + {name=>"GAIM_DEBUG_MISC", type=>"IV", macro=>"1"}, + {name=>"GAIM_DEBUG_WARNING", type=>"IV", macro=>"1"}); + +print constant_types(); # macro defs +foreach (C_constant ("Gaim::DebugLevel", 'constant', 'IV', $types, undef, 3, @names) ) { + print $_, "\n"; # C constant subs +} +print "#### XS Section:\n"; +print XS_constant ("Gaim::DebugLevel", $types); +__END__ + */ + + switch (len) { + case 14: + if (memEQ(name, "GAIM_DEBUG_ALL", 14)) { + *iv_return = GAIM_DEBUG_ALL; + return PERL_constant_ISIV; + } + break; + case 15: + /* Names all of length 15. */ + /* GAIM_DEBUG_INFO GAIM_DEBUG_MISC */ + /* Offset 11 gives the best switch position. */ + switch (name[11]) { + case 'I': + if (memEQ(name, "GAIM_DEBUG_INFO", 15)) { + /* ^ */ + *iv_return = GAIM_DEBUG_INFO; + return PERL_constant_ISIV; + } + break; + case 'M': + if (memEQ(name, "GAIM_DEBUG_MISC", 15)) { + /* ^ */ + *iv_return = GAIM_DEBUG_MISC; + return PERL_constant_ISIV; + } + break; + } + break; + case 16: + /* Names all of length 16. */ + /* GAIM_DEBUG_ERROR GAIM_DEBUG_FATAL */ + /* Offset 11 gives the best switch position. */ + switch (name[11]) { + case 'E': + if (memEQ(name, "GAIM_DEBUG_ERROR", 16)) { + /* ^ */ + *iv_return = GAIM_DEBUG_ERROR; + return PERL_constant_ISIV; + } + break; + case 'F': + if (memEQ(name, "GAIM_DEBUG_FATAL", 16)) { + /* ^ */ + *iv_return = GAIM_DEBUG_FATAL; + return PERL_constant_ISIV; + } + break; + } + break; + case 18: + if (memEQ(name, "GAIM_DEBUG_WARNING", 18)) { + *iv_return = GAIM_DEBUG_WARNING; + return PERL_constant_ISIV; + } + break; + } + return PERL_constant_NOTFOUND; +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/perl/common/fallback/const-xs.inc Mon Sep 01 22:16:10 2003 +0000 @@ -0,0 +1,88 @@ +void +constant(sv) + PREINIT: +#ifdef dXSTARG + dXSTARG; /* Faster if we have it. */ +#else + dTARGET; +#endif + STRLEN len; + int type; + IV iv; + /* NV nv; Uncomment this if you need to return NVs */ + /* const char *pv; Uncomment this if you need to return PVs */ + INPUT: + SV * sv; + const char * s = SvPV(sv, len); + PPCODE: + /* Change this to constant(aTHX_ s, len, &iv, &nv); + if you need to return both NVs and IVs */ + type = constant(aTHX_ s, len, &iv); + /* Return 1 or 2 items. First is error message, or undef if no error. + Second, if present, is found value */ + switch (type) { + case PERL_constant_NOTFOUND: + sv = sv_2mortal(newSVpvf("%s is not a valid Gaim::DebugLevel macro", s)); + PUSHs(sv); + break; + case PERL_constant_NOTDEF: + sv = sv_2mortal(newSVpvf( + "Your vendor has not defined Gaim::DebugLevel macro %s, used", s)); + PUSHs(sv); + break; + case PERL_constant_ISIV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHi(iv); + break; + /* Uncomment this if you need to return NOs + case PERL_constant_ISNO: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHs(&PL_sv_no); + break; */ + /* Uncomment this if you need to return NVs + case PERL_constant_ISNV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHn(nv); + break; */ + /* Uncomment this if you need to return PVs + case PERL_constant_ISPV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHp(pv, strlen(pv)); + break; */ + /* Uncomment this if you need to return PVNs + case PERL_constant_ISPVN: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHp(pv, iv); + break; */ + /* Uncomment this if you need to return SVs + case PERL_constant_ISSV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHs(sv); + break; */ + /* Uncomment this if you need to return UNDEFs + case PERL_constant_ISUNDEF: + break; */ + /* Uncomment this if you need to return UVs + case PERL_constant_ISUV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHu((UV)iv); + break; */ + /* Uncomment this if you need to return YESs + case PERL_constant_ISYES: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHs(&PL_sv_yes); + break; */ + default: + sv = sv_2mortal(newSVpvf( + "Unexpected return type %d while processing Gaim::DebugLevel macro %s, used", + type, s)); + PUSHs(sv); + }
--- a/plugins/perl/common/typemap Mon Sep 01 20:34:53 2003 +0000 +++ b/plugins/perl/common/typemap Mon Sep 01 22:16:10 2003 +0000 @@ -1,5 +1,6 @@ TYPEMAP gboolean T_BOOL +const char * T_PV Gaim::Account T_GaimObj Gaim::BuddyList::Group T_GaimObj Gaim::BuddyList::Buddy T_GaimObj
--- a/plugins/perl/perl.c Mon Sep 01 20:34:53 2003 +0000 +++ b/plugins/perl/perl.c Mon Sep 01 22:16:10 2003 +0000 @@ -276,7 +276,7 @@ GaimPluginInfo *info; GaimPerlScript *gps; char *basename; - int len; + STRLEN len; gaim_debug(GAIM_DEBUG_INFO, "perl", "Found plugin info\n"); @@ -370,7 +370,7 @@ SPAGAIN; if (SvTRUE(ERRSV)) { - int len; + STRLEN len; gaim_debug(GAIM_DEBUG_ERROR, "perl", "Perl function %s exited abnormally: %s\n", @@ -429,7 +429,7 @@ SPAGAIN; if (SvTRUE(ERRSV)) { - int len; + STRLEN len; gaim_debug(GAIM_DEBUG_ERROR, "perl", "Perl function %s exited abnormally: %s\n",