#CMake module to find arpack-ng libraries # # # # # ARPACK_INCLUDE_DIR # ARPACK_LIBRARIES # # # # # The user defined arpack locations IF(ARPACK_LIBRARIES AND ARPACK_INCLUDE_DIR) # The user defined arpack locations SET(ARPACK_FOUND TRUE) MESSAGE(STATUS "Provided arpack include path ${ARPACK_INCLUDE_DIR}") MESSAGE(STATUS "Provided arpack libraries ${ARPACK_LIBRARIES}") ELSE() # One location is missing SET(ARPACK_FOUND FALSE) ENDIF() IF(NOT ARPACK_FOUND) MESSAGE(STATUS "Finding arpack libraries") # Try to find with CMake config file of upstream arpack. FIND_PACKAGE(ARPACK CONFIG NAMES arpack arpackng arpack-ng) IF(ARPACK_FOUND) GET_TARGET_PROPERTY(ARPACK_INCLUDE_DIR arpack INTERFACE_INCLUDE_DIRECTORIES) GET_TARGET_PROPERTY(ARPACK_LIBRARIES arpack IMPORTED_LOCATION_RELEASE) # Check if a debug build type was used IF(NOT ARPACK_LIBRARIES) GET_TARGET_PROPERTY(ARPACK_LIBRARIES arpack IMPORTED_LOCATION_DEBUG) ENDIF() ENDIF() # There is no arpack-config script or something went wrong with the script # Fall back to manual search IF(NOT ARPACK_LIBRARIES OR NOT ARPACK_INCLUDE_DIR) # Fall back to manual search INCLUDE(FindPackageHandleStandardArgs) MESSAGE(STATUS "Searching for arpack library") # Try to find ARPACK header SET(ARPACKINCLUDE "${ARPACK_ROOT}/include" "$ENV{ARPACK_ROOT}/include" "${ARPACKROOT}/include" "$ENV{ARPACKROOT}/include" INTERNAL ) FIND_PATH(ARPACK_INCLUDE_DIR NAMES arpack.h arpackng.h arpack-ng.h HINTS ${ARPACKINCLUDE} PATH_SUFFIXES arpack arpackng arpack-ng) # Try to find ARPACK libraries SET(ARPACKLIB "${ARPACK_ROOT}/lib" "$ENV{ARPACK_ROOT}/lib64" "${ARPACKROOT}/lib" "$ENV{ARPACKROOT}/lib64" INTERNAL ) FIND_LIBRARY(ARPACK_LIBRARIES NAMES arpack arpackng arpack-ng HINTS ${ARPACKLIB}) ENDIF(NOT ARPACK_LIBRARIES OR NOT ARPACK_INCLUDE_DIR) ENDIF(NOT ARPACK_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 (ARPACK_INCLUDE_DIR AND ARPACK_LIBRARIES) SET(ARPACK_FOUND TRUE) #The config script was not used, define the target manually IF(NOT TARGET arpack) ADD_LIBRARY(arpack SHARED IMPORTED) SET_PROPERTY(TARGET arpack PROPERTY IMPORTED_LOCATION ${ARPACK_LIBRARIES}) SET_PROPERTY(TARGET arpack PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ARPACK_INCLUDE_DIR}) ENDIF() IF (NOT ARPACK_FIND_QUIETLY) MESSAGE(STATUS "A library with ARPACK API found.") MESSAGE(STATUS "ARPACK include dir: ${ARPACK_INCLUDE_DIR}") MESSAGE(STATUS "ARPACK libraries: ${ARPACK_LIBRARIES}") ENDIF() ELSE() SET(ARPACK_FOUND FALSE) IF (ARPACK_FIND_REQUIRED) MESSAGE(FATAL_ERROR "ARPACK library not found.") ENDIF() ENDIF(ARPACK_INCLUDE_DIR AND ARPACK_LIBRARIES) MARK_AS_ADVANCED( ARPACK_LIBRARIES ARPACK_INCLUDE_DIR ARPACK_FOUND )