summaryrefslogtreecommitdiffstats
path: root/cmake/modules/Findpmdk.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/modules/Findpmdk.cmake')
-rw-r--r--cmake/modules/Findpmdk.cmake60
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()