Perl 5.14.0-RC1 came out a few days ago... There is a minor compile time error due to the API changing a bit: plperl.c:929:3: error: lvalue required as left operand of assignment
This is due to GvCV() no longer returning an lvalue, instead they want us to use the new GvCV_set macro. (see http://search.cpan.org/~jesse/perl-5.14.0-RC1/pod/perldelta.pod#GvCV()_and_GvGP()_are_no_longer_lvalues) Unfortunately that macro is not available on older perls so the attached provides our own macro when GvCV_set is not defined. Tested with 5.14.0-rc1 and 5.12.3. The -head patch applies with fuzz to 9.0. The 8.4 patch applies clean to 8.4 and with fuzz to 8.3 and 8.2.
*** a/src/pl/plperl/plperl.c --- b/src/pl/plperl/plperl.c *************** *** 926,932 **** plperl_trusted_init(void) if (!isGV_with_GP(sv) || !GvCV(sv)) continue; SvREFCNT_dec(GvCV(sv)); /* free the CV */ ! GvCV(sv) = NULL; /* prevent call via GV */ } hv_clear(stash); --- 926,932 ---- if (!isGV_with_GP(sv) || !GvCV(sv)) continue; SvREFCNT_dec(GvCV(sv)); /* free the CV */ ! GvCV_set(sv, NULL); /* prevent call via GV */ } hv_clear(stash); *** a/src/pl/plperl/plperl.h --- b/src/pl/plperl/plperl.h *************** *** 49,54 **** --- 49,59 ---- (U32)HeKUTF8(he)) #endif + /* supply GvCV_set if it's missing - ppport.h doesn't supply it, unfortunately */ + #ifndef GvCV_set + #define GvCV_set(gv, cv) (GvCV(gv) = cv) + #endif + /* declare routines from plperl.c for access by .xs files */ HV *plperl_spi_exec(char *, int); void plperl_return_next(SV *);
*** a/src/pl/plperl/plperl.c --- b/src/pl/plperl/plperl.c *************** *** 700,706 **** plperl_trusted_init(void) if (!isGV_with_GP(sv) || !GvCV(sv)) continue; SvREFCNT_dec(GvCV(sv)); /* free the CV */ ! GvCV(sv) = NULL; /* prevent call via GV */ } hv_clear(stash); /* invalidate assorted caches */ --- 700,706 ---- if (!isGV_with_GP(sv) || !GvCV(sv)) continue; SvREFCNT_dec(GvCV(sv)); /* free the CV */ ! GvCV_set(sv, NULL); /* prevent call via GV */ } hv_clear(stash); /* invalidate assorted caches */ *** a/src/pl/plperl/plperl.h --- b/src/pl/plperl/plperl.h *************** *** 43,48 **** --- 43,53 ---- #undef bool #endif + /* supply GvCV_set if it's missing - ppport.h doesn't supply it, unfortunately */ + #ifndef GvCV_set + #define GvCV_set(gv, cv) (GvCV(gv) = cv) + #endif + /* routines from spi_internal.c */ int spi_DEBUG(void); int spi_LOG(void);
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers