This week's CI reports a compilation failure of GNU gettext:
make[7]: Entering directory
'/home/runner/work/ci-check/ci-check/gettext/gettext-tools/libgrep/gnulib-lib'
gcc -DHAVE_CONFIG_H -I. -I../.. -I../../../gettext-runtime/intl
-I../../gnulib-lib -I../../gnulib-lib -DIN_GETTEXT_TOOLS_LIBGREP=1 -Wall
-Wno-cast-qual -Wno-conversion -Wno-float-equal -Wno-sign-compare -Wno-undef
-Wno-unused-function -Wno-unused-parameter -Wno-float-conversion
-Wimplicit-fallthrough -Wno-pedantic -Wno-sign-conversion -Wno-type-limits
-Wno-unused-const-variable -Wno-unsuffixed-float-constants -Wno-error -g -O2
-MT libgnu_a-btoc32.o -MD -MP -MF .deps/libgnu_a-btoc32.Tpo -c -o
libgnu_a-btoc32.o `test -f 'btoc32.c' || echo './'`btoc32.c
In file included from btoc32.c:23:
./uchar.h:762:1: error: redefinition of 'c32isalnum'
762 | c32isalnum (wint_t wc)
| ^~~~~~~~~~
In file included from ./uchar.h:45,
from btoc32.c:23:
../../gnulib-lib/uchar.h:762:1: note: previous definition of 'c32isalnum' with
type 'int(wint_t)' {aka 'int(unsigned int)'}
762 | c32isalnum (wint_t wc)
| ^~~~~~~~~~
The change that triggered this was the addition of 'uchar-h' as a module
dependency of 'regex' on 2026-04-24. Now, there are two generated uchar.h
files in gettext's build tree:
gettext-tools/gnulib-lib/uchar.h
gettext-tools/libgrep/gnulib-lib/uchar.h
and they both define c32isalnum. The fact that both definitions are identical
is irrelevant; it's an error nonetheless.
This patch fixes it.
2026-04-28 Bruno Haible <[email protected]>
uchar-h: Support multiple gnulib-tool invocations in the same package.
* lib/uchar.in.h (GNULIB_defined_btoc32, GNULIB_defined_c32isalnum,
GNULIB_defined_c32isalpha, GNULIB_defined_c32isblank,
GNULIB_defined_c32iscntrl, GNULIB_defined_c32isdigit,
GNULIB_defined_c32isgraph, GNULIB_defined_c32islower,
GNULIB_defined_c32isprint, GNULIB_defined_c32ispunct,
GNULIB_defined_c32isspace, GNULIB_defined_c32isupper,
GNULIB_defined_c32isxdigit, GNULIB_defined_c32tolower,
GNULIB_defined_c32toupper, GNULIB_defined_c32width,
GNULIB_defined_c32snrtombs, GNULIB_defined_c32srtombs,
GNULIB_defined_c32stombs, GNULIB_defined_c32swidth,
GNULIB_defined_c32tob, GNULIB_defined_mbsnrtoc32s,
GNULIB_defined_mbsrtoc32s, GNULIB_defined_mbstoc32s,
GNULIB_defined_c32_get_type_test, GNULIB_defined_c32_apply_type_test,
GNULIB_defined_c32_get_mapping, GNULIB_defined_c32_apply_mapping): New
macros.
diff --git a/lib/uchar.in.h b/lib/uchar.in.h
index 585dc9809c..ed1f1a88f3 100644
--- a/lib/uchar.in.h
+++ b/lib/uchar.in.h
@@ -188,17 +188,20 @@ typedef uint_least32_t gl_char32_t;
or to WEOF if C is invalid. */
#if @GNULIB_BTOC32@
# if _GL_WCHAR_T_IS_UCS4 && !defined IN_BTOC32
+# if !GNULIB_defined_btoc32
_GL_BEGIN_C_LINKAGE
_GL_INLINE _GL_ATTRIBUTE_PURE wint_t
btoc32 (int c)
{
return
-# if @GNULIB_BTOWC@ && defined __cplusplus && defined GNULIB_NAMESPACE
+# if @GNULIB_BTOWC@ && defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
btowc (c);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_btoc32 1
+# endif
# else
_GL_FUNCDECL_SYS (btoc32, wint_t, (int c), _GL_ATTRIBUTE_PURE);
# endif
@@ -210,6 +213,7 @@ _GL_CXXALIASWARN (btoc32);
/* Test a specific property of a 32-bit wide character. */
#if @GNULIB_C32ISALNUM@
# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined
IN_C32ISALNUM
+# if !GNULIB_defined_c32isalnum
_GL_BEGIN_C_LINKAGE
_GL_INLINE int
c32isalnum (wint_t wc)
@@ -221,6 +225,8 @@ c32isalnum (wint_t wc)
iswalnum (wc);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32isalnum 1
+# endif
# else
_GL_FUNCDECL_SYS (c32isalnum, int, (wint_t wc), );
# endif
@@ -229,17 +235,20 @@ _GL_CXXALIASWARN (c32isalnum);
#endif
#if @GNULIB_C32ISALPHA@
# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined
IN_C32ISALPHA
+# if !GNULIB_defined_c32isalpha
_GL_BEGIN_C_LINKAGE
_GL_INLINE int
c32isalpha (wint_t wc)
{
return
-# if defined __cplusplus && defined GNULIB_NAMESPACE
+# if defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
iswalpha (wc);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32isalpha 1
+# endif
# else
_GL_FUNCDECL_SYS (c32isalpha, int, (wint_t wc), );
# endif
@@ -248,17 +257,20 @@ _GL_CXXALIASWARN (c32isalpha);
#endif
#if @GNULIB_C32ISBLANK@
# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined
IN_C32ISBLANK
+# if !GNULIB_defined_c32isblank
_GL_BEGIN_C_LINKAGE
_GL_INLINE int
c32isblank (wint_t wc)
{
return
-# if defined __cplusplus && defined GNULIB_NAMESPACE
+# if defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
iswblank (wc);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32isblank 1
+# endif
# else
_GL_FUNCDECL_SYS (c32isblank, int, (wint_t wc), );
# endif
@@ -267,17 +279,20 @@ _GL_CXXALIASWARN (c32isblank);
#endif
#if @GNULIB_C32ISCNTRL@
# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined
IN_C32ISCNTRL
+# if !GNULIB_defined_c32iscntrl
_GL_BEGIN_C_LINKAGE
_GL_INLINE int
c32iscntrl (wint_t wc)
{
return
-# if defined __cplusplus && defined GNULIB_NAMESPACE
+# if defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
iswcntrl (wc);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32iscntrl 1
+# endif
# else
_GL_FUNCDECL_SYS (c32iscntrl, int, (wint_t wc), );
# endif
@@ -286,17 +301,20 @@ _GL_CXXALIASWARN (c32iscntrl);
#endif
#if @GNULIB_C32ISDIGIT@
# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined
IN_C32ISDIGIT
+# if !GNULIB_defined_c32isdigit
_GL_BEGIN_C_LINKAGE
_GL_INLINE int
c32isdigit (wint_t wc)
{
return
-# if @GNULIB_ISWDIGIT@ && defined __cplusplus && defined GNULIB_NAMESPACE
+# if @GNULIB_ISWDIGIT@ && defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
iswdigit (wc);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32isdigit 1
+# endif
# else
_GL_FUNCDECL_SYS (c32isdigit, int, (wint_t wc), );
# endif
@@ -305,17 +323,20 @@ _GL_CXXALIASWARN (c32isdigit);
#endif
#if @GNULIB_C32ISGRAPH@
# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined
IN_C32ISGRAPH
+# if !GNULIB_defined_c32isgraph
_GL_BEGIN_C_LINKAGE
_GL_INLINE int
c32isgraph (wint_t wc)
{
return
-# if defined __cplusplus && defined GNULIB_NAMESPACE
+# if defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
iswgraph (wc);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32isgraph 1
+# endif
# else
_GL_FUNCDECL_SYS (c32isgraph, int, (wint_t wc), );
# endif
@@ -324,17 +345,20 @@ _GL_CXXALIASWARN (c32isgraph);
#endif
#if @GNULIB_C32ISLOWER@
# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined
IN_C32ISLOWER
+# if !GNULIB_defined_c32islower
_GL_BEGIN_C_LINKAGE
_GL_INLINE int
c32islower (wint_t wc)
{
return
-# if defined __cplusplus && defined GNULIB_NAMESPACE
+# if defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
iswlower (wc);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32islower 1
+# endif
# else
_GL_FUNCDECL_SYS (c32islower, int, (wint_t wc), );
# endif
@@ -343,17 +367,20 @@ _GL_CXXALIASWARN (c32islower);
#endif
#if @GNULIB_C32ISPRINT@
# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined
IN_C32ISPRINT
+# if !GNULIB_defined_c32isprint
_GL_BEGIN_C_LINKAGE
_GL_INLINE int
c32isprint (wint_t wc)
{
return
-# if defined __cplusplus && defined GNULIB_NAMESPACE
+# if defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
iswprint (wc);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32isprint 1
+# endif
# else
_GL_FUNCDECL_SYS (c32isprint, int, (wint_t wc), );
# endif
@@ -362,17 +389,20 @@ _GL_CXXALIASWARN (c32isprint);
#endif
#if @GNULIB_C32ISPUNCT@
# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined
IN_C32ISPUNCT
+# if !GNULIB_defined_c32ispunct
_GL_BEGIN_C_LINKAGE
_GL_INLINE int
c32ispunct (wint_t wc)
{
return
-# if defined __cplusplus && defined GNULIB_NAMESPACE
+# if defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
iswpunct (wc);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32ispunct 1
+# endif
# else
_GL_FUNCDECL_SYS (c32ispunct, int, (wint_t wc), );
# endif
@@ -381,17 +411,20 @@ _GL_CXXALIASWARN (c32ispunct);
#endif
#if @GNULIB_C32ISSPACE@
# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined
IN_C32ISSPACE
+# if !GNULIB_defined_c32isspace
_GL_BEGIN_C_LINKAGE
_GL_INLINE int
c32isspace (wint_t wc)
{
return
-# if defined __cplusplus && defined GNULIB_NAMESPACE
+# if defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
iswspace (wc);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32isspace 1
+# endif
# else
_GL_FUNCDECL_SYS (c32isspace, int, (wint_t wc), );
# endif
@@ -400,17 +433,20 @@ _GL_CXXALIASWARN (c32isspace);
#endif
#if @GNULIB_C32ISUPPER@
# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined
IN_C32ISUPPER
+# if !GNULIB_defined_c32isupper
_GL_BEGIN_C_LINKAGE
_GL_INLINE int
c32isupper (wint_t wc)
{
return
-# if defined __cplusplus && defined GNULIB_NAMESPACE
+# if defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
iswupper (wc);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32isupper 1
+# endif
# else
_GL_FUNCDECL_SYS (c32isupper, int, (wint_t wc), );
# endif
@@ -419,17 +455,20 @@ _GL_CXXALIASWARN (c32isupper);
#endif
#if @GNULIB_C32ISXDIGIT@
# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined
IN_C32ISXDIGIT
+# if !GNULIB_defined_c32isxdigit
_GL_BEGIN_C_LINKAGE
_GL_INLINE int
c32isxdigit (wint_t wc)
{
return
-# if @GNULIB_ISWXDIGIT@ && defined __cplusplus && defined GNULIB_NAMESPACE
+# if @GNULIB_ISWXDIGIT@ && defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
iswxdigit (wc);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32isxdigit 1
+# endif
# else
_GL_FUNCDECL_SYS (c32isxdigit, int, (wint_t wc), );
# endif
@@ -441,17 +480,20 @@ _GL_CXXALIASWARN (c32isxdigit);
/* Case mapping of a 32-bit wide character. */
#if @GNULIB_C32TOLOWER@
# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined
IN_C32TOLOWER
+# if !GNULIB_defined_c32tolower
_GL_BEGIN_C_LINKAGE
_GL_INLINE wint_t
c32tolower (wint_t wc)
{
return
-# if defined __cplusplus && defined GNULIB_NAMESPACE
+# if defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
towlower (wc);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32tolower 1
+# endif
# else
_GL_FUNCDECL_SYS (c32tolower, wint_t, (wint_t wc), );
# endif
@@ -460,17 +502,20 @@ _GL_CXXALIASWARN (c32tolower);
#endif
#if @GNULIB_C32TOUPPER@
# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined
IN_C32TOUPPER
+# if !GNULIB_defined_c32toupper
_GL_BEGIN_C_LINKAGE
_GL_INLINE wint_t
c32toupper (wint_t wc)
{
return
-# if defined __cplusplus && defined GNULIB_NAMESPACE
+# if defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
towupper (wc);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32toupper 1
+# endif
# else
_GL_FUNCDECL_SYS (c32toupper, wint_t, (wint_t wc), );
# endif
@@ -482,17 +527,20 @@ _GL_CXXALIASWARN (c32toupper);
/* Number of screen columns needed for a 32-bit wide character. */
#if @GNULIB_C32WIDTH@
# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32WIDTH
+# if !GNULIB_defined_c32width
_GL_BEGIN_C_LINKAGE
_GL_INLINE int
c32width (char32_t wc)
{
return
-# if @GNULIB_WCWIDTH@ && defined __cplusplus && defined GNULIB_NAMESPACE
+# if @GNULIB_WCWIDTH@ && defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
wcwidth (wc);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32width 1
+# endif
# else
_GL_FUNCDECL_SYS (c32width, int, (char32_t wc), );
# endif
@@ -530,18 +578,21 @@ _GL_WARN_ON_USE (c32rtomb, "c32rtomb is not portable - "
/* Convert a 32-bit wide string to a string. */
#if @GNULIB_C32SNRTOMBS@
# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32SNRTOMBS
+# if !GNULIB_defined_c32snrtombs
_GL_BEGIN_C_LINKAGE
_GL_INLINE _GL_ARG_NONNULL ((2)) size_t
c32snrtombs (char *dest, const char32_t **srcp, size_t srclen, size_t len,
mbstate_t *ps)
{
return
-# if @GNULIB_WCSNRTOMBS@ && defined __cplusplus && defined GNULIB_NAMESPACE
+# if @GNULIB_WCSNRTOMBS@ && defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
wcsnrtombs (dest, (const wchar_t **) srcp, srclen, len, ps);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32snrtombs 1
+# endif
# else
_GL_FUNCDECL_SYS (c32snrtombs, size_t,
(char *dest, const char32_t **srcp, size_t srclen, size_t
len,
@@ -558,17 +609,20 @@ _GL_CXXALIASWARN (c32snrtombs);
/* Convert a 32-bit wide string to a string. */
#if @GNULIB_C32SRTOMBS@
# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32SRTOMBS
+# if !GNULIB_defined_c32srtombs
_GL_BEGIN_C_LINKAGE
_GL_INLINE _GL_ARG_NONNULL ((2)) size_t
c32srtombs (char *dest, const char32_t **srcp, size_t len, mbstate_t *ps)
{
return
-# if @GNULIB_WCSRTOMBS@ && defined __cplusplus && defined GNULIB_NAMESPACE
+# if @GNULIB_WCSRTOMBS@ && defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
wcsrtombs (dest, (const wchar_t **) srcp, len, ps);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32srtombs 1
+# endif
# else
_GL_FUNCDECL_SYS (c32srtombs, size_t,
(char *dest, const char32_t **srcp, size_t len,
@@ -585,6 +639,7 @@ _GL_CXXALIASWARN (c32srtombs);
/* Convert a 32-bit wide string to a string. */
#if @GNULIB_C32STOMBS@
# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32STOMBS
+# if !GNULIB_defined_c32stombs
_GL_BEGIN_C_LINKAGE
_GL_INLINE _GL_ARG_NONNULL ((2)) size_t
c32stombs (char *dest, const char32_t *src, size_t len)
@@ -595,6 +650,8 @@ c32stombs (char *dest, const char32_t *src, size_t len)
return c32srtombs (dest, &src, len, &state);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32stombs 1
+# endif
# else
_GL_FUNCDECL_SYS (c32stombs, size_t,
(char *dest, const char32_t *src, size_t len),
@@ -609,17 +666,20 @@ _GL_CXXALIASWARN (c32stombs);
/* Number of screen columns needed for a size-bounded 32-bit wide string. */
#if @GNULIB_C32SWIDTH@
# if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined
IN_C32SWIDTH
+# if !GNULIB_defined_c32swidth
_GL_BEGIN_C_LINKAGE
_GL_INLINE _GL_ARG_NONNULL ((1)) int
c32swidth (const char32_t *s, size_t n)
{
return
-# if @GNULIB_WCSWIDTH@ && defined __cplusplus && defined GNULIB_NAMESPACE
+# if @GNULIB_WCSWIDTH@ && defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
wcswidth ((const wchar_t *) s, n);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32swidth 1
+# endif
# else
_GL_FUNCDECL_SYS (c32swidth, int, (const char32_t *s, size_t n),
_GL_ARG_NONNULL ((1)));
@@ -634,17 +694,20 @@ _GL_CXXALIASWARN (c32swidth);
or EOF otherwise. */
#if @GNULIB_C32TOB@
# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32TOB
+# if !GNULIB_defined_c32tob
_GL_BEGIN_C_LINKAGE
_GL_INLINE int
c32tob (wint_t wc)
{
return
-# if @GNULIB_WCTOB@ && defined __cplusplus && defined GNULIB_NAMESPACE
+# if @GNULIB_WCTOB@ && defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
wctob (wc);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32tob 1
+# endif
# else
_GL_FUNCDECL_SYS (c32tob, int, (wint_t wc), );
# endif
@@ -717,18 +780,21 @@ _GL_WARN_ON_USE (mbrtoc16, "mbrtoc16 is not portable - "
/* Convert a string to a 32-bit wide string. */
#if @GNULIB_MBSNRTOC32S@
# if _GL_WCHAR_T_IS_UCS4 && !defined IN_MBSNRTOC32S
+# if !GNULIB_defined_mbsnrtoc32s
_GL_BEGIN_C_LINKAGE
_GL_INLINE _GL_ARG_NONNULL ((2)) size_t
mbsnrtoc32s (char32_t *dest, const char **srcp, size_t srclen, size_t len,
mbstate_t *ps)
{
return
-# if @GNULIB_MBSNRTOWCS@ && defined __cplusplus && defined GNULIB_NAMESPACE
+# if @GNULIB_MBSNRTOWCS@ && defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
mbsnrtowcs ((wchar_t *) dest, srcp, srclen, len, ps);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_mbsnrtoc32s 1
+# endif
# else
_GL_FUNCDECL_SYS (mbsnrtoc32s, size_t,
(char32_t *dest, const char **srcp, size_t srclen, size_t
len,
@@ -745,17 +811,20 @@ _GL_CXXALIASWARN (mbsnrtoc32s);
/* Convert a string to a 32-bit wide string. */
#if @GNULIB_MBSRTOC32S@
# if _GL_WCHAR_T_IS_UCS4 && !defined IN_MBSRTOC32S
+# if !GNULIB_defined_mbsrtoc32s
_GL_BEGIN_C_LINKAGE
_GL_INLINE _GL_ARG_NONNULL ((2)) size_t
mbsrtoc32s (char32_t *dest, const char **srcp, size_t len, mbstate_t *ps)
{
return
-# if @GNULIB_MBSRTOWCS@ && defined __cplusplus && defined GNULIB_NAMESPACE
+# if @GNULIB_MBSRTOWCS@ && defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
mbsrtowcs ((wchar_t *) dest, srcp, len, ps);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_mbsrtoc32s 1
+# endif
# else
_GL_FUNCDECL_SYS (mbsrtoc32s, size_t,
(char32_t *dest, const char **srcp, size_t len,
@@ -772,6 +841,7 @@ _GL_CXXALIASWARN (mbsrtoc32s);
/* Convert a string to a 32-bit wide string. */
#if @GNULIB_MBSTOC32S@
# if _GL_WCHAR_T_IS_UCS4 && !defined IN_MBSTOC32S
+# if !GNULIB_defined_mbstoc32s
_GL_BEGIN_C_LINKAGE
_GL_INLINE _GL_ARG_NONNULL ((2)) size_t
mbstoc32s (char32_t *dest, const char *src, size_t len)
@@ -782,6 +852,8 @@ mbstoc32s (char32_t *dest, const char *src, size_t len)
return mbsrtoc32s (dest, &src, len, &state);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_mbstoc32s 1
+# endif
# else
_GL_FUNCDECL_SYS (mbstoc32s, size_t,
(char32_t *dest, const char *src, size_t len),
@@ -813,17 +885,20 @@ typedef /*bool*/int (*c32_type_test_t) (wint_t wc);
*/
#if @GNULIB_C32_GET_TYPE_TEST@
# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32_GET_TYPE_TEST
+# if !GNULIB_defined_c32_get_type_test
_GL_BEGIN_C_LINKAGE
_GL_INLINE _GL_ARG_NONNULL ((1)) c32_type_test_t
c32_get_type_test (const char *name)
{
return
-# if @GNULIB_WCTYPE@ && defined __cplusplus && defined GNULIB_NAMESPACE
+# if @GNULIB_WCTYPE@ && defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
wctype (name);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32_get_type_test 1
+# endif
# else
_GL_FUNCDECL_SYS (c32_get_type_test, c32_type_test_t, (const char *name),
_GL_ARG_NONNULL ((1)));
@@ -840,17 +915,20 @@ _GL_CXXALIASWARN (c32_get_type_test);
#if @GNULIB_C32_APPLY_TYPE_TEST@
# if _GL_WCHAR_T_IS_UCS4
# if !defined IN_C32_APPLY_TYPE_TEST
+# if !GNULIB_defined_c32_apply_type_test
_GL_BEGIN_C_LINKAGE
_GL_INLINE int
c32_apply_type_test (wint_t wc, c32_type_test_t property)
{
return
-# if @GNULIB_ISWCTYPE@ && defined __cplusplus && defined GNULIB_NAMESPACE
+# if @GNULIB_ISWCTYPE@ && defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
iswctype (wc, property);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32_apply_type_test 1
+# endif
# else
_GL_FUNCDECL_SYS (c32_apply_type_test, int,
(wint_t wc, c32_type_test_t property), );
@@ -885,17 +963,20 @@ typedef wint_t (*c32_mapping_t) (wint_t wc);
*/
#if @GNULIB_C32_GET_MAPPING@
# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32_GET_MAPPING
+# if !GNULIB_defined_c32_get_mapping
_GL_BEGIN_C_LINKAGE
_GL_INLINE _GL_ARG_NONNULL ((1)) c32_mapping_t
c32_get_mapping (const char *name)
{
return
-# if @GNULIB_WCTRANS@ && defined __cplusplus && defined GNULIB_NAMESPACE
+# if @GNULIB_WCTRANS@ && defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
wctrans (name);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32_get_mapping 1
+# endif
# else
_GL_FUNCDECL_SYS (c32_get_mapping, c32_mapping_t, (const char *name),
_GL_ARG_NONNULL ((1)));
@@ -911,17 +992,20 @@ _GL_CXXALIASWARN (c32_get_mapping);
*/
#if @GNULIB_C32_APPLY_MAPPING@
# if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32_APPLY_MAPPING
+# if !GNULIB_defined_c32_apply_mapping
_GL_BEGIN_C_LINKAGE
_GL_INLINE _GL_ARG_NONNULL ((2)) wint_t
c32_apply_mapping (wint_t wc, c32_mapping_t mapping)
{
return
-# if @GNULIB_TOWCTRANS@ && defined __cplusplus && defined GNULIB_NAMESPACE
+# if @GNULIB_TOWCTRANS@ && defined __cplusplus && defined GNULIB_NAMESPACE
GNULIB_NAMESPACE::
-# endif
+# endif
towctrans (wc, mapping);
}
_GL_END_C_LINKAGE
+# define GNULIB_defined_c32_apply_mapping 1
+# endif
# else
_GL_FUNCDECL_SYS (c32_apply_mapping, wint_t,
(wint_t wc, c32_mapping_t mapping),