2
0
mirror of https://github.com/Unidata/netcdf-c.git synced 2025-03-07 17:08:02 +08:00

improve mechanism by which to find parallel HDF5

So far, CMakeLists.txt made the assumption that ${HDF5_LIB} is always defined
in order to determine if it has parallel support. This is not the case, compare
with bug .
Make use of FIND_PACKAGE(HDF5) now; it sets HDF5_IS_PARALLEL anyways.
This commit is contained in:
Nico Schlömer 2014-03-07 16:40:50 +01:00
parent f4537c2b60
commit 76bd3a328f

View File

@ -568,14 +568,20 @@ ENDIF()
IF (USE_HDF5 OR ENABLE_NETCDF_4)
SET(USE_HDF5 ON)
SET(USE_NETCDF4 ON)
# Accomodate developers who have hdf5 libraries and
# headers on their system, but do not have a the hdf
# .cmake files. If this is the case, they should
# specify HDF5_HL_LIB, HDF5_LIB, HDF5_INCLUDE_DIR manually.
IF(HDF5_LIB AND HDF5_HL_LIB AND HDF5_INCLUDE_DIR)
SET(HDF5_LIBRARIES ${HDF5_LIB} ${HDF5_HL_LIB})
SET(HDF5_LIBRARIES ${HDF5_LIB} ${HDF5_HL_LIB})
SET(HDF5_INCLUDE_DIRS ${HDF5_INCLUDE_DIR})
# Find out if HDF5 was built with parallel support.
# Do that by checking for the targets H5Pget_fapl_mpiposx and
# H5Pget_fapl_mpio in ${HDF5_LIB}.
CHECK_LIBRARY_EXISTS(${HDF5_LIB} H5Pget_fapl_mpioposix "" HDF5_IS_PARALLEL)
IF(NOT HDF5_IS_PARALLEL)
CHECK_LIBRARY_EXISTS(${HDF5_LIB} H5Pget_fapl_mpio "" HDF5_IS_PARALLEL)
ENDIF()
ELSE()
IF(MSVC)
FIND_PACKAGE(HDF5 COMPONENTS C HL NO_MODULE REQUIRED)
@ -583,7 +589,6 @@ IF (USE_HDF5 OR ENABLE_NETCDF_4)
ELSE()
FIND_PACKAGE(HDF5 COMPONENTS C HL REQUIRED)
ENDIF()
ENDIF()
INCLUDE_DIRECTORIES(${HDF5_INCLUDE_DIRS})
@ -730,19 +735,12 @@ SET(STATUS_PARALLEL "OFF")
OPTION(ENABLE_PARALLEL "Build netCDF-4 with parallel IO" OFF)
IF(ENABLE_PARALLEL AND ENABLE_NETCDF_4)
SET(USE_PARALLEL ON CACHE BOOL "")
# Check for H5Pget_fapl_mpiposx, define USE_PARALLEL_POSIX
CHECK_LIBRARY_EXISTS(${HDF5_LIB} H5Pget_fapl_mpioposix "" USE_PARALLEL_POSIX)
# Else Check for H5Pget_fapl_mpio, define USE_PARALLEL_MPIO
IF(NOT USE_PARALLEL_POSIX)
CHECK_LIBRARY_EXISTS(${HDF5_LIB} H5Pget_fapl_mpio "" USE_PARALLEL_MPIO)
ENDIF()
IF(NOT USE_PARALLEL_POSIX AND NOT USE_PARALLEL_MPIO)
IF(NOT HDF5_IS_PARALLEL)
SET(USE_PARALLEL OFF CACHE BOOL "")
MESSAGE(STATUS "Cannot find HDF5 library built with parallel support. Disabling parallel build.")
ELSE()
SET(STATUS_PARALLEL "ON")
ENDIF()
SET(STATUS_PARALLEL "ON")
ENDIF()
# Options to enable parallel IO, tests.