Blame m4/lstat.m4

Packit Service c3aa71
# serial 26
Packit Service c3aa71
Packit Service c3aa71
# Copyright (C) 1997-2001, 2003-2015 Free Software Foundation, Inc.
Packit Service c3aa71
#
Packit Service c3aa71
# This file is free software; the Free Software Foundation
Packit Service c3aa71
# gives unlimited permission to copy and/or distribute it,
Packit Service c3aa71
# with or without modifications, as long as this notice is preserved.
Packit Service c3aa71
Packit Service c3aa71
dnl From Jim Meyering.
Packit Service c3aa71
Packit Service c3aa71
AC_DEFUN([gl_FUNC_LSTAT],
Packit Service c3aa71
[
Packit Service c3aa71
  AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
Packit Service c3aa71
  dnl If lstat does not exist, the replacement <sys/stat.h> does
Packit Service c3aa71
  dnl "#define lstat stat", and lstat.c is a no-op.
Packit Service c3aa71
  AC_CHECK_FUNCS_ONCE([lstat])
Packit Service c3aa71
  if test $ac_cv_func_lstat = yes; then
Packit Service c3aa71
    AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])
Packit Service c3aa71
    case "$gl_cv_func_lstat_dereferences_slashed_symlink" in
Packit Service c3aa71
      *no)
Packit Service c3aa71
        REPLACE_LSTAT=1
Packit Service c3aa71
        ;;
Packit Service c3aa71
    esac
Packit Service c3aa71
  else
Packit Service c3aa71
    HAVE_LSTAT=0
Packit Service c3aa71
  fi
Packit Service c3aa71
])
Packit Service c3aa71
Packit Service c3aa71
# Prerequisites of lib/lstat.c.
Packit Service c3aa71
AC_DEFUN([gl_PREREQ_LSTAT], [:])
Packit Service c3aa71
Packit Service c3aa71
AC_DEFUN([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK],
Packit Service c3aa71
[
Packit Service c3aa71
  dnl We don't use AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK any more, because it
Packit Service c3aa71
  dnl is no longer maintained in Autoconf and because it invokes AC_LIBOBJ.
Packit Service c3aa71
  AC_CACHE_CHECK([whether lstat correctly handles trailing slash],
Packit Service c3aa71
    [gl_cv_func_lstat_dereferences_slashed_symlink],
Packit Service c3aa71
    [rm -f conftest.sym conftest.file
Packit Service c3aa71
     echo >conftest.file
Packit Service c3aa71
     if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then
Packit Service c3aa71
       AC_RUN_IFELSE(
Packit Service c3aa71
         [AC_LANG_PROGRAM(
Packit Service c3aa71
            [AC_INCLUDES_DEFAULT],
Packit Service c3aa71
            [[struct stat sbuf;
Packit Service c3aa71
              /* Linux will dereference the symlink and fail, as required by
Packit Service c3aa71
                 POSIX.  That is better in the sense that it means we will not
Packit Service c3aa71
                 have to compile and use the lstat wrapper.  */
Packit Service c3aa71
              return lstat ("conftest.sym/", &sbuf) == 0;
Packit Service c3aa71
            ]])],
Packit Service c3aa71
         [gl_cv_func_lstat_dereferences_slashed_symlink=yes],
Packit Service c3aa71
         [gl_cv_func_lstat_dereferences_slashed_symlink=no],
Packit Service c3aa71
         [case "$host_os" in
Packit Service c3aa71
                    # Guess yes on glibc systems.
Packit Service c3aa71
            *-gnu*) gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;;
Packit Service c3aa71
                    # If we don't know, assume the worst.
Packit Service c3aa71
            *)      gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;;
Packit Service c3aa71
          esac
Packit Service c3aa71
         ])
Packit Service c3aa71
     else
Packit Service c3aa71
       # If the 'ln -s' command failed, then we probably don't even
Packit Service c3aa71
       # have an lstat function.
Packit Service c3aa71
       gl_cv_func_lstat_dereferences_slashed_symlink="guessing no"
Packit Service c3aa71
     fi
Packit Service c3aa71
     rm -f conftest.sym conftest.file
Packit Service c3aa71
    ])
Packit Service c3aa71
  case "$gl_cv_func_lstat_dereferences_slashed_symlink" in
Packit Service c3aa71
    *yes)
Packit Service c3aa71
      AC_DEFINE_UNQUOTED([LSTAT_FOLLOWS_SLASHED_SYMLINK], [1],
Packit Service c3aa71
        [Define to 1 if 'lstat' dereferences a symlink specified
Packit Service c3aa71
         with a trailing slash.])
Packit Service c3aa71
      ;;
Packit Service c3aa71
  esac
Packit Service c3aa71
])