Index: include/apr.h.in =================================================================== --- include/apr.h.in (revision 606453) +++ include/apr.h.in (working copy) @@ -103,6 +103,8 @@ #define APR_HAVE_SYS_UIO_H @sys_uioh@ #define APR_HAVE_SYS_UN_H @sys_unh@ #define APR_HAVE_SYS_WAIT_H @sys_waith@ +#define APR_HAVE_SYS_XATTR_H @sys_xattrh@ +#define APR_HAVE_SYS_EXTATTR_H @sys_extattrh@ #define APR_HAVE_TIME_H @timeh@ #define APR_HAVE_UNISTD_H @unistdh@ #define APR_HAVE_WINDOWS_H @windowsh@ @@ -238,6 +240,7 @@ #define APR_HAS_UNICODE_FS @have_unicode_fs@ #define APR_HAS_PROC_INVOKED @have_proc_invoked@ #define APR_HAS_USER 1 +#define APR_HAS_XATTR @xattr@ #define APR_HAS_LARGE_FILES @aprlfs@ #define APR_HAS_XTHREAD_FILES 0 #define APR_HAS_OS_UUID @osuuid@ Index: configure.in =================================================================== --- configure.in (revision 606453) +++ configure.in (working copy) @@ -124,7 +124,7 @@ DEFAULT_OSDIR="unix" echo "(Default will be ${DEFAULT_OSDIR})" -apr_modules="file_io network_io threadproc misc locks time mmap shmem user memory atomic poll support random" +apr_modules="file_io network_io threadproc misc locks time mmap shmem user memory atomic poll support random xattr" dnl Checks for programs. AC_PROG_MAKE_SET @@ -1135,7 +1135,9 @@ sys/types.h \ sys/uio.h \ sys/un.h \ - sys/wait.h) + sys/wait.h \ + sys/xattr.h \ + sys/extattr.h) # IRIX 6.5 has a problem in which prevents it from # being included by itself. Check for manually, @@ -1187,6 +1189,8 @@ AC_SUBST(unistdh) AC_SUBST(signalh) AC_SUBST(sys_waith) +AC_SUBST(sys_xattrh) +AC_SUBST(sys_extattrh) AC_SUBST(pthreadh) AC_SUBST(semaphoreh) AC_SUBST(windowsh) @@ -2030,6 +2034,87 @@ APR_CHECK_DIRENT_INODE APR_CHECK_DIRENT_TYPE +dnl ----------------------------- Checking for Extended Attributes Support +echo "${nl}Checking for Extended Attributes Support..." + +# Check whether Extended Attributes have explicitly been disabled +AC_ARG_ENABLE(xattr, + [ --disable-xattr Disable Extended Attributes support in APR.], + [ if test "$enableval" = "no"; then + user_disabled_xattr=1 + fi ], + [ user_disabled_xattr=0 ] ) + +xattrdarwin="0" +xattrlinux="0" +xattrfreebsd="0" +xattrsolaris="0" +if test "$user_disabled_xattr" = 1; then + echo "no -- disabled by user" +else + AC_CHECK_FUNCS([fgetxattr fsetxattr flistxattr fremovexattr lgetxattr \ + extattr_get_fd extattr_set_fd extattr_list_fd \ + extattr_delete_fd openat unlinkat]) + APR_CHECK_DEFINE(O_XATTR, sys/fcntl.h) + APR_CHECK_DEFINE(XATTR_NOFOLLOW, sys/xattr.h) + APR_CHECK_DEFINE(XATTR_CREATE, sys/xattr.h) + APR_CHECK_DEFINE(XATTR_REPLACE, sys/xattr.h) + APR_CHECK_DEFINE(XATTR_NAME_MAX, linux/limits.h) + APR_CHECK_DEFINE(XATTR_SIZE_MAX, linux/limits.h) + APR_CHECK_DEFINE(XATTR_LIST_MAX, linux/limits.h) + APR_CHECK_DEFINE(XATTR_MAXNAMELEN, sys/xattr.h) + APR_CHECK_DEFINE(EXTATTR_NAMESPACE_USER, sys/extattr.h) + APR_CHECK_DEFINE(EXTATTR_NAMESPACE_SYSTEM, sys/extattr.h) + APR_CHECK_DEFINE(EXTATTR_MAXNAMELEN, sys/extattr.h) + + APR_BEGIN_DECISION([xattr attribute system interface]) + APR_IFALLYES(header:sys/xattr.h dnl + define:XATTR_NOFOLLOW dnl + func:fgetxattr dnl + func:fsetxattr dnl + func:flistxattr dnl + func:fremovexattr, + [xattrdarwin="1" + APR_DECIDE(USE_XATTR_DARWIN, [xattr (Darwin)])]) + + APR_IFALLYES(header:sys/xattr.h dnl + func:lgetxattr dnl + func:fgetxattr dnl + func:fsetxattr dnl + func:flistxattr dnl + func:fremovexattr, + [xattrlinux="1" + APR_DECIDE(USE_XATTR_LINUX, [xattr (Linux)])]) + + APR_IFALLYES(header:sys/extattr.h dnl + func:extattr_set_fd dnl + func:func:extattr_get_fd dnl + func:extattr_list_fd dnl + func:func:extattr_delete_fd, + [xattrfreebsd="1" + APR_DECIDE(USE_XATTR_FREEBSD, [extattr (FreeBSD)])]) + + APR_IFALLYES(define:O_XATTR dnl + func:openat dnl + func:unlinkat, + [xattrsolaris="1" + APR_DECIDE(USE_XATTR_SOLARIS, [attropen (Solaris)])]) + + if test "x$ac_decision" = "x"; then + ac_decision="USE_XATTR_NONE" + ac_decision_msg="no xattr interface available" + fi + APR_END_DECISION + AC_DEFINE_UNQUOTED($ac_decision) +fi + +if test "$xattrdarwin$xattrlinux$xattrfreebsd$xattrsolaris" = "0000"; then + xattr="0" +else + xattr="1" +fi +AC_SUBST(xattr) + dnl ----------------------------- Checking for UUID Support echo "${nl}Checking for OS UUID Support..." Index: build.conf =================================================================== --- build.conf (revision 606453) +++ build.conf (working copy) @@ -13,7 +13,7 @@ # directories that have platform-specific code in them. the resulting # pattern will be: SUBDIR/PLATFORM/*.c platform_dirs = - dso file_io locks memory misc mmap network_io poll random + dso file_io locks memory misc mmap network_io poll random xattr shmem support threadproc time user atomic # all the public headers