readlink.m4 revision 1.3
1# readlink.m4 serial 16 2dnl Copyright (C) 2003, 2007, 2009-2022 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_trailing_slash], 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_trailing_slash=yes], 36 [gl_cv_func_readlink_trailing_slash=no], 37 [case "$host_os" in 38 # Guess yes on Linux or glibc systems. 39 linux-* | linux | *-gnu* | gnu*) 40 gl_cv_func_readlink_trailing_slash="guessing yes" ;; 41 # Guess no on AIX or HP-UX. 42 aix* | hpux*) 43 gl_cv_func_readlink_trailing_slash="guessing no" ;; 44 # If we don't know, obey --enable-cross-guesses. 45 *) 46 gl_cv_func_readlink_trailing_slash="$gl_cross_guess_normal" ;; 47 esac 48 ]) 49 rm -f conftest.link conftest.lnk2]) 50 case "$gl_cv_func_readlink_trailing_slash" in 51 *yes) 52 if test "$gl_cv_decl_readlink_works" != yes; then 53 REPLACE_READLINK=1 54 fi 55 ;; 56 *) 57 AC_DEFINE([READLINK_TRAILING_SLASH_BUG], [1], [Define to 1 if readlink 58 fails to recognize a trailing slash.]) 59 REPLACE_READLINK=1 60 ;; 61 esac 62 63 AC_CACHE_CHECK([whether readlink truncates results correctly], 64 [gl_cv_func_readlink_truncate], 65 [# We have readlink, so assume ln -s works. 66 ln -s ab conftest.link 67 AC_RUN_IFELSE( 68 [AC_LANG_PROGRAM( 69 [[#include <unistd.h> 70]], [[char c; 71 return readlink ("conftest.link", &c, 1) != 1;]])], 72 [gl_cv_func_readlink_truncate=yes], 73 [gl_cv_func_readlink_truncate=no], 74 [case "$host_os" in 75 # Guess yes on Linux or glibc systems. 76 linux-* | linux | *-gnu* | gnu*) 77 gl_cv_func_readlink_truncate="guessing yes" ;; 78 # Guess no on AIX or HP-UX. 79 aix* | hpux*) 80 gl_cv_func_readlink_truncate="guessing no" ;; 81 # If we don't know, obey --enable-cross-guesses. 82 *) 83 gl_cv_func_readlink_truncate="$gl_cross_guess_normal" ;; 84 esac 85 ]) 86 rm -f conftest.link conftest.lnk2]) 87 case $gl_cv_func_readlink_truncate in 88 *yes) 89 if test "$gl_cv_decl_readlink_works" != yes; then 90 REPLACE_READLINK=1 91 fi 92 ;; 93 *) 94 AC_DEFINE([READLINK_TRUNCATE_BUG], [1], [Define to 1 if readlink 95 sets errno instead of truncating a too-long link.]) 96 REPLACE_READLINK=1 97 ;; 98 esac 99 fi 100]) 101 102# Like gl_FUNC_READLINK, except prepare for separate compilation 103# (no REPLACE_READLINK, no AC_LIBOBJ). 104AC_DEFUN([gl_FUNC_READLINK_SEPARATE], 105[ 106 AC_CHECK_FUNCS_ONCE([readlink]) 107 gl_PREREQ_READLINK 108]) 109 110# Prerequisites of lib/readlink.c. 111AC_DEFUN([gl_PREREQ_READLINK], 112[ 113 : 114]) 115