2323# IBVERBS_FOUND
2424# IBVERBS_INCLUDE_DIRS
2525# IBVERBS_LIBRARIES
26+ # IBVERBS_VERSION
2627
2728find_path (IBVERBS_INCLUDE_DIRS
2829 NAMES infiniband/verbs.h
@@ -38,6 +39,56 @@ find_library(IBVERBS_LIBRARIES
3839 ${IBVERBS_ROOT_DIR}
3940 ${IBVERBS_ROOT_DIR} /lib)
4041
42+ # Try to determine the rdma-core version
43+ if (IBVERBS_INCLUDE_DIRS AND IBVERBS_LIBRARIES)
44+ # First try using pkg-config if available
45+ find_package (PkgConfig QUIET )
46+ if (PKG_CONFIG_FOUND)
47+ pkg_check_modules(PC_RDMA_CORE QUIET rdma-core)
48+ if (PC_RDMA_CORE_VERSION)
49+ set (IBVERBS_VERSION ${PC_RDMA_CORE_VERSION} )
50+ endif ()
51+ endif ()
52+
53+ # If pkg-config didn't work, try to extract version from library filename
54+ # According to rdma-core Documentation/versioning.md:
55+ # Library filename format:
56+ # libibverbs.so.SONAME.ABI.PACKAGE_VERSION_MAIN[.PACKAGE_VERSION_BRANCH]
57+ # Where:
58+ # - SONAME: Major version (1st field)
59+ # - ABI: ABI version number (2nd field)
60+ # - PACKAGE_VERSION_MAIN: Main package version (3rd field)
61+ # - PACKAGE_VERSION_BRANCH: Optional counter for branched stable
62+ # releases (4th field, part of PACKAGE_VERSION)
63+ # Example: libibverbs.so.1.14.57.0 → SONAME=1, ABI=14,
64+ # PACKAGE_VERSION=57.0
65+ if (NOT IBVERBS_VERSION)
66+ # Get the real path of the library (follows symlinks)
67+ get_filename_component (IBVERBS_REAL_PATH "${IBVERBS_LIBRARIES} " REALPATH)
68+ get_filename_component (IBVERBS_LIB_NAME "${IBVERBS_REAL_PATH} " NAME )
69+
70+ # Extract version from filename
71+ if (IBVERBS_LIB_NAME MATCHES
72+ "libibverbs\\ .so\\ .([0-9]+)\\ .([0-9]+)\\ .([0-9]+)\\ .([0-9]+)" )
73+ # Four-component version: PACKAGE_VERSION_MAIN.PACKAGE_VERSION_BRANCH
74+ set (IBVERBS_VERSION_MAJOR ${CMAKE_MATCH_3} )
75+ set (IBVERBS_VERSION_MINOR ${CMAKE_MATCH_4} )
76+ set (IBVERBS_VERSION "${IBVERBS_VERSION_MAJOR} .${IBVERBS_VERSION_MINOR} " )
77+ elseif (IBVERBS_LIB_NAME MATCHES
78+ "libibverbs\\ .so\\ .([0-9]+)\\ .([0-9]+)\\ .([0-9]+)" )
79+ # Three-component version: PACKAGE_VERSION_MAIN only
80+ set (IBVERBS_VERSION_MAJOR ${CMAKE_MATCH_3} )
81+ set (IBVERBS_VERSION "${IBVERBS_VERSION_MAJOR} .0" )
82+ else ()
83+ # If we can't parse the filename, set to empty string
84+ # Feature detection will be done in CMakeLists.txt
85+ set (IBVERBS_VERSION "" )
86+ endif ()
87+ endif ()
88+ endif ()
89+
4190include (FindPackageHandleStandardArgs)
42- find_package_handle_standard_args(ibverbs DEFAULT_MSG IBVERBS_INCLUDE_DIRS IBVERBS_LIBRARIES)
43- mark_as_advanced (IBVERBS_INCLUDE_DIRS IBVERBS_LIBRARIES)
91+ find_package_handle_standard_args(ibverbs
92+ REQUIRED_VARS IBVERBS_INCLUDE_DIRS IBVERBS_LIBRARIES
93+ VERSION_VAR IBVERBS_VERSION)
94+ mark_as_advanced (IBVERBS_INCLUDE_DIRS IBVERBS_LIBRARIES IBVERBS_VERSION)
0 commit comments