# - Find Linux extended attribute support # # This module sets: # XATTR_FOUND - true if getxattr/setxattr are available # XATTR_LIBRARIES - libraries needed for xattr functions, if any # # Modern glibc exposes getxattr/setxattr from libc. Older systems may # require libattr, so check libc first and then retry with -lattr. include(CheckIncludeFile) include(CheckSymbolExists) set(XATTR_FOUND FALSE) set(XATTR_LIBRARIES "") check_include_file("sys/xattr.h" XATTR_HAVE_SYS_XATTR_H) if(XATTR_HAVE_SYS_XATTR_H) check_symbol_exists(getxattr "sys/types.h;sys/xattr.h" XATTR_HAVE_GETXATTR) check_symbol_exists(setxattr "sys/types.h;sys/xattr.h" XATTR_HAVE_SETXATTR) if(XATTR_HAVE_GETXATTR AND XATTR_HAVE_SETXATTR) set(XATTR_FOUND TRUE) else() find_library(XATTR_ATTR_LIBRARY attr) if(XATTR_ATTR_LIBRARY) set(_XATTR_SAVE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}") set(CMAKE_REQUIRED_LIBRARIES "${XATTR_ATTR_LIBRARY}") check_symbol_exists(getxattr "sys/types.h;sys/xattr.h" XATTR_HAVE_GETXATTR_ATTR) check_symbol_exists(setxattr "sys/types.h;sys/xattr.h" XATTR_HAVE_SETXATTR_ATTR) set(CMAKE_REQUIRED_LIBRARIES "${_XATTR_SAVE_REQUIRED_LIBRARIES}") if(XATTR_HAVE_GETXATTR_ATTR AND XATTR_HAVE_SETXATTR_ATTR) set(XATTR_FOUND TRUE) set(XATTR_LIBRARIES "${XATTR_ATTR_LIBRARY}") endif() endif() endif() endif() if(XATTR_FOUND) if(XATTR_LIBRARIES) message(STATUS "Found XAttr: ${XATTR_LIBRARIES}") else() message(STATUS "Found XAttr: libc") endif() else() message(STATUS "Could NOT find XAttr") endif() mark_as_advanced( XATTR_ATTR_LIBRARY XATTR_HAVE_SYS_XATTR_H XATTR_HAVE_GETXATTR XATTR_HAVE_SETXATTR XATTR_HAVE_GETXATTR_ATTR XATTR_HAVE_SETXATTR_ATTR )