1
0
mirror of https://git.savannah.gnu.org/git/gnulib.git synced 2026-10-24 00:48:56 +03:00
Files
gnulib/m4/tzname.m4
2026-01-01 10:37:05 -08:00

64 lines
2.3 KiB
Plaintext

# tzname.m4
# serial 1
dnl Copyright (C) 2024-2026 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This file is offered as-is, without any warranty.
dnl gl_TZNAME tests how the time zone can be obtained.
dnl It is similar AC_STRUCT_TIMEZONE, but also supports MSVC.
dnl It defines
dnl * the C macro HAVE_STRUCT_TM_TM_ZONE to 1 if 'struct tm' has a field
dnl 'tm_zone',
dnl * otherwise:
dnl - the C macro HAVE_TZNAME_ARRAY to 1 if there the rvalue 'tzname'
dnl or (on native Windows) '_tzname' is usable,
dnl - the C macro NEED_DECL_TZNAME to 1 if 'tzname' needs to be declared
dnl extern char *tzname[];
dnl before use.
AC_DEFUN([gl_TZNAME],
[
AC_REQUIRE([AC_CANONICAL_HOST])
dnl Set ac_cv_member_struct_tm_tm_zone,
dnl ac_cv_var_tzname, ac_cv_have_decl_tzname.
dnl Possibly define HAVE_STRUCT_TM_TM_ZONE,
dnl HAVE_TZNAME, HAVE_DECL_TZNAME.
AC_REQUIRE([AC_STRUCT_TIMEZONE])
dnl If 'struct tm' has a field 'tm_zone', don't test for tzname or _tzname.
dnl Rationale: Some code assumes that HAVE_STRUCT_TM_TM_ZONE and HAVE_TZNAME
dnl are exclusive.
if test "$ac_cv_member_struct_tm_tm_zone" != yes; then
if test $ac_cv_var_tzname = yes && test $ac_cv_have_decl_tzname != yes; then
AC_DEFINE([NEED_DECL_TZNAME], [1],
[Define to 1 if tzname exists but needs to be declared.])
fi
AC_CACHE_CHECK([for tzname array],
[gl_cv_var_tzname],
[AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <time.h>
#if NEED_DECL_TZNAME
extern char *tzname[];
#endif
#if defined _WIN32 && !defined __CYGWIN__
#undef tzname
#define tzname _tzname
#endif
]],
[[return tzname[0][0];
]])
],
[gl_cv_var_tzname=yes],
[gl_cv_var_tzname=no])
])
if test $gl_cv_var_tzname = yes; then
AC_DEFINE([HAVE_TZNAME_ARRAY], [1],
[Define to 1 if 'struct tm' does not have a field 'tm_zone'
but instead 'tzname' is usable.])
fi
fi
])