Skip to content

Commit

Permalink
changes to HDF5 support (mostly for Windows compatibility)
Browse files Browse the repository at this point in the history
- use version HDF5 1.8.12 on Windows if Matlab is being built (see #208). At the moment the version is hard-wired. However, this likely introduced a conflict with Python as it usually uses a more recent version of HDF5 (certainly the Anaconda version does)
- add a patch for HDF5 1.8.12 such that it compiles post VS 2013.
- introduce a HDF5_DOWNLOAD_VERSION variable
- introduce a HDF5_CMAKE_ARGS variable for use in the cmake files that depend on HDF5

This now works fine on Windows as far as I see. On Windows, we will need to have 2 separate builds for MATLAB or Python support unfortunately.
  • Loading branch information
Kris Thielemans committed Jun 21, 2019
1 parent 2ed82ce commit b6993a0
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 16 deletions.
64 changes: 51 additions & 13 deletions SuperBuild/External_HDF5.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ set(${proj}_TMP_DIR "${SUPERBUILD_WORK_DIR}/builds/${proj}/tmp" )

if(NOT ( DEFINED "USE_SYSTEM_${externalProjName}" AND "${USE_SYSTEM_${externalProjName}}" ) )
message(STATUS "${__indent}Adding project ${proj}")
message(STATUS "HDF5_DOWNLOAD_VERSION=${HDF5_DOWNLOAD_VERSION}")

### --- Project specific additions here
set(HDF5_Install_Dir ${SUPERBUILD_INSTALL_DIR})
Expand All @@ -58,34 +59,76 @@ if(NOT ( DEFINED "USE_SYSTEM_${externalProjName}" AND "${USE_SYSTEM_${externalPr
set(HDF5_BUILD_HL_LIB "ON")
endif()

ExternalProject_Add(${proj}
if (WIN32 AND (${HDF5_DOWNLOAD_VERSION} STREQUAL 1.8.12))
find_program(GIT "git")
set(PATCHFILE "${CMAKE_SOURCE_DIR}/patches/hdf5-${HDF5_DOWNLOAD_VERSION}.patch")
set(PATCH_COMMAND "git apply -v --ignore-space-change --ignore-whitespace ${PATCHFILE}")
endif()

if (PATCH_COMMAND)
message(STATUS "HDF5 PATCH_COMMAND=${PATCH_COMMAND}")
endif()

# sadly, cannot use "PATCH_COMMAND ${PATCH_COMMAND}" below. with weird error
if (PATCHFILE)
ExternalProject_Add(${proj}
${${proj}_EP_ARGS}
URL ${${proj}_URL}
URL_HASH MD5=${${proj}_MD5}
PATCH_COMMAND ${GIT} apply -v --ignore-space-change --ignore-whitespace ${PATCHFILE}
#PATCH_COMMAND ${PATCH_COMMAND}
SOURCE_DIR ${${proj}_SOURCE_DIR}
BINARY_DIR ${${proj}_BINARY_DIR}
DOWNLOAD_DIR ${${proj}_DOWNLOAD_DIR}
STAMP_DIR ${${proj}_STAMP_DIR}
TMP_DIR ${${proj}_TMP_DIR}

CMAKE_ARGS
${CLANG_ARG}
-DHDF5_BUILD_EXAMPLES:BOOL=OFF
-DHDF5_BUILD_TOOLS:BOOL=OFF
-DHDF5_BUILD_HL_LIB:BOOL=${HDF5_BUILD_HL_LIB}
-DBUILD_TESTING:BOOL=OFF
INSTALL_DIR ${HDF5_Install_Dir}
)
else()
ExternalProject_Add(${proj}
${${proj}_EP_ARGS}
URL ${${proj}_URL}
URL_HASH MD5=${${proj}_MD5}
SOURCE_DIR ${${proj}_SOURCE_DIR}
BINARY_DIR ${${proj}_BINARY_DIR}
DOWNLOAD_DIR ${${proj}_DOWNLOAD_DIR}
STAMP_DIR ${${proj}_STAMP_DIR}
TMP_DIR ${${proj}_TMP_DIR}


CMAKE_ARGS
${CLANG_ARG}
-DHDF5_BUILD_EXAMPLES=OFF
-DHDF5_BUILD_TOOLS=OFF
-DHDF5_BUILD_HL_LIB=${HDF5_BUILD_HL_LIB}
-DBUILD_TESTING=OFF
-DHDF5_BUILD_EXAMPLES:BOOL=OFF
-DHDF5_BUILD_TOOLS:BOOL=OFF
-DHDF5_BUILD_HL_LIB:BOOL=${HDF5_BUILD_HL_LIB}
-DBUILD_TESTING:BOOL=OFF
INSTALL_DIR ${HDF5_Install_Dir}
)
)
endif()

set( HDF5_ROOT ${HDF5_Install_Dir} )
set( HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include )
set(HDF5_CMAKE_ARGS
"-DHDF5_ROOT:PATH=${HDF5_ROOT}
-DHDF5_INCLUDE_DIRS:PATH=${HDF5_INCLUDE_DIRS}
-DHDF5_FIND_DEBUG:BOOL=ON"
)

else()
if(${USE_SYSTEM_${externalProjName}})
find_package(${proj} ${${externalProjName}_REQUIRED_VERSION} REQUIRED)
message(STATUS "USING the system ${externalProjName}, found HDF5_INCLUDE_DIRS=${HDF5_INCLUDE_DIRS}, HDF5_C_LIBRARY_hdf5=${HDF5_C_LIBRARY_hdf5},HDF5_LIBRARIES=${HDF5_LIBRARIES}")
set(HDF5_CMAKE_ARGS
"-DHDF5_INCLUDE_DIRS:PATH=${HDF5_INCLUDE_DIRS}
-DHDF5_LIBRARIES:STRING=${HDF5_LIBRARIES}
-DHDF5_FIND_DEBUG:BOOL=ON"
)
endif()
ExternalProject_Add_Empty(${proj} DEPENDS "${${proj}_DEPENDENCIES}"
SOURCE_DIR ${${proj}_SOURCE_DIR}
Expand All @@ -96,9 +139,4 @@ if(NOT ( DEFINED "USE_SYSTEM_${externalProjName}" AND "${USE_SYSTEM_${externalPr
)
endif()

mark_as_superbuild(
VARS
${externalProjName}_DIR:PATH
LABELS
"FIND_PACKAGE"
)
message(STATUS "HDF5_CMAKE_ARGS=${HDF5_CMAKE_ARGS}")
11 changes: 11 additions & 0 deletions patches/hdf5-1.8.12.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
--- xx 2019-06-20 20:38:35.399865600 +0000
+++ ./config/cmake/ConfigureChecks.cmake 2019-06-20 20:20:00.586270800 +0000
@@ -185,7 +185,7 @@
ENDIF (NOT UNIX AND NOT CYGWIN AND NOT MINGW)
SET (H5_HAVE_FUNCTION 1)
SET (H5_GETTIMEOFDAY_GIVES_TZ 1)
- SET (H5_HAVE_TIMEZONE 1)
+ SET (H5_HAVE_TIMEZONE 0)
SET (H5_HAVE_GETTIMEOFDAY 1)
SET (H5_LONE_COLON 0)
IF (MINGW)
28 changes: 25 additions & 3 deletions version_config.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -65,12 +65,34 @@ set(FFTW3double_MD5 ${FFTW3_MD5})
if (WIN32)
# 1.8.15 hdf5-targets.cmake refers to non-existent zlib files
# (or at least this was the case for older Anaconda installations)
set(HDF5_REQUIRED_VERSION 1.8.17)
if (USE_SYSTEM_HDF5)
set(HDF5_REQUIRED_VERSION 1.8.17)
#set(HDF5_REQUIRED_VERSION 1.8)
endif()
if (BUILD_MATLAB)
set(HDF5_DOWNLOAD_MAJOR_MINOR_VERSION "1.8")
set(HDF5_DOWNLOAD_PATCH_VERSION "12")
else()
set(HDF5_DOWNLOAD_MAJOR_MINOR_VERSION "1.10")
set(HDF5_DOWNLOAD_PATCH_VERSION "1")
endif()
set(HDF5_DOWNLOAD_VERSION "${HDF5_DOWNLOAD_MAJOR_MINOR_VERSION}.${HDF5_DOWNLOAD_PATCH_VERSION}")
set(HDF5_URL https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-${HDF5_DOWNLOAD_MAJOR_MINOR_VERSION}/hdf5-${HDF5_DOWNLOAD_VERSION}/src/hdf5-${HDF5_DOWNLOAD_VERSION}.tar.gz)
else()
set(HDF5_REQUIRED_VERSION 1.8)
set(HDF5_DOWNLOAD_MAJOR_MINOR_VERSION "1.10")
set(HDF5_DOWNLOAD_PATCH_VERSION "1")
set(HDF5_DOWNLOAD_VERSION "${HDF5_DOWNLOAD_MAJOR_MINOR_VERSION}.${HDF5_DOWNLOAD_PATCH_VERSION}")
set(HDF5_URL https://www.ccppetmr.ac.uk/sites/www.ccppetmr.ac.uk/files/downloads/hdf5-${HDF5_DOWNLOAD_VERSION}.tar.gz)
endif()

if (${HDF5_DOWNLOAD_VERSION} STREQUAL 1.8.12)
set(HDF5_MD5 4711e0d6b87d442f194c5d29ba7fbe62 )
elseif (${HDF5_DOWNLOAD_VERSION} STREQUAL 1.10.1)
set(HDF5_MD5 43a2f9466702fb1db31df98ae6677f15 )
else()
message(FATAL_ERROR "Developer error: need to set HDF5_MD5 for version ${HDF5_DOWNLOAD_VERSION}")
endif()
set(HDF5_URL https://www.ccppetmr.ac.uk/sites/www.ccppetmr.ac.uk/files/downloads/hdf5-1.10.1.tar.gz)
set(HDF5_MD5 43a2f9466702fb1db31df98ae6677f15 )

## SWIG
set (SWIG_REQUIRED_VERSION 2)
Expand Down

0 comments on commit b6993a0

Please sign in to comment.