|
| 1 | +--- a/CMakeLists.txt |
| 2 | ++++ b/CMakeLists.txt |
| 3 | +@@ -571,175 +571,12 @@ OPTION(USE_HDF5 "Use HDF5." ${ENABLE_NETCDF_4}) |
| 4 | + IF(USE_HDF5 OR ENABLE_NETCDF_4) |
| 5 | + SET(USE_HDF5 ON) |
| 6 | + SET(USE_NETCDF4 ON) |
| 7 | +- ## |
| 8 | +- # Accommodate developers who have hdf5 libraries and |
| 9 | +- # headers on their system, but do not have a the hdf |
| 10 | +- # .cmake files. If this is the case, they should |
| 11 | +- # specify HDF5_HL_LIBRARY, HDF5_LIBRARY, HDF5_INCLUDE_DIR manually. |
| 12 | +- ## |
| 13 | +- IF(HDF5_C_LIBRARY AND HDF5_HL_LIBRARY AND HDF5_INCLUDE_DIR) |
| 14 | +- SET(HDF5_LIBRARIES ${HDF5_C_LIBRARY} ${HDF5_HL_LIBRARY}) |
| 15 | +- SET(HDF5_C_LIBRARIES ${HDF5_C_LIBRARY}) |
| 16 | +- SET(HDF5_C_LIBRARY_hdf5 ${HDF5_C_LIBRARY}) |
| 17 | +- SET(HDF5_HL_LIBRARIES ${HDF5_HL_LIBRARY}) |
| 18 | +- INCLUDE_DIRECTORIES(${HDF5_INCLUDE_DIR}) |
| 19 | +- MESSAGE(STATUS "Using HDF5 C Library: ${HDF5_C_LIBRARY}") |
| 20 | +- MESSAGE(STATUS "Using HDF5 HL LIbrary: ${HDF5_HL_LIBRARY}") |
| 21 | +- ELSE(HDF5_C_LIBRARY AND HDF5_HL_LIBRARY AND HDF5_INCLUDE_DIR) # We are seeking out HDF5 with Find Package. |
| 22 | +- ### |
| 23 | +- # For now we assume that if we are building netcdf |
| 24 | +- # as a shared library, we will use hdf5 as a shared |
| 25 | +- # library. If we are building netcdf statically, |
| 26 | +- # we will use a static library. This can be toggled |
| 27 | +- # by explicitly modifying NC_FIND_SHARED_LIBS. |
| 28 | +- ## |
| 29 | +- IF(NC_FIND_SHARED_LIBS) |
| 30 | +- SET(NC_HDF5_LINK_TYPE "shared") |
| 31 | +- SET(NC_HDF5_LINK_TYPE_UPPER "SHARED") |
| 32 | +- ADD_DEFINITIONS(-DH5_BUILT_AS_DYNAMIC_LIB) |
| 33 | +- ELSE(NC_FIND_SHARED_LIBS) |
| 34 | +- SET(NC_HDF5_LINK_TYPE "static") |
| 35 | +- SET(NC_HDF5_LINK_TYPE_UPPER "STATIC") |
| 36 | +- ADD_DEFINITIONS(-DH5_BUILT_AS_STATIC_LIB) |
| 37 | +- ENDIF(NC_FIND_SHARED_LIBS) |
| 38 | +- |
| 39 | +- ##### |
| 40 | +- # First, find the C and HL libraries. |
| 41 | +- # |
| 42 | +- # This has been updated to reflect what is in the hdf5 |
| 43 | +- # examples, even though the previous version of what we |
| 44 | +- # had worked. |
| 45 | +- ##### |
| 46 | +- IF(MSVC) |
| 47 | +- SET(SEARCH_PACKAGE_NAME ${HDF5_PACKAGE_NAME}) |
| 48 | +- FIND_PACKAGE(HDF5 NAMES ${SEARCH_PACKAGE_NAME} COMPONENTS C HL CONFIG REQUIRED ${NC_HDF5_LINK_TYPE}) |
| 49 | +- ELSE(MSVC) |
| 50 | +- FIND_PACKAGE(HDF5 COMPONENTS C HL REQUIRED) |
| 51 | +- ENDIF(MSVC) |
| 52 | +- |
| 53 | +- ## |
| 54 | +- # Next, check the HDF5 version. This will inform which |
| 55 | +- # HDF5 variables we need to munge. |
| 56 | +- ## |
| 57 | +- |
| 58 | +- ## |
| 59 | +- # Assert HDF5 version meets minimum required version. |
| 60 | +- ## |
| 61 | +- SET(HDF5_VERSION_REQUIRED 1.8.10) |
| 62 | +- SET(HDF5_PAR_FILTER_VERSION 1.10.3) |
| 63 | +- |
| 64 | +- IF(HDF5_VERSION_STRING AND NOT HDF5_VERSION) |
| 65 | +- SET(HDF5_VERSION ${HDF5_VERSION_STRING}) |
| 66 | +- ENDIF() |
| 67 | + |
| 68 | +- IF("${HDF5_VERSION}" STREQUAL "") |
| 69 | +- MESSAGE(STATUS "Unable to determine hdf5 version. NetCDF requires at least version ${HDF5_VERSION_REQUIRED}") |
| 70 | +- ELSE() |
| 71 | +- IF(${HDF5_VERSION} VERSION_LESS ${HDF5_VERSION_REQUIRED}) |
| 72 | +- MESSAGE(FATAL_ERROR |
| 73 | +- "netCDF requires at least HDF5 ${HDF5_VERSION_REQUIRED}. Found ${HDF5_VERSION}.") |
| 74 | +- ELSE() |
| 75 | +- MESSAGE(STATUS "Found HDF5 libraries version ${HDF5_VERSION}") |
| 76 | +- ENDIF() |
| 77 | +- ENDIF() |
| 78 | ++ FIND_PACKAGE(HDF5 REQUIRED) |
| 79 | ++ INCLUDE_DIRECTORIES(${HDF5_INCLUDE_DIRS}) |
| 80 | ++ MESSAGE(STATUS "Using HDF5 Libraries: ${HDF5_LIBRARIES}") |
| 81 | + |
| 82 | +- # Determine whether parallel filter operation is supported. |
| 83 | +- IF(${HDF5_VERSION} VERSION_LESS ${HDF5_PAR_FILTER_VERSION}) |
| 84 | +- SET(HDF5_HAS_PAR_FILTERS, "no") |
| 85 | +- ELSE() |
| 86 | +- SET(HDF5_HAS_PAR_FILTERS, "yes") |
| 87 | +- ENDIF() |
| 88 | +- |
| 89 | +- ## |
| 90 | +- # Include the HDF5 include directory. |
| 91 | +- ## |
| 92 | +- IF(HDF5_INCLUDE_DIRS AND NOT HDF5_INCLUDE_DIR) |
| 93 | +- SET(HDF5_INCLUDE_DIR ${HDF5_INCLUDE_DIRS}) |
| 94 | +- ENDIF() |
| 95 | +- MESSAGE(STATUS "Using HDF5 include dir: ${HDF5_INCLUDE_DIR}") |
| 96 | +- INCLUDE_DIRECTORIES(${HDF5_INCLUDE_DIR}) |
| 97 | +- |
| 98 | +- ### |
| 99 | +- # This is the block where we figure out what the appropriate |
| 100 | +- # variables are, and we ensure that we end up with |
| 101 | +- # HDF5_C_LIBRARY, HDF5_HL_LIBRARY and HDF5_LIBRARIES. |
| 102 | +- ### |
| 103 | +- IF(MSVC) |
| 104 | +- ## |
| 105 | +- # HDF5 1.8.15 defined HDF5_LIBRARIES. |
| 106 | +- ## |
| 107 | +- IF(${HDF5_VERSION} VERSION_LESS "1.8.16") |
| 108 | +- SET(HDF5_C_LIBRARY hdf5) |
| 109 | +- SET(HDF5_C_LIBRARY_hdf5 hdf5) |
| 110 | +- ENDIF(${HDF5_VERSION} VERSION_LESS "1.8.16") |
| 111 | +- |
| 112 | +- IF(${HDF5_VERSION} VERSION_GREATER "1.8.15") |
| 113 | +- IF(NOT HDF5_LIBRARIES AND HDF5_C_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY AND HDF5_HL_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY) |
| 114 | +- SET(HDF5_C_LIBRARY ${HDF5_C_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY}) |
| 115 | +- SET(HDF5_C_LIBRARY_hdf5 ${HDF5_C_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY}) |
| 116 | +- SET(HDF5_HL_LIBRARY ${HDF5_HL_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY}) |
| 117 | +- |
| 118 | +- SET(HDF5_LIBRARIES ${HDF5_C_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY} ${HDF5_HL_${NC_HDF5_LINK_TYPE_UPPER}_LIBRARY}) |
| 119 | +- ENDIF() |
| 120 | +- ENDIF(${HDF5_VERSION} VERSION_GREATER "1.8.15") |
| 121 | +- |
| 122 | +- ELSE(MSVC) |
| 123 | +- |
| 124 | +- # Depending on the install, either HDF5_hdf_library or |
| 125 | +- # HDF5_C_LIBRARIES may be defined. We must check for either. |
| 126 | +- IF(HDF5_C_LIBRARIES AND NOT HDF5_hdf5_LIBRARY) |
| 127 | +- SET(HDF5_hdf5_LIBRARY ${HDF5_C_LIBRARIES}) |
| 128 | +- ENDIF() |
| 129 | +- |
| 130 | +- ENDIF(MSVC) |
| 131 | +- IF(NOT HDF5_C_LIBRARY) |
| 132 | +- SET(HDF5_C_LIBRARY hdf5) |
| 133 | +- ENDIF() |
| 134 | +- ENDIF(HDF5_C_LIBRARY AND HDF5_HL_LIBRARY AND HDF5_INCLUDE_DIR) |
| 135 | +- |
| 136 | +- FIND_PACKAGE(Threads) |
| 137 | +- |
| 138 | +- # There is a missing case in the above code so default it |
| 139 | +- IF(NOT HDF5_C_LIBRARY_HDF5 OR "${HDF5_C_LIBRARY_hdf5}" STREQUAL "" ) |
| 140 | +- SET(HDF5_C_LIBRARY_hdf5 "${HDF5_C_LIBRARY}") |
| 141 | +- ENDIF() |
| 142 | +- |
| 143 | +- # Find out if HDF5 was built with parallel support. |
| 144 | +- # Do that by checking for the targets H5Pget_fapl_mpiposx and |
| 145 | +- # H5Pget_fapl_mpio in ${HDF5_LIB}. |
| 146 | +- |
| 147 | +- # H5Pset_fapl_mpiposix and H5Pget_fapl_mpiposix have been removed since HDF5 1.8.12. |
| 148 | +- # Use H5Pset_fapl_mpio and H5Pget_fapl_mpio, instead. |
| 149 | +- # CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Pget_fapl_mpiposix "" HDF5_IS_PARALLEL_MPIPOSIX) |
| 150 | +- |
| 151 | +- CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Pget_fapl_mpio "" HDF5_IS_PARALLEL_MPIO) |
| 152 | +- IF(HDF5_IS_PARALLEL_MPIO) |
| 153 | +- SET(HDF5_PARALLEL ON) |
| 154 | +- ELSE() |
| 155 | +- SET(HDF5_PARALLEL OFF) |
| 156 | +- ENDIF() |
| 157 | +- |
| 158 | +- #Check to see if HDF5 library has collective metadata APIs, (HDF5 >= 1.10.0) |
| 159 | +- CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Pset_all_coll_metadata_ops "" HDF5_HAS_COLL_METADATA_OPS) |
| 160 | +- |
| 161 | +- #Check to see if H5Z_SZIP exists in HDF5_Libraries. If so, we must use szip. |
| 162 | +- CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Z_SZIP "" USE_SZIP) |
| 163 | +- IF(USE_SZIP) |
| 164 | +- FIND_LIBRARY(SZIP NAMES szip sz) |
| 165 | +- IF(SZIP) |
| 166 | +- SET(HAVE_H5Z_SZIP 1) |
| 167 | +- SET(SZIP_LIBRARY ${SZIP}) |
| 168 | +- SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${SZIP}) |
| 169 | +- MESSAGE(STATUS "HDF5 has szip.") |
| 170 | +- ELSE() |
| 171 | +- MESSAGE(FATAL_ERROR "HDF5 Requires SZIP, but cannot find libszip or libsz.") |
| 172 | +- ENDIF() |
| 173 | +- ENDIF() |
| 174 | +- |
| 175 | +- CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Pset_libver_bounds "" HAVE_H5PSET_LIBVER_BOUNDS) |
| 176 | +- CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5free_memory "" HAVE_H5FREE_MEMORY) |
| 177 | +- CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5allocate_memory "" HAVE_H5ALLOCATE_MEMORY) |
| 178 | +- CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5resize_memory "" HAVE_H5RESIZE_MEMORY) |
| 179 | ++ SET(HDF5_PARALLEL OFF) |
| 180 | + |
| 181 | + IF(HDF5_PARALLEL) |
| 182 | + SET(HDF5_CC h5pcc) |
| 183 | +@@ -747,39 +584,13 @@ IF(USE_HDF5 OR ENABLE_NETCDF_4) |
| 184 | + SET(HDF5_CC h5cc) |
| 185 | + ENDIF() |
| 186 | + |
| 187 | +- # Check to see if this is hdf5-1.10.3 or later. |
| 188 | +- CHECK_LIBRARY_EXISTS(${HDF5_C_LIBRARY_hdf5} H5Dread_chunk "" HDF5_SUPPORTS_PAR_FILTERS) |
| 189 | +- |
| 190 | +- SET(H5_USE_16_API 1) |
| 191 | +- OPTION(NC_ENABLE_HDF_16_API "Enable HDF5 1.6.x Compatibility(Required)" ON) |
| 192 | +- IF(NOT NC_ENABLE_HDF_16_API) |
| 193 | +- SET(H5_USE_16_API 0) |
| 194 | +- ENDIF() |
| 195 | ++ SET(H5_USE_16_API 1) |
| 196 | + |
| 197 | + FIND_PATH(HAVE_HDF5_H hdf5.h PATHS ${HDF5_INCLUDE_DIR} NO_DEFAULT_PATH) |
| 198 | +- FIND_PATH(HAVE_HDF5_H hdf5.h) |
| 199 | + IF(NOT HAVE_HDF5_H) |
| 200 | + MESSAGE(FATAL_ERROR "Compiling a test with hdf5 failed. Either hdf5.h cannot be found, or the log messages should be checked for another reason.") |
| 201 | +- ELSE(NOT HAVE_HDF5_H) |
| 202 | +- INCLUDE_DIRECTORIES(${HAVE_HDF5_H}) |
| 203 | + ENDIF(NOT HAVE_HDF5_H) |
| 204 | + |
| 205 | +- # Check to ensure that HDF5 was built with zlib. |
| 206 | +- set (CMAKE_REQUIRED_INCLUDES ${HAVE_HDF5_H}) |
| 207 | +- CHECK_C_SOURCE_COMPILES("#include <H5pubconf.h> |
| 208 | +- #if !H5_HAVE_ZLIB_H |
| 209 | +- #error |
| 210 | +- #endif |
| 211 | +- int main() { |
| 212 | +- int x = 1;}" HAVE_HDF5_ZLIB) |
| 213 | +- IF(NOT HAVE_HDF5_ZLIB) |
| 214 | +- MESSAGE(FATAL_ERROR "HDF5 was built without zlib. Rebuild HDF5 with zlib.") |
| 215 | +- ENDIF() |
| 216 | +- |
| 217 | +- #option to include HDF5 High Level header file (hdf5_hl.h) in case we are not doing a make install |
| 218 | +- INCLUDE_DIRECTORIES(${HDF5_HL_INCLUDE_DIR}) |
| 219 | +- |
| 220 | +- |
| 221 | + ENDIF(USE_HDF5 OR ENABLE_NETCDF_4) |
| 222 | + |
| 223 | + # See if we have libcurl |
| 224 | +--- a/liblib/CMakeLists.txt |
| 225 | ++++ b/liblib/CMakeLists.txt |
| 226 | +@@ -68,23 +68,7 @@ IF(HAVE_LIBDL) |
| 227 | + ENDIF() |
| 228 | + |
| 229 | + IF(USE_HDF5 OR USE_NETCDF4) |
| 230 | +- IF(NOT MSVC) |
| 231 | +- # Some version of cmake define HDF5_hdf5_LIBRARY instead of |
| 232 | +- # HDF5_LIBRARY. Same with HDF5_HL_LIBRARIES |
| 233 | +- IF(HDF5_hdf5_LIBRARY AND NOT HDF5_C_LIBRARIES) |
| 234 | +- SET(HDF5_C_LIBRARIES ${HDF5_hdf5_LIBRARY}) |
| 235 | +- ENDIF() |
| 236 | +- IF(HDF5_hdf5_hl_LIBRARY AND NOT HDF5_HL_LIBRARIES) |
| 237 | +- SET(HDF5_HL_LIBRARIES ${HDF5_hdf5_hl_LIBRARY}) |
| 238 | +- ENDIF() |
| 239 | +- # The order of the libraries is important here for static |
| 240 | +- # builds: |
| 241 | +- # Make sure that HDF5_C_LIBRARY appears *after* |
| 242 | +- # HDF5_HL_LIBRARY. |
| 243 | +- SET(TLL_LIBS ${HDF5_HL_LIBRARIES} ${HDF5_C_LIBRARIES} ${TLL_LIBS} ${SZIP_LIBRARY}) |
| 244 | +- ELSE() # Windows CMake defines HDF5_LIBRARIES. |
| 245 | +- SET(TLL_LIBS ${HDF5_LIBRARIES} ${TLL_LIBS} ${SZIP_LIBRARY}) |
| 246 | +- ENDIF() |
| 247 | ++ SET(TLL_LIBS ${HDF5_LIBRARIES} ${TLL_LIBS} ${SZIP_LIBRARY}) |
| 248 | + ENDIF() |
| 249 | + |
| 250 | + IF(USE_DAP) |
0 commit comments