https://gcc.gnu.org/g:419f40af5c5335b84c16e4891377142f12f7577b

commit r16-119-g419f40af5c5335b84c16e4891377142f12f7577b
Author: Gaius Mulley <gaiusm...@gmail.com>
Date:   Thu Apr 24 22:09:19 2025 +0100

    PR modula2/115276: libgm2 wraptime.cc field access all return -1.
    
    This patch provides autoconf tests for each field used in wraptime.cc
    referencing struct tm and struct timeval.
    
    libgm2/ChangeLog:
    
            PR modula2/115276
            * config.h.in: Regenerate.
            * configure: Regenerate.
            * configure.ac (AC_STRUCT_TIMEZONE): Add.
            (AC_CHECK_MEMBER): Test for struct tm.tm_year.
            (AC_CHECK_MEMBER): Test for struct tm.tm_mon.
            (AC_CHECK_MEMBER): Test for struct tm.tm_mday.
            (AC_CHECK_MEMBER): Test for struct tm.tm_hour.
            (AC_CHECK_MEMBER): Test for struct tm.tm_min.
            (AC_CHECK_MEMBER): Test for struct tm.tm_sec.
            (AC_CHECK_MEMBER): Test for struct tm.tm_year.
            (AC_CHECK_MEMBER): Test for struct tm.tm_yday.
            (AC_CHECK_MEMBER): Test for struct tm.tm_wday.
            (AC_CHECK_MEMBER): Test for struct tm.tm_isdst.
            (AC_CHECK_MEMBER): Test for struct timeval.tv_sec.
            (AC_CHECK_MEMBER): Test for struct timeval.tv_sec.
            (AC_CHECK_MEMBER): Test for struct timeval.tv_usec.
            * libm2iso/wraptime.cc (InitTimeval): Guard against lack
            struct timeval and malloc.
            (InitTimezone): Guard against lack of struct tm.tm_zone
            and malloc.
            (KillTimezone): Ditto.
            (InitTimeval): Guard against lack of struct timeval
            and malloc.
            (KillTimeval): Guard against lack of malloc.
            (settimeofday): Guard against lack of struct tm.tm_zone.
            (GetFractions): Guard against lack of struct timeval.
            (localtime_r): Ditto.
            (GetYear): Guard against lack of struct tm.
            (GetMonth): Ditto.
            (GetDay): Ditto.
            (GetHour): Ditto.
            (GetMinute): Ditto.
            (GetSecond): Ditto.
            (GetSummerTime): Ditto.
            (GetDST): Guards against lack of struct timezone.
            (SetTimezone): Ditto.
            (SetTimeval): Guard against lack of struct tm.
    
    Signed-off-by: Gaius Mulley <gaiusm...@gmail.com>

Diff:
---
 libgm2/config.h.in          |  53 +++++++
 libgm2/configure            | 371 ++++++++++++++++++++++++++++++++++++++------
 libgm2/configure.ac         |  44 ++++++
 libgm2/libm2iso/wraptime.cc |  60 ++++---
 4 files changed, 462 insertions(+), 66 deletions(-)

diff --git a/libgm2/config.h.in b/libgm2/config.h.in
index 321ef3b807f7..f9710ffde8a5 100644
--- a/libgm2/config.h.in
+++ b/libgm2/config.h.in
@@ -34,6 +34,10 @@
    */
 #undef HAVE_DECL_GETENV
 
+/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't.
+   */
+#undef HAVE_DECL_TZNAME
+
 /* Define to 1 if you have the <direct.h> header file. */
 #undef HAVE_DIRECT_H
 
@@ -232,6 +236,9 @@
 /* Define to 1 if the system has the type `struct tm'. */
 #undef HAVE_STRUCT_TM
 
+/* Define to 1 if `tm_zone' is a member of `struct tm'. */
+#undef HAVE_STRUCT_TM_TM_ZONE
+
 /* Define to 1 if you have the <sys/errno.h> header file. */
 #undef HAVE_SYS_ERRNO_H
 
@@ -286,6 +293,10 @@
 /* Define if struct tm has a tm_gmtoff field. */
 #undef HAVE_TM_TM_GMTOFF
 
