1# serial 23 2 3# Copyright (C) 1997-2001, 2003-2011 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 9dnl From Jim Meyering. 10 11AC_DEFUN([gl_FUNC_LSTAT], 12[ 13 AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) 14 dnl If lstat does not exist, the replacement <sys/stat.h> does 15 dnl "#define lstat stat", and lstat.c is a no-op. 16 AC_CHECK_FUNCS_ONCE([lstat]) 17 if test $ac_cv_func_lstat = yes; then 18 AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) 19 if test $gl_cv_func_lstat_dereferences_slashed_symlink = no; then 20 REPLACE_LSTAT=1 21 fi 22 else 23 HAVE_LSTAT=0 24 fi 25]) 26 27# Prerequisites of lib/lstat.c. 28AC_DEFUN([gl_PREREQ_LSTAT], 29[ 30 AC_REQUIRE([AC_C_INLINE]) 31 : 32]) 33 34AC_DEFUN([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK], 35[ 36 dnl We don't use AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK any more, because it 37 dnl is no longer maintained in Autoconf and because it invokes AC_LIBOBJ. 38 AC_CACHE_CHECK([whether lstat correctly handles trailing slash], 39 [gl_cv_func_lstat_dereferences_slashed_symlink], 40 [rm -f conftest.sym conftest.file 41 echo >conftest.file 42 if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then 43 AC_RUN_IFELSE( 44 [AC_LANG_PROGRAM( 45 [AC_INCLUDES_DEFAULT], 46 [[struct stat sbuf; 47 /* Linux will dereference the symlink and fail, as required by 48 POSIX. That is better in the sense that it means we will not 49 have to compile and use the lstat wrapper. */ 50 return lstat ("conftest.sym/", &sbuf) == 0; 51 ]])], 52 [gl_cv_func_lstat_dereferences_slashed_symlink=yes], 53 [gl_cv_func_lstat_dereferences_slashed_symlink=no], 54 [# When cross-compiling, be pessimistic so we will end up using the 55 # replacement version of lstat that checks for trailing slashes and 56 # calls lstat a second time when necessary. 57 gl_cv_func_lstat_dereferences_slashed_symlink=no 58 ]) 59 else 60 # If the 'ln -s' command failed, then we probably don't even 61 # have an lstat function. 62 gl_cv_func_lstat_dereferences_slashed_symlink=no 63 fi 64 rm -f conftest.sym conftest.file 65 ]) 66 test $gl_cv_func_lstat_dereferences_slashed_symlink = yes && 67 AC_DEFINE_UNQUOTED([LSTAT_FOLLOWS_SLASHED_SYMLINK], [1], 68 [Define to 1 if `lstat' dereferences a symlink specified 69 with a trailing slash.]) 70]) 71