935f19a9a6e619ea42ad74bd3c508aa42d8594d3
[gnulib.git] / m4 / lstat-slash.m4
1 #serial 1
2
3 dnl From Jim Meyering.
4 dnl FIXME
5
6 AC_DEFUN(jm_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK,
7 [
8  AC_CACHE_CHECK(
9   [whether lstat dereferences a symlink specified with a trailing slash],
10   jm_cv_func_lstat_dereferences_slashed_symlink,
11   [
12    rm -f conftest.sym conftest.file
13    : > conftest.file
14    if ln -s conftest.file conftest.sym; then
15      AC_TRY_RUN([
16 #     include <sys/types.h>
17 #     include <sys/stat.h>
18
19       int
20       main ()
21       {
22         struct stat sbuf;
23         /* Linux will dereference the symlink and fail.
24            That is better in the sense that it means we will not
25            have to compile and use the lstat wrapper.  */
26         exit (lstat ("conftest.sym/", &sbuf) ? 0 : 1);
27       }
28       ],
29       jm_cv_func_lstat_dereferences_slashed_symlink=yes,
30       jm_cv_func_lstat_dereferences_slashed_symlink=no,
31       dnl When crosscompiling, be pessimistic so we will end up using the
32       dnl replacement version of lstat that checkes for trailing slashes
33       dnl and calls lstat a second time when necessary.
34       jm_cv_func_lstat_dereferences_slashed_symlink=no
35      )
36    else
37      jm_cv_func_lstat_dereferences_slashed_symlink=no
38    fi
39   ])
40
41   # FIXME: convert to 0 or 1.
42   AC_DEFINE_UNQUOTED(LSTAT_FOLLOWS_SLASHED_SYMLINK, FIXME,
43     [Define if lstat dereferences a symlink specified with a trailing slash])
44
45   if test $jm_cv_func_lstat_dereferences_slashed_symlink = no; then
46     AC_SUBST(LIBOBJS)
47 # FIXME: append to LIBOBJS only if it's not there already.
48     LIBOBJS="$LIBOBJS lstat.$ac_objext"
49     AC_DEFINE_UNQUOTED(LSTAT_FOLLOWS_SLASHED_SYMLINK, 1,
50       [Define if lstat dereferences a symlink specified with a trailing slash])
51   fi
52 ])