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
2+ index 498cf8975..5926f471d 100644
93--- a/CMakeLists.txt
104+++ b/CMakeLists.txt
11- @@ -670,12 +670,28 @@ IF(USE_HDF5)
5+ @@ -9,7 +9,7 @@
6+ #Minimum required CMake Version
7+ cmake_minimum_required(VERSION 3.6.1)
8+
9+ - #Project Name
10+ + #Project Name
11+ project(netCDF LANGUAGES C CXX)
12+ set(PACKAGE "netCDF" CACHE STRING "")
13+
14+ @@ -606,11 +606,20 @@ ENDIF(ENABLE_STRICT_NULL_BYTE_HEADER_PADDING)
15+ ##
16+ SET(USE_HDF5 ${ENABLE_HDF5})
17+ IF(USE_HDF5)
18+ +
19+ + ##
20+ + # Assert HDF5 version meets minimum required version.
21+ + ##
22+ + SET(HDF5_VERSION_REQUIRED 1.8.10)
23+ +
24+ +
25+ ##
26+ # Accommodate developers who have hdf5 libraries and
27+ # headers on their system, but do not have a the hdf
28+ # .cmake files. If this is the case, they should
29+ # specify HDF5_HL_LIBRARY, HDF5_LIBRARY, HDF5_INCLUDE_DIR manually.
30+ + #
31+ + # This script will attempt to determine the version of the HDF5 library programatically.
32+ ##
33+ IF(HDF5_C_LIBRARY AND HDF5_HL_LIBRARY AND HDF5_INCLUDE_DIR)
34+ SET(HDF5_LIBRARIES ${HDF5_C_LIBRARY} ${HDF5_HL_LIBRARY})
35+ @@ -624,10 +633,27 @@ IF(USE_HDF5)
36+ file(READ "${HDF5_INCLUDE_DIR}/H5pubconf.h" _hdf5_version_lines
37+ REGEX "#define[ \t]+H5_VERSION")
38+ string(REGEX REPLACE ".*H5_VERSION .*\"\(.*\)\".*" "\\1" _hdf5_version "${_hdf5_version_lines}")
39+ - set(HDF5_VERSION "${_hdf5_version}")
40+ + set(HDF5_VERSION "${_hdf5_version}" CACHE STRING "")
41+ unset(_hdf5_version)
42+ unset(_hdf5_version_lines)
43+ endif ()
44+ + MESSAGE(STATUS "Found HDF5 libraries version ${HDF5_VERSION}")
45+ + ###
46+ + # If HDF5_VERSION is still empty, we have a problem.
47+ + # Error out.
48+ + ###
49+ + IF("${HDF5_VERSION}" STREQUAL "")
50+ + MESSAGE(FATAL_ERR "Unable to determine HDF5 version. NetCDF requires at least version ${HDF5_VERSION_REQUIRED}. Please ensure that libhdf5 is installed and accessible.")
51+ + ENDIF()
52+ +
53+ + ###
54+ + # Now that we know HDF5_VERSION isn't empty, we can check for minimum required version,
55+ + # and toggle various options.
56+ + ###
57+ + IF(${HDF5_VERSION} VERSION_LESS ${HDF5_VERSION_REQUIRED})
58+ + MESSAGE(FATAL_ERROR "netCDF requires at least HDF5 ${HDF5_VERSION_REQUIRED}. Found ${HDF5_VERSION}.")
59+ + ENDIF()
60+ +
61+ ELSE(HDF5_C_LIBRARY AND HDF5_HL_LIBRARY AND HDF5_INCLUDE_DIR) # We are seeking out HDF5 with Find Package.
62+ ###
63+ # For now we assume that if we are building netcdf
64+ @@ -665,25 +691,49 @@ IF(USE_HDF5)
65+ # HDF5 variables we need to munge.
1266 ##
13- SET(HDF5_VERSION_REQUIRED 1.8.10)
1467
68+ - ##
69+ - # Assert HDF5 version meets minimum required version.
70+ - ##
71+ - SET(HDF5_VERSION_REQUIRED 1.8.10)
72+ -
1573+ # Some versions of HDF5 set HDF5_VERSION_STRING instead of HDF5_VERSION
1674 IF(HDF5_VERSION_STRING AND NOT HDF5_VERSION)
1775 SET(HDF5_VERSION ${HDF5_VERSION_STRING})
@@ -24,27 +82,24 @@ index 498cf8975..7ecd7f576 100644
2482 IF("${HDF5_VERSION}" STREQUAL "")
2583- MESSAGE(STATUS "Unable to determine hdf5 version. NetCDF requires at least version ${HDF5_VERSION_REQUIRED}")
2684- ELSE()
85+ - IF(${HDF5_VERSION} VERSION_LESS ${HDF5_VERSION_REQUIRED})
86+ - MESSAGE(FATAL_ERROR
87+ - "netCDF requires at least HDF5 ${HDF5_VERSION_REQUIRED}. Found ${HDF5_VERSION}.")
88+ - ELSE()
2789+ MESSAGE(STATUS "HDF5_VERSION not detected. Attempting to determine programatically.")
2890+ IF (EXISTS "${HDF5_INCLUDE_DIR}/H5pubconf.h")
2991+ file(READ "${HDF5_INCLUDE_DIR}/H5pubconf.h" _hdf5_version_lines
3092+ REGEX "#define[ \t]+H5_VERSION")
3193+ string(REGEX REPLACE ".*H5_VERSION .*\"\(.*\)\".*" "\\1" _hdf5_version "${_hdf5_version_lines}")
32- + set(HDF5_VERSION "${_hdf5_version}")
94+ + set(HDF5_VERSION "${_hdf5_version}" CACHE STRING "" )
3395+ unset(_hdf5_version)
3496+ 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)
97+ MESSAGE(STATUS "Found HDF5 libraries version ${HDF5_VERSION}")
4398 ENDIF()
99+ + ELSE()
100+ + SET(HDF5_VERSION ${HDF5_VERSION} CACHE STRING "")
44101 ENDIF()
45102
46- +
47- +
48103+ ###
49104+ # If HDF5_VERSION is still empty, we have a problem.
50105+ # Error out.
@@ -53,23 +108,21 @@ index 498cf8975..7ecd7f576 100644
53108+ MESSAGE(FATAL_ERR "Unable to determine HDF5 version. NetCDF requires at least version ${HDF5_VERSION_REQUIRED}. Please ensure that libhdf5 is installed and accessible.")
54109+ ENDIF()
55110+
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()
111+ + ###
112+ + # Now that we know HDF5_VERSION isn't empty, we can check for minimum required version,
113+ + # and toggle various options.
114+ + ###
65115+
66- + MESSAGE("-- HDF5_UTF8_PATHS (HDF5 version 1.10.6+): ${HDF5_UTF8_PATHS}")
116+ + IF(${HDF5_VERSION} VERSION_LESS ${HDF5_VERSION_REQUIRED})
117+ + MESSAGE(FATAL_ERROR "netCDF requires at least HDF5 ${HDF5_VERSION_REQUIRED}. Found ${HDF5_VERSION}.")
118+ + ENDIF()
67119+
120+ +
68121+
69122 ##
70123 # Include the HDF5 include directory.
71124 ##
72- @@ -718,6 +757 ,10 @@ IF(USE_HDF5)
125+ @@ -718,6 +768 ,10 @@ IF(USE_HDF5)
73126 ENDIF(${HDF5_VERSION} VERSION_GREATER "1.8.15")
74127
75128 ELSE(MSVC)
@@ -80,7 +133,26 @@ index 498cf8975..7ecd7f576 100644
80133
81134 IF(HDF5_hdf5_LIBRARY AND NOT HDF5_C_LIBRARY)
82135 SET(HDF5_C_LIBRARY ${HDF5_hdf5_LIBRARY})
83- @@ -816,16 +859,6 @@ IF(USE_HDF5)
136+ @@ -764,6 +818,18 @@ IF(USE_HDF5)
137+ MESSAGE(STATUS "HDF5 has szip.")
138+ ENDIF()
139+
140+ + ####
141+ + # Check to see if HDF5 library is 1.10.6 or greater.
142+ + # Used to control path name conversion
143+ + ####
144+ + IF(${HDF5_VERSION} VERSION_GREATER "1.10.5")
145+ + SET(HDF5_UTF8_PATHS ON)
146+ + ELSE()
147+ + SET(HDF5_UTF8_PATHS OFF)
148+ + ENDIF()
149+ +
150+ + MESSAGE("-- HDF5_UTF8_PATHS (HDF5 version 1.10.6+): ${HDF5_UTF8_PATHS}")
151+ +
152+ # Find out if HDF5 was built with parallel support.
153+ # Do that by checking for the targets H5Pget_fapl_mpiposx and
154+ # H5Pget_fapl_mpio in ${HDF5_LIB}.
155+ @@ -816,16 +882,6 @@ IF(USE_HDF5)
84156 SET(HAS_PAR_FILTERS no CACHE STRING "")
85157 ENDIF()
86158
0 commit comments