From 0de5755531e890e26c37a184db98b40538d25286 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Sun, 11 Feb 2024 16:53:26 +0800 Subject: [PATCH] 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 --- cmake/modules/Findcap.cmake | 35 +++++++++++++++++++++++++++++++++++ src/extblkdev/CMakeLists.txt | 1 + 2 files changed, 36 insertions(+) create mode 100644 cmake/modules/Findcap.cmake diff --git a/cmake/modules/Findcap.cmake b/cmake/modules/Findcap.cmake new file mode 100644 index 00000000000..f33b22d2c29 --- /dev/null +++ b/cmake/modules/Findcap.cmake @@ -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() diff --git a/src/extblkdev/CMakeLists.txt b/src/extblkdev/CMakeLists.txt index 64010f31cf3..27e7c23e494 100644 --- a/src/extblkdev/CMakeLists.txt +++ b/src/extblkdev/CMakeLists.txt @@ -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()