Fix gnulib to not replace gmtime() and localtime()
It cause issues when <ctime> latter undefine the gmtime/localtime macros to access the real function. * lib/Makefile.am, lib/time.in.h, m4/gettimeofday.m4, m4/time_h.m4: These changes are mostly based on the patch posted in http://permalink.gmane.org/gmane.comp.lib.gnulib.bugs/29229 but with the prototype of gmtime() and localtime() fixed.
This commit is contained in:
parent
96f32c73fb
commit
16b7206dd9
4 changed files with 51 additions and 4 deletions
|
|
@ -1450,9 +1450,13 @@ time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(
|
|||
-e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \
|
||||
-e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \
|
||||
-e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \
|
||||
-e 's|@''HAVE_LOCALTIME''@|$(HAVE_LOCALTIME)|g' \
|
||||
-e 's|@''HAVE_GMTIME''@|$(HAVE_GMTIME)|g' \
|
||||
-e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \
|
||||
-e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \
|
||||
-e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \
|
||||
-e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \
|
||||
-e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \
|
||||
-e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \
|
||||
-e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \
|
||||
-e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \
|
||||
|
|
|
|||
|
|
@ -187,6 +187,40 @@ _GL_CXXALIASWARN (gmtime_r);
|
|||
# endif
|
||||
# endif
|
||||
|
||||
/* Convert TIMER to RESULT, assuming local time and UTC respectively. See
|
||||
<http://www.opengroup.org/susv3xsh/localtime.html> and
|
||||
<http://www.opengroup.org/susv3xsh/gmtime.html>. */
|
||||
# if @REPLACE_LOCALTIME@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef localtime
|
||||
# define localtime rpl_localtime
|
||||
# endif
|
||||
_GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer)
|
||||
_GL_ARG_NONNULL ((1)));
|
||||
_GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer));
|
||||
# else
|
||||
# if ! @HAVE_LOCALTIME@
|
||||
_GL_FUNCDECL_SYS (localtime, struct tm *, (time_t const *__timer)
|
||||
_GL_ARG_NONNULL ((1)));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer));
|
||||
# endif
|
||||
# if @REPLACE_GMTIME@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
# undef gmtime
|
||||
# define gmtime rpl_gmtime
|
||||
# endif
|
||||
_GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer)
|
||||
_GL_ARG_NONNULL ((1)));
|
||||
_GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer));
|
||||
# else
|
||||
# if ! @HAVE_GMTIME@
|
||||
_GL_FUNCDECL_SYS (gmtime, struct tm *, (time_t const *__timer)
|
||||
_GL_ARG_NONNULL ((1)));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer));
|
||||
# endif
|
||||
|
||||
/* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store
|
||||
the resulting broken-down time into TM. See
|
||||
<http://www.opengroup.org/susv3xsh/strptime.html>. */
|
||||
|
|
|
|||
|
|
@ -127,10 +127,15 @@ AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER],
|
|||
])
|
||||
|
||||
AC_DEFUN([gl_GETTIMEOFDAY_REPLACE_LOCALTIME], [
|
||||
AC_DEFINE([gmtime], [rpl_gmtime],
|
||||
[Define to rpl_gmtime if the replacement function should be used.])
|
||||
AC_DEFINE([localtime], [rpl_localtime],
|
||||
[Define to rpl_localtime if the replacement function should be used.])
|
||||
AC_CHECK_FUNCS_ONCE([gmtime localtime])
|
||||
if test $ac_cv_func_gmtime != yes; then
|
||||
HAVE_GMTIME=0
|
||||
fi
|
||||
if test $ac_cv_func_localtime != yes; then
|
||||
HAVE_LOCALTIME=0
|
||||
fi
|
||||
REPLACE_GMTIME=1
|
||||
REPLACE_LOCALTIME=1
|
||||
])
|
||||
|
||||
# Prerequisites of lib/gettimeofday.c.
|
||||
|
|
|
|||
|
|
@ -96,12 +96,16 @@ AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS],
|
|||
GNULIB_TIME_R=0; AC_SUBST([GNULIB_TIME_R])
|
||||
dnl Assume proper GNU behavior unless another module says otherwise.
|
||||
HAVE_DECL_LOCALTIME_R=1; AC_SUBST([HAVE_DECL_LOCALTIME_R])
|
||||
HAVE_GMTIME=1; AC_SUBST([HAVE_GMTIME])
|
||||
HAVE_LOCALTIME=1; AC_SUBST([HAVE_LOCALTIME])
|
||||
HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP])
|
||||
HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME])
|
||||
HAVE_TIMEGM=1; AC_SUBST([HAVE_TIMEGM])
|
||||
dnl If another module says to replace or to not replace, do that.
|
||||
dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK;
|
||||
dnl this lets maintainers check for portability.
|
||||
REPLACE_GMTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_GMTIME])
|
||||
REPLACE_LOCALTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_LOCALTIME])
|
||||
REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; AC_SUBST([REPLACE_LOCALTIME_R])
|
||||
REPLACE_MKTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_MKTIME])
|
||||
REPLACE_NANOSLEEP=GNULIB_PORTCHECK; AC_SUBST([REPLACE_NANOSLEEP])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue