From 2a09d199173856ffcb897654b26434344c4be957 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christoph=20Gr=C3=BCninger?=
 <christoph.grueninger@iws.uni-stuttgart.de>
Date: Sun, 20 Mar 2016 17:09:47 +0100
Subject: [PATCH] [CMake] Check for SuiteSparse >= 4.3 for using SPQR

Fixes dune-istl/#5
---
 cmake/modules/FindSuiteSparse.cmake | 30 +++++++++++++++++++++++++++++
 config.h.cmake                      |  3 ++-
 2 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/cmake/modules/FindSuiteSparse.cmake b/cmake/modules/FindSuiteSparse.cmake
index 9adb25fc7..e0bfc918a 100644
--- a/cmake/modules/FindSuiteSparse.cmake
+++ b/cmake/modules/FindSuiteSparse.cmake
@@ -182,6 +182,35 @@ foreach(_component ${SUITESPARSE_COMPONENTS})
     ${_component}_LIBRARY)
 endforeach()
 
+# check version, for SPQR we need at least SuiteSparse 4.3
+if(SuiteSparse_SPQR_FOUND)
+  include(CheckCSourceCompiles)
+  include(CMakePushCheckState)
+  cmake_push_check_state()
+  set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${SUITESPARSE_INCLUDE_DIR})
+  set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${SUITESPARSE_LIBRARY})
+  # check whether version is at least 4.3
+  check_c_source_compiles("
+    #include <SuiteSparse_config.h>
+    int main(void)
+    {
+      #ifndef SUITESPARSE_HAS_VERSION_FUNCTION
+        #error SuiteSparse <= 4.2.0 too old, required version 4.3 or newer for SPQR.
+      #endif
+      #if SUITESPARSE_VERSION <= 4003
+        #error SuiteSparse too old, required version 4.3 or newer for SPQR.
+      #endif
+      return 0;
+    }"
+    SUITESPARSE_MIN_VERSION_4_3)
+
+  if(NOT SUITESPARSE_MIN_VERSION_4_3)
+    set(SuiteSparse_SPQR_FOUND FALSE)
+    set(HAVE_SUITESPARSE_SPQR FALSE)
+  endif()
+  cmake_pop_check_state()
+endif()
+
 list(APPEND SUITESPARSE_LIBRARY ${SUITESPARSE_CONFIG_LIB})
 
 # make them unique
@@ -210,6 +239,7 @@ mark_as_advanced(
   SUITESPARSE_INCLUDE_DIR
   SUITESPARSE_LIBRARY
   SUITESPARSE_CONFIG_LIB
+  SUITESPARSE_MIN_VERSION_4_3
   WILL_USE_CHOLMOD
   WILL_USE_UMFPACK)
 
diff --git a/config.h.cmake b/config.h.cmake
index 553981952..e34d1887c 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -132,7 +132,8 @@
 /* Define to ENABLE_SUITESPARSE if the SuiteSparse's RBIO library is available */
 #cmakedefine HAVE_SUITESPARSE_RBIO ENABLE_SUITESPARSE
 
-/* Define to ENABLE_SUITESPARSE if the SuiteSparse's SPQR library is available */
+/* Define to ENABLE_SUITESPARSE if the SuiteSparse's SPQR library is available
+   and if it's version is at least 4.3 */
 #cmakedefine HAVE_SUITESPARSE_SPQR ENABLE_SUITESPARSE
 
 /* Define to ENABLE_SUITESPARSE if the SuiteSparse's UMFPACK library is available */
-- 
GitLab