1 | | >From 7d1d3d38cb66b02c062de77847e3c0ecd842366c Mon Sep 17 00:00:00 2001 |
2 | | From: Pavel Raiskup <address@hidden> |
3 | | Date: Mon, 4 Aug 2014 13:19:49 +0200 |
4 | | Subject: [PATCH] xattrs: fix bug in configure |
5 | | |
6 | | Be careful to define HAVE_XATTRS when not all needed xattr-related |
7 | | functions are properly defined either in libc or libattr. |
8 | | |
9 | | Reported independently by Denis Excoffier and Dominyk Tille. |
10 | | |
11 | | * acinclude.m4 (TAR_HEADERS_ATTR_XATTR_H): Check for each xattr |
12 | | function separately. Don't AC_CHECK_LIB (LIBS is filled by |
13 | | AC_SEARCH_LIBS when necessary). |
14 | | * lib/xattr-at.c: Do not build when HAVE_XATTRS is not defined. |
15 | | * src/Makefile.am: The LDADD -lattr was redundant. |
16 | | --- |
17 | | acinclude.m4 | 42 ++++++++++++++---------------------------- |
18 | | lib/xattr-at.c | 7 +++++++ |
19 | | src/Makefile.am | 4 ---- |
20 | | 3 files changed, 21 insertions(+), 32 deletions(-) |
21 | | |
22 | | diff --git a/acinclude.m4 b/acinclude.m4 |
23 | | index 3b28b3b..db0bbc7 100644 |
24 | | --- a/acinclude.m4 |
25 | | +++ b/acinclude.m4 |
26 | | @@ -40,37 +40,23 @@ AC_DEFUN([TAR_HEADERS_ATTR_XATTR_H], |
27 | | # First check for <sys/xattr.h> |
28 | | AC_CHECK_HEADERS([sys/xattr.h]) |
29 | | AM_CONDITIONAL([TAR_COND_XATTR_H],[test "$ac_cv_header_sys_xattr_h" = yes]) |
30 | | - AM_CONDITIONAL([TAR_LIB_ATTR],[false]) |
31 | | - if test "$ac_cv_header_sys_xattr_h" = yes; then |
32 | | - AC_CHECK_FUNCS(getxattr fgetxattr lgetxattr \ |
33 | | - setxattr fsetxattr lsetxattr \ |
34 | | - listxattr flistxattr llistxattr, |
35 | | - # only when functions are present |
36 | | - AC_DEFINE([HAVE_SYS_XATTR_H], [1], |
37 | | - [define to 1 if we have <sys/xattr.h> header]) |
38 | | - if test "$with_xattrs" != no; then |
39 | | - AC_DEFINE([HAVE_XATTRS],,[Define when we have working linux xattrs.]) |
40 | | - fi |
41 | | - ) |
42 | | - fi |
43 | | - |
44 | | - # If <sys/xattr.h> is not found, then check for <attr/xattr.h> |
45 | | if test "$ac_cv_header_sys_xattr_h" != yes; then |
46 | | AC_CHECK_HEADERS([attr/xattr.h]) |
47 | | AM_CONDITIONAL([TAR_COND_XATTR_H],[test "$ac_cv_header_attr_xattr_h" = yes]) |
48 | | - AC_CHECK_LIB([attr],[fgetxattr]) |
49 | | - AM_CONDITIONAL([TAR_LIB_ATTR],[test "$ac_cv_lib_attr_fgetxattr" = yes]) |
50 | | - if test "$ac_cv_header_attr_xattr_h" = yes; then |
51 | | - AC_CHECK_FUNCS(getxattr fgetxattr lgetxattr \ |
52 | | - setxattr fsetxattr lsetxattr \ |
53 | | - listxattr flistxattr llistxattr, |
54 | | - # only when functions are present |
55 | | - AC_DEFINE([HAVE_ATTR_XATTR_H], [1], |
56 | | - [define to 1 if we have <attr/xattr.h> header]) |
57 | | - if test "$with_xattrs" != no; then |
58 | | - AC_DEFINE([HAVE_XATTRS],,[Define when we have working linux xattrs.]) |
59 | | - fi |
60 | | - ) |
61 | | + fi |
62 | | + |
63 | | + if test "$with_xattrs" != no; then |
64 | | + for i in getxattr fgetxattr lgetxattr \ |
65 | | + setxattr fsetxattr lsetxattr \ |
66 | | + listxattr flistxattr llistxattr |
67 | | + do |
68 | | + AC_SEARCH_LIBS($i, attr) |
69 | | + eval found=\$ac_cv_search_$i |
70 | | + test "$found" = "no" && break |
71 | | + done |
72 | | + |
73 | | + if test "$found" != no; then |
74 | | + AC_DEFINE([HAVE_XATTRS],,[Define when we have working linux xattrs.]) |
75 | | fi |
76 | | fi |
77 | | ]) |
78 | | diff --git a/lib/xattr-at.c b/lib/xattr-at.c |
79 | | index 443ccae..009bde5 100644 |
80 | | --- a/lib/xattr-at.c |
81 | | +++ b/lib/xattr-at.c |
82 | | @@ -18,6 +18,11 @@ |
83 | | |
84 | | #include <config.h> |
85 | | |
86 | | +/* Temporarily don't build. We are unable to build on (probably not only) |
87 | | + darwin due to lack of l*xattr callbacks (XATTR_NOFOLLOW is alternative) and |
88 | | + different function definitions. */ |
89 | | +#ifdef HAVE_XATTRS |
90 | | + |
91 | | #include "xattr-at.h" |
92 | | #include "openat.h" |
93 | | |
94 | | @@ -108,3 +113,5 @@ |
95 | | #undef AT_FUNC_RESULT |
96 | | #undef AT_FUNC_POST_FILE_PARAM_DECLS |
97 | | #undef AT_FUNC_POST_FILE_ARGS |
98 | | + |
99 | | +#endif |
100 | | diff --git a/src/Makefile.am b/src/Makefile.am |
101 | | index 82b2d46..42daaef 100644 |
102 | | --- a/src/Makefile.am |
103 | | +++ b/src/Makefile.am |
104 | | @@ -52,7 +52,3 @@ AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) |
105 | | LDADD = ../lib/libtar.a ../gnu/libgnu.a $(LIBINTL) $(LIBICONV) |
106 | | |
107 | | tar_LDADD = $(LIBS) $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS) $(LIB_SELINUX) |
108 | | - |
109 | | -if TAR_LIB_ATTR |
110 | | -tar_LDADD += -lattr |
111 | | -endif |
112 | | -- |
113 | | 1.9.3 |
114 | | |