]> Dogcows Code - chaz/tar/commitdiff
Use correct headers/libraries when providing xattr support
authorSergey Poznyakoff <gray@gnu.org.ua>
Fri, 14 Feb 2014 08:55:26 +0000 (10:55 +0200)
committerSergey Poznyakoff <gray@gnu.org.ua>
Fri, 14 Feb 2014 08:55:26 +0000 (10:55 +0200)
See https://savannah.gnu.org/patch/index.php?8252. Patch provided
by Anthony G. Basile.

* acinclude.m4 (TAR_HEADERS_ATTR_XATTR_H): Look for <sys/xattr.h>
first and then for <attr/xattr.h>.  Link against libattr.so if
needed.
* lib/xattr-at.h: Include sys/xattr.h or attr/xattr.h, depending
on which one is detected.
* src/Makefile.am [TAR_LIB_ATTR] (tar_LDADD): Link against -lattr.

acinclude.m4
lib/xattr-at.h
src/Makefile.am

index e2dda89b69b83eaa1d8c1d356d882d7920e72a00..3b28b3bd63ddacd9cab238882a81dad73a26d78e 100644 (file)
@@ -37,18 +37,40 @@ AC_DEFUN([TAR_HEADERS_ATTR_XATTR_H],
     [], [with_xattrs=maybe]
   )
 
-  AC_CHECK_HEADERS([attr/xattr.h])
-  AM_CONDITIONAL([TAR_COND_XATTR_H],[test "$ac_cv_header_attr_xattr_h" = yes])
-  if test "$ac_cv_header_attr_xattr_h" = yes; then
+  # First check for <sys/xattr.h>
+  AC_CHECK_HEADERS([sys/xattr.h])
+  AM_CONDITIONAL([TAR_COND_XATTR_H],[test "$ac_cv_header_sys_xattr_h" = yes])
+  AM_CONDITIONAL([TAR_LIB_ATTR],[false])
+  if test "$ac_cv_header_sys_xattr_h" = yes; then
     AC_CHECK_FUNCS(getxattr  fgetxattr  lgetxattr \
                    setxattr  fsetxattr  lsetxattr \
                    listxattr flistxattr llistxattr,
         # only when functions are present
-        AC_DEFINE([HAVE_ATTR_XATTR_H], [1],
-                    [define to 1 if we have <attr/xattr.h> header])
+        AC_DEFINE([HAVE_SYS_XATTR_H], [1],
+                    [define to 1 if we have <sys/xattr.h> header])
         if test "$with_xattrs" != no; then
           AC_DEFINE([HAVE_XATTRS],,[Define when we have working linux xattrs.])
         fi
     )
   fi
+
+  # If <sys/xattr.h> is not found, then check for <attr/xattr.h>
+  if test "$ac_cv_header_sys_xattr_h" != yes; then
+    AC_CHECK_HEADERS([attr/xattr.h])
+    AM_CONDITIONAL([TAR_COND_XATTR_H],[test "$ac_cv_header_attr_xattr_h" = yes])
+    AC_CHECK_LIB([attr],[fgetxattr])
+    AM_CONDITIONAL([TAR_LIB_ATTR],[test "$ac_cv_lib_attr_fgetxattr" = yes])
+    if test "$ac_cv_header_attr_xattr_h" = yes; then
+      AC_CHECK_FUNCS(getxattr  fgetxattr  lgetxattr \
+                     setxattr  fsetxattr  lsetxattr \
+                     listxattr flistxattr llistxattr,
+          # only when functions are present
+          AC_DEFINE([HAVE_ATTR_XATTR_H], [1],
+                      [define to 1 if we have <attr/xattr.h> header])
+          if test "$with_xattrs" != no; then
+            AC_DEFINE([HAVE_XATTRS],,[Define when we have working linux xattrs.])
+          fi
+      )
+    fi
+  fi
 ])
index 1ee534dd9856febd5e13ebc10e3e4f5d3fdf04bb..3c6eb7268f8772a40d0c566859a9573079ffd1be 100644 (file)
 #define XATTRS_AT_H
 
 #include <sys/types.h>
-#include <attr/xattr.h>
+#if defined(HAVE_SYS_XATTR_H)
+# include <sys/xattr.h>
+#elif defined(HAVE_ATTR_XATTR_H)
+# include <attr/xattr.h>
+#endif
+
+#ifndef ENOATTR
+# define ENOATTR ENODATA        /* No such attribute */
+#endif
 
 /* These are the dir-fd-relative variants of the functions without the
    "at" suffix.  For example, setxattrat (AT_FDCWD, path, name, value, size,
index fa24b94b093cc2ba46d282cb1d1c2f6025ee1c9d..a9d25efa4ba997bda1aa7473b1af3ecee0007d75 100644 (file)
@@ -51,3 +51,7 @@ AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
 LDADD = ../lib/libtar.a ../gnu/libgnu.a $(LIBINTL) $(LIBICONV)
 
 tar_LDADD = $(LIBS) $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS) $(LIB_SELINUX)
+
+if TAR_LIB_ATTR
+tar_LDADD += -lattr
+endif
This page took 0.02572 seconds and 4 git commands to generate.