* configure.ac: Check for (struct stat)::st_mtim
authorIan Lance Taylor <ian@airs.com>
Fri, 6 Nov 2009 15:47:06 +0000 (15:47 +0000)
committerIan Lance Taylor <ian@airs.com>
Fri, 6 Nov 2009 15:47:06 +0000 (15:47 +0000)
* fileread.cc (File_read::get_mtime): Use st_mtim if available.
* config.in: Regenerate.
* configure: Regenerate.

gold/ChangeLog
gold/config.in
gold/configure
gold/configure.ac
gold/fileread.cc

index 63d12e4566939f8b6e2747ba82a49d4adb76cb27..c8210ba6e9215b02fcde4b3c38e7903342e9773c 100644 (file)
@@ -1,3 +1,10 @@
+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.
+
 2009-11-05  Ian Lance Taylor  <iant@google.com>
 
        PR 10910
index 93d7517caa72fd6de9036ed2309b3dc24b982efe..745510b081cc63a8475933fbda69a5c47ee261c9 100644 (file)
 /* 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
 
index e4eb9fb82a9dd4ea412a2d72d571eb1ac37ce293..793af0dc8dc20f2c2e1ddbc8035c3d39db08e20b 100755 (executable)
@@ -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'
index 85e23f9ce456c92fc78ceeae3dc3c34ab089aa27..4307732d560047ced5b927c74b89caa3889bef8b 100644 (file)
@@ -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
index d183c5785ed94a2125e558f4919b69e2676d9622..ac30769216eb83d0ed515283939708628c416200 100644 (file)
@@ -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.