From 7544d74612e7c5dda7cf29dda2c878a8eaa3eb73 Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Thu, 11 Feb 2021 20:42:30 +0100
Subject: [PATCH] Replaced xdmf submodule with CPM.

---
 .gitmodules                        |  3 --
 ThirdParty/CMakeLists.txt          | 36 ------------------------
 ThirdParty/xdmf                    |  1 -
 scripts/cmake/Dependencies.cmake   | 44 ++++++++++++++++++++++++++++++
 scripts/cmake/SubmoduleSetup.cmake |  3 --
 5 files changed, 44 insertions(+), 43 deletions(-)
 delete mode 160000 ThirdParty/xdmf

diff --git a/.gitmodules b/.gitmodules
index 6673c74f9a2..458b19e2cce 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -7,6 +7,3 @@
 [submodule "ThirdParty/ogs6py"]
 	path = ThirdParty/ogs6py
 	url = https://github.com/joergbuchwald/ogs6py.git
-[submodule "ThirdParty/xdmf"]
-	path = ThirdParty/xdmf
-	url = https://gitlab.opengeosys.org/ogs/xdmflib.git
diff --git a/ThirdParty/CMakeLists.txt b/ThirdParty/CMakeLists.txt
index 03584ee1771..ac50211fe38 100644
--- a/ThirdParty/CMakeLists.txt
+++ b/ThirdParty/CMakeLists.txt
@@ -9,42 +9,6 @@ if(OGS_BUILD_SWMM)
     list(APPEND DISABLE_WARNINGS_TARGETS SWMM SwmmInterface)
 endif()
 
-if(OGS_USE_XDMF)
-    find_package(ZLIB REQUIRED) # ZLIB is a HDF5 dependency
-    set(XDMF_LIBNAME OgsXdmf CACHE INTERNAL "")
-    add_subdirectory(xdmf)
-    target_include_directories(${XDMF_LIBNAME} PUBLIC
-        ${PROJECT_SOURCE_DIR}/ThirdParty/xdmf
-        ${PROJECT_BINARY_DIR}/ThirdParty/xdmf
-    )
-    if(OGS_USE_CONAN AND UNIX AND APPLE)
-        find_package(Iconv REQUIRED)
-    endif()
-
-    if(MSVC AND OGS_USE_CONAN)
-        # Hack: Conan HDF5 not found on Windows
-        target_link_libraries(${XDMF_LIBNAME} ${CONAN_LIBS})
-    else()
-        target_link_libraries(${XDMF_LIBNAME} Boost::boost ${Iconv_LIBRARIES} ZLIB::ZLIB)
-    endif()
-    target_include_directories(${XDMF_LIBNAME}Core PUBLIC
-        ${PROJECT_SOURCE_DIR}/ThirdParty/xdmf/core
-        ${PROJECT_BINARY_DIR}/ThirdParty/xdmf/core
-    )
-    find_package(LibXml2 REQUIRED) # LibXml2 is a XdmfCore dependency
-    target_link_libraries(${XDMF_LIBNAME}Core PUBLIC LibXml2::LibXml2)
-
-    set_target_properties(${XDMF_LIBNAME} ${XDMF_LIBNAME}Core PROPERTIES
-        RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}
-        LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}
-        ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}
-    )
-    if(BUILD_SHARED_LIBS)
-        install(TARGETS ${XDMF_LIBNAME} ${XDMF_LIBNAME}Core LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
-    endif()
-    list(APPEND DISABLE_WARNINGS_TARGETS ${XDMF_LIBNAME} ${XDMF_LIBNAME}Core)
-endif()
-
 foreach(TARGET ${DISABLE_WARNINGS_TARGETS})
     target_compile_options(${TARGET} PRIVATE
         $<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>,$<CXX_COMPILER_ID:GNU>>:-w>
diff --git a/ThirdParty/xdmf b/ThirdParty/xdmf
deleted file mode 160000
index 3a226178c07..00000000000
--- a/ThirdParty/xdmf
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 3a226178c07e7cb1edaf572afb6c7938fff6b6ce
diff --git a/scripts/cmake/Dependencies.cmake b/scripts/cmake/Dependencies.cmake
index 2a494f5bd4b..aeedbc60e46 100644
--- a/scripts/cmake/Dependencies.cmake
+++ b/scripts/cmake/Dependencies.cmake
@@ -124,6 +124,50 @@ if(OGS_USE_MFRONT)
     endif()
 endif()
 
+if(OGS_USE_XDMF)
+    find_package(ZLIB REQUIRED) # ZLIB is a HDF5 dependency
+    
+    CPMAddPackage(
+        NAME xdmf
+        VERSION 3.0.0
+        GIT_REPOSITORY https://gitlab.opengeosys.org/ogs/xdmflib.git
+        GIT_TAG 8d5ae1e1cbf506b8ca2160745fc914e25690c8a4
+        OPTIONS "XDMF_LIBNAME OgsXdmf"
+    )
+    if(xdmf_ADDED)
+        target_include_directories(OgsXdmf PUBLIC
+            ${PROJECT_SOURCE_DIR}/ThirdParty/xdmf
+            ${PROJECT_BINARY_DIR}/ThirdParty/xdmf
+        )
+        if(OGS_USE_CONAN AND UNIX AND APPLE)
+            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_include_directories(OgsXdmfCore PUBLIC
+            ${PROJECT_SOURCE_DIR}/ThirdParty/xdmf/core
+            ${PROJECT_BINARY_DIR}/ThirdParty/xdmf/core
+        )
+        find_package(LibXml2 REQUIRED) # LibXml2 is a XdmfCore dependency
+        target_link_libraries(OgsXdmfCore PUBLIC LibXml2::LibXml2)
+
+        set_target_properties(OgsXdmf OgsXdmfCore PROPERTIES
+            RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}
+            LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}
+            ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}
+        )
+        if(BUILD_SHARED_LIBS)
+            install(TARGETS OgsXdmf OgsXdmfCore LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+        endif()
+        list(APPEND DISABLE_WARNINGS_TARGETS OgsXdmf OgsXdmfCore)
+    endif()
+endif()
+
 # Disable warnings
 foreach(TARGET ${DISABLE_WARNINGS_TARGETS})
     target_compile_options(${TARGET} PRIVATE
diff --git a/scripts/cmake/SubmoduleSetup.cmake b/scripts/cmake/SubmoduleSetup.cmake
index ae47b74e90d..584efe7299b 100644
--- a/scripts/cmake/SubmoduleSetup.cmake
+++ b/scripts/cmake/SubmoduleSetup.cmake
@@ -3,9 +3,6 @@ if(NOT IS_GIT_REPO)
 endif()
 
 # This file initializes the required submodules
-if(OGS_USE_XDMF)
-    list(APPEND REQUIRED_SUBMODULES ThirdParty/xdmf)
-endif()
 if(OGS_BUILD_SWMM)
     list(APPEND REQUIRED_SUBMODULES ThirdParty/SwmmInterface)
 endif()
-- 
GitLab