From 124b0081d233c895de756ff6c08dba36296ac298 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 23 Dec 2024 13:55:59 -0800 Subject: [PATCH] Update from Gnulib by running admin/merge-gnulib (cherry picked from commit cf5e58a14dedabd65dee297ee2a2abb05cd4449d) --- doc/misc/texinfo.tex | 114 ++++++++++++++++++++++++++-------------- lib/endian.c | 2 +- lib/intprops-internal.h | 9 ++-- lib/limits.in.h | 6 +-- lib/signal.in.h | 6 +-- lib/stdbit.c | 2 +- lib/stdbit.in.h | 3 +- lib/stdio.in.h | 6 +-- lib/stdlib.c | 2 +- lib/stdlib.in.h | 9 +++- lib/string.in.h | 6 +-- lib/unistd.c | 2 +- m4/stdint.m4 | 4 +- m4/stdlib_h.m4 | 53 +++++++++++-------- 14 files changed, 136 insertions(+), 88 deletions(-) diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex index c336124c9f9..456696f4c9e 100644 --- a/doc/misc/texinfo.tex +++ b/doc/misc/texinfo.tex @@ -3,7 +3,7 @@ % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % -\def\texinfoversion{2024-02-15.11} +\def\texinfoversion{2024-11-04.20} % % Copyright 1985, 1986, 1988, 1990-2024 Free Software Foundation, Inc. % @@ -951,7 +951,11 @@ where each line of input produces a line of output.} \let\setfilename=\comment % @bye. -\outer\def\bye{\chappager\pagelabels\tracingstats=1\ptexend} +\outer\def\bye{% + \chappager\pagelabels + % possibly set in \printindex + \ifx\byeerror\relax\else\errmessage{\byeerror}\fi + \tracingstats=1\ptexend} \message{pdf,} @@ -3126,11 +3130,12 @@ end % at the end of the line, or no break at all here. % Changing the value of the penalty and/or the amount of stretch affects how % preferable one choice is over the other. +% Check test cases in doc/texinfo-tex-test.texi before making any changes. \def\urefallowbreak{% \penalty0\relax - \hskip 0pt plus 2 em\relax + \hskip 0pt plus 3 em\relax \penalty1000\relax - \hskip 0pt plus -2 em\relax + \hskip 0pt plus -3 em\relax } \urefbreakstyle after @@ -5438,6 +5443,9 @@ $$% \closein 1 \endgroup} +% Checked in @bye +\let\byeerror\relax + % If the index file starts with a backslash, forgo reading the index % file altogether. If somebody upgrades texinfo.tex they may still have % old index files using \ as the escape character. Reading this would @@ -5446,7 +5454,9 @@ $$% \ifflagclear{txiindexescapeisbackslash}{% \uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1 \ifflagclear{txiskipindexfileswithbackslash}{% -\errmessage{% + % Delay the error message until the very end to give a chance + % for the whole index to be output as input for texindex. + \global\def\byeerror{% ERROR: A sorted index file in an obsolete format was skipped. To fix this problem, please upgrade your version of 'texi2dvi' or 'texi2pdf' to that at . @@ -5567,7 +5577,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. -% +% If \tocnodetarget is set, link text to the referenced node. \def\entry{% \begingroup % @@ -5608,7 +5618,13 @@ might help (with 'rm \jobname.?? \jobname.??s')% \global\setbox\boxA=\hbox\bgroup \ifpdforxetex \iflinkentrytext - \pdflinkpage{#1}{\unhbox\boxA}% + \ifx\tocnodetarget\empty + \unhbox\boxA + \else + \startxreflink{\tocnodetarget}{}% + \unhbox\boxA + \endlink + \fi \else \unhbox\boxA \fi @@ -5625,11 +5641,18 @@ might help (with 'rm \jobname.?? \jobname.??s')% % \null\nobreak\indexdotfill % Have leaders before the page number. % + \hskip\skip\thinshrinkable \ifpdforxetex - \pdfgettoks#1.% - \hskip\skip\thinshrinkable\the\toksA + \ifx\tocnodetarget\empty + \pdfgettoks#1.% + \the\toksA + \else + % Should just be a single page number in toc + \startxreflink{\tocnodetarget}{}% + #1\endlink + \fi \else - \hskip\skip\thinshrinkable #1% + #1% \fi \fi \egroup % end \boxA @@ -6892,7 +6915,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% \vskip 0pt plus 5\baselineskip \penalty-300 \vskip 0pt plus -5\baselineskip - \dochapentry{#1}{\numeralbox}{}% + \dochapentry{#1}{\numeralbox}{#3}{}% } % % Parts, in the short toc. @@ -6905,12 +6928,12 @@ might help (with 'rm \jobname.?? \jobname.??s')% % Chapters, in the main contents. \def\numchapentry#1#2#3#4{% \retrievesecnowidth\secnowidthchap{#2}% - \dochapentry{#1}{#2}{#4}% + \dochapentry{#1}{#2}{#3}{#4}% } % Chapters, in the short toc. \def\shortchapentry#1#2#3#4{% - \tocentry{#1}{\shortchaplabel{#2}}{#4}% + \tocentry{#1}{\shortchaplabel{#2}}{#3}{#4}% } % Appendices, in the main contents. @@ -6923,79 +6946,77 @@ might help (with 'rm \jobname.?? \jobname.??s')% % \def\appentry#1#2#3#4{% \retrievesecnowidth\secnowidthchap{#2}% - \dochapentry{\appendixbox{#2}\hskip.7em#1}{}{#4}% + \dochapentry{\appendixbox{#2}\hskip.7em#1}{}{#3}{#4}% } % Unnumbered chapters. -\def\unnchapentry#1#2#3#4{\dochapentry{#1}{}{#4}} -\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{}{#4}} +\def\unnchapentry#1#2#3#4{\dochapentry{#1}{}{#3}{#4}} +\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{}{#3}{#4}} % Sections. -\def\numsecentry#1#2#3#4{\dosecentry{#1}{#2}{#4}} - \def\numsecentry#1#2#3#4{% \retrievesecnowidth\secnowidthsec{#2}% - \dosecentry{#1}{#2}{#4}% + \dosecentry{#1}{#2}{#3}{#4}% } \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{% \retrievesecnowidth\secnowidthsec{#2}% - \dosecentry{#1}{}{#4}% + \dosecentry{#1}{}{#3}{#4}% } % Subsections. \def\numsubsecentry#1#2#3#4{% \retrievesecnowidth\secnowidthssec{#2}% - \dosubsecentry{#1}{#2}{#4}% + \dosubsecentry{#1}{#2}{#3}{#4}% } \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{% \retrievesecnowidth\secnowidthssec{#2}% - \dosubsecentry{#1}{}{#4}% + \dosubsecentry{#1}{}{#3}{#4}% } % And subsubsections. -\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#2}{#4}} +\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#2}{#3}{#4}} \let\appsubsubsecentry=\numsubsubsecentry -\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{}{#4}} +\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{}{#3}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text, #2 is -% a section number if present, and #3 is the page number. +% a section number if present, #3 is the node, and #4 is the page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. -\def\dochapentry#1#2#3{% +\def\dochapentry#1#2#3#4{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup % Move the page numbers slightly to the right \advance\entryrightmargin by -0.05em \chapentryfonts \extrasecnoskip=0.4em % separate chapter number more - \tocentry{#1}{#2}{#3}% + \tocentry{#1}{#2}{#3}{#4}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } -\def\dosecentry#1#2#3{\begingroup +\def\dosecentry#1#2#3#4{\begingroup \secnowidth=\secnowidthchap \secentryfonts \leftskip=\tocindent - \tocentry{#1}{#2}{#3}% + \tocentry{#1}{#2}{#3}{#4}% \endgroup} -\def\dosubsecentry#1#2#3{\begingroup +\def\dosubsecentry#1#2#3#4{\begingroup \secnowidth=\secnowidthsec \subsecentryfonts \leftskip=2\tocindent - \tocentry{#1}{#2}{#3}% + \tocentry{#1}{#2}{#3}{#4}% \endgroup} -\def\dosubsubsecentry#1#2#3{\begingroup +\def\dosubsubsecentry#1#2#3#4{\begingroup \secnowidth=\secnowidthssec \subsubsecentryfonts \leftskip=3\tocindent - \tocentry{#1}{#2}{#3}% + \tocentry{#1}{#2}{#3}{#4}% \endgroup} % Used for the maximum width of a section number so we can align @@ -7005,12 +7026,15 @@ might help (with 'rm \jobname.?? \jobname.??s')% \newdimen\extrasecnoskip \extrasecnoskip=0pt -% \tocentry{TITLE}{SEC NO}{PAGE} +\let\tocnodetarget\empty + +% \tocentry{TITLE}{SEC NO}{NODE}{PAGE} % -\def\tocentry#1#2#3{% +\def\tocentry#1#2#3#4{% + \def\tocnodetarget{#3}% \def\secno{#2}% \ifx\empty\secno - \entry{#1}{#3}% + \entry{#1}{#4}% \else \ifdim 0pt=\secnowidth \setbox0=\hbox{#2\hskip\labelspace\hskip\extrasecnoskip}% @@ -7021,7 +7045,7 @@ might help (with 'rm \jobname.?? \jobname.??s')% #2\hskip\labelspace\hskip\extrasecnoskip\hfill}% \fi \entrycontskip=\wd0 - \entry{\box0 #1}{#3}% + \entry{\box0 #1}{#4}% \fi } \newdimen\labelspace @@ -10515,6 +10539,16 @@ directory should work if nowhere else does.} \catcode"#1=\other } +% Suppress ligature creation from adjacent characters. +\ifx\luatexversion\thisisundefined + \def\nolig{{}} +\else + % Braces do not suppress ligature creation in LuaTeX, e.g. in of{}fice + % to suppress the "ff" ligature. Using a kern appears to be the only + % workaround. + \def\nolig{\kern0pt{}} +\fi + % https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M % U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block) % U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block) @@ -11132,8 +11166,8 @@ directory should work if nowhere else does.} % Punctuation \DeclareUnicodeCharacter{2013}{--}% \DeclareUnicodeCharacter{2014}{---}% - \DeclareUnicodeCharacter{2018}{\quoteleft{}}% - \DeclareUnicodeCharacter{2019}{\quoteright{}}% + \DeclareUnicodeCharacter{2018}{\quoteleft\nolig}% + \DeclareUnicodeCharacter{2019}{\quoteright\nolig}% \DeclareUnicodeCharacter{201A}{\quotesinglbase{}}% \DeclareUnicodeCharacter{201C}{\quotedblleft{}}% \DeclareUnicodeCharacter{201D}{\quotedblright{}}% @@ -11168,7 +11202,7 @@ directory should work if nowhere else does.} \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}% % \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}% - \DeclareUnicodeCharacter{2032}{\ensuremath\prime}% + \DeclareUnicodeCharacter{2032}{\ensuremath{^\prime}}% \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}% \DeclareUnicodeCharacter{2111}{\ensuremath\Im}% \DeclareUnicodeCharacter{2113}{\ensuremath\ell}% diff --git a/lib/endian.c b/lib/endian.c index 3e7e56f523d..089f5f7825e 100644 --- a/lib/endian.c +++ b/lib/endian.c @@ -17,7 +17,7 @@ /* Written by Collin Funk. */ +#define _GL_ENDIAN_INLINE _GL_EXTERN_INLINE #include -#define _GL_ENDIAN_INLINE _GL_EXTERN_INLINE #include diff --git a/lib/intprops-internal.h b/lib/intprops-internal.h index c8cc0e20194..0b7e1f539aa 100644 --- a/lib/intprops-internal.h +++ b/lib/intprops-internal.h @@ -77,10 +77,11 @@ /* Does the __typeof__ keyword work? This could be done by 'configure', but for now it's easier to do it by hand. */ -#if (2 <= __GNUC__ \ - || (4 <= __clang_major__) \ - || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \ - || (0x5110 <= __SUNPRO_C && !__STDC__)) +#if ((defined __GNUC__ && 2 <= __GNUC__) \ + || (defined __clang_major__ && 4 <= __clang_major__) \ + || (defined __IBMC__ && 1210 <= __IBMC__ && defined __IBM__TYPEOF__) \ + || (defined __SUNPRO_C && 0x5110 <= __SUNPRO_C && !__STDC__) \ + || (defined _MSC_VER && 1939 <= _MSC_VER)) # define _GL_HAVE___TYPEOF__ 1 #else # define _GL_HAVE___TYPEOF__ 0 diff --git a/lib/limits.in.h b/lib/limits.in.h index c65eb4c1cfe..3347e369fb5 100644 --- a/lib/limits.in.h +++ b/lib/limits.in.h @@ -20,7 +20,7 @@ #endif @PRAGMA_COLUMNS@ -#if defined _GL_ALREADY_INCLUDING_LIMITS_H +#if defined _@GUARD_PREFIX@_ALREADY_INCLUDING_LIMITS_H /* Special invocation convention: On Haiku/x86_64, we have a sequence of nested includes -> -> . @@ -34,12 +34,12 @@ #ifndef _@GUARD_PREFIX@_LIMITS_H -# define _GL_ALREADY_INCLUDING_LIMITS_H +# define _@GUARD_PREFIX@_ALREADY_INCLUDING_LIMITS_H /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_LIMITS_H@ -# undef _GL_ALREADY_INCLUDING_LIMITS_H +# undef _@GUARD_PREFIX@_ALREADY_INCLUDING_LIMITS_H #ifndef _@GUARD_PREFIX@_LIMITS_H #define _@GUARD_PREFIX@_LIMITS_H diff --git a/lib/signal.in.h b/lib/signal.in.h index 6239b90adf3..18c88f0c1d7 100644 --- a/lib/signal.in.h +++ b/lib/signal.in.h @@ -20,7 +20,7 @@ #endif @PRAGMA_COLUMNS@ -#if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T) +#if defined __need_sig_atomic_t || defined __need_sigset_t || defined _@GUARD_PREFIX@_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T) /* Special invocation convention: - Inside glibc header files. - On glibc systems we have a sequence of nested includes @@ -39,7 +39,7 @@ #ifndef _@GUARD_PREFIX@_SIGNAL_H -#define _GL_ALREADY_INCLUDING_SIGNAL_H +#define _@GUARD_PREFIX@_ALREADY_INCLUDING_SIGNAL_H /* Define pid_t, uid_t. Also, mingw defines sigset_t not in , but in . @@ -50,7 +50,7 @@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_SIGNAL_H@ -#undef _GL_ALREADY_INCLUDING_SIGNAL_H +#undef _@GUARD_PREFIX@_ALREADY_INCLUDING_SIGNAL_H #ifndef _@GUARD_PREFIX@_SIGNAL_H #define _@GUARD_PREFIX@_SIGNAL_H diff --git a/lib/stdbit.c b/lib/stdbit.c index 4801e74d281..b9c52698e91 100644 --- a/lib/stdbit.c +++ b/lib/stdbit.c @@ -17,7 +17,7 @@ /* Written by Paul Eggert. */ +#define _GL_STDBIT_INLINE _GL_EXTERN_INLINE #include -#define _GL_STDBIT_INLINE _GL_EXTERN_INLINE #include diff --git a/lib/stdbit.in.h b/lib/stdbit.in.h index 20b9f4f4662..91d237d7ad0 100644 --- a/lib/stdbit.in.h +++ b/lib/stdbit.in.h @@ -77,7 +77,8 @@ _GL_INLINE_HEADER_BEGIN #if ((defined __GNUC__ && 2 <= __GNUC__) \ || (defined __clang_major__ && 4 <= __clang_major__) \ || (defined __IBMC__ && 1210 <= __IBMC__ && defined __IBM__TYPEOF__) \ - || (defined __SUNPRO_C && 0x5110 <= __SUNPRO_C && !__STDC__)) + || (defined __SUNPRO_C && 0x5110 <= __SUNPRO_C && !__STDC__) \ + || (defined _MSC_VER && 1939 <= _MSC_VER)) # define _GL_STDBIT_TYPEOF_CAST(a, b) ((__typeof__ (a)) (b)) #elif 202311 <= __STDC_VERSION__ # define _GL_STDBIT_TYPEOF_CAST(a, b) ((typeof (a)) (b)) diff --git a/lib/stdio.in.h b/lib/stdio.in.h index e77798d9b25..ed260d308b0 100644 --- a/lib/stdio.in.h +++ b/lib/stdio.in.h @@ -20,7 +20,7 @@ #endif @PRAGMA_COLUMNS@ -#if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H +#if defined __need_FILE || defined __need___FILE || defined _@GUARD_PREFIX@_ALREADY_INCLUDING_STDIO_H || defined _GL_SKIP_GNULIB_STDIO_H /* Special invocation convention: - Inside glibc header files. - On OSF/1 5.1 we have a sequence of nested includes @@ -48,12 +48,12 @@ # endif #endif -#define _GL_ALREADY_INCLUDING_STDIO_H +#define _@GUARD_PREFIX@_ALREADY_INCLUDING_STDIO_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDIO_H@ -#undef _GL_ALREADY_INCLUDING_STDIO_H +#undef _@GUARD_PREFIX@_ALREADY_INCLUDING_STDIO_H #ifdef _GL_DEFINED__POSIX_C_SOURCE # undef _GL_DEFINED__POSIX_C_SOURCE diff --git a/lib/stdlib.c b/lib/stdlib.c index 521d64627dc..6f70fa4bbda 100644 --- a/lib/stdlib.c +++ b/lib/stdlib.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ +#define _GL_STDLIB_INLINE _GL_EXTERN_INLINE #include -#define _GL_STDLIB_INLINE _GL_EXTERN_INLINE #include diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h index adbef69131b..14f45cc21e5 100644 --- a/lib/stdlib.in.h +++ b/lib/stdlib.in.h @@ -746,15 +746,20 @@ _GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - " # endif #endif -/* Return maximum number of bytes of a multibyte character. */ +/* Return maximum number of bytes in a multibyte character in the + current locale. */ #if @REPLACE_MB_CUR_MAX@ # if !GNULIB_defined_MB_CUR_MAX -_GL_STDLIB_INLINE int +_GL_STDLIB_INLINE size_t gl_MB_CUR_MAX (void) { +# if 0 < @REPLACE_MB_CUR_MAX@ + return @REPLACE_MB_CUR_MAX@; +# else /* Turn the value 3 to the value 4, as needed for the UTF-8 encoding. */ int gl_mb_cur_max = MB_CUR_MAX; return gl_mb_cur_max == 3 ? 4 : gl_mb_cur_max; +# endif } # undef MB_CUR_MAX # define MB_CUR_MAX gl_MB_CUR_MAX () diff --git a/lib/string.in.h b/lib/string.in.h index f5a6d8b3267..72cd7566e65 100644 --- a/lib/string.in.h +++ b/lib/string.in.h @@ -20,7 +20,7 @@ #endif @PRAGMA_COLUMNS@ -#if defined _GL_ALREADY_INCLUDING_STRING_H +#if defined _@GUARD_PREFIX@_ALREADY_INCLUDING_STRING_H /* Special invocation convention: - On OS X/NetBSD we have a sequence of nested includes -> -> "string.h" @@ -34,12 +34,12 @@ #ifndef _@GUARD_PREFIX@_STRING_H -#define _GL_ALREADY_INCLUDING_STRING_H +#define _@GUARD_PREFIX@_ALREADY_INCLUDING_STRING_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ -#undef _GL_ALREADY_INCLUDING_STRING_H +#undef _@GUARD_PREFIX@_ALREADY_INCLUDING_STRING_H #ifndef _@GUARD_PREFIX@_STRING_H #define _@GUARD_PREFIX@_STRING_H diff --git a/lib/unistd.c b/lib/unistd.c index f3b3f7bd2fe..b25112eb91e 100644 --- a/lib/unistd.c +++ b/lib/unistd.c @@ -15,8 +15,8 @@ You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ +#define _GL_UNISTD_INLINE _GL_EXTERN_INLINE #include -#define _GL_UNISTD_INLINE _GL_EXTERN_INLINE #include typedef int dummy; diff --git a/m4/stdint.m4 b/m4/stdint.m4 index 0a078e64d58..1f3062a8900 100644 --- a/m4/stdint.m4 +++ b/m4/stdint.m4 @@ -1,5 +1,5 @@ # stdint.m4 -# serial 63 +# serial 64 dnl Copyright (C) 2001-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -158,7 +158,7 @@ uintmax_t j = UINTMAX_MAX; || defined __clang__) int k = _Generic (SIZE_MAX, size_t: 0); #elif (2 <= __GNUC__ || 4 <= __clang_major__ || defined __IBM__TYPEOF__ \ - || (0x5110 <= __SUNPRO_C && !__STDC__)) + || (0x5110 <= __SUNPRO_C && !__STDC__) || 1939 <= _MSC_VER) extern size_t k; extern __typeof__ (SIZE_MAX) k; #endif diff --git a/m4/stdlib_h.m4 b/m4/stdlib_h.m4 index 87b63ff54e3..ba56a9480b3 100644 --- a/m4/stdlib_h.m4 +++ b/m4/stdlib_h.m4 @@ -1,5 +1,5 @@ # stdlib_h.m4 -# serial 82 +# serial 84 dnl Copyright (C) 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -41,20 +41,21 @@ AC_DEFUN_ONCE([gl_STDLIB_H], AC_REQUIRE([gt_LOCALE_EN_UTF8]) AC_CACHE_CHECK([whether MB_CUR_MAX is correct], [gl_cv_macro_MB_CUR_MAX_good], - [ - dnl Initial guess, used when cross-compiling or when no suitable locale - dnl is present. -changequote(,)dnl - case "$host_os" in - # Guess no on Solaris and Haiku. - solaris* | haiku*) gl_cv_macro_MB_CUR_MAX_good="guessing no" ;; - # Guess yes otherwise. - *) gl_cv_macro_MB_CUR_MAX_good="guessing yes" ;; - esac -changequote([,])dnl - if test "$LOCALE_EN_UTF8" != none; then - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include + ]], + [[return !!MB_CUR_MAX;]]) + ], + [dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. + # Guess no on Solaris and Haiku, yes otherwise. + AS_CASE([$host_os], + [solaris* | haiku*], + [gl_cv_macro_MB_CUR_MAX_good="guessing no"], + [gl_cv_macro_MB_CUR_MAX_good="guessing yes"]) + if test "$LOCALE_EN_UTF8" != none; then + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ #include #include int main () @@ -67,15 +68,21 @@ int main () } return result; }]])], - [gl_cv_macro_MB_CUR_MAX_good=yes], - [gl_cv_macro_MB_CUR_MAX_good=no], - [:]) - fi + [gl_cv_macro_MB_CUR_MAX_good=yes], + [gl_cv_macro_MB_CUR_MAX_good=no], + [:]) + fi + ], + [gl_cv_macro_MB_CUR_MAX_good="link failed - so no"]) ]) - case "$gl_cv_macro_MB_CUR_MAX_good" in - *yes) ;; - *) REPLACE_MB_CUR_MAX=1 ;; - esac + AS_CASE([$gl_cv_macro_MB_CUR_MAX_good], + [*yes], + [], + ["link failed - so no"], + [# 4 suffices as a workaround in Android NDK 16, + # the only known platform with the bug. + REPLACE_MB_CUR_MAX=4], + [REPLACE_MB_CUR_MAX="(-1)"]) AC_CHECK_DECLS_ONCE([ecvt]) if test $ac_cv_have_decl_ecvt = no; then -- 2.39.5