-#serial 2
+# serial 4
-dnl From Jim Meyering.
-dnl Determine whether stat has the bug that it succeeds when given the
-dnl zero-length file name argument. The stat from SunOS4.1.4 and the Hurd
-dnl (as of 1998-11-01) do this.
-dnl
-dnl If it does, then define HAVE_STAT_EMPTY_STRING_BUG and arrange to
-dnl compile the wrapper function.
-dnl
+# Copyright (C) 2009, 2010 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.
-AC_DEFUN(jm_FUNC_STAT,
+AC_DEFUN([gl_FUNC_STAT],
[
- AC_CACHE_CHECK([whether stat accepts an empty string],
- jm_cv_func_stat_empty_string_bug,
- [AC_TRY_RUN([
-# include <sys/types.h>
-# include <sys/stat.h>
-
- int
- main ()
- {
- struct stat sbuf;
- exit (stat ("", &sbuf) ? 1 : 0);
- }
- ],
- jm_cv_func_stat_empty_string_bug=yes,
- jm_cv_func_stat_empty_string_bug=no,
- dnl When crosscompiling, assume stat is broken.
- jm_cv_func_stat_empty_string_bug=yes)
- ])
- if test $jm_cv_func_stat_empty_string_bug = yes; then
-
- LIBOBJS="$LIBOBJS stat.o"
-
- if test $jm_cv_func_stat_empty_string_bug = yes; then
- if test x = y; then
- # This code is deliberately never run via ./configure.
- # FIXME: this is a hack to make autoheader put the corresponding
- # HAVE_* undef for this symbol in config.h.in. This saves me the
- # trouble of having to maintain the #undef in acconfig.h manually.
- AC_CHECK_FUNCS(STAT_EMPTY_STRING_BUG)
- fi
- # Defining it this way (rather than via AC_DEFINE) short-circuits the
- # autoheader check -- autoheader doesn't know it's already been taken
- # care of by the hack above.
- ac_kludge=HAVE_STAT_EMPTY_STRING_BUG
- AC_DEFINE_UNQUOTED($ac_kludge)
- fi
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_REQUIRE([gl_AC_DOS])
+ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+ AC_CHECK_FUNCS_ONCE([lstat])
+ dnl mingw is the only known platform where stat(".") and stat("./") differ
+ AC_CACHE_CHECK([whether stat handles trailing slashes on directories],
+ [gl_cv_func_stat_dir_slash],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/stat.h>
+]], [[struct stat st; return stat (".", &st) != stat ("./", &st);]])],
+ [gl_cv_func_stat_dir_slash=yes], [gl_cv_func_stat_dir_slash=no],
+ [case $host_os in
+ mingw*) gl_cv_func_stat_dir_slash="guessing no";;
+ *) gl_cv_func_stat_dir_slash="guessing yes";;
+ esac])])
+ dnl Solaris 9 mistakenly succeeds on stat("file/")
+ dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/")
+ AC_CACHE_CHECK([whether stat handles trailing slashes on files],
+ [gl_cv_func_stat_file_slash],
+ [touch conftest.tmp
+ # Assume that if we have lstat, we can also check symlinks.
+ if test $ac_cv_func_lstat = yes; then
+ ln -s conftest.tmp conftest.lnk
+ fi
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/stat.h>
+]], [[struct stat st;
+ if (!stat ("conftest.tmp/", &st)) return 1;
+#if HAVE_LSTAT
+ if (!stat ("conftest.lnk/", &st)) return 2;
+#endif
+ ]])],
+ [gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no],
+ [gl_cv_func_stat_file_slash="guessing no"])
+ rm -f conftest.tmp conftest.lnk])
+ case $gl_cv_func_stat_dir_slash in
+ *no) REPLACE_STAT=1
+ AC_DEFINE([REPLACE_FUNC_STAT_DIR], [1], [Define to 1 if stat needs
+ help when passed a directory name with a trailing slash]);;
+ esac
+ case $gl_cv_func_stat_file_slash in
+ *no) REPLACE_STAT=1
+ AC_DEFINE([REPLACE_FUNC_STAT_FILE], [1], [Define to 1 if stat needs
+ help when passed a file name with a trailing slash]);;
+ esac
+ if test $REPLACE_STAT = 1; then
+ AC_LIBOBJ([stat])
+ dnl Prerequisites of lib/stat.c.
+ AC_REQUIRE([AC_C_INLINE])
fi
])