From 1f5db1dc92eb5da9eb69610a0b8c7c3bbcff532e Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <dmitri.naumov@ufz.de>
Date: Wed, 6 Apr 2016 00:04:44 +0000
Subject: [PATCH] [MaL] Define CVODE_FOUND and add guards.

If CVODE_FOUND is not defined the cvode code is excluded.
---
 MathLib/CMakeLists.txt              |  6 ++++--
 MathLib/ODE/CVodeSolver.cpp         |  6 +++++-
 MathLib/ODE/ConcreteOdeSolver.h     |  6 ++++++
 Tests/MathLib/TestCVode.cpp         |  4 ++++
 scripts/cmake/Find.cmake            |  3 +++
 scripts/cmake/cmake/FindCVODE.cmake | 17 ++++++++++++++---
 6 files changed, 36 insertions(+), 6 deletions(-)

diff --git a/MathLib/CMakeLists.txt b/MathLib/CMakeLists.txt
index 47b12d73e5b..bf640b887ab 100644
--- a/MathLib/CMakeLists.txt
+++ b/MathLib/CMakeLists.txt
@@ -65,10 +65,12 @@ set_target_properties(MathLib PROPERTIES LINKER_LANGUAGE CXX)
 
 target_link_libraries(MathLib
     AssemblerLib
-    sundials_cvode
-    sundials_nvecserial
 )
 
+if (CVODE_FOUND)
+	target_link_libraries(MathLib ${CVODE_LIBRARIES})
+endif()
+
 if(METIS_FOUND)
     target_link_libraries(MathLib ${METIS_LIBRARIES})
 endif()
diff --git a/MathLib/ODE/CVodeSolver.cpp b/MathLib/ODE/CVodeSolver.cpp
index 5e4c584b312..5217b904c38 100644
--- a/MathLib/ODE/CVodeSolver.cpp
+++ b/MathLib/ODE/CVodeSolver.cpp
@@ -6,7 +6,9 @@
  *              http://www.opengeosys.org/project/license
  *
  */
- 
+
+#ifdef CVODE_FOUND
+
 #include "CVodeSolver.h"
 
 #include <cassert>
@@ -346,3 +348,5 @@ double CVodeSolver::getTime() const
 CVodeSolver::~CVodeSolver() = default;
 
 }  // namespace MathLib
+
+#endif  // CVODE_FOUND
diff --git a/MathLib/ODE/ConcreteOdeSolver.h b/MathLib/ODE/ConcreteOdeSolver.h
index 891f7bafd9d..af5a69bc883 100644
--- a/MathLib/ODE/ConcreteOdeSolver.h
+++ b/MathLib/ODE/ConcreteOdeSolver.h
@@ -17,7 +17,9 @@
 #include "OdeSolver.h"
 #include "Handles.h"
 
+#ifdef CVODE_FOUND
 #include "CVodeSolver.h"
+#endif
 
 namespace MathLib
 {
@@ -117,9 +119,13 @@ template <unsigned NumEquations, typename... FunctionArguments>
 std::unique_ptr<OdeSolver<NumEquations, FunctionArguments...>> createOdeSolver(
     BaseLib::ConfigTree const& config)
 {
+#ifdef CVODE_FOUND
 	return std::unique_ptr<OdeSolver<NumEquations, FunctionArguments...>>(
 	    new ConcreteOdeSolver<NumEquations, CVodeSolver, FunctionArguments...>(
 	        config));
+#else
+	return nullptr;
+#endif  // CVODE_FOUND
 }
 
 }  // namespace MathLib
diff --git a/Tests/MathLib/TestCVode.cpp b/Tests/MathLib/TestCVode.cpp
index 46f6ac01022..16be0e062e8 100644
--- a/Tests/MathLib/TestCVode.cpp
+++ b/Tests/MathLib/TestCVode.cpp
@@ -7,6 +7,8 @@
  *
  */
 
+#ifdef CVODE_FOUND
+
 #include <gtest/gtest.h>
 
 #include "MathLib/ODE/CVodeSolver.h"
@@ -235,3 +237,5 @@ TEST(MathLibCVodeTest, ExponentialWithJacobianNewton)
 		// std::printf("time: %g\n", time_reached);
 	}
 }
+
+#endif  // CVODE_FOUND
diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake
index 7bd6def3dba..84d163bdf6d 100644
--- a/scripts/cmake/Find.cmake
+++ b/scripts/cmake/Find.cmake
@@ -149,3 +149,6 @@ endif()
 
 ## Sundials cvode ode-solver library
 find_package(CVODE)
+if(CVODE_FOUND)
+    add_definitions(-DCVODE_FOUND)
+endif() # CVODE_FOUND
diff --git a/scripts/cmake/cmake/FindCVODE.cmake b/scripts/cmake/cmake/FindCVODE.cmake
index 2d6f3ea01af..78d4b509654 100644
--- a/scripts/cmake/cmake/FindCVODE.cmake
+++ b/scripts/cmake/cmake/FindCVODE.cmake
@@ -20,15 +20,26 @@ find_path(CVODE_INCLUDE_DIRS sundials_types.h
 	PATH_SUFFIXES include include/sundials
 )
 
-find_library(CVODE_LIBRARIES
+find_library(CVODE_LIBRARY
 	NAMES sundials_cvode
 	ENV CVODE_ROOT
 	PATH_SUFFIXES lib Lib
 )
 
+find_library(CVODE_NVECSERIAL
+	NAMES sundials_nvecserial
+	ENV CVODE_ROOT
+	PATH_SUFFIXES lib Lib
+)
+
 find_package_handle_standard_args(CVODE DEFAULT_MSG
-	CVODE_LIBRARIES
+	CVODE_LIBRARY
+	CVODE_NVECSERIAL
 	CVODE_INCLUDE_DIRS
 )
 
-mark_as_advanced(CVODE_INCLUDE_DIRS CVODE_LIBRARIES)
+if(CVODE_FOUND)
+	set(CVODE_LIBRARIES sundials_cvode sundials_nvecserial)
+endif()
+
+mark_as_advanced(CVODE_INCLUDE_DIRS CVODE_LIBRARY CVODE_NVECSERIAL)
-- 
GitLab