On 28/04/15 12:45, Andreas Grünbacher wrote:
> 2015-04-26 20:06 GMT+02:00 Tom G. Christensen <t...@jupiterrise.com>:
>> On 26/04/15 18:22, Paul Eggert wrote:
>>>
>>> Thanks for reporting that.  I installed the attached patch, which should
>>> fix it.
>>
>>
>> Confirmed, thanks.
> 
> I would rather have gnulib define XATTR_NAME_POSIX_ACL_ACCESS and
> XATTR_NAME_POSIX_ACL_DEFAULT when the kernel headers don't provide
> them: Checking for richacls also requires getxattr, and the combined
> test doesn't help there at all.
> 
> I have updated my changes to include that:
> 
>   https://github.com/andreas-gruenbacher/gnulib
>   https://github.com/andreas-gruenbacher/coreutils
> 
> 
> By the way, this part of commit "file-has-acl: new module, split from
> acl" in m4/acl.m4 is a bit strange:
> 
>>    dnl Set gl_need_lib_has_acl to a nonempty value, so that any
>>    dnl later gl_FUNC_ACL call will set LIB_HAS_ACL=$LIB_ACL.
>>    gl_need_lib_has_acl=1
>>    LIB_HAS_ACL=$LIB_ACL
> 
> Function gl_FILE_HAS_ACL depends on gl_FUNC_ACL to be called
> afterwards, and gl_FUNC_ACL does get called through the gnulib module
> dependencies. Now why is LIB_HAS_ACL being set in both functions?

I'm going to revert this for the moment as it breaks the build
on Mac OS X >= 10.4 which has an incompatible 6 parameter getxattr() call.
Revert commit is attached.

thanks,
Pádraig.

From 98aa8776dd2b510b7f777870fb76b17fd88abbef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <p...@draigbrady.com>
Date: Tue, 2 Jun 2015 00:53:48 +0100
Subject: [PATCH] file-has-acl: fix build on Mac OS X 10

This reverts commit f1b37e3a which doesn't work on Mac OS X >= 10.4
which has an incompatible 6 parameter getxattr() call.

* doc/glibc-functions/getxattr.texi: Mention the divergent getxattr()
call on Mac OS X >= 10.4.
* doc/glibc-functions/fgetxattr.texi: Likewise.
* lib/file-has-acl.c: Revert to more complete combined check.
* m4/acl.m4 (gl_FILE_HAS_ACL): Likewise.
Reported by Jack Howarth.
---
 ChangeLog                          | 12 ++++++++++++
 doc/glibc-functions/fgetxattr.texi |  3 +++
 doc/glibc-functions/getxattr.texi  |  3 +++
 lib/file-has-acl.c                 | 15 ++-------------
 m4/acl.m4                          | 24 +++++++++++++++++++-----
 5 files changed, 39 insertions(+), 18 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 25dec08..2b922ce 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
 2015-06-02  Pádraig Brady  <p...@draigbrady.com>
 
+	file-has-acl: fix build on Mac OS X 10
+	This reverts commit f1b37e3a which doesn't work on Mac OS X >= 10.4
+	which has an incompatible 6 parameter getxattr() call.
+	* doc/glibc-functions/getxattr.texi: Mention the divergent getxattr()
+	call on Mac OS X >= 10.4.
+	* doc/glibc-functions/fgetxattr.texi: Likewise.
+	* lib/file-has-acl.c: Revert to more complete combined check.
+	* m4/acl.m4 (gl_FILE_HAS_ACL): Likewise.
+	Reported by Jack Howarth.
+
+2015-06-02  Pádraig Brady  <p...@draigbrady.com>
+
 	prefix-gnulib-mk: remove no longer needed special case
 	* build-aux/prefix-gnulib-mk (prefix): Since commit e3704b9c,
 	continued lib_SOURCES lines are no longer present,
diff --git a/doc/glibc-functions/fgetxattr.texi b/doc/glibc-functions/fgetxattr.texi
index 0fc9bac..0fb458f 100644
--- a/doc/glibc-functions/fgetxattr.texi
+++ b/doc/glibc-functions/fgetxattr.texi
@@ -14,4 +14,7 @@ Portability problems not fixed by Gnulib:
 This function is missing on many non-glibc platforms:
 Mac OS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11,
 IRIX 6.5, OSF/1 5.1, Solaris 11 2011-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS.
