1*bf2c3715SXin Li 2*bf2c3715SXin Li# Umfpack lib usually requires linking to a blas library. 3*bf2c3715SXin Li# It is up to the user of this module to find a BLAS and link to it. 4*bf2c3715SXin Li 5*bf2c3715SXin Liif (SUPERLU_INCLUDES AND SUPERLU_LIBRARIES) 6*bf2c3715SXin Li set(SUPERLU_FIND_QUIETLY TRUE) 7*bf2c3715SXin Liendif () 8*bf2c3715SXin Li 9*bf2c3715SXin Lifind_path(SUPERLU_INCLUDES 10*bf2c3715SXin Li NAMES 11*bf2c3715SXin Li supermatrix.h 12*bf2c3715SXin Li PATHS 13*bf2c3715SXin Li $ENV{SUPERLUDIR} 14*bf2c3715SXin Li ${INCLUDE_INSTALL_DIR} 15*bf2c3715SXin Li PATH_SUFFIXES 16*bf2c3715SXin Li superlu 17*bf2c3715SXin Li SRC 18*bf2c3715SXin Li) 19*bf2c3715SXin Li 20*bf2c3715SXin Lifind_library(SUPERLU_LIBRARIES 21*bf2c3715SXin Li NAMES "superlu_5.2.1" "superlu_5.2" "superlu_5.1.1" "superlu_5.1" "superlu_5.0" "superlu_4.3" "superlu_4.2" "superlu_4.1" "superlu_4.0" "superlu_3.1" "superlu_3.0" "superlu" 22*bf2c3715SXin Li PATHS $ENV{SUPERLUDIR} ${LIB_INSTALL_DIR} 23*bf2c3715SXin Li PATH_SUFFIXES lib) 24*bf2c3715SXin Li 25*bf2c3715SXin Liif(SUPERLU_INCLUDES AND SUPERLU_LIBRARIES) 26*bf2c3715SXin Li 27*bf2c3715SXin Liinclude(CheckCXXSourceCompiles) 28*bf2c3715SXin Liinclude(CMakePushCheckState) 29*bf2c3715SXin Licmake_push_check_state() 30*bf2c3715SXin Li 31*bf2c3715SXin Liset(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${SUPERLU_INCLUDES}) 32*bf2c3715SXin Li 33*bf2c3715SXin Li# check whether struct mem_usage_t is globally defined 34*bf2c3715SXin Licheck_cxx_source_compiles(" 35*bf2c3715SXin Litypedef int int_t; 36*bf2c3715SXin Li#include <supermatrix.h> 37*bf2c3715SXin Li#include <slu_util.h> 38*bf2c3715SXin Liint main() { 39*bf2c3715SXin Li mem_usage_t mem; 40*bf2c3715SXin Li return 0; 41*bf2c3715SXin Li}" 42*bf2c3715SXin LiSUPERLU_HAS_GLOBAL_MEM_USAGE_T) 43*bf2c3715SXin Li 44*bf2c3715SXin Li 45*bf2c3715SXin Licheck_cxx_source_compiles(" 46*bf2c3715SXin Litypedef int int_t; 47*bf2c3715SXin Li#include <supermatrix.h> 48*bf2c3715SXin Li#include <superlu_enum_consts.h> 49*bf2c3715SXin Liint main() { 50*bf2c3715SXin Li return SLU_SINGLE; 51*bf2c3715SXin Li}" 52*bf2c3715SXin LiSUPERLU_HAS_CLEAN_ENUMS) 53*bf2c3715SXin Li 54*bf2c3715SXin Licheck_cxx_source_compiles(" 55*bf2c3715SXin Litypedef int int_t; 56*bf2c3715SXin Li#include <supermatrix.h> 57*bf2c3715SXin Li#include <slu_util.h> 58*bf2c3715SXin Liint main(void) 59*bf2c3715SXin Li{ 60*bf2c3715SXin Li GlobalLU_t glu; 61*bf2c3715SXin Li return 0; 62*bf2c3715SXin Li}" 63*bf2c3715SXin LiSUPERLU_HAS_GLOBALLU_T) 64*bf2c3715SXin Li 65*bf2c3715SXin Liif(SUPERLU_HAS_GLOBALLU_T) 66*bf2c3715SXin Li # at least 5.0 67*bf2c3715SXin Li set(SUPERLU_VERSION_VAR "5.0") 68*bf2c3715SXin Lielseif(SUPERLU_HAS_CLEAN_ENUMS) 69*bf2c3715SXin Li # at least 4.3 70*bf2c3715SXin Li set(SUPERLU_VERSION_VAR "4.3") 71*bf2c3715SXin Lielseif(SUPERLU_HAS_GLOBAL_MEM_USAGE_T) 72*bf2c3715SXin Li # at least 4.0 73*bf2c3715SXin Li set(SUPERLU_VERSION_VAR "4.0") 74*bf2c3715SXin Lielse() 75*bf2c3715SXin Li set(SUPERLU_VERSION_VAR "3.0") 76*bf2c3715SXin Liendif() 77*bf2c3715SXin Li 78*bf2c3715SXin Licmake_pop_check_state() 79*bf2c3715SXin Li 80*bf2c3715SXin Liif(SuperLU_FIND_VERSION) 81*bf2c3715SXin Li if(${SUPERLU_VERSION_VAR} VERSION_LESS ${SuperLU_FIND_VERSION}) 82*bf2c3715SXin Li set(SUPERLU_VERSION_OK FALSE) 83*bf2c3715SXin Li else() 84*bf2c3715SXin Li set(SUPERLU_VERSION_OK TRUE) 85*bf2c3715SXin Li endif() 86*bf2c3715SXin Lielse() 87*bf2c3715SXin Li set(SUPERLU_VERSION_OK TRUE) 88*bf2c3715SXin Liendif() 89*bf2c3715SXin Li 90*bf2c3715SXin Liendif() 91*bf2c3715SXin Li 92*bf2c3715SXin Liinclude(FindPackageHandleStandardArgs) 93*bf2c3715SXin Lifind_package_handle_standard_args(SuperLU 94*bf2c3715SXin Li REQUIRED_VARS SUPERLU_INCLUDES SUPERLU_LIBRARIES SUPERLU_VERSION_OK 95*bf2c3715SXin Li VERSION_VAR SUPERLU_VERSION_VAR) 96*bf2c3715SXin Li 97*bf2c3715SXin Limark_as_advanced(SUPERLU_INCLUDES SUPERLU_LIBRARIES) 98