+/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
+   `HAVE_STRUCT_TM_TM_ZONE' instead. */
+#undef HAVE_TM_ZONE
+
 /* function tzname exists */
 #undef HAVE_TZNAME
 
@@ -338,6 +349,9 @@
 /* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
 #undef TIME_WITH_SYS_TIME
 
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+#undef TM_IN_SYS_TIME
+
 /* Enable extensions on AIX 3, Interix.  */
 #ifndef _ALL_SOURCE
 # undef _ALL_SOURCE
@@ -363,6 +377,45 @@
 /* Version number of package */
 #undef VERSION
 
+/* struct timeval was found */
+#undef WE_HAVE_STRUCT_TIMEVAL
+
+/* struct timeval.tv_sec was found */
+#undef WE_HAVE_STRUCT_TIMEVAL_TV_SEC
+
+/* struct timeval.tv_usec was found */
+#undef WE_HAVE_STRUCT_TIMEVAL_TV_USEC
+
+/* struct tm was found */
+#undef WE_HAVE_STRUCT_TM
+
+/* struct tm.tm_hour was found */
+#undef WE_HAVE_STRUCT_TM_HOUR
+
+/* struct tm.tm_isdst was found */
+#undef WE_HAVE_STRUCT_TM_ISDST
+
+/* struct tm.tm_mday was found */
+#undef WE_HAVE_STRUCT_TM_MDAY
+
+/* struct tm.tm_min was found */
+#undef WE_HAVE_STRUCT_TM_MIN
+
+/* struct tm.tm_mon was found */
+#undef WE_HAVE_STRUCT_TM_MON
+
+/* struct tm.tm_sec was found */
+#undef WE_HAVE_STRUCT_TM_SEC
+
+/* struct tm.tm_wday was found */
+#undef WE_HAVE_STRUCT_TM_WDAY
+
+/* struct tm.tm_yday was found */
+#undef WE_HAVE_STRUCT_TM_YDAY
+
+/* struct tm.tm_year was found */
+#undef WE_HAVE_STRUCT_TM_YEAR
+
 /* Defined if no way to sleep is available. */
 #undef _GLIBCXX_NO_SLEEP
 
diff --git a/libgm2/configure b/libgm2/configure
index efe3b660769b..8ffdb3116250 100755
--- a/libgm2/configure
+++ b/libgm2/configure
@@ -2100,6 +2100,109 @@ $as_echo "$ac_res" >&6; }
 
 } # ac_fn_cxx_check_func
 
+# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
+# ----------------------------------------------------
+# Tries to find if the field MEMBER exists in type AGGR, after including
+# INCLUDES, setting cache variable VAR accordingly.
+ac_fn_c_check_member ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+$as_echo_n "checking for $2.$3... " >&6; }
+if eval \${$4+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (sizeof ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  eval "$4=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$4
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_member
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  as_decl_name=`echo $2|sed 's/ *(.*//'`
+  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is 
declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+  (void) $as_decl_use;
+#else
+  (void) $as_decl_name;
+#endif
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
+
 # ac_fn_c_try_link LINENO
 # -----------------------
 # Try to link conftest.$ac_ext, and return whether this succeeded.
@@ -2269,52 +2372,6 @@ $as_echo "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_type
-
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
-# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  as_decl_name=`echo $2|sed 's/ *(.*//'`
-  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is 
declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-#ifndef $as_decl_name
-#ifdef __cplusplus
-  (void) $as_decl_use;
-#else
-  (void) $as_decl_name;
-#endif
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_decl
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
@@ -6872,6 +6929,7 @@ $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
 
 fi
 
+
 ac_fn_c_check_header_mongrel "$LINENO" "math.h" "ac_cv_header_math_h" 
"$ac_includes_default"
 if test "x$ac_cv_header_math_h" = xyes; then :
 
@@ -6903,6 +6961,223 @@ fi
 done
 
 
+{ $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>
+
+"
+if test "x$ac_cv_member_struct_tm_tm_zone" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_TM_TM_ZONE 1
+_ACEOF
+
+
+fi
+
+if test "$ac_cv_member_struct_tm_tm_zone" = yes; then
+
+$as_echo "#define HAVE_TM_ZONE 1" >>confdefs.h
+
+else
+  ac_fn_c_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include 
<time.h>
+"
+if test "x$ac_cv_have_decl_tzname" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TZNAME $ac_have_decl
+_ACEOF
+
+  { $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
+  if test x$gcc_no_link = xyes; then
+  as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." 
"$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <time.h>
+#if !HAVE_DECL_TZNAME
+extern char *tzname[];
+#endif
+
+int
+main ()
+{
+return tzname[0][0];
+  ;
+  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
+fi
+
+
+ac_fn_c_check_member "$LINENO" "struct tm" "tm_year" 
"ac_cv_member_struct_tm_tm_year" "#include <time.h>
+"
+if test "x$ac_cv_member_struct_tm_tm_year" = xyes; then :
+
+$as_echo "#define WE_HAVE_STRUCT_TM 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct tm" "tm_year" 
"ac_cv_member_struct_tm_tm_year" "#include <time.h>
+"
+if test "x$ac_cv_member_struct_tm_tm_year" = xyes; then :
+
+$as_echo "#define WE_HAVE_STRUCT_TM_YEAR 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct tm" "tm_mon" 
"ac_cv_member_struct_tm_tm_mon" "#include <time.h>
+"
+if test "x$ac_cv_member_struct_tm_tm_mon" = xyes; then :
+
+$as_echo "#define WE_HAVE_STRUCT_TM_MON 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct tm" "tm_mday" 
"ac_cv_member_struct_tm_tm_mday" "#include <time.h>
+"
+if test "x$ac_cv_member_struct_tm_tm_mday" = xyes; then :
+
+$as_echo "#define WE_HAVE_STRUCT_TM_MDAY 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct tm" "tm_hour" 
"ac_cv_member_struct_tm_tm_hour" "#include <time.h>
+"
+if test "x$ac_cv_member_struct_tm_tm_hour" = xyes; then :
+
+$as_echo "#define WE_HAVE_STRUCT_TM_HOUR 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct tm" "tm_min" 
"ac_cv_member_struct_tm_tm_min" "#include <time.h>
+"
+if test "x$ac_cv_member_struct_tm_tm_min" = xyes; then :
+
+$as_echo "#define WE_HAVE_STRUCT_TM_MIN 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct tm" "tm_sec" 
"ac_cv_member_struct_tm_tm_sec" "#include <time.h>
+"
+if test "x$ac_cv_member_struct_tm_tm_sec" = xyes; then :
+
+$as_echo "#define WE_HAVE_STRUCT_TM_SEC 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct tm" "tm_year" 
"ac_cv_member_struct_tm_tm_year" "#include <time.h>
+"
+if test "x$ac_cv_member_struct_tm_tm_year" = xyes; then :
+
+$as_echo "#define WE_HAVE_STRUCT_TM_YEAR 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct tm" "tm_yday" 
"ac_cv_member_struct_tm_tm_yday" "#include <time.h>
+"
+if test "x$ac_cv_member_struct_tm_tm_yday" = xyes; then :
+
+$as_echo "#define WE_HAVE_STRUCT_TM_YDAY 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct tm" "tm_wday" 
"ac_cv_member_struct_tm_tm_wday" "#include <time.h>
+"
+if test "x$ac_cv_member_struct_tm_tm_wday" = xyes; then :
+
+$as_echo "#define WE_HAVE_STRUCT_TM_WDAY 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct tm" "tm_isdst" 
"ac_cv_member_struct_tm_tm_isdst" "#include <time.h>
+"
+if test "x$ac_cv_member_struct_tm_tm_isdst" = xyes; then :
+
+$as_echo "#define WE_HAVE_STRUCT_TM_ISDST 1" >>confdefs.h
+
+fi
+
+
+ac_fn_c_check_member "$LINENO" "struct timeval" "tv_sec" 
"ac_cv_member_struct_timeval_tv_sec" "$ac_includes_default"
+if test "x$ac_cv_member_struct_timeval_tv_sec" = xyes; then :
+
+$as_echo "#define WE_HAVE_STRUCT_TIMEVAL 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct timeval" "tv_sec" 
"ac_cv_member_struct_timeval_tv_sec" "$ac_includes_default"
+if test "x$ac_cv_member_struct_timeval_tv_sec" = xyes; then :
+
+$as_echo "#define WE_HAVE_STRUCT_TIMEVAL_TV_SEC 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct timeval" "tv_usec" 
"ac_cv_member_struct_timeval_tv_usec" "$ac_includes_default"
+if test "x$ac_cv_member_struct_timeval_tv_usec" = xyes; then :
+
+$as_echo "#define WE_HAVE_STRUCT_TIMEVAL_TV_USEC 1" >>confdefs.h
+
+fi
+
+
 
  case ${build_alias} in
   "") build_noncanonical=${build} ;;
@@ -14579,7 +14854,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 14582 "configure"
+#line 14857 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -14685,7 +14960,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 14688 "configure"
+#line 14963 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
diff --git a/libgm2/configure.ac b/libgm2/configure.ac
index c070491c9680..437485fcf0f8 100644
--- a/libgm2/configure.ac
+++ b/libgm2/configure.ac
@@ -89,6 +89,7 @@ AC_ARG_WITH(cross-host,
 AC_HEADER_STDC
 AC_HEADER_SYS_WAIT
 AC_HEADER_TIME
+
 AC_CHECK_HEADER([math.h],
               [AC_DEFINE([HAVE_MATH_H], [1], [have math.h])])
 
@@ -102,6 +103,49 @@ AC_CHECK_HEADERS(getopt.h limits.h stddef.h string.h 
strings.h \
                  pthread.h stdarg.h stdio.h sys/types.h termios.h \
                  netinet/in.h netdb.h sys/uio.h sys/stat.h wchar.h)
 
+AC_STRUCT_TIMEZONE
+
+AC_CHECK_MEMBER([struct tm.tm_year],
+               [AC_DEFINE(WE_HAVE_STRUCT_TM, [1], [struct tm was found])],
+               [], [[#include <time.h>]])
+AC_CHECK_MEMBER([struct tm.tm_year],
+               [AC_DEFINE(WE_HAVE_STRUCT_TM_YEAR, [1], [struct tm.tm_year was 
found])],
+               [], [[#include <time.h>]])
+AC_CHECK_MEMBER([struct tm.tm_mon],
+               [AC_DEFINE(WE_HAVE_STRUCT_TM_MON, [1], [struct tm.tm_mon was 
found])],
+               [], [[#include <time.h>]])
+AC_CHECK_MEMBER([struct tm.tm_mday],
+               [AC_DEFINE(WE_HAVE_STRUCT_TM_MDAY, [1], [struct tm.tm_mday was 
found])],
+               [], [[#include <time.h>]])
+AC_CHECK_MEMBER([struct tm.tm_hour],
+               [AC_DEFINE(WE_HAVE_STRUCT_TM_HOUR, [1], [struct tm.tm_hour was 
found])],
+               [], [[#include <time.h>]])
+AC_CHECK_MEMBER([struct tm.tm_min],
+               [AC_DEFINE(WE_HAVE_STRUCT_TM_MIN, [1], [struct tm.tm_min was 
found])],
+               [], [[#include <time.h>]])
+AC_CHECK_MEMBER([struct tm.tm_sec],
+               [AC_DEFINE(WE_HAVE_STRUCT_TM_SEC, [1], [struct tm.tm_sec was 
found])],
+               [], [[#include <time.h>]])
+AC_CHECK_MEMBER([struct tm.tm_year],
+               [AC_DEFINE(WE_HAVE_STRUCT_TM_YEAR, [1], [struct tm.tm_year was 
found])],
+               [], [[#include <time.h>]])
+AC_CHECK_MEMBER([struct tm.tm_yday],
+               [AC_DEFINE(WE_HAVE_STRUCT_TM_YDAY, [1], [struct tm.tm_yday was 
found])],
+               [], [[#include <time.h>]])
+AC_CHECK_MEMBER([struct tm.tm_wday],
+               [AC_DEFINE(WE_HAVE_STRUCT_TM_WDAY, [1], [struct tm.tm_wday was 
found])],
+               [], [[#include <time.h>]])
+AC_CHECK_MEMBER([struct tm.tm_isdst],
+               [AC_DEFINE(WE_HAVE_STRUCT_TM_ISDST, [1], [struct tm.tm_isdst 
was found])],
+               [], [[#include <time.h>]])
+
+AC_CHECK_MEMBER([struct timeval.tv_sec],
+               [AC_DEFINE(WE_HAVE_STRUCT_TIMEVAL, [1], [struct timeval was 
found])])
+AC_CHECK_MEMBER([struct timeval.tv_sec],
+               [AC_DEFINE(WE_HAVE_STRUCT_TIMEVAL_TV_SEC, [1], [struct 
timeval.tv_sec was found])])
+AC_CHECK_MEMBER([struct timeval.tv_usec],
+               [AC_DEFINE(WE_HAVE_STRUCT_TIMEVAL_TV_USEC, [1], [struct 
timeval.tv_usec was found])])
+
 AC_CANONICAL_HOST
 ACX_NONCANONICAL_HOST
 ACX_NONCANONICAL_TARGET
diff --git a/libgm2/libm2iso/wraptime.cc b/libgm2/libm2iso/wraptime.cc
index 4bbd5f9701d7..ed5f05e59328 100644
--- a/libgm2/libm2iso/wraptime.cc
+++ b/libgm2/libm2iso/wraptime.cc
@@ -58,7 +58,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If 
not, see
 
 /* InitTimeval returns a newly created opaque type.  */
 
-#if defined(HAVE_STRUCT_TIMEVAL) && defined(HAVE_MALLOC_H)
+#if defined(WE_HAVE_STRUCT_TIMEVAL) && defined(HAVE_MALLOC_H)
 extern "C" struct timeval *
 EXPORT(InitTimeval) (void)
 {
@@ -85,7 +85,7 @@ EXPORT(KillTimeval) (void *tv)
 
 /* InitTimezone returns a newly created opaque type.  */
 
-#if defined(HAVE_STRUCT_TIMEZONE) && defined(HAVE_MALLOC_H)
+#if defined(HAVE_STRUCT_TM_TM_ZONE) && defined(HAVE_MALLOC_H)
 extern "C" struct timezone *
 EXPORT(InitTimezone) (void)
 {
@@ -102,14 +102,20 @@ EXPORT(InitTimezone) (void)
 /* KillTimezone - deallocates the memory associated with an opaque
    type.  */
 
+#if defined(HAVE_STRUCT_TM_TM_ZONE) && defined(HAVE_MALLOC_H)
 extern "C" struct timezone *
 EXPORT(KillTimezone) (struct timezone *tv)
 {
-#if defined(HAVE_MALLOC_H)
   free (tv);
-#endif
   return NULL;
 }
+#else
+extern "C" void *
+EXPORT(KillTimezone) (void *tv)
+{
+  return NULL;
+}
+#endif
 
 /* InitTM - returns a newly created opaque type.  */
 
@@ -141,7 +147,7 @@ EXPORT(KillTM) (struct tm *tv)
 /* gettimeofday - calls gettimeofday(2) with the same parameters, tv,
    and, tz.  It returns 0 on success.  */
 
-#if defined(HAVE_STRUCT_TIMEZONE) && defined(HAVE_GETTIMEOFDAY)
+#if defined(HAVE_STRUCT_TM_TM_ZONE) && defined(HAVE_GETTIMEOFDAY)
 extern "C" int
 EXPORT(gettimeofday) (void *tv, struct timezone *tz)
 {
@@ -158,7 +164,7 @@ EXPORT(gettimeofday) (void *tv, void *tz)
 /* settimeofday - calls settimeofday(2) with the same parameters, tv,
    and, tz.  It returns 0 on success.  */
 
-#if defined(HAVE_STRUCT_TIMEZONE) && defined(HAVE_SETTIMEOFDAY)
+#if defined(HAVE_STRUCT_TM_TM_ZONE) && defined(HAVE_SETTIMEOFDAY)
 extern "C" int
 EXPORT(settimeofday) (void *tv, struct timezone *tz)
 {
@@ -175,7 +181,7 @@ EXPORT(settimeofday) (void *tv, void *tz)
 /* wraptime_GetFractions - returns the tv_usec field inside the
    timeval structure.  */
 
-#if defined(HAVE_STRUCT_TIMEVAL)
+#if defined(WE_HAVE_STRUCT_TIMEVAL_TV_USEC)
 extern "C" unsigned int
 EXPORT(GetFractions) (struct timeval *tv)
 {
@@ -194,7 +200,7 @@ EXPORT(GetFractions) (void *tv)
    this procedure function expects, timeval, as its first parameter
    and not a time_t (as expected by the posix equivalent).  */
 
-#if defined(HAVE_STRUCT_TIMEVAL)
+#if defined(WE_HAVE_STRUCT_TIMEVAL_TV_SEC)
 extern "C" struct tm *
 EXPORT(localtime_r) (struct timeval *tv, struct tm *m)
 {
@@ -210,7 +216,7 @@ EXPORT(localtime_r) (void *tv, struct tm *m)
 
 /* wraptime_GetYear - returns the year from the structure, m.  */
 
-#if defined(HAVE_STRUCT_TM)
+#if defined(WE_HAVE_STRUCT_TM_YEAR)
 extern "C" unsigned int
 EXPORT(GetYear) (struct tm *m)
 {
@@ -226,7 +232,7 @@ EXPORT(GetYear) (void *m)
 
 /* wraptime_GetMonth - returns the month from the structure, m.  */
 
-#if defined(HAVE_STRUCT_TM)
+#if defined(WE_HAVE_STRUCT_TM_MON)
 extern "C" unsigned int
 EXPORT(GetMonth) (struct tm *m)
 {
@@ -243,7 +249,7 @@ EXPORT(GetMonth) (void *m)
 /* wraptime_GetDay - returns the day of the month from the structure,
    m.  */
 
-#if defined(HAVE_STRUCT_TM)
+#if defined(WE_HAVE_STRUCT_TM_MDAY)
 extern "C" unsigned int
 EXPORT(GetDay) (struct tm *m)
 {
@@ -260,7 +266,7 @@ EXPORT(GetDay) (void *m)
 /* wraptime_GetHour - returns the hour of the day from the structure,
    m.  */
 
-#if defined(HAVE_STRUCT_TM)
+#if defined(WE_HAVE_STRUCT_TM_HOUR)
 extern "C" unsigned int
 EXPORT(GetHour) (struct tm *m)
 {
@@ -277,7 +283,7 @@ EXPORT(GetHour) (void *m)
 /* wraptime_GetMinute - returns the minute within the hour from the
    structure, m.  */
 
-#if defined(HAVE_STRUCT_TM)
+#if defined(WE_HAVE_STRUCT_TM_MIN)
 extern "C" unsigned int
 EXPORT(GetMinute) (struct tm *m)
 {
@@ -295,7 +301,7 @@ EXPORT(GetMinute) (void *m)
    structure, m.  The return value will always be in the range 0..59.
    A leap minute of value 60 will be truncated to 59.  */
 
-#if defined(HAVE_STRUCT_TM)
+#if defined(WE_HAVE_STRUCT_TM_SEC)
 extern "C" unsigned int
 EXPORT(GetSecond) (struct tm *m)
 {
@@ -314,7 +320,7 @@ EXPORT(GetSecond) (void *m)
 
 /* wraptime_GetSummerTime - returns true if summer time is in effect.  */
 
-#if defined(HAVE_STRUCT_TIMEZONE)
+#if defined(HAVE_STRUCT_TM_TM_ZONE)
 extern "C" bool
 EXPORT(GetSummerTime) (struct timezone *tz)
 {
@@ -330,7 +336,7 @@ EXPORT(GetSummerTime) (void *tz)
 
 /* wraptime_GetDST - returns the number of minutes west of GMT.  */
 
-#if defined(HAVE_STRUCT_TIMEZONE)
+#if defined(HAVE_STRUCT_TM_TM_ZONE)
 extern "C" int
 EXPORT(GetDST) (struct timezone *tz)
 {
@@ -350,7 +356,7 @@ EXPORT(GetDST) (void *tz)
 
 /* SetTimezone - set the timezone field inside timeval, tv.  */
 
-#if defined(HAVE_STRUCT_TIMEZONE)
+#if defined(HAVE_STRUCT_TM_TM_ZONE)
 extern "C" void
 EXPORT(SetTimezone) (struct timezone *tz, int zone, int minuteswest)
 {
@@ -367,22 +373,40 @@ EXPORT(SetTimezone) (void *tz, int zone, int minuteswest)
 /* SetTimeval - sets the fields in tm, t, with: second, minute, hour,
    day, month, year, fractions.  */
 
-#if defined(HAVE_STRUCT_TIMEVAL)
+#if defined(WE_HAVE_STRUCT_TM)
 extern "C" void
 EXPORT(SetTimeval) (struct tm *t, unsigned int second, unsigned int minute,
                    unsigned int hour, unsigned int day, unsigned int month,
                    unsigned int year, unsigned int yday, unsigned int wday,
                    unsigned int isdst)
 {
+#if defined(WE_HAVE_STRUCT_TM_SEC)
   t->tm_sec = second;
+#endif
+#if defined(WE_HAVE_STRUCT_TM_MIN)
   t->tm_min = minute;
+#endif
+#if defined(WE_HAVE_STRUCT_TM_HOUR)
   t->tm_hour = hour;
+#endif
+#if defined(WE_HAVE_STRUCT_TM_MDAY)
   t->tm_mday = day;
+#endif
+#if defined(WE_HAVE_STRUCT_TM_MON)
   t->tm_mon = month;
+#endif
+#if defined(WE_HAVE_STRUCT_TM_YEAR)
   t->tm_year = year;
+#endif
+#if defined(WE_HAVE_STRUCT_TM_YDAY)
   t->tm_yday = yday;
+#endif
+#if defined(WE_HAVE_STRUCT_TM_WDAY)
   t->tm_wday = wday;
+#endif
+#if defined(WE_HAVE_STRUCT_TM_ISDST)
   t->tm_isdst = isdst;
+#endif
 }
 #else
 extern "C" void

Reply via email to