https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119550
--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I wonder if the problem is that newlib only defined tm.tm_zone conditionally:
struct tm
{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
#ifdef __TM_GMTOFF
long __TM_GMTOFF;
#endif
#ifdef __TM_ZONE
const char *__TM_ZONE;
#endif
};
And the AC_STRUCT_TIMEZONE macro will first check to tm.tm_zone, which doesn't
need link tests, and if that's not found it will look for the global tzname,
which probably does require linking.
So depending on your newlib configuration, you might be missing tm_zone and
require a link test for tzname.
If necessary we can replace the use of AC_STRUCT_TIMEZONE with a custom check
that doesn't need to link. Libstdc++ doesn't care about tzname, only about
tm.tm_zone.
I thought it made sense to use the pre-existing autoconf macro, but it turns
out to be not very useful. It detects that BSD systems provide tm.tm_zone but
they're not actually compatible with the definition in Glibc, newlib, and
POSIX, because BSD uses a non-const char*.