havelib: Fix for Solaris 11 OpenIndiana and Solaris 11 OmniOS.
[gnulib.git] / m4 / symlinkat.m4
blob71aa5784358ac5f530fea7d44dbb4f901c94ac5f
1 # serial 10
2 # See if we need to provide symlinkat replacement.
4 dnl Copyright (C) 2009-2020 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.
9 # Written by Eric Blake.
11 AC_DEFUN([gl_FUNC_SYMLINKAT],
13   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
14   AC_REQUIRE([gl_FUNC_OPENAT])
15   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
16   AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
17   AC_CHECK_FUNCS_ONCE([symlinkat])
18   if test $ac_cv_func_symlinkat = no; then
19     HAVE_SYMLINKAT=0
20   else
21     AC_CACHE_CHECK([whether symlinkat handles trailing slash correctly],
22       [gl_cv_func_symlinkat_works],
23       [AC_RUN_IFELSE(
24          [AC_LANG_PROGRAM(
25            [[#include <fcntl.h>
26              #include <unistd.h>
27            ]],
28            [[int result = 0;
29              if (!symlinkat ("a", AT_FDCWD, "conftest.link/"))
30                result |= 1;
31              if (symlinkat ("conftest.f", AT_FDCWD, "conftest.lnk2"))
32                result |= 2;
33              else if (!symlinkat ("a", AT_FDCWD, "conftest.lnk2/"))
34                result |= 4;
35              return result;
36            ]])],
37          [gl_cv_func_symlinkat_works=yes],
38          [gl_cv_func_symlinkat_works=no],
39          [case "$host_os" in
40                              # Guess yes on Linux systems.
41             linux-* | linux) gl_cv_func_symlinkat_works="guessing yes" ;;
42                              # Guess yes on glibc systems.
43             *-gnu* | gnu*)   gl_cv_func_symlinkat_works="guessing yes" ;;
44                              # If we don't know, obey --enable-cross-guesses.
45             *)               gl_cv_func_symlinkat_works="$gl_cross_guess_normal" ;;
46           esac
47          ])
48       rm -f conftest.f conftest.link conftest.lnk2])
49     case "$gl_cv_func_symlinkat_works" in
50       *yes) ;;
51       *)
52         REPLACE_SYMLINKAT=1
53         ;;
54     esac
55   fi