11cmake_minimum_required (VERSION 3.20)
2+ # https://github.com/HDFGroup/hdf5/blob/develop/CMakeLists.txt
3+
24project (HDF5_build
35LANGUAGES C Fortran
46)
@@ -7,48 +9,41 @@ option(hdf5_parallel "build HDF5 parallel MPI" on)
79option (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
1514list (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." )
5449endif ()
@@ -58,12 +53,6 @@ file(READ ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/libraries.json json)
5853
5954set_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-
6756include (${PROJECT_SOURCE_DIR} /../cmake/hdf5.cmake)
6857
6958message (STATUS "Build / install HDF5 ${hdf5_tag} to ${CMAKE_INSTALL_PREFIX} " )
@@ -74,3 +63,8 @@ include(FeatureSummary)
7463add_feature_info(HDF5parallel hdf5_parallel "HDF5 MPI layer" )
7564
7665feature_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