1 | # readlink.m4 serial 16
|
---|
2 | dnl Copyright (C) 2003, 2007, 2009-2022 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 | ])
|
---|