diff --git a/cmake/modules/FindSuiteSparse.cmake b/cmake/modules/FindSuiteSparse.cmake index 9adb25fc78c2aac6bff9553f3d1c21633b8affbd..e0bfc918a32a615c721f6888b81d6d498321dd3d 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 55398195206002476c55b5e42a07a2c02b342366..e34d1887c9a4c41a296c82dfc908469cdf95ae4d 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 */