#CMake module to find arpack-ng libraries
#
#
#
#
# PARPACK_INCLUDE_DIR
# PARPACK_LIBRARIES
#
#
#
#
# The user defined parpack locations
IF(PARPACK_LIBRARIES AND PARPACK_INCLUDE_DIR)
SET(PARPACK_FOUND TRUE)
MESSAGE(STATUS "Provided parpack include path ${PARPACK_INCLUDE_DIR}")
MESSAGE(STATUS "Provided parpack libraries ${PARPACK_LIBRARIES}")
ELSE()
# PARPACK_LIBRARIES or PARPACK_INCLUDE_DIR are not defined
SET(PARPACK_FOUND FALSE)
ENDIF()
IF(NOT PARPACK_FOUND)
MESSAGE(STATUS "Finding parpack libraries")
# Try to find with CMake config file of upstream parpack.
FIND_PACKAGE(PARPACK CONFIG NAMES arpack arpackng arpack-ng parpack parpackng parpack-ng)
IF(PARPACK_FOUND)
GET_TARGET_PROPERTY(PARPACK_INCLUDE_DIR parpack INTERFACE_INCLUDE_DIRECTORIES)
# Most likely arpack and parpack are packed togeher (like in Arch linux)
# or they share the same include directory even in splitted packages (parpack-dev depends on arpack-dev)
# So in this point ARPACK_INCLUDE_DIR has to be defined or the information is loaded into the arpack
# interface
IF(NOT PARPACK_INCLUDE_DIR)
GET_TARGET_PROPERTY(PARPACK_INCLUDE_DIR arpack INTERFACE_INCLUDE_DIRECTORIES)
ENDIF()
GET_TARGET_PROPERTY(PARPACK_LIBRARIES parpack IMPORTED_LOCATION_RELEASE)
# Check if a debug build type was used
IF(NOT PARPACK_LIBRARIES)
GET_TARGET_PROPERTY(PARPACK_LIBRARIES parpack IMPORTED_LOCATION_DEBUG)
ENDIF()
ENDIF()
# There is no parpack-config script or something went wrong with the script
# Fall back to manual search
IF(NOT PARPACK_LIBRARIES OR NOT PARPACK_INCLUDE_DIR)
INCLUDE(FindPackageHandleStandardArgs)
MESSAGE(STATUS "Manual search of parpack")
# Try to find PARPACK header
SET(ARPACKINCLUDE
"${PARPACK_ROOT}/include"
"$ENV{PARPACK_ROOT}/include"
"${PARPACKROOT}/include"
"$ENV{PARPACKROOT}/include"
"${ARPACK_ROOT}/include"
"$ENV{ARPACK_ROOT}/include"
"${ARPACKROOT}/include"
"$ENV{ARPACKROOT}/include"
INTERNAL
)
FIND_PATH(PARPACK_INCLUDE_DIR NAMES parpack.h parpackng.h parpack-ng.h
HINTS ${ARPACKINCLUDE} PATH_SUFFIXES arpack arpackng arpack-ng parpack parpackng parpack-ng)
# Try to find PARPACK libraries
SET(ARPACKLIB
"${PARPACK_ROOT}/lib"
"$ENV{PARPACK_ROOT}/lib64"
"${PARPACKROOT}/lib"
"$ENV{PARPACKROOT}/lib64"
"${ARPACK_ROOT}/lib"
"$ENV{ARPACK_ROOT}/lib64"
"${ARPACKROOT}/lib"
"$ENV{ARPACKROOT}/lib64"
INTERNAL
)
FIND_LIBRARY(PARPACK_LIBRARIES NAMES parpack parpackng parpack-ng HINTS ${ARPACKLIB})
ENDIF(NOT PARPACK_LIBRARIES OR NOT PARPACK_INCLUDE_DIR)
ENDIF(NOT PARPACK_FOUND)
# This checks could be inadequate because this variables are not empty if nothing found
# Other option is to use the keyword REQUIRED, but this will increase cmake version to 3.18
# https://cmake.org/cmake/help/latest/command/find_library.html
# https://cmake.org/cmake/help/latest/command/find_path.html
IF (PARPACK_INCLUDE_DIR AND PARPACK_LIBRARIES)
SET(PARPACK_FOUND TRUE)
#The config script was not used, define the target manually
IF(NOT TARGET parpack)
ADD_LIBRARY(parpack SHARED IMPORTED)
SET_PROPERTY(TARGET parpack PROPERTY IMPORTED_LOCATION ${PARPACK_LIBRARIES})
SET_PROPERTY(TARGET parpack PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PARPACK_INCLUDE_DIR})
ENDIF()
IF (NOT PARPACK_FIND_QUIETLY)
MESSAGE(STATUS "A library with PARPACK API found.")
MESSAGE(STATUS "PARPACK include dir: ${PARPACK_INCLUDE_DIR}")
MESSAGE(STATUS "PARPACK libraries: ${PARPACK_LIBRARIES}")
ENDIF()
ELSE()
SET(PARPACK_FOUND FALSE)
IF (PARPACK_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "PARPACK library not found.")
ENDIF()
ENDIF(PARPACK_INCLUDE_DIR AND PARPACK_LIBRARIES)
MARK_AS_ADVANCED( PARPACK_LIBRARIES PARPACK_INCLUDE_DIR PARPACK_FOUND )