getline: Update regarding AIX.
[gnulib.git] / m4 / linkat.m4
1 # serial 2
2 # See if we need to provide linkat replacement.
3
4 dnl Copyright (C) 2009-2010 Free Software Foundation, Inc.
5 dnl This file is free software; the Free Software Foundation
6 dnl gives unlimited permission to copy and/or distribute it,
7 dnl with or without modifications, as long as this notice is preserved.
8
9 # Written by Eric Blake.
10
11 AC_DEFUN([gl_FUNC_LINKAT],
12 [
13   AC_REQUIRE([gl_FUNC_OPENAT])
14   AC_REQUIRE([gl_FUNC_LINK])
15   AC_REQUIRE([gl_FUNC_LINK_FOLLOWS_SYMLINK])
16   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
17   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
18   AC_CHECK_FUNCS_ONCE([linkat symlink])
19   AC_CHECK_HEADERS_ONCE([sys/param.h])
20   if test $ac_cv_func_linkat = no; then
21     HAVE_LINKAT=0
22     AC_LIBOBJ([linkat])
23     AC_LIBOBJ([at-func2])
24   else
25     AC_CACHE_CHECK([whether linkat(,AT_SYMLINK_FOLLOW) works],
26       [gl_cv_func_linkat_follow],
27       [rm -rf conftest.f1 conftest.f2
28        touch conftest.f1
29        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
30 #include <fcntl.h>
31 #include <unistd.h>
32 #ifdef __linux__
33 /* Linux added linkat in 2.6.16, but did not add AT_SYMLINK_FOLLOW
34    until 2.6.18.  Always replace linkat to support older kernels.  */
35 choke me
36 #endif
37 ]], [return linkat (AT_FDCWD, "conftest.f1", AT_FDCWD, "conftest.f2",
38                     AT_SYMLINK_FOLLOW);])],
39          [gl_cv_func_linkat_follow=yes],
40          [gl_cv_func_linkat_follow="need runtime check"])
41        rm -rf conftest.f1 conftest.f2])
42     if test "$gl_cv_func_linkat_follow" != yes; then
43       REPLACE_LINKAT=1
44       AC_LIBOBJ([linkat])
45     fi
46   fi
47 ])