Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CMake: call CMake's FindHDF5 instead of trying to find everything by hand #13319

Merged
merged 5 commits into from
Feb 2, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 1 addition & 4 deletions .github/workflows/linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ jobs:
trilinos-all-dev \
petsc-dev \
libmetis-dev \
libhdf5-dev
libhdf5-mpi-dev
- name: info
run: |
mpicc -v
Expand All @@ -73,9 +73,6 @@ jobs:
-D DEAL_II_WITH_PETSC="ON" \
-D DEAL_II_WITH_METIS="ON" \
-D DEAL_II_WITH_HDF5="ON" \
-D HDF5_INCLUDE_DIR="/usr/include/hdf5/openmpi/" \
-D HDF5_LIBRARY="/usr/lib/x86_64-linux-gnu/hdf5/openmpi/libhdf5.so" \
-D HDF5_HL_LIBRARY="/usr/lib/x86_64-linux-gnu/hdf5/openmpi/libhdf5_hl.so" \
-D DEAL_II_COMPONENT_EXAMPLES="OFF" \
..
- name: archive
Expand Down
12 changes: 4 additions & 8 deletions cmake/configure/configure_hdf5.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,21 @@
# Configuration for the hdf5 library:
#

SET(FEATURE_HDF5_AFTER MPI)

SET(FEATURE_HDF5_DEPENDS MPI)

MACRO(FEATURE_HDF5_FIND_EXTERNAL var)
FIND_PACKAGE(HDF5)

IF(HDF5_FOUND)
SET(${var} TRUE)

IF( (HDF5_WITH_MPI AND NOT DEAL_II_WITH_MPI) OR
(NOT HDF5_WITH_MPI AND DEAL_II_WITH_MPI) )
IF(NOT HDF5_IS_PARALLEL)
MESSAGE(STATUS "Insufficient hdf5 installation found: "
"hdf5 has to be configured with the same MPI configuration as deal.II."
"hdf5 has to be configured with MPI support."
)
SET(HDF5_ADDITIONAL_ERROR_STRING
"Insufficient hdf5 installation found!\n"
"hdf5 has to be configured with the same MPI configuration as deal.II, but found:\n"
" DEAL_II_WITH_MPI = ${DEAL_II_WITH_MPI}\n"
" HDF5_WITH_MPI = ${HDF5_WITH_MPI}\n"
"hdf5 has to be configured with MPI support.\n"
)
SET(${var} FALSE)
ENDIF()
Expand Down
52 changes: 18 additions & 34 deletions cmake/modules/FindHDF5.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -20,53 +20,37 @@
#
# HDF5_LIBRARIES
# HDF5_INCLUDE_DIRS
# HDF5_WITH_MPI
# HDF5_IS_PARALLEL
#

SET(HDF5_DIR "" CACHE PATH "An optional hint to an hdf5 directory")
SET_IF_EMPTY(HDF5_DIR "$ENV{HDF5_DIR}")

DEAL_II_FIND_PATH(HDF5_INCLUDE_DIR hdf5.h
HINTS ${HDF5_DIR}
PATH_SUFFIXES hdf5 hdf5/include include/hdf5 include
)
# temporarily disable ${CMAKE_SOURCE_DIR}/cmake/modules for module lookup
LIST(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules/)

DEAL_II_FIND_LIBRARY(HDF5_LIBRARY NAMES hdf5
HINTS ${HDF5_DIR}
PATH_SUFFIXES hdf5/lib lib${LIB_SUFFIX} lib64 lib
)
IF(NOT "${HDF5_DIR}" STREQUAL "")
SET(HDF5_ROOT "${HDF5_DIR}")
ENDIF()

DEAL_II_FIND_LIBRARY(HDF5_HL_LIBRARY NAMES hdf5_hl
HINTS ${HDF5_DIR}
PATH_SUFFIXES lib${LIB_SUFFIX} lib64 lib
)
SET(HDF5_PREFER_PARALLEL TRUE)
FIND_PACKAGE(HDF5)

DEAL_II_FIND_FILE(HDF5_PUBCONF NAMES H5pubconf.h H5pubconf-64.h
HINTS ${HDF5_INCLUDE_DIR} ${HDF5_DIR}
PATH_SUFFIXES hdf5 hdf5/include include/hdf5 include
)
LIST(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules/)

IF(EXISTS ${HDF5_PUBCONF})
#
# Is hdf5 compiled with support for mpi?
#
FILE(STRINGS ${HDF5_PUBCONF} HDF5_MPI_STRING
REGEX "#define.*H5_HAVE_PARALLEL 1"
)
IF("${HDF5_MPI_STRING}" STREQUAL "")
SET(HDF5_WITH_MPI FALSE)
ELSE()
SET(HDF5_WITH_MPI TRUE)
ENDIF()
ENDIF()
SET(_include_dirs "${HDF5_INCLUDE_DIRS}")
SET(_libraries "${HDF5_LIBRARIES};${HDF5_HL_LIBRARIES}")

DEAL_II_PACKAGE_HANDLE(HDF5
LIBRARIES
REQUIRED HDF5_HL_LIBRARY HDF5_LIBRARY
REQUIRED _libraries
OPTIONAL MPI_C_LIBRARIES
INCLUDE_DIRS
REQUIRED HDF5_INCLUDE_DIR
REQUIRED _include_dirs
USER_INCLUDE_DIRS
REQUIRED HDF5_INCLUDE_DIR
CLEAR HDF5_HL_LIBRARY HDF5_LIBRARY HDF5_INCLUDE_DIR HDF5_PUBCONF
REQUIRED _include_dirs
CLEAR
HDF5_C_COMPILER_EXECUTABLE HDF5_C_LIBRARY_dl HDF5_C_LIBRARY_hdf5
HDF5_C_LIBRARY_m HDF5_C_LIBRARY_mpi HDF5_C_LIBRARY_sz HDF5_C_LIBRARY_z
HDF5_DIFF_EXECUTABLE HDF5_PUBCONF
)