postgres.git / summary / log / commit / refs

commit    0a0db46313749bb379db65eb987af6bf29470300
Author:   Andrew Dunstan <andrew@dunslane.net>
Date:     Sat Sep 14 12:37:08 2024 +0000
First released in: 18.0, 12.21, 13.17, 14.14, 15.9, 16.5, 17.0

    Only define NO_THREAD_SAFE_LOCALE for MSVC plperl when required
    
    Latest versions of Strawberry Perl define USE_THREAD_SAFE_LOCALE, and we
    therefore get a handshake error when building against such instances.
    The solution is to perform a test to see if USE_THREAD_SAFE_LOCALE is
    defined and only define NO_THREAD_SAFE_LOCALE if it isn't.
    
    Backpatch the meson.build fix back to release 16 and apply the same
    logic to Mkvcbuild.pm in releases 12 through 16.
    
    Original report of the issue from Muralikrishna Bandaru.


meson.build | 5 ++++- src/tools/msvc/Mkvcbuild.pm | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/meson.build b/meson.build index 56454cc3395..54451abe195 100644 --- a/meson.build +++ b/meson.build @@ -1060,7 +1060,10 @@ if not perlopt.disabled() if cc.get_id() == 'msvc' # prevent binary mismatch between MSVC built plperl and Strawberry or # msys ucrt perl libraries - perl_ccflags += ['-DNO_THREAD_SAFE_LOCALE'] + perl_v = run_command(perl, '-V').stdout() + if not perl_v.contains('USE_THREAD_SAFE_LOCALE') + perl_ccflags += ['-DNO_THREAD_SAFE_LOCALE'] + endif endif endif diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm index 6a79a0e037d..1dc336a54da 100644 --- a/src/tools/msvc/Mkvcbuild.pm +++ b/src/tools/msvc/Mkvcbuild.pm @@ -595,7 +595,9 @@ sub mkvcbuild push(@perl_embed_ccflags, 'PLPERL_HAVE_UID_GID'); # prevent binary mismatch between MSVC built plperl and # Strawberry or msys ucrt perl libraries - push(@perl_embed_ccflags, 'NO_THREAD_SAFE_LOCALE'); + my $perl_v = `$^X -V 2>&1`; + push(@perl_embed_ccflags, 'NO_THREAD_SAFE_LOCALE') + unless $perl_v =~ /USE_THREAD_SAFE_LOCALE/; # Windows offers several 32-bit ABIs. Perl is sensitive to # sizeof(time_t), one of the ABI dimensions. To get 32-bit time_t, [parent: d23109f4bd65]