diff mbox series

package/perl: threads support needs locales

Message ID ZNOMtm7TTVd12BQ3@waldemar-brodkorb.de
State Rejected
Headers show
Series package/perl: threads support needs locales | expand

Commit Message

Waldemar Brodkorb Aug. 9, 2023, 12:55 p.m. UTC
The thread support in perl needs locales enabled in the C library.
Otherwise it fails with:
POSIX.xs:3386:13: error: 'MBLEN_LOCK' undeclared (first use in this function); did you mean 'MUTEX_LOCK'?

This failure was introduced in commit 7c1ef8129f37200b046750c6405ecd304fd4f1bf which upgraded
perl to 5.34.0.

Fixes:
 - http://autobuild.buildroot.net/results/13d/13d66e281cb4778f7498f909f5f7c65d4b28bcbb/

Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
---
 package/perl/Config.in | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Thomas Petazzoni Aug. 9, 2023, 6:07 p.m. UTC | #1
On Wed, 9 Aug 2023 14:55:18 +0200
Waldemar Brodkorb <wbx@openadk.org> wrote:

> The thread support in perl needs locales enabled in the C library.
> Otherwise it fails with:
> POSIX.xs:3386:13: error: 'MBLEN_LOCK' undeclared (first use in this function); did you mean 'MUTEX_LOCK'?

Doesn't that seem really really weird, that thread support would depend
on locale support?

If we look at perl.h, which defines MBLEN_LOCK, we see something like
this:

/* Locale/thread synchronization macros. */
#if ! (   defined(USE_LOCALE)                                               \
       &&    defined(USE_ITHREADS)                                          \
       && (  ! defined(USE_THREAD_SAFE_LOCALE)                              \
           || (   defined(HAS_LOCALECONV)                                   \
               && (  ! defined(HAS_LOCALECONV_L)                            \
                   ||  defined(TS_W32_BROKEN_LOCALECONV)))                  \
           || (   defined(HAS_NL_LANGINFO)                                  \
               && ! defined(HAS_THREAD_SAFE_NL_LANGINFO_L))                 \
           || (defined(HAS_MBLEN)  && ! defined(HAS_MBRLEN))                \
           || (defined(HAS_MBTOWC) && ! defined(HAS_MBRTOWC))               \
           || (defined(HAS_WCTOMB) && ! defined(HAS_WCRTOMB))))
[...]
#  define MBLEN_LOCK                NOOP
[...]
#else
[...]
#  if defined(HAS_MBLEN) && ! defined(HAS_MBRLEN)
#    define MBLEN_LOCK   LOCALE_LOCK_
#    define MBLEN_UNLOCK LOCALE_UNLOCK_
[...]

Shouldn't the first #define MBLEN_LOCK NOOP correspond to our case
where no locale support is available?

There was a massive rework of this stuff in upstream commit
https://github.com/Perl/perl5/commit/d9e22c6a8a05aab7fffdbf810f74ddfcb4efd752,
which perhaps broke things.

I think I'll apply your patch anyway. I don't care very much about
!locale configs, and debugging the internals of Perl is beyond my
motivation.

Thomas
Yann E. MORIN Jan. 2, 2024, 8:26 p.m. UTC | #2
Waldemar, All,

On 2023-08-09 14:55 +0200, Waldemar Brodkorb spake thusly:
> The thread support in perl needs locales enabled in the C library.
> Otherwise it fails with:
> POSIX.xs:3386:13: error: 'MBLEN_LOCK' undeclared (first use in this function); did you mean 'MUTEX_LOCK'?
> 
> This failure was introduced in commit 7c1ef8129f37200b046750c6405ecd304fd4f1bf which upgraded
> perl to 5.34.0.
> 
> Fixes:
>  - http://autobuild.buildroot.net/results/13d/13d66e281cb4778f7498f909f5f7c65d4b28bcbb/
> 
> Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>

It's been a little while, but I can't reproduce that build failure on
the newer perl versions we have in the tree now. Besides, as Thomas
spotted, it is dubious that locales has anything to do with threads.

Myabe that was an oversight from upstream that was fixed in later
versions. Anyway, not reproducible, so I marked this patch as rejected.

Thanks, and sorry for the long delay in replying...

Regards,
Yann E. MORIN.

> ---
>  package/perl/Config.in | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/package/perl/Config.in b/package/perl/Config.in
> index 0ead1c4a46..9eb6334b9e 100644
> --- a/package/perl/Config.in
> +++ b/package/perl/Config.in
> @@ -27,6 +27,7 @@ config BR2_PACKAGE_PERL_MODULES
>  config BR2_PACKAGE_PERL_THREADS
>  	bool "thread support"
>  	depends on BR2_TOOLCHAIN_HAS_THREADS
> +	depends on BR2_ENABLE_LOCALE
>  	help
>  	  Enable use of threads in Perl scripts
>  
> @@ -34,4 +35,7 @@ config BR2_PACKAGE_PERL_THREADS
>  	  is officially discouraged.
>  	  See https://perldoc.perl.org/threads.html#WARNING
>  
> +comment "Threads support needs locales"
> +	depends on !BR2_ENABLE_LOCALE
> +
>  endif
> -- 
> 2.39.2
> 
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
diff mbox series

Patch

diff --git a/package/perl/Config.in b/package/perl/Config.in
index 0ead1c4a46..9eb6334b9e 100644
--- a/package/perl/Config.in
+++ b/package/perl/Config.in
@@ -27,6 +27,7 @@  config BR2_PACKAGE_PERL_MODULES
 config BR2_PACKAGE_PERL_THREADS
 	bool "thread support"
 	depends on BR2_TOOLCHAIN_HAS_THREADS
+	depends on BR2_ENABLE_LOCALE
 	help
 	  Enable use of threads in Perl scripts
 
@@ -34,4 +35,7 @@  config BR2_PACKAGE_PERL_THREADS
 	  is officially discouraged.
 	  See https://perldoc.perl.org/threads.html#WARNING
 
+comment "Threads support needs locales"
+	depends on !BR2_ENABLE_LOCALE
+
 endif