Skip to content
Snippets Groups Projects
Commit e11c1e30 authored by Christoph Grüninger's avatar Christoph Grüninger
Browse files

[FindMETIS.cmake]

Improve METIS test, tested with versions 4.0.3 and 5.0.2.

[[Imported from SVN: r7035]]
parent b5e05207
No related branches found
No related tags found
No related merge requests found
......@@ -21,45 +21,81 @@
#
# Adds the necessary flags to comile and link TARGETS with ParMETIS support.
#
find_path(METIS_INCLUDE_DIRS metis.h PATHS ${METIS_DIR}
PATH_SUFFIXES metis NO_DEFAULT_PATH
# function to add the metis flags to a target
function(add_dune_metis_flags _targets)
if(METIS_FOUND)
foreach(_target ${_targets})
target_link_libraries(${_target} ${METIS_LIBRARY})
endforeach(_target ${_targets})
set_property(TARGET ${_targets} APPEND PROPERTIES
COMPILE_DIRECTORIES ${METIS_INCLUDE_DIR})
endif(METIS_FOUND)
endfunction(add_dune_metis_flags _targets)
# search metis header
find_path(METIS_INCLUDE_DIR metis.h
PATHS ${METIS_DIR}
PATH_SUFFIXES metis include Lib
NO_DEFAULT_PATH
DOC "Include directory of metis")
find_path(METIS_INCLUDE_DIRS metis.h PATH_SUFFIXES metis)
find_path(METIS_INCLUDE_DIR metis.h
PATH_SUFFIXES metis inclue Lib)
set(METIS_LIBRARY METIS_LIBRARY-NOTFOUND CACHE FILEPATH "Full path of the METIS library")
# check metis header
include(CMakePushCheckState)
cmake_push_check_state() # Save variables
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${METIS_INCLUDE_DIRS})
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${METIS_INCLUDE_DIR})
check_include_file(metis.h METIS_FOUND)
# search metis library
if(NOT METIS_LIB_NAME)
set(METIS_LIB_NAME metis)
endif(NOT METIS_LIB_NAME)
find_library(METIS_LIBRARY ${METIS_LIB_NAME} PATHS ${ParMETIS_DIR}
PATH_SUFFIXES lib NO_DEFAULT_PATH)
find_library(METIS_LIBRARY ${METIS_LIB_NAME})
find_library(METIS_LIBRARY ${METIS_LIB_NAME}
PATHS ${METIS_DIR}
PATH_SUFFIXES lib
NO_DEFAULT_PATH)
find_library(METIS_LIBRARY ${METIS_LIB_NAME}
PATH_SUFFIXES lib
)
# behave like a CMake module is supposed to behave
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
"METIS"
DEFAULT_MSG
METIS_INCLUDE_DIR
METIS_LIBRARY
)
# check metis library
if(METIS_LIBRARY)
set(METIS_LIBRARIES ${METIS_LIBRARY})
list(APPEND CMAKE_REQUIRED_LIBRARIES ${METIS_LIBRARIES})
list(APPEND CMAKE_REQUIRED_LIBRARIES ${METIS_LIBRARIY})
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${METIS_LIBRARY})
include(CheckSymbolExists)
check_symbol_exists(METIS_PartMeshDual metis.h METIS_FOUND)
endif(METIS_LIBRARY)
cmake_pop_check_state()
mark_as_advanced(METIS_INCLUDE_DIR METIS_LIBRARIES METIS_LIB_NAME)
# if both headers and library are found, store results
if(METIS_FOUND)
message(STATUS "METIS found. Include directories are ${METIS_INCLUDE_DIRS} and libraries are ${METIS_LIBRARIES}")
set(METIS_INCLUDE_DIRS ${METIS_INCLUDE_DIR})
set(METIS_LIBRARIES ${METIS_LIBRARY})
# log result
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
"Determing location of METIS succeded:\n"
"Include directory: ${METIS_INCLUDE_DIRS}\n"
"Library directory: ${METIS_LIBRARIES}\n\n")
else(METIS_FOUND)
message(WARNING "No functional METIS found.")
# log errornous result
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
"Determing location of METIS failed:\n"
"Include directory: ${METIS_INCLUDE_DIRS}\n"
"Library directory: ${METIS_LIBRARIES}\n\n")
endif(METIS_FOUND)
function(add_dune_metis_flags _targets)
if(METIS_FOUND)
foreach(_target ${_targets})
target_link_libraries(${_target} ${METIS_LIBRARY})
endforeach(_target ${_targets})
set_property(TARGET ${_targets} APPEND PROPERTIES
COMPILE_DIRECTORIES ${METIS_INCLUDE_DIRS})
endif(METIS_FOUND)
endfunction(add_dune_metis_flags _targets)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment