Skip to content

Commit 236281d

Browse files
committed
build HDF5: simplify/improve checks
1 parent a561753 commit 236281d

File tree

1 file changed

+33
-39
lines changed

1 file changed

+33
-39
lines changed

scripts/CMakeLists.txt

+33-39
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
cmake_minimum_required(VERSION 3.20)
2+
# https://github.com/HDFGroup/hdf5/blob/develop/CMakeLists.txt
3+
24
project(HDF5_build
35
LANGUAGES C Fortran
46
)
@@ -7,48 +9,41 @@ option(hdf5_parallel "build HDF5 parallel MPI" on)
79
option(zlib_legacy "use legacy zlib 1.x")
810

911
# --- system checks
10-
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
11-
message(FATAL_ERROR "please specify where to install HDF5 under, like
12-
cmake -B build -DCMAKE_INSTALL_PREFIX=~/mylibs")
13-
endif()
12+
file(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX})
1413

1514
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)
1615

16+
if(hdf5_parallel)
17+
if(NOT MPI_ROOT AND DEFINED ENV{MPI_ROOT})
18+
set(MPI_ROOT $ENV{MPI_ROOT})
19+
endif()
20+
21+
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND MPI_ROOT)
22+
set(ld_path $ENV{LD_LIBRARY_PATH})
23+
cmake_path(CONVERT "${ld_path}" TO_CMAKE_PATH_LIST ld_path NORMALIZE)
24+
cmake_path(CONVERT "${MPI_ROOT}" TO_CMAKE_PATH_LIST MPI_ROOT NORMALIZE)
1725

18-
if(NOT MPI_ROOT AND DEFINED ENV{MPI_ROOT})
19-
set(MPI_ROOT $ENV{MPI_ROOT})
20-
endif()
26+
find_package(MPI COMPONENTS C REQUIRED)
2127

22-
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND MPI_ROOT)
23-
set(ld_path $ENV{LD_LIBRARY_PATH})
24-
cmake_path(CONVERT "${ld_path}" TO_CMAKE_PATH_LIST ld_path NORMALIZE)
25-
cmake_path(CONVERT "${MPI_ROOT}" TO_CMAKE_PATH_LIST MPI_ROOT NORMALIZE)
28+
include(${PROJECT_SOURCE_DIR}/../cmake/check_mpi.cmake)
29+
check_mpi_version()
2630

27-
if(NOT "${ld_path}" MATCHES "${MPI_ROOT}/lib")
28-
message(WARNING "${MPI_ROOT}/lib not found in LD_LIBRARY_PATH: $ENV{LD_LIBRARY_PATH}
29-
HDF5 build may fail due to bugs in HDF5 package CMake scripts.
30-
Fix this by adding to ~/.bashrc or similar:
31-
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${MPI_ROOT}/lib")
31+
list(GET MPI_C_LIBRARIES 0 mpi_lib)
32+
cmake_path(GET mpi_lib PARENT_PATH mpi_libdir)
33+
34+
if(NOT "${ld_path}" MATCHES "${mpi_libdir}")
35+
message(WARNING "${mpi_libdir} not found in LD_LIBRARY_PATH: $ENV{LD_LIBRARY_PATH}
36+
HDF5 build may fail due to bugs in HDF5 package CMake scripts.
37+
Fix this by adding to ~/.bashrc or similar:
38+
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:{mpi_libdir}")
39+
endif()
3240
endif()
33-
endif()
41+
endif(hdf5_parallel)
3442

3543
# HDF5 install fails to work (link) if prior HDF5 library is installed there
36-
find_library(_hdf5_libprior NAMES hdf5 PATHS ${CMAKE_INSTALL_PREFIX} PATH_SUFFIXES lib NO_DEFAULT_PATH NO_CACHE)
37-
find_path(_hdf5_incprior NAMES hdf5.h PATHS ${CMAKE_INSTALL_PREFIX} PATH_SUFFIXES include NO_DEFAULT_PATH NO_CACHE)
38-
find_program(_hdf5_binprior NAMES h5cc PATHS ${CMAKE_INSTALL_PREFIX} PATH_SUFFIXES bin NO_DEFAULT_PATH NO_CACHE)
39-
if(_hdf5_binprior)
40-
cmake_path(GET _hdf5_binprior PARENT_PATH _hdf5_binprior)
41-
else()
42-
set(_hdf5_binprior "")
43-
endif()
44-
if(_hdf5_libprior)
45-
cmake_path(GET _hdf5_libprior PARENT_PATH _hdf5_libprior)
46-
endif()
47-
if(_hdf5_libprior OR _hdf5_incprior OR _hdf5_binprior)
48-
message(FATAL_ERROR "HDF5 library already installed:
49-
${_hdf5_libprior}
50-
${_hdf5_incprior}
51-
${_hdf5_binprior}
44+
find_package(HDF5 CONFIG PATHS ${CMAKE_INSTALL_PREFIX} NO_DEFAULT_PATH QUIET)
45+
if(HDF5_FOUND)
46+
message(FATAL_ERROR "HDF5 library already installed: ${HDF5_DIR}
5247
Please pick a new install location or completely remove the old HDF5 install directory.
5348
Otherwise, HDF5 will fail to link correctly with prior version and this version mixed.")
5449
endif()
@@ -58,12 +53,6 @@ file(READ ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/libraries.json json)
5853

5954
set_property(DIRECTORY PROPERTY EP_UPDATE_DISCONNECTED true)
6055

61-
if(hdf5_parallel)
62-
find_package(MPI COMPONENTS C REQUIRED)
63-
include(${PROJECT_SOURCE_DIR}/../cmake/check_mpi.cmake)
64-
check_mpi_version()
65-
endif()
66-
6756
include(${PROJECT_SOURCE_DIR}/../cmake/hdf5.cmake)
6857

6958
message(STATUS "Build / install HDF5 ${hdf5_tag} to ${CMAKE_INSTALL_PREFIX}")
@@ -74,3 +63,8 @@ include(FeatureSummary)
7463
add_feature_info(HDF5parallel hdf5_parallel "HDF5 MPI layer")
7564

7665
feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES)
66+
67+
# --- auto-ignore build directory
68+
if(NOT EXISTS ${PROJECT_BINARY_DIR}/.gitignore)
69+
file(WRITE ${PROJECT_BINARY_DIR}/.gitignore "*")
70+
endif()

0 commit comments

Comments
 (0)