2 upstream gnulib commits for coreutils-9.5 to skip localtime_r tests when the timezone 'Europe/Paris' does not work. Commit 1: http://git.sv.gnu.org/cgit/gnulib.git/commit/?id=f130f5426ecd4edd559 From f130f5426ecd4edd5596797e0a5721b927f80126 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 30 Mar 2024 13:28:01 -0600 Subject: [PATCH 1/2] time_r-tests: skip French tests if no Europe/Paris * tests/test-localtime_r.c (main): * tests/test-localtime_r-mt.c (main): If TZ='Europe/Paris' does not work, skip these tests. Commit 2: http://git.sv.gnu.org/cgit/gnulib.git/commit/?id=2c04db80e2c52b8f05b From 2c04db80e2c52b8f05b4136af955510e7d370470 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sat, 30 Mar 2024 22:50:39 +0100 Subject: [PATCH 2/2] time_r tests: Avoid misleading skip message on native Windows. * tests/test-localtime_r.c (main): Use the macro FRENCH_TZ. * tests/test-localtime_r-mt.c (main): Likewise. --- gnulib-tests/test-localtime_r-mt.c | 21 +++++++++++++++++++++ gnulib-tests/test-localtime_r.c | 21 +++++++++++++++++++++ 2 files changed, 42 insertions(+) Index: gnulib-tests/test-localtime_r-mt.c =================================================================== --- gnulib-tests/test-localtime_r-mt.c.orig +++ gnulib-tests/test-localtime_r-mt.c @@ -107,6 +107,27 @@ main (int argc, char *argv[]) { setenv ("TZ", FRENCH_TZ, 1); + /* Check that this TZ works. */ + { + time_t t = 0; /* 1970-01-01 01:00:00 */ + struct tm *result = localtime (&t); + if (! (result + && result->tm_sec == 0 + && result->tm_min == 0 + && result->tm_hour == 1 + && result->tm_mday == 1 + && result->tm_mon == 1 - 1 + && result->tm_year == 1970 - 1900 + && result->tm_wday == 4 + && result->tm_yday == 0 + && result->tm_isdst == 0)) + { + fputs ("Skipping test: TZ='" FRENCH_TZ "' is not Paris time\n", + stderr); + return 77; + } + } + /* Create the threads. */ gl_thread_create (thread1_func, NULL); gl_thread_create (thread2_func, NULL); Index: gnulib-tests/test-localtime_r.c =================================================================== --- gnulib-tests/test-localtime_r.c.orig +++ gnulib-tests/test-localtime_r.c @@ -43,6 +43,27 @@ main (void) { setenv ("TZ", FRENCH_TZ, 1); + /* Check that this TZ works. */ + { + time_t t = 0; /* 1970-01-01 01:00:00 */ + struct tm *result = localtime (&t); + if (! (result + && result->tm_sec == 0 + && result->tm_min == 0 + && result->tm_hour == 1 + && result->tm_mday == 1 + && result->tm_mon == 1 - 1 + && result->tm_year == 1970 - 1900 + && result->tm_wday == 4 + && result->tm_yday == 0 + && result->tm_isdst == 0)) + { + fputs ("Skipping test: TZ='" FRENCH_TZ "' is not Paris time\n", + stderr); + return 77; + } + } + /* Note: The result->tm_gmtoff values and the result->tm_zone values are the same (3600, "CET" or 7200, "CEST") across all tested platforms: glibc, musl, macOS, FreeBSD, NetBSD, OpenBSD, Minix, Cygwin, Android. */