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