Blame m4/lstat.m4

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