| |
| # Umfpack lib usually requires linking to a blas library. |
| # It is up to the user of this module to find a BLAS and link to it. |
| |
| if (SUPERLU_INCLUDES AND SUPERLU_LIBRARIES) |
| set(SUPERLU_FIND_QUIETLY TRUE) |
| endif () |
| |
| find_path(SUPERLU_INCLUDES |
| NAMES |
| supermatrix.h |
| PATHS |
| $ENV{SUPERLUDIR} |
| ${INCLUDE_INSTALL_DIR} |
| PATH_SUFFIXES |
| superlu |
| SRC |
| ) |
| |
| find_library(SUPERLU_LIBRARIES |
| 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" |
| PATHS $ENV{SUPERLUDIR} ${LIB_INSTALL_DIR} |
| PATH_SUFFIXES lib) |
| |
| if(SUPERLU_INCLUDES AND SUPERLU_LIBRARIES) |
| |
| include(CheckCXXSourceCompiles) |
| include(CMakePushCheckState) |
| cmake_push_check_state() |
| |
| set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${SUPERLU_INCLUDES}) |
| |
| # check whether struct mem_usage_t is globally defined |
| check_cxx_source_compiles(" |
| typedef int int_t; |
| #include <supermatrix.h> |
| #include <slu_util.h> |
| int main() { |
| mem_usage_t mem; |
| return 0; |
| }" |
| SUPERLU_HAS_GLOBAL_MEM_USAGE_T) |
| |
| |
| check_cxx_source_compiles(" |
| typedef int int_t; |
| #include <supermatrix.h> |
| #include <superlu_enum_consts.h> |
| int main() { |
| return SLU_SINGLE; |
| }" |
| SUPERLU_HAS_CLEAN_ENUMS) |
| |
| check_cxx_source_compiles(" |
| typedef int int_t; |
| #include <supermatrix.h> |
| #include <slu_util.h> |
| int main(void) |
| { |
| GlobalLU_t glu; |
| return 0; |
| }" |
| SUPERLU_HAS_GLOBALLU_T) |
| |
| if(SUPERLU_HAS_GLOBALLU_T) |
| # at least 5.0 |
| set(SUPERLU_VERSION_VAR "5.0") |
| elseif(SUPERLU_HAS_CLEAN_ENUMS) |
| # at least 4.3 |
| set(SUPERLU_VERSION_VAR "4.3") |
| elseif(SUPERLU_HAS_GLOBAL_MEM_USAGE_T) |
| # at least 4.0 |
| set(SUPERLU_VERSION_VAR "4.0") |
| else() |
| set(SUPERLU_VERSION_VAR "3.0") |
| endif() |
| |
| cmake_pop_check_state() |
| |
| if(SuperLU_FIND_VERSION) |
| if(${SUPERLU_VERSION_VAR} VERSION_LESS ${SuperLU_FIND_VERSION}) |
| set(SUPERLU_VERSION_OK FALSE) |
| else() |
| set(SUPERLU_VERSION_OK TRUE) |
| endif() |
| else() |
| set(SUPERLU_VERSION_OK TRUE) |
| endif() |
| |
| endif() |
| |
| include(FindPackageHandleStandardArgs) |
| find_package_handle_standard_args(SuperLU |
| REQUIRED_VARS SUPERLU_INCLUDES SUPERLU_LIBRARIES SUPERLU_VERSION_OK |
| VERSION_VAR SUPERLU_VERSION_VAR) |
| |
| mark_as_advanced(SUPERLU_INCLUDES SUPERLU_LIBRARIES) |