1# serial 10 2# See if we need to provide symlinkat replacement. 3 4dnl Copyright (C) 2009-2021 Free Software Foundation, Inc. 5dnl This file is free software; the Free Software Foundation 6dnl gives unlimited permission to copy and/or distribute it, 7dnl with or without modifications, as long as this notice is preserved. 8 9# Written by Eric Blake. 10 11AC_DEFUN([gl_FUNC_SYMLINKAT], 12[ 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 56]) 57