diff --git a/lib/Makefile.am b/lib/Makefile.am index b1fa573a2..e09524b30 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -21,7 +21,7 @@ # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. -# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=tools --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files --no-libtool --no-vc-files argp error mkstemp progname +# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=tools --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files --no-libtool --no-vc-files argp error gethrxtime mkstemp progname AUTOMAKE_OPTIONS = 1.5 gnits @@ -215,6 +215,15 @@ EXTRA_libgnu_a_SOURCES += float.c itold.c ## end gnulib module float +## begin gnulib module gethrxtime + + +EXTRA_DIST += gethrxtime.c gethrxtime.h xtime.h + +EXTRA_libgnu_a_SOURCES += gethrxtime.c + +## end gnulib module gethrxtime + ## begin gnulib module getopt-posix BUILT_SOURCES += $(GETOPT_H) @@ -248,6 +257,12 @@ libgnu_a_SOURCES += gettext.h ## end gnulib module gettext-h +## begin gnulib module gettime + +libgnu_a_SOURCES += gettime.c + +## end gnulib module gettime + ## begin gnulib module gettimeofday @@ -1202,6 +1217,14 @@ EXTRA_DIST += time.in.h ## end gnulib module time +## begin gnulib module timespec + +libgnu_a_SOURCES += timespec.c + +EXTRA_DIST += timespec.h + +## end gnulib module timespec + ## begin gnulib module unistd BUILT_SOURCES += unistd.h diff --git a/lib/gethrxtime.c b/lib/gethrxtime.c new file mode 100644 index 000000000..6e0263d6f --- /dev/null +++ b/lib/gethrxtime.c @@ -0,0 +1,68 @@ +/* gethrxtime -- get high resolution real time + + Copyright (C) 2005-2007, 2009-2012 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#include + +#include "gethrxtime.h" + +#include +#include "timespec.h" + +/* Get the current time, as a count of the number of nanoseconds since + an arbitrary epoch (e.g., the system boot time). Prefer a + high-resolution clock that is not subject to resetting or + drifting. */ + +xtime_t +gethrxtime (void) +{ +#if HAVE_NANOUPTIME + { + struct timespec ts; + nanouptime (&ts); + return xtime_make (ts.tv_sec, ts.tv_nsec); + } +#else + +# if defined CLOCK_MONOTONIC && HAVE_CLOCK_GETTIME + { + struct timespec ts; + if (clock_gettime (CLOCK_MONOTONIC, &ts) == 0) + return xtime_make (ts.tv_sec, ts.tv_nsec); + } +# endif + +# if HAVE_MICROUPTIME + { + struct timeval tv; + microuptime (&tv); + return xtime_make (tv.tv_sec, 1000 * tv.tv_usec); + } + +# else + /* No monotonically increasing clocks are available; fall back on a + clock that might jump backwards, since it's the best we can do. */ + { + struct timespec ts; + gettime (&ts); + return xtime_make (ts.tv_sec, ts.tv_nsec); + } +# endif +#endif +} diff --git a/lib/gethrxtime.h b/lib/gethrxtime.h new file mode 100644 index 000000000..f09ef39c3 --- /dev/null +++ b/lib/gethrxtime.h @@ -0,0 +1,37 @@ +/* gethrxtime -- get high resolution real time + + Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#ifndef GETHRXTIME_H_ +# define GETHRXTIME_H_ 1 + +# include "xtime.h" + +/* Get the current time, as a count of the number of nanoseconds since + an arbitrary epoch (e.g., the system boot time). Prefer a + high-resolution clock that is not subject to resetting or + drifting. */ + +# if HAVE_ARITHMETIC_HRTIME_T && HAVE_DECL_GETHRTIME +# include +static inline xtime_t gethrxtime (void) { return gethrtime (); } +# else +xtime_t gethrxtime (void); +# endif + +#endif diff --git a/lib/gettime.c b/lib/gettime.c new file mode 100644 index 000000000..8075bfaf9 --- /dev/null +++ b/lib/gettime.c @@ -0,0 +1,48 @@ +/* gettime -- get the system clock + + Copyright (C) 2002, 2004-2007, 2009-2012 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#include + +#include "timespec.h" + +#include + +/* Get the system time into *TS. */ + +void +gettime (struct timespec *ts) +{ +#if HAVE_NANOTIME + nanotime (ts); +#else + +# if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME + if (clock_gettime (CLOCK_REALTIME, ts) == 0) + return; +# endif + + { + struct timeval tv; + gettimeofday (&tv, NULL); + ts->tv_sec = tv.tv_sec; + ts->tv_nsec = tv.tv_usec * 1000; + } + +#endif +} diff --git a/lib/timespec.c b/lib/timespec.c new file mode 100644 index 000000000..2b6098ed7 --- /dev/null +++ b/lib/timespec.c @@ -0,0 +1,3 @@ +#include +#define _GL_TIMESPEC_INLINE _GL_EXTERN_INLINE +#include "timespec.h" diff --git a/lib/timespec.h b/lib/timespec.h new file mode 100644 index 000000000..d0a2194f6 --- /dev/null +++ b/lib/timespec.h @@ -0,0 +1,92 @@ +/* timespec -- System time interface + + Copyright (C) 2000, 2002, 2004-2005, 2007, 2009-2012 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#if ! defined TIMESPEC_H +# define TIMESPEC_H + +# include + +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_TIMESPEC_INLINE +# define _GL_TIMESPEC_INLINE _GL_INLINE +#endif + +/* Return negative, zero, positive if A < B, A == B, A > B, respectively. + + For each time stamp T, this code assumes that either: + + * T.tv_nsec is in the range 0..999999999; or + * T.tv_sec corresponds to a valid leap second on a host that supports + leap seconds, and T.tv_nsec is in the range 1000000000..1999999999; or + * T.tv_sec is the minimum time_t value and T.tv_nsec is -1; or + T.tv_sec is the maximum time_t value and T.tv_nsec is 2000000000. + This allows for special struct timespec values that are less or + greater than all possible valid time stamps. + + In all these cases, it is safe to subtract two tv_nsec values and + convert the result to integer without worrying about overflow on + any platform of interest to the GNU project, since all such + platforms have 32-bit int or wider. + + Replacing "(int) (a.tv_nsec - b.tv_nsec)" with something like + "a.tv_nsec < b.tv_nsec ? -1 : a.tv_nsec > b.tv_nsec" would cause + this function to work in some cases where the above assumption is + violated, but not in all cases (e.g., a.tv_sec==1, a.tv_nsec==-2, + b.tv_sec==0, b.tv_nsec==999999999) and is arguably not worth the + extra instructions. Using a subtraction has the advantage of + detecting some invalid cases on platforms that detect integer + overflow. + + The (int) cast avoids a gcc -Wconversion warning. */ + +_GL_TIMESPEC_INLINE int +timespec_cmp (struct timespec a, struct timespec b) +{ + return (a.tv_sec < b.tv_sec ? -1 + : a.tv_sec > b.tv_sec ? 1 + : (int) (a.tv_nsec - b.tv_nsec)); +} + +/* Return -1, 0, 1, depending on the sign of A. A.tv_nsec must be + nonnegative. */ +_GL_TIMESPEC_INLINE int +timespec_sign (struct timespec a) +{ + return a.tv_sec < 0 ? -1 : a.tv_sec || a.tv_nsec; +} + +struct timespec timespec_add (struct timespec, struct timespec) + _GL_ATTRIBUTE_CONST; +struct timespec timespec_sub (struct timespec, struct timespec) + _GL_ATTRIBUTE_CONST; +struct timespec dtotimespec (double) + _GL_ATTRIBUTE_CONST; + +/* Return an approximation to A, of type 'double'. */ +_GL_TIMESPEC_INLINE double +timespectod (struct timespec a) +{ + return a.tv_sec + a.tv_nsec / 1e9; +} + +void gettime (struct timespec *); +int settime (struct timespec const *); + +_GL_INLINE_HEADER_END + +#endif diff --git a/lib/xtime.h b/lib/xtime.h new file mode 100644 index 000000000..adab518b1 --- /dev/null +++ b/lib/xtime.h @@ -0,0 +1,86 @@ +/* xtime -- extended-resolution integer time stamps + + Copyright (C) 2005-2006, 2009-2012 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#ifndef XTIME_H_ +# define XTIME_H_ 1 + +/* xtime_t is a signed type used for time stamps. It is an integer + type that is a count of nanoseconds -- except for obsolescent hosts + without sufficiently-wide integers, where it is a count of + seconds. */ +# if HAVE_LONG_LONG_INT +typedef long long int xtime_t; +# define XTIME_PRECISION 1000000000 +# else +# include +typedef long int xtime_t; +# if LONG_MAX >> 31 >> 31 == 0 +# define XTIME_PRECISION 1 +# else +# define XTIME_PRECISION 1000000000 +# endif +# endif + +/* Return an extended time value that contains S seconds and NS + nanoseconds, without any overflow checking. */ +static inline xtime_t +xtime_make (xtime_t s, long int ns) +{ + if (XTIME_PRECISION == 1) + return s; + else + return XTIME_PRECISION * s + ns; +} + +/* Return the number of seconds in T, which must be nonnegative. */ +static inline xtime_t +xtime_nonnegative_sec (xtime_t t) +{ + return t / XTIME_PRECISION; +} + +/* Return the number of seconds in T. */ +static inline xtime_t +xtime_sec (xtime_t t) +{ + return (XTIME_PRECISION == 1 + ? t + : t < 0 + ? (t + XTIME_PRECISION - 1) / XTIME_PRECISION - 1 + : xtime_nonnegative_sec (t)); +} + +/* Return the number of nanoseconds in T, which must be nonnegative. */ +static inline long int +xtime_nonnegative_nsec (xtime_t t) +{ + return t % XTIME_PRECISION; +} + +/* Return the number of nanoseconds in T. */ +static inline long int +xtime_nsec (xtime_t t) +{ + long int ns = t % XTIME_PRECISION; + if (ns < 0) + ns += XTIME_PRECISION; + return ns; +} + +#endif diff --git a/m4/clock_time.m4 b/m4/clock_time.m4 new file mode 100644 index 000000000..0bec0ef86 --- /dev/null +++ b/m4/clock_time.m4 @@ -0,0 +1,31 @@ +# clock_time.m4 serial 10 +dnl Copyright (C) 2002-2006, 2009-2012 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. + +# Check for clock_gettime and clock_settime, and set LIB_CLOCK_GETTIME. +# For a program named, say foo, you should add a line like the following +# in the corresponding Makefile.am file: +# foo_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) + +AC_DEFUN([gl_CLOCK_TIME], +[ + dnl Persuade glibc and Solaris to declare these functions. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function. + # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4. + + # Save and restore LIBS so e.g., -lrt, isn't added to it. Otherwise, *all* + # programs in the package would end up linked with that potentially-shared + # library, inducing unnecessary run-time overhead. + LIB_CLOCK_GETTIME= + AC_SUBST([LIB_CLOCK_GETTIME]) + gl_saved_libs=$LIBS + AC_SEARCH_LIBS([clock_gettime], [rt posix4], + [test "$ac_cv_search_clock_gettime" = "none required" || + LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime]) + AC_CHECK_FUNCS([clock_gettime clock_settime]) + LIBS=$gl_saved_libs +]) diff --git a/m4/gethrxtime.m4 b/m4/gethrxtime.m4 new file mode 100644 index 000000000..6a54ee0f8 --- /dev/null +++ b/m4/gethrxtime.m4 @@ -0,0 +1,73 @@ +# gethrxtime.m4 serial 11 +dnl Copyright (C) 2005-2006, 2008-2012 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 Written by Paul Eggert. + +AC_DEFUN([gl_GETHRXTIME], +[ + AC_REQUIRE([gl_ARITHMETIC_HRTIME_T]) + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_REQUIRE([gl_XTIME]) + AC_CHECK_DECLS([gethrtime], [], [], [[#include ]]) + LIB_GETHRXTIME= + if test $ac_cv_have_decl_gethrtime = no \ + || test $gl_cv_arithmetic_hrtime_t = no; then + dnl Find libraries needed to link lib/gethrxtime.c. + AC_REQUIRE([gl_CLOCK_TIME]) + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_CHECK_FUNCS_ONCE([nanouptime]) + if test $ac_cv_func_nanouptime != yes; then + AC_CACHE_CHECK([whether CLOCK_MONOTONIC or CLOCK_REALTIME is defined], + [gl_cv_have_clock_gettime_macro], + [AC_EGREP_CPP([have_clock_gettime_macro], + [ +# include +# if defined CLOCK_MONOTONIC || defined CLOCK_REALTIME + have_clock_gettime_macro +# endif + ], + [gl_cv_have_clock_gettime_macro=yes], + [gl_cv_have_clock_gettime_macro=no])]) + if test $gl_cv_have_clock_gettime_macro = yes; then + LIB_GETHRXTIME=$LIB_CLOCK_GETTIME + fi + fi + fi + AC_SUBST([LIB_GETHRXTIME]) +]) + +# Test whether hrtime_t is an arithmetic type. +# It is not arithmetic in older Solaris c89 (which insists on +# not having a long long int type). +AC_DEFUN([gl_ARITHMETIC_HRTIME_T], +[ + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_CACHE_CHECK([for arithmetic hrtime_t], [gl_cv_arithmetic_hrtime_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include ]], + [[hrtime_t x = 0; return x/x;]])], + [gl_cv_arithmetic_hrtime_t=yes], + [gl_cv_arithmetic_hrtime_t=no])]) + if test $gl_cv_arithmetic_hrtime_t = yes; then + AC_DEFINE([HAVE_ARITHMETIC_HRTIME_T], [1], + [Define if you have an arithmetic hrtime_t type.]) + fi +]) + +# Prerequisites of lib/xtime.h. +AC_DEFUN([gl_XTIME], +[ + AC_REQUIRE([AC_C_INLINE]) + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + : +]) + +# Prerequisites of lib/gethrxtime.c. +AC_DEFUN([gl_PREREQ_GETHRXTIME], +[ + AC_CHECK_FUNCS_ONCE([microuptime]) + : +]) diff --git a/m4/gettime.m4 b/m4/gettime.m4 new file mode 100644 index 000000000..7d03d1253 --- /dev/null +++ b/m4/gettime.m4 @@ -0,0 +1,13 @@ +# gettime.m4 serial 8 +dnl Copyright (C) 2002, 2004-2006, 2009-2012 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. + +AC_DEFUN([gl_GETTIME], +[ + dnl Prerequisites of lib/gettime.c. + AC_REQUIRE([gl_CLOCK_TIME]) + AC_REQUIRE([gl_TIMESPEC]) + AC_CHECK_FUNCS_ONCE([gettimeofday nanotime]) +]) diff --git a/m4/gnulib-cache.m4 b/m4/gnulib-cache.m4 index a812b31a7..2e58988bd 100644 --- a/m4/gnulib-cache.m4 +++ b/m4/gnulib-cache.m4 @@ -27,7 +27,7 @@ # Specification in the form of a command-line invocation: -# gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=tools --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files --no-libtool --no-vc-files argp error mkstemp progname +# gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=tools --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files --no-libtool --no-vc-files argp error gethrxtime mkstemp progname # Specification in the form of a few gnulib-tool.m4 macro invocations: gl_LOCAL_DIR([]) @@ -36,6 +36,7 @@ gl_MODULES([ --no-vc-files argp error + gethrxtime mkstemp progname ]) diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4 index 2f902d710..ca008da41 100644 --- a/m4/gnulib-comp.m4 +++ b/m4/gnulib-comp.m4 @@ -41,6 +41,7 @@ AC_DEFUN([gl_EARLY], # Code from module alloca: # Code from module alloca-opt: # Code from module argp: + # Code from module clock-time: # Code from module dirname-lgpl: # Code from module dosname: # Code from module double-slash-root: @@ -51,9 +52,11 @@ AC_DEFUN([gl_EARLY], # Code from module extern-inline: # Code from module fcntl-h: # Code from module float: + # Code from module gethrxtime: # Code from module getopt-gnu: # Code from module getopt-posix: # Code from module gettext-h: + # Code from module gettime: # Code from module gettimeofday: # Code from module include_next: # Code from module intprops: @@ -100,6 +103,7 @@ AC_DEFUN([gl_EARLY], # Code from module sysexits: # Code from module tempname: # Code from module time: + # Code from module timespec: # Code from module unistd: # Code from module vasnprintf: # Code from module verify: @@ -129,6 +133,7 @@ AC_DEFUN([gl_INIT], m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=argp_error:2:c-format]) AM_][XGETTEXT_OPTION([--flag=argp_failure:4:c-format])]) + gl_CLOCK_TIME gl_DIRNAME_LGPL gl_DOUBLE_SLASH_ROOT gl_HEADER_ERRNO_H @@ -149,6 +154,11 @@ AC_DEFUN([gl_INIT], if test $REPLACE_ITOLD = 1; then AC_LIBOBJ([itold]) fi + gl_GETHRXTIME + if test $ac_cv_have_decl_gethrtime = no || test $gl_cv_arithmetic_hrtime_t = no; then + AC_LIBOBJ([gethrxtime]) + gl_PREREQ_GETHRXTIME + fi gl_FUNC_GETOPT_GNU if test $REPLACE_GETOPT = 1; then AC_LIBOBJ([getopt]) @@ -170,6 +180,7 @@ AC_DEFUN([gl_INIT], AC_SUBST([GNULIB_GL_UNISTD_H_GETOPT]) AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) + gl_GETTIME gl_FUNC_GETTIMEOFDAY if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then AC_LIBOBJ([gettimeofday]) @@ -297,6 +308,7 @@ AC_DEFUN([gl_INIT], gl_SYSEXITS gl_FUNC_GEN_TEMPNAME gl_HEADER_TIME_H + gl_TIMESPEC gl_UNISTD_H gl_FUNC_VASNPRINTF gl_FUNC_VSNPRINTF @@ -474,11 +486,14 @@ AC_DEFUN([gl_FILE_LIST], [ lib/float+.h lib/float.c lib/float.in.h + lib/gethrxtime.c + lib/gethrxtime.h lib/getopt.c lib/getopt.in.h lib/getopt1.c lib/getopt_int.h lib/gettext.h + lib/gettime.c lib/gettimeofday.c lib/intprops.h lib/itold.c @@ -529,6 +544,8 @@ AC_DEFUN([gl_FILE_LIST], [ lib/tempname.c lib/tempname.h lib/time.in.h + lib/timespec.c + lib/timespec.h lib/unistd.in.h lib/vasnprintf.c lib/vasnprintf.h @@ -537,9 +554,11 @@ AC_DEFUN([gl_FILE_LIST], [ lib/wchar.in.h lib/xsize.c lib/xsize.h + lib/xtime.h m4/00gnulib.m4 m4/alloca.m4 m4/argp.m4 + m4/clock_time.m4 m4/dirname.m4 m4/double-slash-root.m4 m4/errno_h.m4 @@ -550,7 +569,9 @@ AC_DEFUN([gl_FILE_LIST], [ m4/fcntl-o.m4 m4/fcntl_h.m4 m4/float_h.m4 + m4/gethrxtime.m4 m4/getopt.m4 + m4/gettime.m4 m4/gettimeofday.m4 m4/gnulib-common.m4 m4/include_next.m4 @@ -598,6 +619,7 @@ AC_DEFUN([gl_FILE_LIST], [ m4/sysexits.m4 m4/tempname.m4 m4/time_h.m4 + m4/timespec.m4 m4/unistd_h.m4 m4/vasnprintf.m4 m4/vsnprintf.m4 diff --git a/m4/timespec.m4 b/m4/timespec.m4 new file mode 100644 index 000000000..63c00e83c --- /dev/null +++ b/m4/timespec.m4 @@ -0,0 +1,11 @@ +#serial 15 + +# Copyright (C) 2000-2001, 2003-2007, 2009-2012 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl From Jim Meyering + +AC_DEFUN([gl_TIMESPEC], [:])