Commit | Line | Data |
---|---|---|
3243fffc MW |
1 | # link.m4 serial 8 |
2 | dnl Copyright (C) 2009-2014 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_LINK], | |
8 | [ | |
9 | AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) | |
10 | AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles | |
11 | AC_CHECK_FUNCS_ONCE([link]) | |
12 | if test $ac_cv_func_link = no; then | |
13 | HAVE_LINK=0 | |
14 | else | |
15 | AC_CACHE_CHECK([whether link obeys POSIX], | |
16 | [gl_cv_func_link_works], | |
17 | [touch conftest.a | |
18 | # Assume that if we have lstat, we can also check symlinks. | |
19 | if test $ac_cv_func_lstat = yes; then | |
20 | ln -s conftest.a conftest.lnk | |
21 | fi | |
22 | AC_RUN_IFELSE( | |
23 | [AC_LANG_PROGRAM( | |
24 | [[#include <unistd.h> | |
25 | ]], | |
26 | [[int result = 0; | |
27 | if (!link ("conftest.a", "conftest.b/")) | |
28 | result |= 1; | |
29 | #if HAVE_LSTAT | |
30 | if (!link ("conftest.lnk/", "conftest.b")) | |
31 | result |= 2; | |
32 | if (rename ("conftest.a", "conftest.b")) | |
33 | result |= 4; | |
34 | if (!link ("conftest.b", "conftest.lnk")) | |
35 | result |= 8; | |
36 | #endif | |
37 | return result; | |
38 | ]])], | |
39 | [gl_cv_func_link_works=yes], [gl_cv_func_link_works=no], | |
40 | [case "$host_os" in | |
41 | # Guess yes on glibc systems. | |
42 | *-gnu*) gl_cv_func_link_works="guessing yes" ;; | |
43 | # If we don't know, assume the worst. | |
44 | *) gl_cv_func_link_works="guessing no" ;; | |
45 | esac | |
46 | ]) | |
47 | rm -f conftest.a conftest.b conftest.lnk]) | |
48 | case "$gl_cv_func_link_works" in | |
49 | *yes) ;; | |
50 | *) | |
51 | REPLACE_LINK=1 | |
52 | ;; | |
53 | esac | |
54 | fi | |
55 | ]) |