diff options
Diffstat (limited to 'cmake/modules/Findpmdk.cmake')
-rw-r--r-- | cmake/modules/Findpmdk.cmake | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/cmake/modules/Findpmdk.cmake b/cmake/modules/Findpmdk.cmake new file mode 100644 index 000000000..0afce08b1 --- /dev/null +++ b/cmake/modules/Findpmdk.cmake @@ -0,0 +1,60 @@ +# - Find pmdk +# +# pmdk_INCLUDE_DIRS - Where to find pmdk headers +# pmdk_LIBRARIES - List of libraries when using pmdk. +# pmdk_FOUND - True if pmdk found. + +find_package(PkgConfig QUIET REQUIRED) + +# all pmdk libraries depend on pmem, so always find it +set(pmdk_FIND_COMPONENTS ${pmdk_FIND_COMPONENTS} pmem) +list(REMOVE_DUPLICATES pmdk_FIND_COMPONENTS) + +foreach(component ${pmdk_FIND_COMPONENTS}) + set(pmdk_COMPONENTS pmem pmemobj) + list(FIND pmdk_COMPONENTS "${component}" found) + if(found EQUAL -1) + message(FATAL_ERROR "unknown pmdk component: ${component}") + endif() + pkg_check_modules(PKG_${component} QUIET "lib${component}") + if(NOT pmdk_VERSION_STRING OR PKG_${component}_VERSION VERSION_LESS pmdk_VERSION_STRING) + set(pmdk_VERSION_STRING ${PKG_${component}_VERSION}) + endif() + find_path(pmdk_${component}_INCLUDE_DIR + NAMES lib${component}.h + HINTS ${PKG_${component}_INCLUDE_DIRS}) + find_library(pmdk_${component}_LIBRARY + NAMES ${component} + HINTS ${PKG_${component}_LIBRARY_DIRS}) + mark_as_advanced( + pmdk_${component}_INCLUDE_DIR + pmdk_${component}_LIBRARY) + list(APPEND pmdk_INCLUDE_DIRS "pmdk_${component}_INCLUDE_DIR") + list(APPEND pmdk_LIBRARIES "pmdk_${component}_LIBRARY") +endforeach() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(pmdk + REQUIRED_VARS pmdk_INCLUDE_DIRS pmdk_LIBRARIES + VERSION_VAR pmdk_VERSION_STRING) + +mark_as_advanced( + pmdk_INCLUDE_DIRS + pmdk_LIBRARIES) + +if(pmdk_FOUND) + foreach(component pmem ${pmdk_FIND_COMPONENTS}) + if(NOT TARGET pmdk::${component}) + add_library(pmdk::${component} UNKNOWN IMPORTED) + set_target_properties(pmdk::${component} PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${pmdk_${component}_INCLUDE_DIR}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${pmdk_${component}_LIBRARY}") + # all pmdk libraries call into pmdk::pmem + if(NOT component STREQUAL pmem) + set_target_properties(pmdk::${component} PROPERTIES + INTERFACE_LINK_LIBRARIES pmdk::pmem) + endif() + endif() + endforeach() +endif() |