>From 6351ed01c42899191155e2b6dd74f077f1cff193 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sat, 9 May 2020 02:52:48 +0200 Subject: [PATCH 1/2] mbrtoc32: Avoid compilation failure on Haiku. * m4/mbrtoc32.m4 (gl_CHECK_FUNC_MBRTOC32): New macro. (gl_FUNC_MBRTOC32, gl_MBRTOC32_SANITYCHECK): Use it instead of AC_CHECK_FUNCS_ONCE. * doc/posix-functions/mbrtoc32.texi: Mention the Haiku problem. --- ChangeLog | 8 ++++++++ doc/posix-functions/mbrtoc32.texi | 3 +++ m4/mbrtoc32.m4 | 29 ++++++++++++++++++++++++----- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0a9cca9..53a672a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2020-05-08 Bruno Haible + mbrtoc32: Avoid compilation failure on Haiku. + * m4/mbrtoc32.m4 (gl_CHECK_FUNC_MBRTOC32): New macro. + (gl_FUNC_MBRTOC32, gl_MBRTOC32_SANITYCHECK): Use it instead of + AC_CHECK_FUNCS_ONCE. + * doc/posix-functions/mbrtoc32.texi: Mention the Haiku problem. + +2020-05-08 Bruno Haible + limits-h: Define LONG_BIT correctly on Haiku/x86_64. * lib/limits.in.h: Define and test _GL_ALREADY_INCLUDING_LIMITS_H. diff --git a/doc/posix-functions/mbrtoc32.texi b/doc/posix-functions/mbrtoc32.texi index 3151a09..647beb9 100644 --- a/doc/posix-functions/mbrtoc32.texi +++ b/doc/posix-functions/mbrtoc32.texi @@ -25,4 +25,7 @@ FreeBSD 12, Solaris 11.4, mingw, MSVC 14. Portability problems not fixed by Gnulib: @itemize +@item +This function is only defined as an inline function on some platforms: +Haiku 2020. @end itemize diff --git a/m4/mbrtoc32.m4 b/m4/mbrtoc32.m4 index a5dc51a..991bbc8 100644 --- a/m4/mbrtoc32.m4 +++ b/m4/mbrtoc32.m4 @@ -1,4 +1,4 @@ -# mbrtoc32.m4 serial 3 +# mbrtoc32.m4 serial 4 dnl Copyright (C) 2014-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -13,8 +13,8 @@ AC_DEFUN([gl_FUNC_MBRTOC32], AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) - AC_CHECK_FUNCS_ONCE([mbrtoc32]) - if test $ac_cv_func_mbrtoc32 = no; then + AC_REQUIRE([gl_CHECK_FUNC_MBRTOC32]) + if test $gl_cv_func_mbrtoc32 = no; then HAVE_MBRTOC32=0 else if test $REPLACE_MBSTATE_T = 1; then @@ -43,6 +43,25 @@ AC_DEFUN([gl_FUNC_MBRTOC32], fi ]) +dnl We can't use AC_CHECK_FUNC here, because mbrtoc32() is defined as a +dnl static inline function on Haiku 2020. +AC_DEFUN([gl_CHECK_FUNC_MBRTOC32], +[ + AC_CACHE_CHECK([for mbrtoc32], [gl_cv_func_mbrtoc32], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include + #include + ]], + [[char32_t c; + return mbrtoc32 (&c, "", 1, NULL) == 0; + ]]) + ], + [gl_cv_func_mbrtoc32=yes], + [gl_cv_func_mbrtoc32=no]) + ]) +]) + AC_DEFUN([gl_MBRTOC32_EMPTY_INPUT], [ AC_REQUIRE([AC_PROG_CC]) @@ -122,11 +141,11 @@ dnl Result is HAVE_WORKING_MBRTOC32. AC_DEFUN([gl_MBRTOC32_SANITYCHECK], [ AC_REQUIRE([AC_PROG_CC]) - AC_CHECK_FUNCS_ONCE([mbrtoc32]) + AC_REQUIRE([gl_CHECK_FUNC_MBRTOC32]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - if test $ac_cv_func_mbrtoc32 = no; then + if test $gl_cv_func_mbrtoc32 = no; then HAVE_WORKING_MBRTOC32=0 else AC_CACHE_CHECK([whether mbrtoc32 works as well as mbrtowc], -- 2.7.4