59 lines
1.7 KiB
CMake
59 lines
1.7 KiB
CMake
# - 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
|
|
)
|