Bruno Haible [Thu, 8 Feb 2024 00:24:12 +0000 (01:24 +0100)]
c-nstrftime: Add tests.
* tests/test-c-nstrftime.c: New file, based on tests/test-nstrftime.c.
* tests/test-c-nstrftime-1.sh: New file, based on
tests/test-nstrftime-1.sh.
* tests/test-c-nstrftime-2.sh: New file, based on
tests/test-nstrftime-2.sh.
* modules/c-nstrftime-tests: New file.
Bruno Haible [Thu, 8 Feb 2024 00:09:08 +0000 (01:09 +0100)]
c-nstrftime: New module.
Suggested by Paul Eggert.
* lib/strftime.h (c_nstrftime): New declaration.
* lib/c-nstrftime.c: New file.
* lib/strftime.c (FPRINTFTIME): Move fallback definition before its
first use.
(USE_C_LOCALE): Add fallback definition.
If USE_C_LOCALE is set, include c-ctype.h instead of <ctype.h>.
Conditionally include <locale.h>.
(TOUPPER, TOLOWER): Define differently if USE_C_LOCALE is set.
(c_locale_cache, c_locale): New definitions, copied from lib/c-strtod.c.
(c_weekday_names, c_month_names): New variables, based on
glibc/time/strftime_l.c.
(__strftime_internal): Define a_wkday, aw_len, f_wkday, a_month, am_len,
f_month, ampm, ap_len differently for USE_C_LOCALE. Avoid a
'goto underlying_strftime' if USE_C_LOCALE && !HAVE_STRFTIME_L. Make the
strftime fallback declaration ISO C 23 compliant. If USE_C_LOCALE, use
strftime_l() with the C locale object instead of strftime().
* m4/c-nstrftime.m4: New file, based on m4/nstrftime.m4.
* modules/c-nstrftime: New file, based on modules/nstrftime.
Bruno Haible [Wed, 7 Feb 2024 22:53:09 +0000 (23:53 +0100)]
nstrftime: Add tests of all directives, also in non-trivial locales.
* tests/test-nstrftime.h (language_t): New type.
(locales_test): New function.
* tests/test-nstrftime.c: Include <locale.h>, <stdlib.h>.
(main): Invoke setlocale and locales_test.
* tests/test-nstrftime-1.sh: New file.
* tests/test-nstrftime-2.sh: New file, based on tests/test-strtod1.sh.
* modules/nstrftime-tests (Files): Add them. Add m4/locale-fr.m4,
m4/codeset.m4, m4/musl.m4.
(configure.ac): Invoke gt_LOCALE_FR, gt_LOCALE_FR_UTF8, gl_MUSL_LIBC.
(Makefile.am): Link test-nstrftime with $(SETLOCALE_LIB). Test
test-nstrftime-*.sh instead of test-nstrftime.
Paul Eggert [Wed, 7 Feb 2024 21:01:09 +0000 (13:01 -0800)]
Assume ‘long long’ support
* modules/strtoimax, modules/strtoumax (Depends-on):
Assume the compiler supports ‘long long’.
This was overlooked in the 2019-12-22 patch
<https://lists.gnu.org/r/bug-gnulib/2019-12/msg00190.html>.
Bruno Haible [Wed, 7 Feb 2024 11:38:44 +0000 (12:38 +0100)]
nstrftime tests: Allow reuse with another function.
* tests/test-nstrftime.h: New file, extracted from
tests/test-nstrftime.c.
(FUNC_NAME, STRINGIFY): New macros.
(posixtm_test, tzalloc_test, quarter_test, errno_test): Use FUNC or
FUNC_NAME instead of nstrftime.
(quarter_test): Rename local variable 'result' to 'fail'.
* tests/test-nstrftime.c: Remove code that moved to test-nstrftime.h.
Include test-nstrftime.h.
(STREQ): Remove redundant macro.
* modules/nstrftime-tests (Files): Add tests/test-nstrftime.h.
Bruno Haible [Tue, 6 Feb 2024 20:59:01 +0000 (21:59 +0100)]
nl_langinfo: Fix fallback list of month names (regression 2014-07-07).
* lib/nl_langinfo.c (nl_langinfo): In the implementation for native
Windows, fix the results for MON_8..MON_12, ALTMON_8..ALTMON_12,
ABMON_8..ABMON_12.
Paul Eggert [Tue, 6 Feb 2024 06:48:29 +0000 (22:48 -0800)]
ctime: improve doc
* doc/posix-functions/asctime.texi (asctime):
* doc/posix-functions/asctime_r.texi (asctime_r):
* doc/posix-functions/ctime_r.texi (ctime_r):
* doc/posix-functions/ctime.texi (ctime):
Mention locale problem of strftime more consistently. Improve
wording. For ctime and ctime_r, mention that localtime_r can
fail.
* doc/posix-functions/ctime.texi (ctime): Move history section
to end and spiff up a bit.
* doc/posix-functions/ctime_r.texi (ctime_r): Omit commentary that
assumes traditional SunOS ctime_r API; it was confusing and not
useful for Gnulib apps, which assume the POSIX API.
Paul Eggert [Sun, 4 Feb 2024 07:53:13 +0000 (23:53 -0800)]
xalloc-oversized: omit unnecessary cast
* lib/xalloc-oversized.h (__xalloc_oversized): Omit unnecessary
cast of a positive in-range value to size_t. This seems to be
left over from an older version of the code.
Paul Eggert [Sat, 3 Feb 2024 20:05:17 +0000 (12:05 -0800)]
ctime: fix false positive
Problem reported by Bjarni Ingi Gislason in:
https://lists.gnu.org/r/bug-gnulib/2024-02/msg00006.html
* lib/time.in.h (ctime): Do not warn about ctime portability,
as there is a more serious warning about it crashing,
and the two warning directives can cause false alarms.
Bruno Haible [Tue, 30 Jan 2024 16:08:49 +0000 (17:08 +0100)]
Update to Unicode 15.1.0.
* lib/gen-uni-tables.c (PROP_SENTENCE_TERMINAL): Renamed from
PROP_STERM.
(PROP_IDS_UNARY_OPERATOR, PROP_ID_COMPAT_MATH_CONTINUE,
PROP_ID_COMPAT_MATH_START): New enum items.
(UC_INDIC_CONJUNCT_BREAK_*): New enum items.
(unicode_indic_conjunct_break): New variable.
(fill_properties): Rename local variable propvalue to propcode. Handle
the properties IDS_Unary_Operator, ID_Compat_Math_Continue,
ID_Compat_Math_Start. Parse the InCB values from file
DerivedCoreProperties.txt.
(indic_conjunct_break_as_c_identifier,
output_indic_conjunct_break_test): New functions.
(indic_conjunct_break_table): New variable.
(output_indic_conjunct_break): New function.
(fill_width): Accept spaces at the end of field0 and at the start and
end of field1.
(LBP_QU1, LBP_QU2, LBP_QU3): New enum items, for Unicode TR #14 rules
(LB15a) and (LB15b).
(LBP_AP, LBP_AK, LBP_AS, LBP_VI, LBP_VF): New enum items, for Brahmic
scripts.
(get_lbp): Update such that unilbrk/lbrkprop.txt comes out as expected.
(debug_output_lbp): Print either LBP_QU1 or LBP_QU2 or LBP_QU3 as
LBP_QU. Handle LBP_AP, LBP_AK, LBP_AS, LBP_VI, LBP_VF.
(fill_org_lbp): Accept spaces at the end of field0 and at the start and
end of field1. Recognize LBP_AP, LBP_AK, LBP_AS, LBP_VI, LBP_VF.
(debug_output_org_lbp): Handle LBP_AP, LBP_AK, LBP_AS, LBP_VI, LBP_VF.
(lbp_value_to_string): Handle LBP_QU1, LBP_QU2, LBP_QU3 instead of
LBP_QU. Handle LBP_AP, LBP_AK, LBP_AS, LBP_VI, LBP_VF.
(output_lbrk_rules_as_tables): Treat LBP_QU as macro that maps to three
table rows/columns. Replace rule (LB15) with rules (LB15b) and (LB15a).
(get_wbp): Update such that uniwbrk/wbrkprop.txt comes out as expected.
(main): Invoke output_indic_conjunct_break_test and
output_indic_conjunct_break.
* All generated files under lib/uni* and tests/uni*: Regenerate.
* tests/uniname/NameAliases.txt: Update.
* tests/uniname/UnicodeData.txt: Update.
* tests/uninorm/NormalizationTest.txt: Update.
* tests/unigbrk/GraphemeBreakTest.txt: Update.
* tests/uniwbrk/WordBreakTest.txt: Update.
* lib/unilbrk/lbrktables.h (LBP_QU1, LBP_QU2, LBP_QU3): New enum items,
for Unicode TR #14 rules (LB15a) and (LB15b).
(LBP_QU): Remove enum item.
(LBP_AP, LBP_AK, LBP_AS, LBP_VI, LBP_VF): New enum items, for Brahmic
scripts.
(unilbrk_table): Update array bounds.
* lib/unilbrk/u8-possible-linebreaks.c (u8_possible_linebreaks_loop):
Conditionally replace LBP_QU2 with LBP_QU1, for rule (LB15a).
Conditionally replace LBP_QU3 with LBP_QU1, for rule (LB15b).
* lib/unilbrk/u16-possible-linebreaks.c (u16_possible_linebreaks_loop):
Likewise.
* lib/unilbrk/u32-possible-linebreaks.c (u32_possible_linebreaks_loop):
Likewise.
* lib/unictype.in.h (UC_INDIC_CONJUNCT_BREAK_*): New enum values.
(uc_indic_conjunct_break_name, uc_indic_conjunct_break_byname,
uc_indic_conjunct_break): New declarations.
* lib/unictype/incb_byname.c: New file.
* lib/unictype/incb_byname.gperf: New file.
* lib/unictype/incb_name.c: New file.
* lib/unictype/incb_name.h: New file.
* lib/unictype/incb_of.c: New file.
* lib/unictype/incb_of.h: New generated file.
* modules/unictype/incb-all: New file.
* modules/unictype/incb-byname: New file.
* modules/unictype/incb-name: New file.
* modules/unictype/incb-of: New file.
* tests/unictype/test-incb_byname.c: New file.
* tests/unictype/test-incb_name.c: New file.
* tests/unictype/test-incb_of.c: New file.
* tests/unictype/test-incb_of.h: New generated file.
* modules/unictype/incb-byname-tests: New file.
* modules/unictype/incb-name-tests: New file.
* modules/unictype/incb-of-tests: New file.
Bruno Haible [Tue, 30 Jan 2024 16:03:05 +0000 (17:03 +0100)]
gen-uni-tables: Refactor, based on UAX #14 version 49.
* lib/gen-uni-tables.c (get_lbp): Reorder, based on
<https://www.unicode.org/reports/tr14/tr14-49.html#DescriptionOfProperties>.
For LBP_EB, use the "emoji modifier base" property.
Bruno Haible [Tue, 30 Jan 2024 16:00:44 +0000 (17:00 +0100)]
unigbrk tests: Tweak error reporting.
* tests/unigbrk/test-ulc-grapheme-breaks.c (main): Print byte values in
upper-case hexadecimal.
* tests/unigbrk/test-u8-grapheme-breaks.c (test_u8_grapheme_breaks):
Print unit values in upper-case hexadecimal.
* tests/unigbrk/test-u16-grapheme-breaks.c (test_u16_grapheme_breaks):
Print unit values with at least 4 hexadecimal digits.
* tests/unigbrk/test-u32-grapheme-breaks.c (test_u32_grapheme_breaks):
Likewise.
* tests/unigbrk/test-uc-grapheme-breaks.c (test_uc_grapheme_breaks):
Print characters with at least 4 hexadecimal digits.
Patrice Dumas [Mon, 29 Jan 2024 17:39:44 +0000 (18:39 +0100)]
gendocs: get only targetted manual source and includes, when possible
* build-aux/gendocs.sh: if makeinfo, based on version, has the
--trace-includes option, gather only the targetted manual srcfile and
the included files obtained with makeinfo --trace-includes. In that
case output include files to tar stdin and use -T-. Bruno Haible for
the version comparison and use of tar.
Bruno Haible [Mon, 29 Jan 2024 17:26:41 +0000 (18:26 +0100)]
Port FALLTHROUGH to Mac OS X 10.9.
Report and fix by Ryan Carsten Schmidt <gnulib@ryandesign.com>
at <https://savannah.gnu.org/bugs/?63866>.
* m4/gnulib-common.m4 (gl_COMMON_BODY): For _GL_HAS_ATTRIBUTE, don't use
__has_attribute for Apple clang versions < 7000000.
* lib/cdefs.h (__glibc_has_attribute): Don't use __has_attribute for
Apple clang versions < 7000000.
Bruno Haible [Sun, 28 Jan 2024 19:23:10 +0000 (20:23 +0100)]
host-cpu-c-abi: Let gl_HOST_CPU_C_ABI_32BIT never return 'unknown'.
Reported by Mohammad-Reza Nabipoor <mnabipoor@gnu.org>.
* m4/host-cpu-c-abi.m4 (gl_HOST_CPU_C_ABI_32BIT): Use the list of
always-32-bit CPUs and the list of always-64-bit CPUs also when
gl_HOST_CPU_C_ABI has already been run. As a fallback, use a test of
'sizeof (void *)' to always return 'yes' or 'no', never 'unknown'.
Bruno Haible [Fri, 26 Jan 2024 00:12:08 +0000 (01:12 +0100)]
execute tests: Avoid test failure on macOS 14.
Reported by Guangyu Li <gl343@cornell.edu> in
<https://lists.gnu.org/archive/html/bug-gettext/2024-01/msg00006.html>.
* tests/test-execute-main.c (main): In the tests 17, 18, 19, 20, use the
file descriptors 15, 16 instead of 10, 11, respectively.
* tests/test-execute-child.c (main): Likewise.
Bruno Haible [Thu, 25 Jan 2024 23:55:45 +0000 (00:55 +0100)]
Resolve conflicts for functions introduced in Android API level 35.
* lib/time.in.h (timespec_getres): Consider REPLACE_TIMESPEC_GETRES.
* m4/time_h.m4 (gl_TIME_H_DEFAULTS): Initialize REPLACE_TIMESPEC_GETRES.
* modules/time-h (Makefile.am): Substitute REPLACE_TIMESPEC_GETRES.
* m4/timespec_getres.m4 (gl_FUNC_TIMESPEC_GETRES): Test for
timespec_getres using gl_CHECK_FUNCS_ANDROID instead of
AC_CHECK_FUNCS_ONCE. Conditionally set REPLACE_TIMESPEC_GETRES.
* modules/timespec_getres (Depends-on, configure.ac): Consider
REPLACE_TIMESPEC_GETRES.
* m4/gettime.m4 (gl_GETTIME_RES): Test for timespec_getres using
gl_CHECK_FUNCS_ANDROID instead of AC_CHECK_FUNCS_ONCE.
* doc/posix-functions/timespec_getres.texi: Mention the Android API
levels.
Bruno Haible [Thu, 25 Jan 2024 23:18:55 +0000 (00:18 +0100)]
Resolve conflicts for functions introduced in Android API level 34.
* m4/copy-file-range.m4 (gl_FUNC_COPY_FILE_RANGE): On platforms without
glibc, test for copy_file_range using gl_CHECK_FUNCS_ANDROID instead of
AC_CHECK_FUNCS_ONCE. Conditionally set REPLACE_COPY_FILE_RANGE.
* doc/glibc-functions/copy_file_range.texi: Mention the Android API
levels.
Bruno Haible [Thu, 25 Jan 2024 23:18:52 +0000 (00:18 +0100)]
Resolve conflicts for functions introduced in Android API level 34.
* m4/posix_spawn.m4 (gl_POSIX_SPAWN_BODY): Test for
posix_spawn_file_actions_addchdir_np and
posix_spawn_file_actions_addfchdir_np using gl_CHECK_FUNCS_ANDROID
instead of AC_CHECK_FUNCS_ONCE.
* m4/posix_spawn_faction_addchdir.m4
(gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR): Test for
posix_spawn_file_actions_addchdir_np using gl_CHECK_FUNCS_ANDROID
instead of AC_CHECK_FUNCS_ONCE.
* m4/posix_spawn_faction_addfchdir.m4
(gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR): Test for
posix_spawn_file_actions_addfchdir_np using gl_CHECK_FUNCS_ANDROID
instead of AC_CHECK_FUNCS_ONCE.
* doc/glibc-functions/posix_spawn_file_actions_addchdir_np.texi: Mention
the Android API levels.
* doc/glibc-functions/posix_spawn_file_actions_addfchdir_np.texi:
Likewise.
Bruno Haible [Thu, 25 Jan 2024 23:18:45 +0000 (00:18 +0100)]
Resolve conflicts for functions introduced in Android API level 34.
* m4/freadahead.m4 (gl_FUNC_FREADAHEAD): Test for __freadahead using
gl_CHECK_FUNCS_ANDROID instead of AC_CHECK_FUNCS_ONCE.
* lib/freadahead.h: Update comment.
Bruno Haible [Fri, 19 Jan 2024 21:58:43 +0000 (22:58 +0100)]
fenv-environment: Fix for NetBSD/powerpc.
* m4/fenv-environment.m4 (gl_FENV_ENVIRONMENT): For feupdateenv, use
the same configure test on NetBSD/powerpc as on glibc/hppa.
* doc/posix-functions/feupdateenv.texi: Mention the NetBSD/powerpc bug.
Bruno Haible [Fri, 19 Jan 2024 21:34:27 +0000 (22:34 +0100)]
fenv-exceptions-state-c99: Fix for FreeBSD/powerpc64 and NetBSD/powerpc.
* m4/fenv-exceptions-state.m4 (gl_FENV_EXCEPTIONS_STATE): On
FreeBSD/powerpc64 and NetBSD/powerpc, set REPLACE_FESETEXCEPTFLAG.
* doc/posix-functions/fesetexceptflag.texi: Mention the FreeBSD and
NetBSD bug.
Bruno Haible [Fri, 19 Jan 2024 09:55:13 +0000 (10:55 +0100)]
fenv-*: Avoid test failures on OpenBSD/sparc64.
* tests/test-fenv-except-tracking-2.c (main): On OpenBSD/sparc64, skip
the 'long double' test.
* tests/test-fenv-except-trapping-2.c (main): Skip the 'long double'
tests also on OpenBSD/sparc64.
Paul Eggert [Wed, 17 Jan 2024 01:21:08 +0000 (17:21 -0800)]
posixtm: pacify clang 18
Problem reported by Khem Raj in:
https://lists.gnu.org/r/bug-gnulib/2024-01/msg00045.html
* lib/posixtm.c (posixtime): Pacify clang 18 by converting bool to int.
Arguably this is a bug in draft C2x, since the non-pointer args to
ckd_add should promote just like any other expressions do;
but that’s not clang’s fault.
Jim Meyering [Mon, 15 Jan 2024 18:36:34 +0000 (10:36 -0800)]
update-copyright: handle more cases
* build-aux/update-copyright: Handle cases like gunzip.in
with its two copyright lines.
Making it work required two changes: don't stop upon first match.
And then, when continuing, a little trickiness: knowing that the
final substitution would reset m{}g's "pos()", so save and restore
that, to avoid an infinite loop in some cases.
* tests/test-update-copyright.sh: Add a test for this.
Bruno Haible [Wed, 10 Jan 2024 14:26:53 +0000 (15:26 +0100)]
jit/cache: Fix for arm CPUs with GCC target arm-linux-gnueabihf.
* tests/jit/test-cache.c (CODE): Define differently on arm.
(SET_CODE, IS, SET_IS): New macros.
(main): New variables is_of_return1, is_of_return2. Use the SET_CODE and
SET_IS macros.
Bruno Haible [Tue, 9 Jan 2024 20:10:19 +0000 (21:10 +0100)]
jit/cache tests: Avoid test failure on OpenBSD.
* tests/jit/test-cache.c (return1_code, return2_code): New constants.
(main): On OpenBSD, use return1_code and return2_code instead of
CODE (return1) and CODE (return2), since the latter may not be in a
readable memory area.
Bruno Haible [Tue, 9 Jan 2024 15:56:08 +0000 (16:56 +0100)]
jit/cache tests: Avoid test failure on hppa CPUs.
* tests/jit/test-cache.c (FUNCPTR_BIAS): New macro.
(structptr_to_funcptr, funcptr_to_structptr): New functions/macros.
(xcopy_structptr): Renamed from xcopy_funcptr. Mark as inline.
(COPY_FUNCPTR, CODE): Use structptr_to_funcptr, funcptr_to_structptr.
* modules/jit/cache-tests (configure.ac): Require AC_C_INLINE.
Bruno Haible [Mon, 8 Jan 2024 21:48:46 +0000 (22:48 +0100)]
jit/cache tests: Fix for powerpc*, ia64, hppa* CPUs.
* modules/jit/cache-tests (Depends-on): Add xalloc.
* tests/jit/test-cache.c: Include xalloc.h.
(FUNCPTR_POINTS_TO_CODE, COPY_FUNCPTR): New macros.
(xcopy_funcptr): New function.
(main): Create a copy of the function pointer return1, so as not to
destructively modify return1. Fix memcpy argument.
Bruno Haible [Mon, 8 Jan 2024 17:10:28 +0000 (18:10 +0100)]
jit/cache tests: Avoid test failure on OpenBSD.
* modules/jit/cache-tests (Files): Add m4/warnings.m4.
(configure.ac): Set and substitute DISABLE_OPENBSD_RETGUARD.
(Makefile.am): Set test_cache_CFLAGS.
* tests/jit/test-cache.c (main): If the compiler defines _RET_PROTECTOR,
skip the test.