1# serial 11
2
3# Copyright (C) 2009-2015 Free Software Foundation, Inc.
4#
5# This file is free software; the Free Software Foundation
6# gives unlimited permission to copy and/or distribute it,
7# with or without modifications, as long as this notice is preserved.
8
9AC_DEFUN([gl_FUNC_STAT],
10[
11  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
12  AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
13  AC_CHECK_FUNCS_ONCE([lstat])
14  dnl mingw is the only known platform where stat(".") and stat("./") differ
15  AC_CACHE_CHECK([whether stat handles trailing slashes on directories],
16      [gl_cv_func_stat_dir_slash],
17      [AC_RUN_IFELSE(
18         [AC_LANG_PROGRAM(
19           [[#include <sys/stat.h>
20]], [[struct stat st; return stat (".", &st) != stat ("./", &st);]])],
21         [gl_cv_func_stat_dir_slash=yes], [gl_cv_func_stat_dir_slash=no],
22         [case $host_os in
23            mingw*) gl_cv_func_stat_dir_slash="guessing no";;
24            *) gl_cv_func_stat_dir_slash="guessing yes";;
25          esac])])
26  dnl AIX 7.1, Solaris 9, mingw64 mistakenly succeed on stat("file/").
27  dnl (For mingw, this is due to a broken stat() override in libmingwex.a.)
28  dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/").
29  AC_CACHE_CHECK([whether stat handles trailing slashes on files],
30      [gl_cv_func_stat_file_slash],
31      [touch conftest.tmp
32       # Assume that if we have lstat, we can also check symlinks.
33       if test $ac_cv_func_lstat = yes; then
34         ln -s conftest.tmp conftest.lnk
35       fi
36       AC_RUN_IFELSE(
37         [AC_LANG_PROGRAM(
38           [[#include <sys/stat.h>
39]], [[int result = 0;
40      struct stat st;
41      if (!stat ("conftest.tmp/", &st))
42        result |= 1;
43#if HAVE_LSTAT
44      if (!stat ("conftest.lnk/", &st))
45        result |= 2;
46#endif
47      return result;
48           ]])],
49         [gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no],
50         [case "$host_os" in
51                    # Guess yes on glibc systems.
52            *-gnu*) gl_cv_func_stat_file_slash="guessing yes" ;;
53                    # If we don't know, assume the worst.
54            *)      gl_cv_func_stat_file_slash="guessing no" ;;
55          esac
56         ])
57       rm -f conftest.tmp conftest.lnk])
58  case $gl_cv_func_stat_dir_slash in
59    *no) REPLACE_STAT=1
60      AC_DEFINE([REPLACE_FUNC_STAT_DIR], [1], [Define to 1 if stat needs
61        help when passed a directory name with a trailing slash]);;
62  esac
63  case $gl_cv_func_stat_file_slash in
64    *no) REPLACE_STAT=1
65      AC_DEFINE([REPLACE_FUNC_STAT_FILE], [1], [Define to 1 if stat needs
66        help when passed a file name with a trailing slash]);;
67  esac
68])
69
70# Prerequisites of lib/stat.c.
71AC_DEFUN([gl_PREREQ_STAT], [:])
72