Hi,

On 2021-10-04 23:08:25 +0100, Dagfinn Ilmari Mannsåker wrote:
> Victor Wagner <vi...@wagner.pp.ru> writes:
> 
> > Attached patch makes use of this function if PERL_VERSION >= 28. 
> > It makes plperl compile with ActiveStatePerl 5.28 and StrawberryPerl
> > 5.30.2.1.
> 
> I have no opinion on the substantive content of this patch, but please
> don't just check against just PERL_VERSION.  Now that Perl 6 has been
> renamed to Raku, Perl may bump its major version (PERL_REVISION) to 7 at
> some point in th future.

How about the attached? I've just spent more time looking at plperl than I
really ever want to, so I'd like to get plperl working and tested on 5.32 on
windows asap... And this is one of the two fixes necessary (see [1] for the
second).

Greetings,

Andres Freund

[1] 
https://www.postgresql.org/message-id/20220130221659.tlyr2lbw3wk22owg%40alap3.anarazel.de
>From 9397126f9e0ce13975ca00749039bd3f7b5b53fa Mon Sep 17 00:00:00 2001
From: Andres Freund <and...@anarazel.de>
Date: Sun, 30 Jan 2022 14:29:04 -0800
Subject: [PATCH v2 1/4] plperl: windows: Use Perl_setlocale on 5.28+, fixing
 compile failure.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

For older versions we need our own copy of perl's setlocale(), because it was
not exposed (why we need the setlocale in the first place is explained in
plperl_init_interp) . The copy stopped working in 5.28, as some of the used
macros are not public anymore.  But Perl_setlocale is available in 5.28, so
use that.

Author: Victor Wagner <vi...@wagner.pp.ru>
Reviewed-By: Dagfinn Ilmari Mannsåker <ilm...@ilmari.org>
Discussion: https://postgr.es/m/20200501134711.08750...@antares.wagner.home
Backpatch: all versions
---
 src/pl/plperl/plperl.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c
index 1ae8195e023..3f785b1e8d5 100644
--- a/src/pl/plperl/plperl.c
+++ b/src/pl/plperl/plperl.c
@@ -298,9 +298,11 @@ static char *strip_trailing_ws(const char *msg);
 static OP  *pp_require_safe(pTHX);
 static void activate_interpreter(plperl_interp_desc *interp_desc);
 
-#ifdef WIN32
+#if defined(WIN32) && PERL_VERSION_LT(5, 28, 0)
 static char *setlocale_perl(int category, char *locale);
-#endif
+#else
+#define setlocale_perl(a,b)  Perl_setlocale(a,b)
+#endif							/* defined(WIN32) && PERL_VERSION_LT(5, 28, 0) */
 
 /*
  * Decrement the refcount of the given SV within the active Perl interpreter
@@ -4130,8 +4132,10 @@ plperl_inline_callback(void *arg)
 /*
  * Perl's own setlocale(), copied from POSIX.xs
  * (needed because of the calls to new_*())
+ *
+ * Starting in 5.28, perl exposes Perl_setlocale to do so.
  */
-#ifdef WIN32
+#if defined(WIN32) && PERL_VERSION_LT(5, 28, 0)
 static char *
 setlocale_perl(int category, char *locale)
 {
@@ -4199,5 +4203,4 @@ setlocale_perl(int category, char *locale)
 
 	return RETVAL;
 }
-
-#endif							/* WIN32 */
+#endif							/* defined(WIN32) && PERL_VERSION_LT(5, 28, 0) */
-- 
2.34.0

Reply via email to