Skip to content

Commit f18d503

Browse files
committed
FindHDF5: check MPI source no separate source file
1 parent 197b9bf commit f18d503

File tree

4 files changed

+39
-83
lines changed

4 files changed

+39
-83
lines changed

CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ endif()
6363
install(FILES
6464
${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/FindHDF5.cmake
6565
${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/check_hdf5_mpi.f90
66-
${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/FindSZIP.cmake
6766
DESTINATION cmake
6867
)
6968

cmake/Modules/FindHDF5.cmake

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -179,21 +179,27 @@ if(hdf5_have_zlib)
179179
# Szip even though not used by default.
180180
# If system HDF5 dynamically links libhdf5 with szip, our builds will fail if we don't also link szip.
181181
# however, we don't require SZIP for this case as other HDF5 libraries may statically link SZIP.
182-
if(NOT SZIP_ROOT)
183-
set(SZIP_ROOT ${ZLIB_ROOT})
184-
endif()
185-
if(HDF5_FIND_REQUIRED)
186-
find_package(SZIP REQUIRED)
187-
else()
188-
find_package(SZIP)
189-
endif()
190-
if(NOT SZIP_FOUND)
182+
183+
find_library(SZIP_LIBRARY
184+
NAMES szip sz
185+
NAMES_PER_DIR
186+
HINTS ${SZIP_ROOT} ${ZLIB_ROOT}
187+
DOC "SZIP API"
188+
)
189+
190+
find_path(SZIP_INCLUDE_DIR
191+
NAMES szlib.h
192+
HINTS ${SZIP_ROOT} ${ZLIB_ROOT}
193+
DOC "SZIP header"
194+
)
195+
196+
if(NOT SZIP_LIBRARY AND SZIP_INCLUDE_DIR)
191197
set(hdf5_prereqs false PARENT_SCOPE)
192198
return()
193199
endif()
194200

195-
list(APPEND CMAKE_REQUIRED_INCLUDES ${SZIP_INCLUDE_DIRS})
196-
list(APPEND CMAKE_REQUIRED_LIBRARIES ${SZIP_LIBRARIES})
201+
list(APPEND CMAKE_REQUIRED_INCLUDES ${SZIP_INCLUDE_DIR})
202+
list(APPEND CMAKE_REQUIRED_LIBRARIES ${SZIP_LIBRARY})
197203
endif()
198204

199205
list(APPEND CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS})
@@ -707,13 +713,20 @@ if(HDF5_parallel_FOUND)
707713
list(APPEND CMAKE_REQUIRED_INCLUDES ${MPI_Fortran_INCLUDE_DIRS})
708714
list(APPEND CMAKE_REQUIRED_LIBRARIES ${MPI_Fortran_LIBRARIES})
709715

710-
set(test_h5fn ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/check_hdf5_mpi.f90)
711-
712-
if(NOT EXISTS ${test_h5fn})
713-
message(WARNING "FindHDF5 could not find ${test_h5fn}")
714-
return()
715-
endif()
716-
file(READ ${test_h5fn} src)
716+
set(src "program test
717+
use hdf5
718+
use mpi
719+
implicit none
720+
integer :: ierr, mpi_id
721+
integer(HID_T) :: fapl, xfer_id
722+
call mpi_init(ierr)
723+
call h5open_f(ierr)
724+
call h5pcreate_f(H5P_FILE_ACCESS_F, fapl, ierr)
725+
call h5pset_fapl_mpio_f(fapl, MPI_COMM_WORLD, MPI_INFO_NULL, ierr)
726+
call h5pcreate_f(H5P_DATASET_XFER_F, xfer_id, ierr)
727+
call h5pset_dxpl_mpio_f(xfer_id, H5FD_MPIO_COLLECTIVE_F, ierr)
728+
call mpi_finalize(ierr)
729+
end program")
717730
else()
718731
set(src "program test_minimal
719732
use hdf5, only : h5open_f, h5close_f
@@ -887,12 +900,16 @@ if(HDF5_FOUND)
887900
if(NOT TARGET HDF5::HDF5)
888901
add_library(HDF5::HDF5 INTERFACE IMPORTED)
889902
set_target_properties(HDF5::HDF5 PROPERTIES
890-
INTERFACE_LINK_LIBRARIES "${HDF5_LIBRARIES}"
891-
INTERFACE_INCLUDE_DIRECTORIES "${HDF5_INCLUDE_DIRS}")
903+
INTERFACE_LINK_LIBRARIES "${HDF5_LIBRARIES}"
904+
INTERFACE_INCLUDE_DIRECTORIES "${HDF5_INCLUDE_DIRS}"
905+
)
892906

907+
target_include_directories(HDF5::HDF5 INTERFACE
908+
$<$<BOOL:${hdf5_have_szip}>:${SZIP_INCLUDE_DIR}>
909+
)
893910
target_link_libraries(HDF5::HDF5 INTERFACE
894911
$<$<BOOL:${hdf5_have_zlib}>:ZLIB::ZLIB>
895-
$<$<BOOL:${hdf5_have_szip}>:SZIP::SZIP>
912+
$<$<BOOL:${hdf5_have_szip}>:${SZIP_LIBRARY}>
896913
${CMAKE_THREAD_LIBS_INIT}
897914
${CMAKE_DL_LIBS}
898915
$<$<BOOL:${UNIX}>:m>

cmake/Modules/FindSZIP.cmake

Lines changed: 0 additions & 60 deletions
This file was deleted.

cmake/options.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ set(CMAKE_TLS_VERIFY true)
88

99

1010
if(BUILD_SHARED_LIBS)
11-
if(WIN32 AND CMAKE_VERSION VERSION_LESS 3.21 AND BUILD_TESTING)
11+
if(WIN32 AND CMAKE_VERSION VERSION_LESS 3.21 AND ${PROJECT_NAME}_BUILD_TESTING)
1212
message(STATUS "Windows with shared libs needs CMake >= 3.21 to run tests")
1313
endif()
1414
if(MSVC)

0 commit comments

Comments
 (0)