The parmetis.h distributed via the parmetis binding of scotch with Ubuntu 18.04 (libscotchparmetis-dev) includes the header scotch.h located in /usr/include/scotch/. Therefore our check of the include file failed. With this commit we check the parmetis.h header another time with the scotch include path added. Now parmetis is found on my Ubuntu.
111 lines
3.8 KiB
CMake
111 lines
3.8 KiB
CMake
# Module that checks whether ParMETIS or the ParMETIS interface of PT-Scotch
|
|
# is available.
|
|
#
|
|
# Accepts the following variables:
|
|
#
|
|
# PARMETIS_ROOT: Prefix where ParMETIS is installed.
|
|
# PARMETIS_SUFFIX: Scotch might be compiled using different
|
|
# integer sizes (int32, int32, long). When
|
|
# this is is set the headers and libaries
|
|
# are search under the suffix
|
|
# include/parmetis-${PARMETIS_SUFFIX}, and
|
|
# lib/parmetis-${PARMETIS_SUFFIX}, respectively.
|
|
# Sets the following variables:
|
|
# PARMETIS_INCLUDE_DIRS: All include directories needed to compile ParMETIS programs.
|
|
# PARMETIS_LIBRARIES: Alle libraries needed to link ParMETIS programs.
|
|
# PARMETIS_FOUND: True if ParMETIS was found.
|
|
#
|
|
# Provides the following macros:
|
|
#
|
|
# find_package(ParMETIS)
|
|
|
|
find_package(MPI)
|
|
|
|
if(MPI_C_FOUND)
|
|
macro(_search_parmetis_lib libvar libname doc)
|
|
find_library(${libvar} ${libname}
|
|
PATHS ${PARMETIS_ROOT} ${PARMETIS_ROOT}/lib PATH_SUFFIXES ${PATH_SUFFIXES}
|
|
NO_DEFAULT_PATH
|
|
DOC "${doc}")
|
|
find_library(${libvar} ${libname})
|
|
endmacro(_search_parmetis_lib)
|
|
|
|
if(PARMETIS_SUFFIX)
|
|
set(PATH_SUFFIXES "-${PARMETIS_SUFFIX}")
|
|
else(PARMETIS_SUFFIX)
|
|
set(PATH_SUFFIXES "")
|
|
endif(PARMETIS_SUFFIX)
|
|
|
|
include(CMakePushCheckState)
|
|
cmake_push_check_state() # Save variables
|
|
|
|
find_path(PARMETIS_INCLUDE_DIR parmetis.h
|
|
PATHS ${PARMETIS_ROOT} ${PARMETIS_ROOT}/include
|
|
PATH_SUFFIXES parmetis${PATH_SUFFIXES}
|
|
NO_DEFAULT_PATH
|
|
DOC "Include directory of ParMETIS")
|
|
find_path(PARMETIS_INCLUDE_DIR parmetis.h
|
|
PATH_SUFFIXES parmetis${PATH_SUFFIXES})
|
|
|
|
# find the serial version of METIS
|
|
find_package(METIS)
|
|
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${MPI_C_INCLUDE_PATH} )
|
|
if(PARMETIS_INCLUDE_DIR)
|
|
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${PARMETIS_INCLUDE_DIR})
|
|
if(METIS_INCLUDE_DIRS)
|
|
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${METIS_INCLUDE_DIRS})
|
|
endif()
|
|
endif()
|
|
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${MPI_C_COMPILE_FLAGS}")
|
|
|
|
include(CheckIncludeFile)
|
|
check_include_file(parmetis.h PARMETIS_FOUND)
|
|
|
|
if(NOT PARMETIS_FOUND)
|
|
# If we are using the ParMETIS bindings of PTScotch, we need
|
|
# to use the scotch include path as partmetis.h includes scotch.h
|
|
find_package(PTScotch)
|
|
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${PTSCOTCH_INCLUDE_DIR})
|
|
unset(PARMETIS_FOUND CACHE) # force recheck of include file
|
|
check_include_file(parmetis.h PARMETIS_FOUND)
|
|
if(PARMETIS_FOUND)
|
|
set(PARMETIS_SCOTCH_INCLUDE_DIRS ${PTSCOTCH_INCLUDE_DIRS})
|
|
endif()
|
|
endif()
|
|
|
|
_search_parmetis_lib(PARMETIS_LIBRARY parmetis "The main ParMETIS library.")
|
|
|
|
# behave like a CMake module is supposed to behave
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(
|
|
"ParMETIS"
|
|
DEFAULT_MSG
|
|
PARMETIS_INCLUDE_DIR
|
|
PARMETIS_LIBRARY
|
|
METIS_LIBRARIES
|
|
PARMETIS_FOUND
|
|
METIS_FOUND
|
|
)
|
|
#restore old values
|
|
cmake_pop_check_state()
|
|
|
|
if(PARMETIS_FOUND)
|
|
set(PARMETIS_INCLUDE_DIRS ${PARMETIS_INCLUDE_DIR} ${PARMETIS_SCOTCH_INCLUDE_DIRS})
|
|
set(PARMETIS_LIBRARIES ${PARMETIS_LIBRARY} ${METIS_LIBRARIES} ${MPI_C_LIBRARIES}
|
|
CACHE FILEPATH "All libraries needed to link programs using ParMETIS")
|
|
set(PARMETIS_LINK_FLAGS "${DUNE_C_LINK_FLAGS}"
|
|
CACHE STRING "ParMETIS link flags")
|
|
set(HAVE_PARMETIS 1)
|
|
# log result
|
|
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
|
"Determining location of ParMETIS succeded:\n"
|
|
"Include directory: ${PARMETIS_INCLUDE_DIRS}\n"
|
|
"Library directory: ${PARMETIS_LIBRARIES}\n\n")
|
|
|
|
endif(PARMETIS_FOUND)
|
|
|
|
mark_as_advanced(PARMETIS_INCLUDE_DIRS PARMETIS_LIBRARIES HAVE_PARMETIS)
|
|
else(MPI_C_FOUND)
|
|
message(WARNING "MPI not found ==> ParMETIS disabled! Plase make sure -DUSE_MPI=ON was set if you need ParMETIS.")
|
|
endif(MPI_C_FOUND)
|