[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Bug-tar] [PATCH] Fix build with xattr support
From: |
Pavel Raiskup |
Subject: |
Re: [Bug-tar] [PATCH] Fix build with xattr support |
Date: |
Thu, 12 Dec 2013 11:03:28 +0100 |
User-agent: |
KMail/4.11.3 (Linux/3.11.10-300.fc20.x86_64; KDE/4.11.3; x86_64; ; ) |
i Anthony, thanks for looking at it! I haven't test it, but here is
"static" analysis:
> diff --git a/acinclude.m4 b/acinclude.m4
> index d48c881..18cfd49 100644
> --- a/acinclude.m4
> +++ b/acinclude.m4
> @@ -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
This part seems to be OK.
> + # 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
> ])
This is IMO not going to work. AC_CHECK_FUNCS will not success if you
don't have libc with xattrs support; you should use AC_SEARCH_LIBS (in
'attr' library). Look at configure.ac and acl-related checks.
I also don't like the functions to have listed twice.. Would it be
possible to have at least the list of functions defined at one place?
> diff --git a/lib/xattr-at.h b/lib/xattr-at.h
> index 2981771..1f517d0 100644
> --- a/lib/xattr-at.h
> +++ b/lib/xattr-at.h
> @@ -20,7 +20,15 @@
> #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,
> diff --git a/src/Makefile.am b/src/Makefile.am
> index 07c117d..5e2f330 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -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
Also, I would say the AM_CONDITIONAL is not needed. The LIBS should be
automatically adjusted by AC_SEARCH_LIBS.
Note that we are still linking *xattr() functions against glibc even if
the tar is (due to libacl linking) linked against libattr, which is
important! (This could be problem in libacl - I need to look at it; but
this is nothing which could be fixed in tar anyway).
Pavel