[PATCH] gold: add a configure check for (struct stat)::st_mtim (that contains the nanosecond part of timestamp)
Mikolaj Zalewski
mikolajz@google.com
Fri Nov 6 14:50:00 GMT 2009
That way we can get the nanosecond part of the timestamp on systems
that support this field.
Mikołaj
2009-11-06 Mikolaj Zalewski <mikolaj@google.com>
* configure.ac: Check for (struct stat)::st_mtim
* fileread.cc (File_read::get_mtime): Use st_mtim if available.
* config.in: Regenerate.
* configure: Regenerate.
-------------- next part --------------
From 9594f7467a72948b2edf67f9917f68c4b99aa970 Mon Sep 17 00:00:00 2001
From: Mikolaj Zalewski <mikolajz@puchatek.dom>
Date: Fri, 6 Nov 2009 15:36:21 +0100
Subject: [PATCH] Add a configure check for struct stat::st_mtim that contains the nanosecond part of timestamp
---
gold/config.in | 3 +++
gold/configure | 34 ++++++++++++++++++++++++++++++++++
gold/configure.ac | 12 ++++++++++++
gold/fileread.cc | 6 ++++--
4 files changed, 53 insertions(+), 2 deletions(-)
diff --git a/gold/config.in b/gold/config.in
index 93d7517..745510b 100644
--- a/gold/config.in
+++ b/gold/config.in
@@ -102,6 +102,9 @@
/* Define to 1 if you have the `readv' function. */
#undef HAVE_READV
+/* Define if struct stat has a field st_mtim with timespec for mtime */
+#undef HAVE_STAT_ST_MTIM
+
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
diff --git a/gold/configure b/gold/configure
index e4eb9fb..793af0d 100755
--- a/gold/configure
+++ b/gold/configure
@@ -6875,6 +6875,40 @@ $as_echo "#define HAVE_TEMPLATE_ATTRIBUTES 1" >>confdefs.h
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct stat::st_mtim." >&5
+$as_echo_n "checking for struct stat::st_mtim.... " >&6; }
+if test "${gold_cv_stat_st_mtim+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/stat.h>
+long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ gold_cv_stat_st_mtim=yes
+else
+ gold_cv_stat_st_mtim=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gold_cv_stat_st_mtim" >&5
+$as_echo "$gold_cv_stat_st_mtim" >&6; }
+if test "$gold_cv_stat_st_mtim" = "yes"; then
+
+$as_echo "#define HAVE_STAT_ST_MTIM 1" >>confdefs.h
+
+fi
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
diff --git a/gold/configure.ac b/gold/configure.ac
index 85e23f9..4307732 100644
--- a/gold/configure.ac
+++ b/gold/configure.ac
@@ -370,6 +370,18 @@ if test "$gold_cv_template_attribute" = "yes"; then
[Define if attributes work on C++ templates])
fi
+dnl Check if the system has struct stat::st_mtim.
+AC_CACHE_CHECK([for struct stat::st_mtim.],
+[gold_cv_stat_st_mtim],
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/stat.h>
+long bar() { struct stat s; return (long)(s.st_mtim.tv_sec + s.st_mtim.tv_sec);}
+]])], [gold_cv_stat_st_mtim=yes], [gold_cv_stat_st_mtim=no])])
+if test "$gold_cv_stat_st_mtim" = "yes"; then
+ AC_DEFINE(HAVE_STAT_ST_MTIM, 1,
+ [Define if struct stat has a field st_mtim with timespec for mtime])
+fi
+
AC_LANG_POP(C++)
AM_MAINTAINER_MODE
diff --git a/gold/fileread.cc b/gold/fileread.cc
index d183c57..ac30769 100644
--- a/gold/fileread.cc
+++ b/gold/fileread.cc
@@ -823,9 +823,11 @@ File_read::get_mtime()
if (fstat(this->descriptor_, &file_stat) < 0)
gold_fatal(_("%s: stat failed: %s"), this->name_.c_str(),
strerror(errno));
- // TODO: do a configure check if st_mtim is present and get the
- // nanoseconds part if it is.
+#ifdef HAVE_STAT_ST_MTIM
+ return Timespec(file_stat.st_mtim.tv_sec, file_stat.st_mtim.tv_nsec);
+#else
return Timespec(file_stat.st_mtime, 0);
+#endif
}
// Open the file.
--
1.4.4.2
More information about the Binutils
mailing list