--- Utilities/cmlibarchive/CMakeLists.txt.orig 2021-02-24 15:08:43 UTC +++ Utilities/cmlibarchive/CMakeLists.txt @@ -1651,6 +1651,26 @@ IF(ENABLE_XATTR) HAVE_SETXATTR) SET(ARCHIVE_XATTR_DARWIN TRUE) ENDIF() + ELSEIF(HAVE_SYS_EXTATTR_H AND HAVE_DECL_EXTATTR_NAMESPACE_USER AND CMAKE_SYSTEM_NAME STREQUAL "BSDSUniX") + # FreeBSD xattr support + CHECK_FUNCTION_EXISTS(extattr_get_fd HAVE_EXTATTR_GET_FD) + CHECK_FUNCTION_EXISTS(extattr_get_file HAVE_EXTATTR_GET_FILE) + CHECK_FUNCTION_EXISTS(extattr_get_link HAVE_EXTATTR_GET_LINK) + CHECK_FUNCTION_EXISTS(extattr_list_fd HAVE_EXTATTR_LIST_FD) + CHECK_FUNCTION_EXISTS(extattr_list_file HAVE_EXTATTR_LIST_FILE) + CHECK_FUNCTION_EXISTS(extattr_list_link HAVE_EXTATTR_LIST_LINK) + CHECK_FUNCTION_EXISTS(extattr_set_fd HAVE_EXTATTR_SET_FD) + CHECK_FUNCTION_EXISTS(extattr_set_link HAVE_EXTATTR_SET_LINK) + IF(HAVE_EXTATTR_GET_FD AND + HAVE_EXTATTR_GET_FILE AND + HAVE_EXTATTR_GET_LINK AND + HAVE_EXTATTR_LIST_FD AND + HAVE_EXTATTR_LIST_FILE AND + HAVE_EXTATTR_LIST_LINK AND + HAVE_EXTATTR_SET_FD AND + HAVE_EXTATTR_SET_LINK) + SET(ARCHIVE_XATTR_BSDSUNIX TRUE) + ENDIF() ELSEIF(HAVE_SYS_EXTATTR_H AND HAVE_DECL_EXTATTR_NAMESPACE_USER) # FreeBSD xattr support CHECK_FUNCTION_EXISTS(extattr_get_fd HAVE_EXTATTR_GET_FD) @@ -1715,6 +1735,8 @@ IF(ENABLE_XATTR) IF(ARCHIVE_XATTR_DARWIN) MESSAGE(STATUS "Extended attributes support: Darwin") + ELSEIF(ARCHIVE_XATTR_BSDSUNIX) + MESSAGE(STATUS "Extended attributes support: BSDSUniX") ELSEIF(ARCHIVE_XATTR_FREEBSD) MESSAGE(STATUS "Extended attributes support: FreeBSD") ELSEIF(ARCHIVE_XATTR_LINUX) @@ -1727,6 +1749,7 @@ IF(ENABLE_XATTR) ELSE(ENABLE_XATTR) SET(ARCHIVE_XATTR_DARWIN FALSE) SET(ARCHIVE_XATTR_FREEBSD FALSE) + SET(ARCHIVE_XATTR_BSDSUNIX FALSE) SET(ARCHIVE_XATTR_LINUX FALSE) SET(ARCHIVE_XATTR_AIX FALSE) ENDIF(ENABLE_XATTR) @@ -1855,7 +1878,18 @@ int main(void) { return ACL_SYNCHRONIZE; }" HAVE_DECL_ HAVE_ACL_GET_PERM_NP AND NOT HAVE_ACL_GET_PERM AND HAVE_ACL_SET_FD_NP) - IF(HAVE_DECL_ACL_USER) + IF(HAVE_DECL_ACL_USER AND CMAKE_SYSTEM_NAME STREQUAL "BSDSUniX") + SET(ARCHIVE_ACL_BSDSUNIX TRUE) + IF(HAVE_DECL_ACL_TYPE_NFS4 AND + HAVE_ACL_ADD_FLAG_NP AND + HAVE_ACL_CLEAR_FLAGS_NP AND + HAVE_ACL_GET_BRAND_NP AND + HAVE_ACL_GET_ENTRY_TYPE_NP AND + HAVE_ACL_GET_FLAGSET_NP AND + HAVE_ACL_SET_ENTRY_TYPE_NP) + SET(ARCHIVE_ACL_BSDSUNIX_NFS4 TRUE) + ENDIF() + ELSEIF(HAVE_DECL_ACL_USER) SET(ARCHIVE_ACL_FREEBSD TRUE) IF(HAVE_DECL_ACL_TYPE_NFS4 AND HAVE_ACL_ADD_FLAG_NP AND @@ -1917,6 +1951,10 @@ int main(void) { return ACL_SYNCHRONIZE; }" HAVE_DECL_ IF(ARCHIVE_ACL_DARWIN) MESSAGE(STATUS "ACL support: Darwin (limited NFSv4)") + ELSEIF(ARCHIVE_ACL_BSDSUNIX_NFS4) + MESSAGE(STATUS "ACL support: BSDSUniX (POSIX.1e and NFSv4)") + ELSEIF(ARCHIVE_ACL_BSDSUNIX) + MESSAGE(STATUS "ACL support: BSDSUniX (POSIX.1e)") ELSEIF(ARCHIVE_ACL_FREEBSD_NFS4) MESSAGE(STATUS "ACL support: FreeBSD (POSIX.1e and NFSv4)") ELSEIF(ARCHIVE_ACL_FREEBSD) @@ -1941,6 +1979,8 @@ ELSE(ENABLE_ACL) # If someone runs cmake, then disables ACL support, we need # to forcibly override the cached values for these. SET(ARCHIVE_ACL_DARWIN FALSE) + SET(ARCHIVE_ACL_BSDSUNIX FALSE) + SET(ARCHIVE_ACL_BSDSUNIX_NFS4 FALSE) SET(ARCHIVE_ACL_FREEBSD FALSE) SET(ARCHIVE_ACL_FREEBSD_NFS4 FALSE) SET(ARCHIVE_ACL_LIBACL FALSE)