1- commit ebbe3b438edd54b801b6465b8ab1b36b013ff96d
2- Author: Ward Fisher <wfisher@ucar.edu>
3- Date: Mon Aug 30 09:10:14 2021 -0600
4-
5- Revamping the HDF5_VERSION logic.
6-
71diff --git a/CMakeLists.txt b/CMakeLists.txt
8- index 498cf8975..7ecd7f576 100644
92--- a/CMakeLists.txt
103+++ b/CMakeLists.txt
11- @@ -670,12 +670,28 @@ IF(USE_HDF5)
4+ @@ -606,11 +606,20 @@ ENDIF(ENABLE_STRICT_NULL_BYTE_HEADER_PADDING)
5+ ##
6+ SET(USE_HDF5 ${ENABLE_HDF5})
7+ IF(USE_HDF5)
8+ +
9+ + ##
10+ + # Assert HDF5 version meets minimum required version.
11+ + ##
12+ + SET(HDF5_VERSION_REQUIRED 1.8.10)
13+ +
14+ +
15+ ##
16+ # Accommodate developers who have hdf5 libraries and
17+ # headers on their system, but do not have a the hdf
18+ # .cmake files. If this is the case, they should
19+ # specify HDF5_HL_LIBRARY, HDF5_LIBRARY, HDF5_INCLUDE_DIR manually.
20+ + #
21+ + # This script will attempt to determine the version of the HDF5 library programatically.
22+ ##
23+ IF(HDF5_C_LIBRARY AND HDF5_HL_LIBRARY AND HDF5_INCLUDE_DIR)
24+ SET(HDF5_LIBRARIES ${HDF5_C_LIBRARY} ${HDF5_HL_LIBRARY})
25+ @@ -620,6 +629,31 @@ IF(USE_HDF5)
26+ INCLUDE_DIRECTORIES(${HDF5_INCLUDE_DIR})
27+ MESSAGE(STATUS "Using HDF5 C Library: ${HDF5_C_LIBRARY}")
28+ MESSAGE(STATUS "Using HDF5 HL LIbrary: ${HDF5_HL_LIBRARY}")
29+ + if (EXISTS "${HDF5_INCLUDE_DIR}/H5pubconf.h")
30+ + file(READ "${HDF5_INCLUDE_DIR}/H5pubconf.h" _hdf5_version_lines
31+ + REGEX "#define[ \t]+H5_VERSION")
32+ + string(REGEX REPLACE ".*H5_VERSION .*\"\(.*\)\".*" "\\1" _hdf5_version "${_hdf5_version_lines}")
33+ + set(HDF5_VERSION "${_hdf5_version}" CACHE STRING "")
34+ + unset(_hdf5_version)
35+ + unset(_hdf5_version_lines)
36+ + endif ()
37+ + MESSAGE(STATUS "Found HDF5 libraries version ${HDF5_VERSION}")
38+ + ###
39+ + # If HDF5_VERSION is still empty, we have a problem.
40+ + # Error out.
41+ + ###
42+ + IF("${HDF5_VERSION}" STREQUAL "")
43+ + MESSAGE(FATAL_ERR "Unable to determine HDF5 version. NetCDF requires at least version ${HDF5_VERSION_REQUIRED}. Please ensure that libhdf5 is installed and accessible.")
44+ + ENDIF()
45+ +
46+ + ###
47+ + # Now that we know HDF5_VERSION isn't empty, we can check for minimum required version,
48+ + # and toggle various options.
49+ + ###
50+ + IF(${HDF5_VERSION} VERSION_LESS ${HDF5_VERSION_REQUIRED})
51+ + MESSAGE(FATAL_ERROR "netCDF requires at least HDF5 ${HDF5_VERSION_REQUIRED}. Found ${HDF5_VERSION}.")
52+ + ENDIF()
53+ +
54+ ELSE(HDF5_C_LIBRARY AND HDF5_HL_LIBRARY AND HDF5_INCLUDE_DIR) # We are seeking out HDF5 with Find Package.
55+ ###
56+ # For now we assume that if we are building netcdf
57+ @@ -657,25 +691,49 @@ IF(USE_HDF5)
58+ # HDF5 variables we need to munge.
1259 ##
13- SET(HDF5_VERSION_REQUIRED 1.8.10)
1460
61+ - ##
62+ - # Assert HDF5 version meets minimum required version.
63+ - ##
64+ - SET(HDF5_VERSION_REQUIRED 1.8.10)
65+ -
1566+ # Some versions of HDF5 set HDF5_VERSION_STRING instead of HDF5_VERSION
1667 IF(HDF5_VERSION_STRING AND NOT HDF5_VERSION)
1768 SET(HDF5_VERSION ${HDF5_VERSION_STRING})
@@ -24,27 +75,24 @@ index 498cf8975..7ecd7f576 100644
2475 IF("${HDF5_VERSION}" STREQUAL "")
2576- MESSAGE(STATUS "Unable to determine hdf5 version. NetCDF requires at least version ${HDF5_VERSION_REQUIRED}")
2677- ELSE()
78+ - IF(${HDF5_VERSION} VERSION_LESS ${HDF5_VERSION_REQUIRED})
79+ - MESSAGE(FATAL_ERROR
80+ - "netCDF requires at least HDF5 ${HDF5_VERSION_REQUIRED}. Found ${HDF5_VERSION}.")
81+ - ELSE()
2782+ MESSAGE(STATUS "HDF5_VERSION not detected. Attempting to determine programatically.")
2883+ IF (EXISTS "${HDF5_INCLUDE_DIR}/H5pubconf.h")
2984+ file(READ "${HDF5_INCLUDE_DIR}/H5pubconf.h" _hdf5_version_lines
3085+ REGEX "#define[ \t]+H5_VERSION")
3186+ string(REGEX REPLACE ".*H5_VERSION .*\"\(.*\)\".*" "\\1" _hdf5_version "${_hdf5_version_lines}")
32- + set(HDF5_VERSION "${_hdf5_version}")
87+ + set(HDF5_VERSION "${_hdf5_version}" CACHE STRING "" )
3388+ unset(_hdf5_version)
3489+ unset(_hdf5_version_lines)
35- + MESSAGE(STATUS "Found HDF5 libraries version ${HDF5_VERSION}")
36- + ENDIF()
37- +
38- + ELSE() # Original HDF5_VERSION blank check.
39- IF(${HDF5_VERSION} VERSION_LESS ${HDF5_VERSION_REQUIRED})
40- MESSAGE(FATAL_ERROR
41- "netCDF requires at least HDF5 ${HDF5_VERSION_REQUIRED}. Found ${HDF5_VERSION}.")
42- @@ -684,6 +700,29 @@ IF(USE_HDF5)
90+ MESSAGE(STATUS "Found HDF5 libraries version ${HDF5_VERSION}")
4391 ENDIF()
92+ + ELSE()
93+ + SET(HDF5_VERSION ${HDF5_VERSION} CACHE STRING "")
4494 ENDIF()
4595
46- +
47- +
4896+ ###
4997+ # If HDF5_VERSION is still empty, we have a problem.
5098+ # Error out.
@@ -53,23 +101,21 @@ index 498cf8975..7ecd7f576 100644
53101+ MESSAGE(FATAL_ERR "Unable to determine HDF5 version. NetCDF requires at least version ${HDF5_VERSION_REQUIRED}. Please ensure that libhdf5 is installed and accessible.")
54102+ ENDIF()
55103+
56- + ####
57- + # Check to see if HDF5 library is 1.10.6 or greater.
58- + # Used to control path name conversion
59- + ####
60- + IF(${HDF5_VERSION} VERSION_GREATER "1.10.5")
61- + SET(HDF5_UTF8_PATHS ON)
62- + ELSE()
63- + SET(HDF5_UTF8_PATHS OFF)
64- + ENDIF()
104+ + ###
105+ + # Now that we know HDF5_VERSION isn't empty, we can check for minimum required version,
106+ + # and toggle various options.
107+ + ###
65108+
66- + MESSAGE("-- HDF5_UTF8_PATHS (HDF5 version 1.10.6+): ${HDF5_UTF8_PATHS}")
109+ + IF(${HDF5_VERSION} VERSION_LESS ${HDF5_VERSION_REQUIRED})
110+ + MESSAGE(FATAL_ERROR "netCDF requires at least HDF5 ${HDF5_VERSION_REQUIRED}. Found ${HDF5_VERSION}.")
111+ + ENDIF()
67112+
113+ +
68114+
69115 ##
70116 # Include the HDF5 include directory.
71117 ##
72- @@ -718 ,6 +757 ,10 @@ IF(USE_HDF5)
118+ @@ -710 ,6 +768 ,10 @@ IF(USE_HDF5)
73119 ENDIF(${HDF5_VERSION} VERSION_GREATER "1.8.15")
74120
75121 ELSE(MSVC)
@@ -80,7 +126,26 @@ index 498cf8975..7ecd7f576 100644
80126
81127 IF(HDF5_hdf5_LIBRARY AND NOT HDF5_C_LIBRARY)
82128 SET(HDF5_C_LIBRARY ${HDF5_hdf5_LIBRARY})
83- @@ -816,16 +859,6 @@ IF(USE_HDF5)
129+ @@ -756,6 +818,18 @@ IF(USE_HDF5)
130+ MESSAGE(STATUS "HDF5 has szip.")
131+ ENDIF()
132+
133+ + ####
134+ + # Check to see if HDF5 library is 1.10.6 or greater.
135+ + # Used to control path name conversion
136+ + ####
137+ + IF(${HDF5_VERSION} VERSION_GREATER "1.10.5")
138+ + SET(HDF5_UTF8_PATHS ON)
139+ + ELSE()
140+ + SET(HDF5_UTF8_PATHS OFF)
141+ + ENDIF()
142+ +
143+ + MESSAGE("-- HDF5_UTF8_PATHS (HDF5 version 1.10.6+): ${HDF5_UTF8_PATHS}")
144+ +
145+ # Find out if HDF5 was built with parallel support.
146+ # Do that by checking for the targets H5Pget_fapl_mpiposx and
147+ # H5Pget_fapl_mpio in ${HDF5_LIB}.
148+ @@ -808,16 +882,6 @@ IF(USE_HDF5)
84149 SET(HAS_PAR_FILTERS no CACHE STRING "")
85150 ENDIF()
86151
0 commit comments