+@item
+This function has extra @code{offset} and @code{options} parameters:
+Mac OS X 10.4
 @end itemize
diff --git a/doc/glibc-functions/getxattr.texi b/doc/glibc-functions/getxattr.texi
index f206d25..51ac784 100644
--- a/doc/glibc-functions/getxattr.texi
+++ b/doc/glibc-functions/getxattr.texi
@@ -14,4 +14,7 @@ Portability problems not fixed by Gnulib:
 This function is missing on many non-glibc platforms:
 Mac OS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11,
 IRIX 6.5, OSF/1 5.1, Solaris 11 2011-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS.
+@item
+This function has extra @code{offset} and @code{options} parameters:
+Mac OS X 10.4
 @end itemize
diff --git a/lib/file-has-acl.c b/lib/file-has-acl.c
index e187117..7e26c53 100644
--- a/lib/file-has-acl.c
+++ b/lib/file-has-acl.c
@@ -29,11 +29,8 @@
 
 #include "acl-internal.h"
 
-#if HAVE_SYS_XATTR_H
+#if GETXATTR_WITH_POSIX_ACLS
 # include <sys/xattr.h>
-#endif
-
-#if HAVE_LINUX_XATTR_H
 # include <linux/xattr.h>
 #endif
 
@@ -51,15 +48,7 @@ file_has_acl (char const *name, struct stat const *sb)
   if (! S_ISLNK (sb->st_mode))
     {
 
-# if HAVE_GETXATTR
-
-#  ifndef XATTR_NAME_POSIX_ACL_ACCESS
-#   define XATTR_NAME_POSIX_ACL_ACCESS "system.posix_acl_access"
-#  endif
-
-#  ifndef XATTR_NAME_POSIX_ACL_DEFAULT
-#   define XATTR_NAME_POSIX_ACL_DEFAULT "system.posix_acl_default"
-#  endif
+# if GETXATTR_WITH_POSIX_ACLS
 
       ssize_t ret;
 
diff --git a/m4/acl.m4 b/m4/acl.m4
index 5da6a43..75fc9ce 100644
--- a/m4/acl.m4
+++ b/m4/acl.m4
@@ -1,5 +1,5 @@
 # acl.m4 - check for access control list (ACL) primitives
-# serial 20
+# serial 21
 
 # Copyright (C) 2002, 2004-2015 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
@@ -181,12 +181,26 @@ AC_DEFUN([gl_FILE_HAS_ACL],
 [
   AC_REQUIRE([gl_FUNC_ACL_ARG])
   if test "$enable_acl" != no; then
-    AC_CHECK_HEADERS([linux/xattr.h])
-    AC_CHECK_HEADERS([sys/xattr.h],
-      [AC_CHECK_FUNCS([getxattr])])
+    AC_CACHE_CHECK([for getxattr with XATTR_NAME_POSIX_ACL macros],
+      [gl_cv_getxattr_with_posix_acls],
+      [gl_cv_getxattr_with_posix_acls=no
+       AC_LINK_IFELSE(
+         [AC_LANG_PROGRAM(
+            [[#include <sys/types.h>
+              #include <sys/xattr.h>
+              #include <linux/xattr.h>
+            ]],
+            [[ssize_t a = getxattr (".", XATTR_NAME_POSIX_ACL_ACCESS, 0, 0);
+              ssize_t b = getxattr (".", XATTR_NAME_POSIX_ACL_DEFAULT, 0, 0);
+              return a < 0 || b < 0;
+            ]])],
+         [gl_cv_getxattr_with_posix_acls=yes])])
   fi
-  if test "$ac_cv_header_sys_xattr_h,$ac_cv_func_getxattr" = yes,yes; then
+  if test "$gl_cv_getxattr_with_posix_acls" = yes; then
     LIB_HAS_ACL=
+    AC_DEFINE([GETXATTR_WITH_POSIX_ACLS], 1,
+      [Define to 1 if getxattr works with XATTR_NAME_POSIX_ACL_ACCESS
+       and XATTR_NAME_POSIX_ACL_DEFAULT.])
   else
     dnl Set gl_need_lib_has_acl to a nonempty value, so that any
     dnl later gl_FUNC_ACL call will set LIB_HAS_ACL=$LIB_ACL.
-- 
2.4.1

Reply via email to