1
1
cmake_minimum_required (VERSION 3.20)
2
+ # https://github.com/HDFGroup/hdf5/blob/develop/CMakeLists.txt
3
+
2
4
project (HDF5_build
3
5
LANGUAGES C Fortran
4
6
)
@@ -7,48 +9,41 @@ option(hdf5_parallel "build HDF5 parallel MPI" on)
7
9
option (zlib_legacy "use legacy zlib 1.x" )
8
10
9
11
# --- 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} )
14
13
15
14
list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} /../cmake)
16
15
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)
17
25
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)
21
27
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()
26
30
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 ()
32
40
endif ()
33
- endif ()
41
+ endif (hdf5_parallel )
34
42
35
43
# 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}
52
47
Please pick a new install location or completely remove the old HDF5 install directory.
53
48
Otherwise, HDF5 will fail to link correctly with prior version and this version mixed." )
54
49
endif ()
@@ -58,12 +53,6 @@ file(READ ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/libraries.json json)
58
53
59
54
set_property (DIRECTORY PROPERTY EP_UPDATE_DISCONNECTED true )
60
55
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
-
67
56
include (${PROJECT_SOURCE_DIR} /../cmake/hdf5.cmake)
68
57
69
58
message (STATUS "Build / install HDF5 ${hdf5_tag} to ${CMAKE_INSTALL_PREFIX} " )
@@ -74,3 +63,8 @@ include(FeatureSummary)
74
63
add_feature_info(HDF5parallel hdf5_parallel "HDF5 MPI layer" )
75
64
76
65
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