@@ -182,16 +182,19 @@ if(hdf5_have_zlib)
182182 NAMES szip sz
183183 NAMES_PER_DIR
184184 HINTS ${SZIP_ROOT} ${ZLIB_ROOT}
185+ PATH_SUFFIXES lib lib64
185186 DOC "SZIP API"
186187 )
187188
188189 find_path (SZIP_INCLUDE_DIR
189190 NAMES szlib.h
190191 HINTS ${SZIP_ROOT} ${ZLIB_ROOT}
192+ PATH_SUFFIXES include
191193 DOC "SZIP header"
192194 )
193195
194- if (NOT SZIP_LIBRARY AND SZIP_INCLUDE_DIR)
196+ if (NOT (SZIP_LIBRARY AND SZIP_INCLUDE_DIR))
197+ message (VERBOSE "FindHDF5: SZIP not found, but HDF5 indicates it was built with SZIP. This may cause build errors." )
195198 return ()
196199 endif ()
197200
@@ -303,6 +306,14 @@ if(HDF5_ROOT)
303306 HINTS ${HDF5_C_INCLUDE_DIR} ${HDF5_ROOT}
304307 DOC "HDF5 Fortran module path"
305308 )
309+
310+ find_path (HDF5_Fortran_HL_INCLUDE_DIR
311+ NAMES h5lt.mod
312+ NO_DEFAULT_PATH
313+ HINTS ${HDF5_Fortran_INCLUDE_DIR}
314+ DOC "HDF5 Fortran HL module path"
315+ PATH_SUFFIXES ${hdf5_msuf_hl}
316+ )
306317else ()
307318 if (HDF5_parallel_FOUND)
308319 # HDF5-MPI system library presents a unique challenge, as when non-MPI HDF5 is
@@ -312,19 +323,29 @@ else()
312323 # search in a for loop and do a link check.
313324 if (NOT HDF5_Fortran_INCLUDE_DIR)
314325 foreach (i IN LISTS HDF5_C_INCLUDE_DIR hdf5_inc_dirs)
326+
315327 find_path (HDF5_Fortran_INCLUDE_DIR
316328 NAMES hdf5.mod
317329 NO_DEFAULT_PATH
318330 HINTS ${i}
319331 DOC "HDF5 Fortran module path"
320332 )
321- message (VERBOSE "FindHDF5: trying hdf5.mod in ${i} - got: ${HDF5_Fortran_INCLUDE_DIR} " )
322- if (HDF5_Fortran_INCLUDE_DIR)
333+
334+ find_path (HDF5_Fortran_HL_INCLUDE_DIR
335+ NAMES h5lt.mod
336+ NO_DEFAULT_PATH
337+ HINTS ${HDF5_Fortran_INCLUDE_DIR}
338+ DOC "HDF5 Fortran HL module path"
339+ PATH_SUFFIXES ${hdf5_msuf_hl}
340+ )
341+ message (VERBOSE "FindHDF5: trying hdf5.mod in ${i} - got: ${HDF5_Fortran_INCLUDE_DIR} ${HDF5_Fortran_HL_INCLUDE_DIR} " )
342+ if (HDF5_Fortran_INCLUDE_DIR AND HDF5_Fortran_HL_INCLUDE_DIR)
323343 check_fortran_links ()
324344 if (HDF5_Fortran_links)
325345 break ()
326346 else ()
327347 unset (HDF5_Fortran_INCLUDE_DIR CACHE )
348+ unset (HDF5_Fortran_HL_INCLUDE_DIR CACHE )
328349 unset (HDF5_Fortran_links CACHE )
329350 endif ()
330351 endif ()
@@ -340,6 +361,14 @@ else()
340361 PATH_SUFFIXES ${hdf5_msuf}
341362 DOC "HDF5 Fortran module path"
342363 )
364+
365+ find_path (HDF5_Fortran_HL_INCLUDE_DIR
366+ NAMES h5lt.mod
367+ NO_DEFAULT_PATH
368+ HINTS ${HDF5_Fortran_INCLUDE_DIR}
369+ DOC "HDF5 Fortran HL module path"
370+ PATH_SUFFIXES ${hdf5_msuf_hl}
371+ )
343372 endif ()
344373 else ()
345374 find_path (HDF5_Fortran_INCLUDE_DIR
@@ -349,6 +378,14 @@ else()
349378 PATH_SUFFIXES ${hdf5_msuf}
350379 DOC "HDF5 Fortran module path"
351380 )
381+
382+ find_path (HDF5_Fortran_HL_INCLUDE_DIR
383+ NAMES h5lt.mod
384+ NO_DEFAULT_PATH
385+ HINTS ${HDF5_Fortran_INCLUDE_DIR}
386+ DOC "HDF5 Fortran HL module path"
387+ PATH_SUFFIXES ${hdf5_msuf_hl}
388+ )
352389 endif ()
353390endif ()
354391
@@ -715,7 +752,7 @@ endfunction(check_c_links)
715752function (check_fortran_links )
716753
717754list (PREPEND CMAKE_REQUIRED_LIBRARIES ${HDF5_Fortran_LIBRARIES} ${HDF5_C_LIBRARIES} )
718- set (CMAKE_REQUIRED_INCLUDES ${HDF5_Fortran_INCLUDE_DIR} ${HDF5_C_INCLUDE_DIR} )
755+ set (CMAKE_REQUIRED_INCLUDES ${HDF5_Fortran_INCLUDE_DIR} ${HDF5_Fortran_HL_INCLUDE_DIR} ${ HDF5_C_INCLUDE_DIR} )
719756
720757if (HDF5_parallel_FOUND)
721758 find_mpi ()
@@ -823,9 +860,11 @@ endif()
823860if (BUILD_SHARED_LIBS )
824861 set (hdf5_isuf shared include)
825862 set (hdf5_msuf shared include)
863+ set (hdf5_msuf_hl mod/shared)
826864else ()
827865 set (hdf5_isuf static include)
828866 set (hdf5_msuf static include)
867+ set (hdf5_msuf_hl mod/static)
829868endif ()
830869
831870# Ubuntu
@@ -901,29 +940,41 @@ HANDLE_COMPONENTS
901940)
902941
903942if (HDF5_FOUND)
904- set (HDF5_INCLUDE_DIRS ${HDF5_Fortran_INCLUDE_DIR} ${HDF5_CXX_INCLUDE_DIR} ${HDF5_C_INCLUDE_DIR} )
943+ set (HDF5_INCLUDE_DIRS ${HDF5_Fortran_INCLUDE_DIR} ${HDF5_Fortran_HL_INCLUDE_DIR} ${ HDF5_CXX_INCLUDE_DIR} ${HDF5_C_INCLUDE_DIR} )
905944 set (HDF5_LIBRARIES ${HDF5_Fortran_LIBRARIES} ${HDF5_CXX_LIBRARIES} ${HDF5_C_LIBRARIES} )
906945
907946 if (NOT TARGET HDF5::HDF5)
908947 add_library (HDF5::HDF5 INTERFACE IMPORTED )
909948 set_property (TARGET HDF5::HDF5 PROPERTY INTERFACE_LINK_LIBRARIES "${HDF5_LIBRARIES} " )
910949 set_property (TARGET HDF5::HDF5 PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${HDF5_INCLUDE_DIRS} " )
911950
912- target_include_directories (HDF5::HDF5 INTERFACE
913- $<$<BOOL :${hdf5_have_szip} >:${SZIP_INCLUDE_DIR} >
914- )
951+ if (hdf5_have_szip)
952+ if (IS_DIRECTORY "${SZIP_INCLUDE_DIR} " )
953+ target_include_directories (HDF5::HDF5 INTERFACE ${SZIP_INCLUDE_DIR} )
954+ else ()
955+ message (STATUS "FindHDF5: SZIP_INCLUDE_DIR ${SZIP_INCLUDE_DIR} is not a directory." )
956+ endif ()
957+ endif ()
958+
959+ target_link_libraries (HDF5::HDF5 INTERFACE $<$<BOOL :${hdf5_have_zlib} >:ZLIB ::ZLIB >)
960+
961+ if (hdf5_have_szip)
962+ if (EXISTS "${SZIP_LIBRARY} " )
963+ target_link_libraries (HDF5::HDF5 INTERFACE ${SZIP_LIBRARY} )
964+ else ()
965+ message (STATUS "FindHDF5: SZIP_LIBRARY ${SZIP_LIBRARY} is not a file." )
966+ endif ()
967+ endif ()
968+
915969 target_link_libraries (HDF5::HDF5 INTERFACE
916- $<$<BOOL :${hdf5_have_zlib} >:ZLIB ::ZLIB >
917- $<$<BOOL :${hdf5_have_szip} >:${SZIP_LIBRARY} >
918970 ${CMAKE_THREAD_LIBS_INIT}
919971 ${CMAKE_DL_LIBS }
920972 $<$<BOOL :${UNIX } >:m >
921973 )
922-
923974 endif ()
924975endif (HDF5_FOUND )
925976
926977mark_as_advanced (HDF5_Fortran_LIBRARY HDF5_Fortran_HL_LIBRARY
927978HDF5_C_LIBRARY HDF5_C_HL_LIBRARY
928979HDF5_CXX_LIBRARY HDF5_CXX_HL_LIBRARY
929- HDF5_C_INCLUDE_DIR HDF5_CXX_INCLUDE_DIR HDF5_Fortran_INCLUDE_DIR )
980+ HDF5_C_INCLUDE_DIR HDF5_CXX_INCLUDE_DIR HDF5_Fortran_INCLUDE_DIR HDF5_Fortran_HL_INCLUDE_DIR )
0 commit comments