Use correct headers/libraries when providing xattr support
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.
This commit is contained in:
32
acinclude.m4
32
acinclude.m4
@@ -37,18 +37,40 @@ AC_DEFUN([TAR_HEADERS_ATTR_XATTR_H],
|
|||||||
[], [with_xattrs=maybe]
|
[], [with_xattrs=maybe]
|
||||||
)
|
)
|
||||||
|
|
||||||
AC_CHECK_HEADERS([attr/xattr.h])
|
# First check for <sys/xattr.h>
|
||||||
AM_CONDITIONAL([TAR_COND_XATTR_H],[test "$ac_cv_header_attr_xattr_h" = yes])
|
AC_CHECK_HEADERS([sys/xattr.h])
|
||||||
if test "$ac_cv_header_attr_xattr_h" = yes; then
|
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 \
|
AC_CHECK_FUNCS(getxattr fgetxattr lgetxattr \
|
||||||
setxattr fsetxattr lsetxattr \
|
setxattr fsetxattr lsetxattr \
|
||||||
listxattr flistxattr llistxattr,
|
listxattr flistxattr llistxattr,
|
||||||
# only when functions are present
|
# only when functions are present
|
||||||
AC_DEFINE([HAVE_ATTR_XATTR_H], [1],
|
AC_DEFINE([HAVE_SYS_XATTR_H], [1],
|
||||||
[define to 1 if we have <attr/xattr.h> header])
|
[define to 1 if we have <sys/xattr.h> header])
|
||||||
if test "$with_xattrs" != no; then
|
if test "$with_xattrs" != no; then
|
||||||
AC_DEFINE([HAVE_XATTRS],,[Define when we have working linux xattrs.])
|
AC_DEFINE([HAVE_XATTRS],,[Define when we have working linux xattrs.])
|
||||||
fi
|
fi
|
||||||
)
|
)
|
||||||
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
|
||||||
])
|
])
|
||||||
|
|||||||
@@ -20,7 +20,15 @@
|
|||||||
#define XATTRS_AT_H
|
#define XATTRS_AT_H
|
||||||
|
|
||||||
#include <sys/types.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
|
/* These are the dir-fd-relative variants of the functions without the
|
||||||
"at" suffix. For example, setxattrat (AT_FDCWD, path, name, value, size,
|
"at" suffix. For example, setxattrat (AT_FDCWD, path, name, value, size,
|
||||||
|
|||||||
@@ -51,3 +51,7 @@ AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
|
|||||||
LDADD = ../lib/libtar.a ../gnu/libgnu.a $(LIBINTL) $(LIBICONV)
|
LDADD = ../lib/libtar.a ../gnu/libgnu.a $(LIBINTL) $(LIBICONV)
|
||||||
|
|
||||||
tar_LDADD = $(LIBS) $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS) $(LIB_SELINUX)
|
tar_LDADD = $(LIBS) $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS) $(LIB_SELINUX)
|
||||||
|
|
||||||
|
if TAR_LIB_ATTR
|
||||||
|
tar_LDADD += -lattr
|
||||||
|
endif
|
||||||
|
|||||||
Reference in New Issue
Block a user