Re: pl/perl extension fails on Windows
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Andrew Dunstan <andrew.dunstan@2ndquadrant.com>
Cc: Robert Haas <robertmhaas@gmail.com>,
Ashutosh Sharma <ashu.coek88@gmail.com>,
Dave Page <dpage@pgadmin.org>,
Sandeep Thakkar <sandeep.thakkar@enterprisedb.com>,
"pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2017-07-27T22:50:53Z
Lists: pgsql-hackers
Attachments
- avoid-XSUB.h-in-plperl.c-v1.patch (text/x-diff) patch v1
Andrew Dunstan <andrew.dunstan@2ndquadrant.com> writes: > On 07/27/2017 04:33 PM, Tom Lane wrote: >> So I was trying to figure a way to not include XSUB.h except in a very >> limited part of plperl, like ideally just the .xs files. It's looking >> like that would take nontrivial refactoring though :-(. Another problem >> is that this critical bit of the library API is in XSUB.h: > That's the sort of thing that prompted me to ask what was the minimal > set of defines required to fix the original problem (assuming such a > thing exists) > We haven't used PERL_IMPLICIT_CONTEXT to date, and without ill effect. > For example. it's in the ExtUtils::Embed::ccopts for the perl that > jacana and bowerbird happily build and test against. Well, actually, PERL_IMPLICIT_CONTEXT is turned on automatically in any MULTIPLICITY build, and since it changes all the Perl ABIs, we *are* relying on it. However, after further study of the Perl docs I noticed that we could dispense with XSUB.h if we defined PERL_NO_GET_CONTEXT (which turns the quoted stanza into a no-op). That results in needing to sprinkle plperl.c with "dTHX" declarations, as explained in perlguts.pod. They're slightly tricky to place correctly, because they load up a pointer to the current Perl interpreter, so you have to be wary of where to put them in functions that change interpreters. But I seem to have it working in the attached patch. (One benefit of doing this extra work is that it should be a bit more efficient, in that we load up a Perl interpreter pointer only once per function called, not once per usage therein. We could remove many of those fetches too, if we wanted to sprinkle the plperl code with yet more THX droppings; but I left that for another day.) Armed with that, I got rid of XSUB.h in plperl.c and moved the PG_TRY-using functions in the .xs files to plperl.c. I think this would fix Ashutosh's problem, though I am not in a position to try it with a PERL_IMPLICIT_SYS build here. regards, tom lane
Commits
-
MSVC: Test whether 32-bit Perl needs -D_USE_32BIT_TIME_T.
- 1886899420ce 9.3.21 landed
- aed8d41af628 9.4.16 landed
- 1c1a572d055f 9.5.11 landed
- 140fa2fbad94 9.6.7 landed
- 9b5c99790e83 10.2 landed
- 65a00f30352a 11.0 landed
-
Further tweaks to compiler flags for PL/Perl on Windows.
- f7e4783ddbef 9.2.23 landed
- bc4404405f21 9.3.19 landed
- 4f862351d20b 9.4.14 landed
- bff216d8789f 9.5.9 landed
- c343314882f1 9.6.5 landed
- 1d7a479d22f6 10.0 landed
- b5178c5d08ca 11.0 landed
-
Absorb -D_USE_32BIT_TIME_T switch from Perl, if relevant.
- e3335ec0b6a6 9.2.23 landed
- 5a5c2feca3fd 10.0 landed
- 3883be3eae97 9.6.5 landed
- 25169b948e13 9.3.19 landed
- 1621a75531c8 9.5.9 landed
- 01de7ea85378 9.4.14 landed
-
PL/Perl portability fix: absorb relevant -D switches from Perl.
- df52739ce3e7 9.5.8 landed
- 9cbdc689418b 9.4.13 landed
- 456c7dff2af1 9.2.22 landed
- 1e58c503ec46 9.6.4 landed
- 0d8f015e7726 9.3.18 landed
- 3c163a7fc76d 10.0 landed
-
PL/Perl portability fix: avoid including XSUB.h in plperl.c.
- d48180ec812d 9.4.13 landed
- b92f17277eb9 9.3.18 landed
- b4b958251fbf 9.2.22 landed
- 99eea89dbe31 9.5.8 landed
- 30a5c8bfbd7b 9.6.4 landed
- bebe174bb446 10.0 landed