Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/cmake/Modules/FindARPACK.cmake
3206 views
#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 )