Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/cmake/Modules/FindZoltan.cmake
3206 views
# - cmake script for finding NetCDF libraries

#  ZOLTAN_INCLUDE_DIR  - user modifiable choice of where to zoltan include dir
#  ZOLTAN_LIBRARY    - user modifiable choice of where zoltan library is

# This module returns these variables for the rest of the project to use.
#
#  Zoltan_FOUND              - True if ZOLTAN found
#  ZOLTAN_LIBRARY            - zoltan library is
#  ZOLTAN_INCLUDE_DIR       - zoltan include dir.

IF(ZOLTAN_LIBRARY AND ZOLTAN_INCLUDE_DIR)
  SET(Zoltan_FOUND TRUE)
ELSE()
  SET(Zoltan_FOUND FALSE)
ENDIF()

IF(NOT Zoltan_FOUND)
  MESSAGE(STATUS "Finding Zoltan library")
  # Try to find with CMake config file of upstream Zoltan.
  FIND_PACKAGE(Zoltan CONFIG NAMES Zoltan zoltan)
  IF(Zoltan_FOUND)
    GET_TARGET_PROPERTY(ZOLTAN_INCLUDE_DIR Zoltan::zoltan INTERFACE_INCLUDE_DIRECTORIES)
    GET_TARGET_PROPERTY(ZOLTAN_LIBRARY Zoltan::zoltan IMPORTED_LOCATION_RELEASE)
    # Check if a debug build was used
    IF(NOT ZOLTAN_LIBRARY)
      GET_TARGET_PROPERTY(ZOLTAN_LIBRARY Zoltan::zoltan IMPORTED_LOCATION_DEBUG)
    ENDIF()
    IF(Zoltan_ENABLE_ParMETIS)
      FIND_PACKAGE(ParMetis)
    ENDIF()
  ENDIF()

  IF(NOT ZOLTAN_INCLUDE_DIR AND NOT ZOLTAN_LIBRARY)

    INCLUDE(FindPackageHandleStandardArgs)
    MESSAGE(STATUS "Manual search of Zoltan library")

    SET(ZOLTANINCLUDE
      "${ZOLTANROOT}/include"
      "$ENV{ZOLTANROOT}/include"
      "${ZOLTAN_ROOT}/include"
      "$ENV{ZOLTAN_ROOT}/include"
      "${CMAKE_SOURCE_DIR}/zoltan/include"
      INTERNAL)
    FIND_PATH(ZOLTAN_INCLUDE_DIR zoltan.h HINTS ${ZOLTANINCLUDE})

    SET(ZOLTANLIB
      "${ZOLTANROOT}/lib"
      "$ENV{ZOLTANROOT}/lib"
      "${ZOLTAN_ROOT}/lib"
      "$ENV{ZOLTAN_ROOT}/lib"
      "${CMAKE_SOURCE_DIR}/zoltan/lib"
      INTERNAL)
    FIND_LIBRARY(ZOLTAN_LIBRARY zoltan HINTS ${ZOLTANLIB})

  ENDIF(NOT ZOLTAN_INCLUDE_DIR AND NOT ZOLTAN_LIBRARY)

ENDIF(NOT Zoltan_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 (ZOLTAN_INCLUDE_DIR AND ZOLTAN_LIBRARY)
  SET(Zoltan_FOUND TRUE)
 #The config script was not used, define the target manually
  IF(NOT TARGET Zoltan::zoltan)
    ADD_LIBRARY(Zoltan::zoltan SHARED IMPORTED)
    SET_TARGET_PROPERTIES(Zoltan::zoltan PROPERTIES
                          INTERFACE_INCLUDE_DIRECTORIES ${ZOLTAN_INCLUDE_DIR}
                          IMPORTED_LOCATION ${ZOLTAN_LIBRARY} )
  ENDIF()
  IF (NOT Zoltan_FIND_QUIETLY)
    MESSAGE(STATUS "Zoltan library found")
    MESSAGE(STATUS "Zoltan include path: ${ZOLTAN_INCLUDE_DIR}")
    MESSAGE(STATUS "Zoltan library:      ${ZOLTAN_LIBRARY}")
  ENDIF()
ELSE()
  SET(Zoltan_FOUND FALSE)
  IF (Zoltan_FIND_REQUIRED)
      MESSAGE(FATAL_ERROR "Zoltan library not found.")
  ENDIF()

ENDIF(ZOLTAN_INCLUDE_DIR AND ZOLTAN_LIBRARY)

MARK_AS_ADVANCED( ZOLTANINCLUDE ZOLTANLIB ZOLTAN_INCLUDE_DIR ZOLTAN_LIBRARY )