* m4/linkat.m4 (gl_FUNC_LINKAT): linkat() is available on Yosemite but not usable because it doesn't support creating hardlinks to symlinks. Therefore add a generic test for this capability and replace with our emulation if needed. --- ChangeLog | 8 ++++++++ m4/linkat.m4 | 22 ++++++++++++++++++++++ 2 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/ChangeLog b/ChangeLog index 0d6c285..7676634 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2014-10-31 Pádraig Brady <p...@draigbrady.com> + + linkat: replace on OS X 10.10 + * m4/linkat.m4 (gl_FUNC_LINKAT): linkat() is available on Yosemite + but not usable because it doesn't support creating hardlinks + to symlinks. Therefore add a generic test for this capability + and replace with our emulation if needed. + 2014-10-30 Pádraig Brady <p...@draigbrady.com> mountlist: don't use libmount to decide on dummy/remote diff --git a/m4/linkat.m4 b/m4/linkat.m4 index 2da0e30..c9463b1 100644 --- a/m4/linkat.m4 +++ b/m4/linkat.m4 @@ -20,6 +20,25 @@ AC_DEFUN([gl_FUNC_LINKAT], if test $ac_cv_func_linkat = no; then HAVE_LINKAT=0 else + dnl OS X Yosemite has linkat() but it's not sufficient + dnl to our needs since it doesn't support creating + dnl hardlinks to symlinks. Therefore check for that + dnl capability before considering using the system version. + AC_CACHE_CHECK([whether linkat() can link symlinks], + [gl_cv_func_linkat_nofollow], + [rm -rf conftest.l1 conftest.l2 + ln -s target conftest.l1 + AC_RUN_IFELSE([AC_LANG_PROGRAM( + [[#include <fcntl.h> + #include <unistd.h> + ]], + [return linkat (AT_FDCWD, "conftest.l1", AT_FDCWD, + "conftest.l2", 0); + ])], + [gl_cv_func_linkat_nofollow=yes], + [gl_cv_func_linkat_nofollow=no]) + rm -rf conftest.l1 conftest.l2]) + AC_CACHE_CHECK([whether linkat(,AT_SYMLINK_FOLLOW) works], [gl_cv_func_linkat_follow], [rm -rf conftest.f1 conftest.f2 @@ -37,6 +56,7 @@ choke me [gl_cv_func_linkat_follow=yes], [gl_cv_func_linkat_follow="need runtime check"]) rm -rf conftest.f1 conftest.f2]) + AC_CACHE_CHECK([whether linkat handles trailing slash correctly], [gl_cv_func_linkat_slash], [rm -rf conftest.a conftest.b conftest.c conftest.d @@ -85,7 +105,9 @@ choke me *yes) gl_linkat_slash_bug=0 ;; *) gl_linkat_slash_bug=1 ;; esac + if test "$gl_cv_func_linkat_follow" != yes \ + || test "$gl_cv_func_linkat_nofollow" != yes \ || test $gl_linkat_slash_bug = 1; then REPLACE_LINKAT=1 AC_DEFINE_UNQUOTED([LINKAT_TRAILING_SLASH_BUG], [$gl_linkat_slash_bug], -- 1.7.7.6