On 2019-09-30 21:36, Tom Lane wrote: > Peter Eisentraut <peter.eisentr...@2ndquadrant.com> writes: >> Instead of AC_STRUCT_TIMEZONE we use our own variant called >> PGAC_STRUCT_TIMEZONE that checks for tzname even if other variants were >> found first. But since 63bd0db12199c5df043e1dea0f2b574f622b3a4c we >> don't use tzname anymore, so we don't need this anymore. > > Hmm. I wonder if we need AC_STRUCT_TIMEZONE either? Seems like > we should only be using our own struct pg_tm.
There are a few places that seem to need it, such as initdb/findtimezone.c. > If we could get > rid of that configure macro altogether, we could remove some dubious > junk like plpython.h's "#undef HAVE_TZNAME". We could keep just the part of AC_STRUCT_TIMEZONE that we need, namely the check for tm_zone, and remove the part about tzname. New patch attached. -- Peter Eisentraut http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
From 78597561e3f8e9119d6fd07e4106cc780e58507b Mon Sep 17 00:00:00 2001 From: Peter Eisentraut <pe...@eisentraut.org> Date: Mon, 30 Sep 2019 20:50:16 +0200 Subject: [PATCH v2 1/2] Remove use of deprecated Autoconf define Change from HAVE_TM_ZONE to HAVE_STRUCT_TM_TM_ZONE. --- src/interfaces/ecpg/pgtypeslib/dt_common.c | 4 ++-- src/interfaces/ecpg/pgtypeslib/timestamp.c | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/interfaces/ecpg/pgtypeslib/dt_common.c b/src/interfaces/ecpg/pgtypeslib/dt_common.c index e71defaa66..29c1117546 100644 --- a/src/interfaces/ecpg/pgtypeslib/dt_common.c +++ b/src/interfaces/ecpg/pgtypeslib/dt_common.c @@ -995,7 +995,7 @@ abstime2tm(AbsoluteTime _time, int *tzp, struct tm *tm, char **tzn) tm->tm_sec = tx->tm_sec; tm->tm_isdst = tx->tm_isdst; -#if defined(HAVE_TM_ZONE) +#if defined(HAVE_STRUCT_TM_TM_ZONE) tm->tm_gmtoff = tx->tm_gmtoff; tm->tm_zone = tx->tm_zone; @@ -1041,7 +1041,7 @@ abstime2tm(AbsoluteTime _time, int *tzp, struct tm *tm, char **tzn) } else tm->tm_isdst = -1; -#else /* not (HAVE_TM_ZONE || HAVE_INT_TIMEZONE) */ +#else /* not (HAVE_STRUCT_TM_TM_ZONE || HAVE_INT_TIMEZONE) */ if (tzp != NULL) { /* default to UTC */ diff --git a/src/interfaces/ecpg/pgtypeslib/timestamp.c b/src/interfaces/ecpg/pgtypeslib/timestamp.c index e830ee737e..2be151f7e6 100644 --- a/src/interfaces/ecpg/pgtypeslib/timestamp.c +++ b/src/interfaces/ecpg/pgtypeslib/timestamp.c @@ -100,7 +100,7 @@ timestamp2tm(timestamp dt, int *tzp, struct tm *tm, fsec_t *fsec, const char **t int64 dDate, date0; int64 time; -#if defined(HAVE_TM_ZONE) || defined(HAVE_INT_TIMEZONE) +#if defined(HAVE_STRUCT_TM_TM_ZONE) || defined(HAVE_INT_TIMEZONE) time_t utime; struct tm *tx; #endif @@ -134,7 +134,7 @@ timestamp2tm(timestamp dt, int *tzp, struct tm *tm, fsec_t *fsec, const char **t */ if (IS_VALID_UTIME(tm->tm_year, tm->tm_mon, tm->tm_mday)) { -#if defined(HAVE_TM_ZONE) || defined(HAVE_INT_TIMEZONE) +#if defined(HAVE_STRUCT_TM_TM_ZONE) || defined(HAVE_INT_TIMEZONE) utime = dt / USECS_PER_SEC + ((date0 - date2j(1970, 1, 1)) * INT64CONST(86400)); @@ -147,7 +147,7 @@ timestamp2tm(timestamp dt, int *tzp, struct tm *tm, fsec_t *fsec, const char **t tm->tm_min = tx->tm_min; tm->tm_isdst = tx->tm_isdst; -#if defined(HAVE_TM_ZONE) +#if defined(HAVE_STRUCT_TM_TM_ZONE) tm->tm_gmtoff = tx->tm_gmtoff; tm->tm_zone = tx->tm_zone; @@ -159,7 +159,7 @@ timestamp2tm(timestamp dt, int *tzp, struct tm *tm, fsec_t *fsec, const char **t if (tzn != NULL) *tzn = TZNAME_GLOBAL[(tm->tm_isdst > 0)]; #endif -#else /* not (HAVE_TM_ZONE || HAVE_INT_TIMEZONE) */ +#else /* not (HAVE_STRUCT_TM_TM_ZONE || HAVE_INT_TIMEZONE) */ *tzp = 0; /* Mark this as *no* time zone available */ tm->tm_isdst = -1; -- 2.23.0
From 716fb6c09648b03ba563a61b1cd2f353ed7acfca Mon Sep 17 00:00:00 2001 From: Peter Eisentraut <pe...@eisentraut.org> Date: Wed, 2 Oct 2019 07:26:08 +0200 Subject: [PATCH v2 2/2] Simplify PGAC_STRUCT_TIMEZONE Autoconf macro Since 63bd0db12199c5df043e1dea0f2b574f622b3a4c we don't use tzname anymore, so we don't need to check for it. Instead, just keep the part of PGAC_STRUCT_TIMEZONE that we need, which is the check for struct tm.tm_zone. --- config/c-library.m4 | 31 +++----------- configure | 78 +---------------------------------- src/include/pg_config.h.in | 10 ----- src/include/pg_config.h.win32 | 10 ----- src/pl/plpython/plpython.h | 1 - 5 files changed, 7 insertions(+), 123 deletions(-) diff --git a/config/c-library.m4 b/config/c-library.m4 index 6f2b0fbb4e..d9a31d7664 100644 --- a/config/c-library.m4 +++ b/config/c-library.m4 @@ -26,33 +26,14 @@ fi])# PGAC_VAR_INT_TIMEZONE # PGAC_STRUCT_TIMEZONE # ------------------ # Figure out how to get the current timezone. If `struct tm' has a -# `tm_zone' member, define `HAVE_TM_ZONE'. Also, if the -# external array `tzname' is found, define `HAVE_TZNAME'. -# This is the same as the standard macro AC_STRUCT_TIMEZONE, except that -# tzname[] is checked for regardless of whether we find tm_zone. +# `tm_zone' member, define `HAVE_STRUCT_TM_TM_ZONE'. Unlike the +# standard macro AC_STRUCT_TIMEZONE, we don't check for `tzname[]' if +# not found, since we don't use it. (We use `int timezone' as a +# fallback.) AC_DEFUN([PGAC_STRUCT_TIMEZONE], -[AC_REQUIRE([AC_STRUCT_TM])dnl -AC_CHECK_MEMBERS([struct tm.tm_zone],,,[#include <sys/types.h> -#include <$ac_cv_struct_tm> -]) -if test "$ac_cv_member_struct_tm_tm_zone" = yes; then - AC_DEFINE(HAVE_TM_ZONE, 1, - [Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use - `HAVE_STRUCT_TM_TM_ZONE' instead.]) -fi -AC_CACHE_CHECK(for tzname, ac_cv_var_tzname, -[AC_LINK_IFELSE([AC_LANG_PROGRAM( -[[#include <stdlib.h> +[AC_CHECK_MEMBERS([struct tm.tm_zone],,,[#include <sys/types.h> #include <time.h> -#ifndef tzname /* For SGI. */ -extern char *tzname[]; /* RS6000 and others reject char **tzname. */ -#endif -]], -[atoi(*tzname);])], ac_cv_var_tzname=yes, ac_cv_var_tzname=no)]) -if test $ac_cv_var_tzname = yes; then - AC_DEFINE(HAVE_TZNAME, 1, - [Define to 1 if you have the external array `tzname'.]) -fi +]) ])# PGAC_STRUCT_TIMEZONE diff --git a/configure b/configure index b3c92764be..74627a7eed 100755 --- a/configure +++ b/configure @@ -13964,43 +13964,8 @@ if test x"$pgac_cv_computed_goto" = xyes ; then $as_echo "#define HAVE_COMPUTED_GOTO 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 -$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } -if ${ac_cv_struct_tm+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <sys/types.h> -#include <time.h> - -int -main () -{ -struct tm tm; - int *p = &tm.tm_sec; - return !p; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_struct_tm=time.h -else - ac_cv_struct_tm=sys/time.h -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 -$as_echo "$ac_cv_struct_tm" >&6; } -if test $ac_cv_struct_tm = sys/time.h; then - -$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h - -fi - ac_fn_c_check_member "$LINENO" "struct tm" "tm_zone" "ac_cv_member_struct_tm_tm_zone" "#include <sys/types.h> -#include <$ac_cv_struct_tm> +#include <time.h> " if test "x$ac_cv_member_struct_tm_tm_zone" = xyes; then : @@ -14012,47 +13977,6 @@ _ACEOF fi -if test "$ac_cv_member_struct_tm_tm_zone" = yes; then - -$as_echo "#define HAVE_TM_ZONE 1" >>confdefs.h - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5 -$as_echo_n "checking for tzname... " >&6; } -if ${ac_cv_var_tzname+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> -#include <time.h> -#ifndef tzname /* For SGI. */ -extern char *tzname[]; /* RS6000 and others reject char **tzname. */ -#endif - -int -main () -{ -atoi(*tzname); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_var_tzname=yes -else - ac_cv_var_tzname=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 -$as_echo "$ac_cv_var_tzname" >&6; } -if test $ac_cv_var_tzname = yes; then - -$as_echo "#define HAVE_TZNAME 1" >>confdefs.h - -fi ac_fn_c_check_type "$LINENO" "union semun" "ac_cv_type_union_semun" "#include <sys/types.h> #ifdef HAVE_SYS_IPC_H diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index c6014e83fa..53e6fe3398 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -654,16 +654,9 @@ /* Define to 1 if you have the <termios.h> header file. */ #undef HAVE_TERMIOS_H -/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use - `HAVE_STRUCT_TM_TM_ZONE' instead. */ -#undef HAVE_TM_ZONE - /* Define to 1 if your compiler understands `typeof' or something similar. */ #undef HAVE_TYPEOF -/* Define to 1 if you have the external array `tzname'. */ -#undef HAVE_TZNAME - /* Define to 1 if you have the <ucred.h> header file. */ #undef HAVE_UCRED_H @@ -884,9 +877,6 @@ /* Define to 1 if strerror_r() returns int. */ #undef STRERROR_R_INT -/* Define to 1 if your <sys/time.h> declares `struct tm'. */ -#undef TM_IN_SYS_TIME - /* Define to 1 to use ARMv8 CRC Extension. */ #undef USE_ARMV8_CRC32C diff --git a/src/include/pg_config.h.win32 b/src/include/pg_config.h.win32 index 5bbf476990..a330df9d9d 100644 --- a/src/include/pg_config.h.win32 +++ b/src/include/pg_config.h.win32 @@ -508,16 +508,9 @@ /* Define to 1 if you have the <termios.h> header file. */ /* #undef HAVE_TERMIOS_H */ -/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use - `HAVE_STRUCT_TM_TM_ZONE' instead. */ -/* #undef HAVE_TM_ZONE */ - /* Define to 1 if your compiler understands `typeof' or something similar. */ /* #undef HAVE_TYPEOF */ -/* Define to 1 if you have the external array `tzname'. */ -/* #undef HAVE_TZNAME */ - /* Define to 1 if the system has the type `uint64'. */ /* #undef HAVE_UINT64 */ @@ -686,9 +679,6 @@ /* Define to 1 if strerror_r() returns int. */ /* #undef STRERROR_R_INT */ -/* Define to 1 if your <sys/time.h> declares `struct tm'. */ -/* #undef TM_IN_SYS_TIME */ - /* Define to 1 to build with assertion checks. (--enable-cassert) */ /* #undef USE_ASSERT_CHECKING */ diff --git a/src/pl/plpython/plpython.h b/src/pl/plpython/plpython.h index 3a1f0d56d7..dc8fcee001 100644 --- a/src/pl/plpython/plpython.h +++ b/src/pl/plpython/plpython.h @@ -28,7 +28,6 @@ */ #undef _POSIX_C_SOURCE #undef _XOPEN_SOURCE -#undef HAVE_TZNAME /* * Sometimes python carefully scribbles on our *printf macros. -- 2.23.0