From: Kefu Chai Date: Sun, 11 Feb 2024 08:53:26 +0000 (+0800) Subject: cmake: find_package(cap) before linking against it X-Git-Tag: v19.3.0~41^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F55529%2Fhead;p=ceph.git 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 --- diff --git a/cmake/modules/Findcap.cmake b/cmake/modules/Findcap.cmake new file mode 100644 index 000000000000..f33b22d2c29e --- /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 64010f31cf3e..27e7c23e4942 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()