Bump to m4 1.4.19
[platform/upstream/m4.git] / m4 / readlink.m4
1 # readlink.m4 serial 16
2 dnl Copyright (C) 2003, 2007, 2009-2021 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_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).
104 AC_DEFUN([gl_FUNC_READLINK_SEPARATE],
105 [
106   AC_CHECK_FUNCS_ONCE([readlink])
107   gl_PREREQ_READLINK
108 ])
109
110 # Prerequisites of lib/readlink.c.
111 AC_DEFUN([gl_PREREQ_READLINK],
112 [
113   :
114 ])