From 42db96b95dcf5ce2b765068aa3b95e831f091abd Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Mon, 22 Feb 2021 15:17:06 +0100
Subject: [PATCH] Replaced hdf5 Conan module with CPM.

---
 scripts/cmake/ConanSetup.cmake              |  9 ------
 scripts/cmake/Dependencies.cmake            | 31 ++++++++++++++++-----
 scripts/cmake/conan/win-hdf5/FindHDF5.cmake | 14 ----------
 web/data/versions.json                      |  2 --
 4 files changed, 24 insertions(+), 32 deletions(-)
 delete mode 100644 scripts/cmake/conan/win-hdf5/FindHDF5.cmake

diff --git a/scripts/cmake/ConanSetup.cmake b/scripts/cmake/ConanSetup.cmake
index 94f0922b3fe..15fec1015a5 100644
--- a/scripts/cmake/ConanSetup.cmake
+++ b/scripts/cmake/ConanSetup.cmake
@@ -54,20 +54,11 @@ endif()
 
 if(OGS_USE_XDMF)
     list(APPEND CONAN_REQUIRES
-        hdf5/${ogs.tested_version.hdf5}
         libxml2/${ogs.tested_version.libxml2}
     )
     if(UNIX AND NOT APPLE)
         list(APPEND CONAN_OPTIONS libxml2:iconv=False)
     endif()
-    if(MSVC)
-        # Hack: Conan HDF5 not found on Windows
-        # Use custom FindHDF5 with forced values from Conan
-        list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/scripts/cmake/conan/win-hdf5")
-    else()
-        # Hack: Suppress hdf5 compiler wrapper checks
-        set(HDF5_C_COMPILER_EXECUTABLE "OFF" CACHE INTERNAL "")
-    endif()
 endif()
 
 if(OGS_USE_PETSC)
diff --git a/scripts/cmake/Dependencies.cmake b/scripts/cmake/Dependencies.cmake
index f5561241621..82d261c0b64 100644
--- a/scripts/cmake/Dependencies.cmake
+++ b/scripts/cmake/Dependencies.cmake
@@ -127,6 +127,28 @@ endif()
 if(OGS_USE_XDMF)
     find_package(ZLIB REQUIRED) # ZLIB is a HDF5 dependency
 
+    string(REPLACE "." "_" HDF5_TAG ${ogs.minimum_version.hdf5})
+    CPMFindPackage(
+        NAME HDF5
+        GITHUB_REPOSITORY HDFGroup/hdf5
+        GIT_TAG hdf5-${HDF5_TAG}
+        VERSION ${ogs.minimum_version.hdf5}
+        OPTIONS
+            "HDF5_EXTERNALLY_CONFIGURED 1"
+            "HDF5_GENERATE_HEADERS OFF"
+            "BUILD_TESTING OFF"
+            "HDF5_BUILD_TOOLS OFF"
+            "HDF5_BUILD_EXAMPLES OFF"
+            "HDF5_BUILD_HL_LIB OFF"
+            "HDF5_BUILD_FORTRAN OFF"
+            "HDF5_BUILD_CPP_LIB OFF"
+            "HDF5_BUILD_JAVA OFF"
+    )
+    if(hdf5_ADDED)
+        target_include_directories(hdf5-static INTERFACE ${hdf5_BINARY_DIR})
+        list(APPEND DISABLE_WARNINGS_TARGETS hdf5-static)
+    endif()
+
     CPMAddPackage(
         NAME xdmf
         VERSION 3.0.0
@@ -143,12 +165,7 @@ if(OGS_USE_XDMF)
             find_package(Iconv REQUIRED)
         endif()
 
-        if(MSVC AND OGS_USE_CONAN)
-            # Hack: Conan HDF5 not found on Windows
-            target_link_libraries(OgsXdmf ${CONAN_LIBS})
-        else()
-            target_link_libraries(OgsXdmf Boost::boost ${Iconv_LIBRARIES} ZLIB::ZLIB)
-        endif()
+        target_link_libraries(OgsXdmf Boost::boost ${Iconv_LIBRARIES} ZLIB::ZLIB)
         target_include_directories(OgsXdmfCore
             PUBLIC
                 ${xdmf_SOURCE_DIR}/core
@@ -157,7 +174,7 @@ if(OGS_USE_XDMF)
                 ${xdmf_SOURCE_DIR}/CMake/VersionSuite
         )
         find_package(LibXml2 REQUIRED) # LibXml2 is a XdmfCore dependency
-        target_link_libraries(OgsXdmfCore PUBLIC LibXml2::LibXml2)
+        target_link_libraries(OgsXdmfCore PUBLIC LibXml2::LibXml2 hdf5-static)
 
         set_target_properties(OgsXdmf OgsXdmfCore PROPERTIES
             RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}
diff --git a/scripts/cmake/conan/win-hdf5/FindHDF5.cmake b/scripts/cmake/conan/win-hdf5/FindHDF5.cmake
deleted file mode 100644
index 1f973c52283..00000000000
--- a/scripts/cmake/conan/win-hdf5/FindHDF5.cmake
+++ /dev/null
@@ -1,14 +0,0 @@
-if(HDF5_FOUND)
-    return()
-endif()
-
-set(HDF5_FOUND TRUE CACHE INTERNAL "")
-set(HDF5_VERSION "${ogs.tested_version.hdf5}" CACHE INTERNAL "")
-set(HDF5_DEFINITIONS "" CACHE INTERNAL "")
-set(HDF5_INCLUDE_DIRS ${CONAN_INCLUDE_DIRS_HDF5} CACHE INTERNAL "")
-foreach(LIB ${CONAN_LIBS_HDF5})
-    find_library(HDF5_LIB NAMES ${LIB} PATHS ${CONAN_LIB_DIRS_HDF5})
-    list(APPEND HDF5_LIBRARIES ${HDF5_LIB})
-endforeach()
-set(HDF5_LIBRARIES ${HDF5_LIBRARIES} CACHE INTERNAL "")
-message(STATUS "Found HDF5 ${ogs.tested_version.hdf5} via Conan: ${CONAN_HDF5_ROOT}")
diff --git a/web/data/versions.json b/web/data/versions.json
index 0dffb933ddf..d3d247301ff 100644
--- a/web/data/versions.json
+++ b/web/data/versions.json
@@ -24,8 +24,6 @@
   },
   "tested_version": {
     "vtk": "8.2.0",
-    "hdf5": "1.12.0",
-    "libxml2": "2.9.10",
     "ubuntu": "20.04"
   },
   "ctest": {
-- 
GitLab