1# readlink.m4 serial 15 2dnl Copyright (C) 2003, 2007, 2009-2020 Free Software Foundation, Inc. 3dnl This file is free software; the Free Software Foundation 4dnl gives unlimited permission to copy and/or distribute it, 5dnl with or without modifications, as long as this notice is preserved. 6 7AC_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 # If we don't know, obey --enable-cross-guesses. 42 *) gl_cv_func_readlink_works="$gl_cross_guess_normal" ;; 43 esac 44 ]) 45 rm -f conftest.link conftest.lnk2]) 46 case "$gl_cv_func_readlink_works" in 47 *yes) 48 if test "$gl_cv_decl_readlink_works" != yes; then 49 REPLACE_READLINK=1 50 fi 51 ;; 52 *) 53 AC_DEFINE([READLINK_TRAILING_SLASH_BUG], [1], [Define to 1 if readlink 54 fails to recognize a trailing slash.]) 55 REPLACE_READLINK=1 56 ;; 57 esac 58 fi 59]) 60 61# Like gl_FUNC_READLINK, except prepare for separate compilation 62# (no REPLACE_READLINK, no AC_LIBOBJ). 63AC_DEFUN([gl_FUNC_READLINK_SEPARATE], 64[ 65 AC_CHECK_FUNCS_ONCE([readlink]) 66 gl_PREREQ_READLINK 67]) 68 69# Prerequisites of lib/readlink.c. 70AC_DEFUN([gl_PREREQ_READLINK], 71[ 72 : 73]) 74