cmake: find_package(cap) before linking against it

before this change, we link against libcap without finding it. this
works fine as long as libcap-devel or libcap-dev is installed in the
system. but if it is not, the source would fail to build due to missing
`sys/capability.h`. this is not a great developer experience.

in this change, a `Findcap.cmake` is added to find the capability
library. which would fail the build at the configure phase.

Signed-off-by: Kefu Chai <tchaikov@gmail.com>
This commit is contained in:
Kefu Chai 2024-02-11 16:53:26 +08:00
parent 8bbeeb80a5
commit 0de5755531
2 changed files with 36 additions and 0 deletions

View File

@ -0,0 +1,35 @@
# Try to find libcap
#
find_package(PkgConfig QUIET REQUIRED)
pkg_check_modules(PC_cap QUIET cap)
find_library(cap_LIBRARY
NAMES cap
HINTS
${PC_cap_LIBDIR}
${PC_cap_LIBRARY_DIRS})
find_path(cap_INCLUDE_DIR
NAMES sys/capability.h
HINTS
${PC_cap_INCLUDEDIR}
${PC_cap_INCLUDE_DIRS})
mark_as_advanced(
cap_LIBRARY
cap_INCLUDE_DIR)
include (FindPackageHandleStandardArgs)
find_package_handle_standard_args (cap
REQUIRED_VARS
cap_LIBRARY
cap_INCLUDE_DIR)
if(cap_FOUND AND NOT TARGET cap::cap)
add_library(cap::cap UNKNOWN IMPORTED)
set_target_properties(cap::cap
PROPERTIES
IMPORTED_LOCATION ${cap_LIBRARY}
INTERFACE_INCLUDE_DIRECTORIES ${cap_INCLUDE_DIR})
endif()

View File

@ -7,6 +7,7 @@ add_subdirectory(vdo)
add_library(extblkdev STATIC ExtBlkDevPlugin.cc)
if(NOT WIN32)
find_package(cap)
target_link_libraries(extblkdev cap)
endif()