@@ -14,28 +14,28 @@ find_file(LIBHWLOC_HEADER NAMES hwloc.h)
14
14
get_filename_component (LIBHWLOC_INCLUDE_DIR ${LIBHWLOC_HEADER} DIRECTORY )
15
15
set (LIBHWLOC_INCLUDE_DIRS ${LIBHWLOC_INCLUDE_DIR} )
16
16
17
- if ( LIBHWLOC_INCLUDE_DIR )
18
- if ( EXISTS " ${LIBHWLOC_INCLUDE_DIR} /hwloc/autogen/config.h" )
19
- file (
20
- STRINGS " ${LIBHWLOC_INCLUDE_DIR} /hwloc/autogen/config.h"
21
- LIBHWLOC_VERSION
22
- REGEX
23
- "#define[ \t ]HWLOC_VERSION[ \t ] \" ([0-9]+.[0-9]+.[0-9]+(rc[0-9])?)(-git)? \" "
24
- )
25
- string (
26
- REGEX
27
- REPLACE
28
- "#define[ \t ]HWLOC_VERSION[ \t ] \" ([0-9]+.[0-9]+.[0-9]+(rc[0-9])?)(-git)? \" "
29
- " \\ 1"
30
- LIBHWLOC_VERSION
31
- "${LIBHWLOC_VERSION} " )
32
- else ( )
33
- message (
34
- WARNING
35
- "LIBHWLOC_INCLUDE_DIR found, but header with version info is missing"
36
- )
37
- endif ()
38
- endif ( )
17
+ set ( HWLOC_VERSION_CODE
18
+ "
19
+ #include <stdio.h>
20
+ #include <stdlib.h>
21
+ #include \" hwloc.h \"
22
+
23
+ void main(int argc, char** argv) {
24
+ unsigned LIBHWLOC_API_PATCH = HWLOC_API_VERSION & 0xFF;
25
+ unsigned LIBHWLOC_API_MINOR = (HWLOC_API_VERSION >> 8) & 0xFF;
26
+ unsigned LIBHWLOC_API_MAJOR = (HWLOC_API_VERSION >> 16) & 0xFF;
27
+ printf( \" %d.%d.%d \" , LIBHWLOC_API_MAJOR, LIBHWLOC_API_MINOR, LIBHWLOC_API_PATCH);
28
+ }" )
29
+
30
+ set ( HWLOC_VERSION_CODE_FILENAME "hwloc_get_version.c" )
31
+ file ( WRITE "${CMAKE_BINARY_DIR} / ${HWLOC_VERSION_CODE_FILENAME} "
32
+ " ${HWLOC_VERSION_CODE} " )
33
+
34
+ try_run (
35
+ HWLOC_RUN_RESULT HWLOC_COMPILE_RESULT ${CMAKE_BINARY_DIR}
36
+ " ${CMAKE_BINARY_DIR} / ${HWLOC_VERSION_CODE_FILENAME} "
37
+ CMAKE_FLAGS "-DINCLUDE_DIRECTORIES= ${LIBHWLOC_INCLUDE_DIR} "
38
+ RUN_OUTPUT_VARIABLE LIBHWLOC_API_VERSION )
39
39
40
40
if (WINDOWS )
41
41
find_file (LIBHWLOC_DLL NAMES "bin/hwloc-15.dll" "bin/libhwloc-15.dll" )
@@ -48,18 +48,19 @@ if(LIBHWLOC_LIBRARY)
48
48
message (STATUS " LIBHWLOC_LIBRARIES = ${LIBHWLOC_LIBRARIES} " )
49
49
message (STATUS " LIBHWLOC_INCLUDE_DIRS = ${LIBHWLOC_INCLUDE_DIRS} " )
50
50
message (STATUS " LIBHWLOC_LIBRARY_DIRS = ${LIBHWLOC_LIBRARY_DIRS} " )
51
- message (STATUS " LIBHWLOC_VERSION = ${LIBHWLOC_VERSION } " )
51
+ message (STATUS " LIBHWLOC_API_VERSION = ${LIBHWLOC_API_VERSION } " )
52
52
if (WINDOWS )
53
53
message (STATUS " LIBHWLOC_DLL_DIRS = ${LIBHWLOC_DLL_DIRS} " )
54
54
endif ()
55
55
56
56
if (LIBHWLOC_FIND_VERSION )
57
- if (NOT LIBHWLOC_VERSION )
57
+ if (NOT LIBHWLOC_API_VERSION )
58
58
message (FATAL_ERROR "Failed to retrieve libhwloc version" )
59
- elseif (NOT LIBHWLOC_VERSION VERSION_GREATER_EQUAL LIBHWLOC_FIND_VERSION )
59
+ elseif (NOT LIBHWLOC_API_VERSION VERSION_GREATER_EQUAL
60
+ LIBHWLOC_FIND_VERSION )
60
61
message (
61
62
FATAL_ERROR
62
- " Required version: ${LIBHWLOC_FIND_VERSION} , found ${LIBHWLOC_VERSION } "
63
+ " Required version: ${LIBHWLOC_FIND_VERSION} , found ${LIBHWLOC_API_VERSION } "
63
64
)
64
65
endif ()
65
66
endif ()
0 commit comments