mirror of
https://github.com/ceph/ceph
synced 2024-12-27 14:03:25 +00:00
ad85af2ef8
before this change, `pmem_VERSION_STRING` is not set if it is not able to fulfill the specified version requirement. the intention was to check if the version is able to satisfy the requirement. but actually, passing an empty `pmem_VERSION_STRING` to `find_package_handle_standard_args()` as the option of `VERSION_VAR` does not fail this check. on the contrary, it prints -- Found pmem: pmem_pmemobj_INCLUDE_DIR;pmem_pmem_INCLUDE_DIR (Required is at least version "1.17") if we requires pmem 1.17, while the found version is, for instance, 1.10. if the required version is 1.7, and the found version is 1.10, the output from cmake is: -- Found pmem: pmem_pmemobj_INCLUDE_DIR;pmem_pmem_INCLUDE_DIR (found suitable version "1.10", minimum required is "1.7") in this change, the version spec is not specified when calling `pkg_check_modules()`. so, `PKG_${component}_VERSION` is always set. and we can always delegate the version checking to `find_package_handle_standard_args()`. please note, we use the lower version returned by pkg-config if multiple components are required and both pkg-config settings return their versions. Signed-off-by: Kefu Chai <kchai@redhat.com>
61 lines
2.1 KiB
CMake
61 lines
2.1 KiB
CMake
# - Find pmem
|
|
#
|
|
# pmem_INCLUDE_DIRS - Where to find libpmem headers
|
|
# pmem_LIBRARIES - List of libraries when using libpmem.
|
|
# pmem_FOUND - True if pmem found.
|
|
|
|
find_package(PkgConfig QUIET REQUIRED)
|
|
|
|
# all pmem libraries depend on pmem, so always find it
|
|
set(pmem_FIND_COMPONENTS ${pmem_FIND_COMPONENTS} pmem)
|
|
list(REMOVE_DUPLICATES pmem_FIND_COMPONENTS)
|
|
|
|
foreach(component ${pmem_FIND_COMPONENTS})
|
|
set(pmem_COMPONENTS pmem pmemobj)
|
|
list(FIND pmem_COMPONENTS "${component}" found)
|
|
if(found EQUAL -1)
|
|
message(FATAL_ERROR "unknown libpmem component: ${component}")
|
|
endif()
|
|
pkg_check_modules(PKG_${component} QUIET "lib${component}")
|
|
if(NOT pmem_VERSION_STRING OR PKG_${component}_VERSION VERSION_LESS pmem_VERSION_STRING)
|
|
set(pmem_VERSION_STRING ${PKG_${component}_VERSION})
|
|
endif()
|
|
find_path(pmem_${component}_INCLUDE_DIR
|
|
NAMES lib${component}.h
|
|
HINTS ${PKG_${component}_INCLUDE_DIRS})
|
|
find_library(pmem_${component}_LIBRARY
|
|
NAMES ${component}
|
|
HINTS ${PKG_${component}_LIBRARY_DIRS})
|
|
mark_as_advanced(
|
|
pmem_${component}_INCLUDE_DIR
|
|
pmem_${component}_LIBRARY)
|
|
list(APPEND pmem_INCLUDE_DIRS "pmem_${component}_INCLUDE_DIR")
|
|
list(APPEND pmem_LIBRARIES "pmem_${component}_LIBRARY")
|
|
endforeach()
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(pmem
|
|
REQUIRED_VARS pmem_INCLUDE_DIRS pmem_LIBRARIES
|
|
VERSION_VAR pmem_VERSION_STRING)
|
|
|
|
mark_as_advanced(
|
|
pmem_INCLUDE_DIRS
|
|
pmem_LIBRARIES)
|
|
|
|
if(pmem_FOUND)
|
|
foreach(component pmem ${pmem_FIND_COMPONENTS})
|
|
if(NOT TARGET pmem::${component})
|
|
add_library(pmem::${component} UNKNOWN IMPORTED)
|
|
set_target_properties(pmem::${component} PROPERTIES
|
|
INTERFACE_INCLUDE_DIRECTORIES "${pmem_${component}_INCLUDE_DIR}"
|
|
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
|
IMPORTED_LOCATION "${pmem_${component}_LIBRARY}")
|
|
# all pmem libraries calls into pmem::pmem
|
|
if(NOT component STREQUAL pmem)
|
|
set_target_properties(pmem::${component} PROPERTIES
|
|
INTERFACE_LINK_LIBRARIES pmem::pmem)
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
endif()
|