Home | History | Annotate | Line # | Download | only in m4
readlink.m4 revision 1.2
      1 # readlink.m4 serial 15
      2 dnl Copyright (C) 2003, 2007, 2009-2020 Free Software Foundation, Inc.
      3 dnl This file is free software; the Free Software Foundation
      4 dnl gives unlimited permission to copy and/or distribute it,
      5 dnl with or without modifications, as long as this notice is preserved.
      6 
      7 AC_DEFUN([gl_FUNC_READLINK],
      8 [
      9   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
     10   AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
     11   AC_CHECK_FUNCS_ONCE([readlink])
     12   if test $ac_cv_func_readlink = no; then
     13     HAVE_READLINK=0
     14   else
     15     AC_CACHE_CHECK([whether readlink signature is correct],
     16       [gl_cv_decl_readlink_works],
     17       [AC_COMPILE_IFELSE(
     18          [AC_LANG_PROGRAM(
     19            [[#include <unistd.h>
     20       /* Cause compilation failure if original declaration has wrong type.  */
     21       ssize_t readlink (const char *, char *, size_t);]])],
     22          [gl_cv_decl_readlink_works=yes], [gl_cv_decl_readlink_works=no])])
     23     dnl Solaris 9 ignores trailing slash.
     24     dnl FreeBSD 7.2 dereferences only one level of links with trailing slash.
     25     AC_CACHE_CHECK([whether readlink handles trailing slash correctly],
     26       [gl_cv_func_readlink_works],
     27       [# We have readlink, so assume ln -s works.
     28        ln -s conftest.no-such conftest.link
     29        ln -s conftest.link conftest.lnk2
     30        AC_RUN_IFELSE(
     31          [AC_LANG_PROGRAM(
     32            [[#include <unistd.h>
     33 ]], [[char buf[20];
     34       return readlink ("conftest.lnk2/", buf, sizeof buf) != -1;]])],
     35          [gl_cv_func_readlink_works=yes], [gl_cv_func_readlink_works=no],
     36          [case "$host_os" in
     37                              # Guess yes on Linux systems.
     38             linux-* | linux) gl_cv_func_readlink_works="guessing yes" ;;
     39                              # Guess yes on glibc systems.
     40             *-gnu* | gnu*)   gl_cv_func_readlink_works="guessing yes" ;;
     41                              # Guess yes on bsd systems.
     42             *bsd*)           gl_cv_func_readlink_works="guessing yes" ;;
     43                              # If we don't know, obey --enable-cross-guesses.
     44             *)               gl_cv_func_readlink_works="$gl_cross_guess_normal" ;;
     45           esac
     46          ])
     47       rm -f conftest.link conftest.lnk2])
     48     case "$gl_cv_func_readlink_works" in
     49       *yes)
     50         if test "$gl_cv_decl_readlink_works" != yes; then
     51           REPLACE_READLINK=1
     52         fi
     53         ;;
     54       *)
     55         AC_DEFINE([READLINK_TRAILING_SLASH_BUG], [1], [Define to 1 if readlink
     56           fails to recognize a trailing slash.])
     57         REPLACE_READLINK=1
     58         ;;
     59     esac
     60   fi
     61 ])
     62 
     63 # Like gl_FUNC_READLINK, except prepare for separate compilation
     64 # (no REPLACE_READLINK, no AC_LIBOBJ).
     65 AC_DEFUN([gl_FUNC_READLINK_SEPARATE],
     66 [
     67   AC_CHECK_FUNCS_ONCE([readlink])
     68   gl_PREREQ_READLINK
     69 ])
     70 
     71 # Prerequisites of lib/readlink.c.
     72 AC_DEFUN([gl_PREREQ_READLINK],
     73 [
     74   :
     75 ])
     76