Blame m4/lstat.m4

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