diff --git a/m4/lstat-slash.m4 b/m4/lstat-slash.m4 new file mode 100644 index 000000000..8f753dadf --- /dev/null +++ b/m4/lstat-slash.m4 @@ -0,0 +1,41 @@ +#serial 1 + +dnl From Jim Meyering. +dnl FIXME + +AC_DEFUN(jm_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK, +[ + AC_CACHE_CHECK( + [whether lstat dereferences a symlink specified with a trailing slash], + jm_cv_func_lstat_dereferences_slashed_symlink, + [ + rm -f conftest.sym conftest.file + : > conftest.file + if ln -s conftest.file conftest.sym; then + AC_TRY_RUN([ +# include +# include + + int + main () + { + struct stat sbuf; + exit (lstat ("conftest.sym/", &sbuf) ? 0 : 1); + } + ], + jm_cv_func_lstat_dereferences_slashed_symlink=yes, + jm_cv_func_lstat_dereferences_slashed_symlink=no, + dnl When crosscompiling, be pessimistic so we'll end up using the + dnl replacement version of lstat that checkes for trailing slashes + dnl and calls lstat a second time when necessary. + jm_cv_func_lstat_dereferences_slashed_symlink=no + ) + ]) + + if test $jm_cv_func_lstat_dereferences_slashed_symlink = yes; then + AC_SUBST(LIBOBJS) + LIBOBJS="$LIBOBJS lstat.$ac_objext" + AC_DEFINE_UNQUOTED(LSTAT_FOLLOWS_SLASHED_SYMLINK, 1, + [Define if lstat dereferences a symlink specified with a trailing slash]) + fi +])