# CMake script for finding UMFPACK
# Thomas Zwinger, CSC - IT Center for Science Ltd.
# 2024/01
#
# UMFPACK_INCLUDE_DIR - user modifiable choice of where to UMFPACK include dir
# UMFPACK_LIBRARY - user modifiable choice of where UMFPACK library is
# his module returns these variables for the rest of the project to use.
#
# UMFPACK_FOUND - True if UMFPACK found
# UMFPACK_INCLUDE_DIR - UMFPACK include dir.
# UMFPACK_LIBRARIES - needed cuda libraries
# If UMFPACK libraries are already defined, do nothing
IF(UMFPACK_LIBRARIES AND UMFPACK_INCLUDE_DIR)
SET(UMFPACK_FOUND TRUE)
RETURN()
ENDIF()
# Try to find with CMake config file of upstream UMFPACK.
FIND_PACKAGE(UMFPACK CONFIG)
IF(UMFPACK_LIBRARIES AND UMFPACK_INCLUDE_DIR)
RETURN()
ENDIF()
# Fall back to manual search
INCLUDE(FindPackageHandleStandardArgs)
SET(UMFPACK_FOUND FALSE)
MESSAGE(STATUS "Finding UMFPACK")
SET(UMFPACKINCLUDE
"${UMFPACKROOT}/include"
"$ENV{UMFPACKROOT}/include"
"${UMFPACKROOT}/include/suitesparse"
"$ENV{UMFPACKROOT}/include/suitesparse"
"${UMFPACK_ROOT}/include"
"$ENV{UMFPACK_ROOT}/include"
"${UMFPACK_ROOT}/include/suitesparse"
"$ENV{UMFPACK_ROOT}/include/suitesparse"
"${CMAKE_SOURCE_DIR}/umfpack/include"
INTERNAL
)
# Try to find UMFPACK
FIND_PATH(UMFPACK_INCLUDE_DIR
umfpack.h
HINTS
${UMFPACKINCLUDE}
)
SET(UMFPACKLIB
"${UMFPACKROOT}/lib"
"$ENV{UMFPACKROOT}/lib"
"${UMFPACKROOT}/lib64"
"$ENV{UMFPACKROOT}/lib64"
"${UMFPACK_ROOT}/lib"
"$ENV{UMFPACK_ROOT}/lib"
"${UMFPACK_ROOT}/lib64"
"$ENV{UMFPACK_ROOT}/lib64"
"${CMAKE_SOURCE_DIR}/umfpack/lib"
INTERNAL)
FIND_LIBRARY(UMFPACK_LIB umfpack HINTS ${UMFPACKLIB})
IF (UMFPACK_INCLUDE_DIR AND UMFPACK_LIB)
UNSET(UMFPACK_FAILMSG)
SET(UMFPACKLIBS_FOUND TRUE)
SET(UMFPACK_LIBRARIES ${UMFPACK_LIB})
ELSE()
SET(UMFPACK_FAILMSG "UMFPACK library not found.")
ENDIF()
IF (NOT UMFPACK_FAILMSG)
SET(UMFPACK_FOUND TRUE)
ENDIF()
IF (UMFPACK_FOUND)
IF (NOT UMFPACK_FIND_QUIETLY)
MESSAGE(STATUS "A library with UMFPACK API found.")
MESSAGE(STATUS "UMFPACK include dir: ${UMFPACK_INCLUDE_DIR}")
MESSAGE(STATUS "UMFPACK libraries: ${UMFPACK_LIBRARIES}")
ENDIF()
ELSE()
IF (UMFPACK_FIND_REQUIRED)
MESSAGE(FATAL_ERROR ${UMFPACK_FAILMSG})
ENDIF()
ENDIF()
MARK_AS_ADVANCED(
UMFPACKINCLUDE
UMFPACKLIB
UMFPACK_FAILMSG
UMFPACK_FOUND
UMFPACK_INCLUDE_DIR
UMFPACK_LIBRARIES)