From e090b61c5f7fe0307bc4b15ee1970bfe3cd8dcf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20Gr=C3=BCninger?= <gruenich@dune-project.org> Date: Fri, 2 Nov 2012 16:24:11 +0000 Subject: [PATCH] [FindParMETIS.cmake] Improve ParMETIS test, tested with dune-istl and ParMETIS versions 3.2.0 and 4.0.2. [[Imported from SVN: r7054]] --- cmake/modules/FindParMETIS.cmake | 147 +++++++++++++++++-------------- 1 file changed, 79 insertions(+), 68 deletions(-) diff --git a/cmake/modules/FindParMETIS.cmake b/cmake/modules/FindParMETIS.cmake index 85f2b0fb0..aa71114a1 100644 --- a/cmake/modules/FindParMETIS.cmake +++ b/cmake/modules/FindParMETIS.cmake @@ -2,18 +2,18 @@ # # Accepts the following variables: # -# ParMETIS_DIR: Prefix where ParMETIS is installed. +# PARMETIS_DIR: Prefix where ParMETIS is installed. # METIS_LIB_NAME: Name of the METIS library (default: metis). # PARMETIS_LIB_NAME: Name of the ParMETIS library (default: parmetis). # METIS_LIBRARY: Full path of the METIS library. -# ParMETIS_LIBRARY: Full path of the ParMETIS library +# PARMETIS_LIBRARY: Full path of the ParMETIS library # Sets the following variables: # # METIS_LIBRARY: Full path of the METIS library. -# ParMETIS_LIBRARY: Full path of the ParMETIS library. -# ParMETIS_FOUND: True if ParMETIS was found. -# ParMETIS_LIBRARIES: List of all libraries needed for linking with ParMETIS, +# PARMETIS_LIBRARY: Full path of the ParMETIS library. +# PARMETIS_FOUND: True if ParMETIS was found. +# PARMETIS_LIBRARIES: List of all libraries needed for linking with ParMETIS, # # Provides the following macros: # @@ -26,89 +26,100 @@ # # Adds the necessary flags to comile and link TARGETS with ParMETIS support. # -include(DuneMPI) - -# search for file parmetis.h -find_path(ParMETIS_INCLUDE_DIRS parmetis.h - PATHS ${PARMETIS_DIR} - PATH_SUFFIXES include parmetis - DOC "path for file parmetis.h" - NO_DEFAULT_PATH) -# Search in default paths (omitted because of precedence above. -find_path(ParMETIS_INCLUDE_DIRS parmetis.h - PATH_SUFFIXES include parmetis - DOC "path for file parmetis.h") +# adds ParMETIS flags to the targets +function(add_dune_parmetis_flags _targets) + if(PARMETIS_FOUND) + foreach(_target ${_targets}) + target_link_libraries(${_target} ${PARMETIS_LIBRARY} ${METIS_LIBRARY}) + GET_TARGET_PROPERTY(_props ${_target} COMPILE_FLAGS) + string(REPLACE "_props-NOTFOUND" "" _props "${_props}") + SET_TARGET_PROPERTIES(${_target} PROPERTIES COMPILE_FLAGS + "${_props} ${PARMETIS_COMPILE_FLAGS} -DENABLE_PARMETS=1") + endforeach(_target ${_targets}) + add_dune_mpi_flags(${_targets}) + endif(PARMETIS_FOUND) +endfunction(add_dune_parmetis_flags) -set(METIS_LIB_NAME metis CACHE STRING "Name of the METIS library (default: metis).") -set(PARMETIS_LIB_NAME parmetis CACHE STRING "Name of the ParMETIS library (default: parmetis).") -set(METIS_LIBRARY METIS_LIBRARY-NOTFOUND CACHE FILEPATH "Full path of the METIS library") -set(ParMETIS_LIBRARY ParMETIS_LIBRARY-NOTFOUND CACHE FILEPATH "Full path of the ParMETIS library") -# save old variables -set(CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES}) -set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) -set(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES}) +include(DuneMPI) -set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${MPI_DUNE_INCLUDE_PATH} ${ParMETIS_INCLUDE_DIRS}) +# search for header parmetis.h +find_path(PARMETIS_INCLUDE_DIR parmetis.h + PATHS ${PARMETIS_DIR} + PATH_SUFFIXES include parmetis + NO_DEFAULT_PATH + DOC "Include directory of ParMETIS") +find_path(PARMETIS_INCLUDE_DIR parmetis.h + PATH_SUFFIXES include parmetis) + +set(METIS_LIB_NAME metis + CACHE STRING "Name of the METIS library (default: metis).") +set(PARMETIS_LIB_NAME parmetis + CACHE STRING "Name of the ParMETIS library (default: parmetis).") +set(METIS_LIBRARY METIS_LIBRARY-NOTFOUND + CACHE FILEPATH "Full path of the METIS library") +set(PARMETIS_LIBRARY ParMETIS_LIBRARY-NOTFOUND + CACHE FILEPATH "Full path of the ParMETIS library") + +# check METIS and ParMETIS headers +include(CMakePushCheckState) +cmake_push_check_state() # Save variables +set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${MPI_DUNE_INCLUDE_PATH} ${PARMETIS_INCLUDE_DIR}) set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${MPI_DUNE_COMPILE_FLAGS}") +check_include_file(metis.h METIS_FOUND) +check_include_file(parmetis.h PARMETIS_FOUND) -if(ParMETIS_INCLUDE_DIRS) - check_include_file(parmetis.h ParMETIS_FOUND) -endif(ParMETIS_INCLUDE_DIRS) - -if(ParMETIS_FOUND) +if(PARMETIS_FOUND) set(ParMETIS_INCLUDE_PATH ${CMAKE_REQUIRED_INCLUDES}) set(ParMETIS_COMPILE_FLAGS "${CMAKE_REQUIRED_FLAGS} -DENABLE_PARMETIS=1") - find_library(METIS_LIBRARY metis PATHS ${ParMETIS_DIR} PATH_SUFFIXES lib NO_DEFAULT_PATH) + # search METIS library + find_library(METIS_LIBRARY metis + PATHS ${PARMETIS_DIR} + PATH_SUFFIXES lib + NO_DEFAULT_PATH) find_library(METIS_LIBRARY metis) - find_library(ParMETIS_LIBRARY parmetis PATHS ${ParMETIS_DIR} PATH_SUFFIXES lib NO_DEFAULT_PATH) - find_library(ParMETIS_LIBRARY parmetis) + # search ParMETIS library + find_library(PARMETIS_LIBRARY parmetis + PATHS ${PARMETIS_DIR} + PATH_SUFFIXES lib + NO_DEFAULT_PATH) + find_library(PARMETIS_LIBRARY parmetis) - if(ParMETIS_LIBRARY) - list(APPEND CMAKE_REQUIRED_LIBRARIES ${ParMETIS_LIBRARY} ${METIS_LIBRARY} ${MPI_DUNE_LIBRARIES}) + # check ParMETIS library + if(PARMETIS_LIBRARY) + list(APPEND CMAKE_REQUIRED_LIBRARIES ${PARMETIS_LIBRARY} ${METIS_LIBRARY} ${MPI_DUNE_LIBRARIES}) include(CheckSymbolExists) - check_symbol_exists(parmetis_v3_partkway parmetis.h ParMETIS_FOUND) - endif(ParMETIS_LIBRARY) - - if(ParMETIS_FOUND) - set(ParMETIS_LIBRARIES "${ParMETIS_LIBRARY};${METIS_LIBRARY};${MPI_DUNE_LIBRARIES}" - CACHE FILEPATH "ParMETIS libraries needed for linking") - set(ParMETIS_LINK_FLAGS "${DUNE_MPI_LINK_FLAGS}" CACHE STRING "ParMETIS link flags") - else(ParMETIS_FOUND) - set(ParMETIS_LIBRARIES "" CACHE FILEPATH "ParMETIS libraries needed for linking") - set(ParMETIS_LINK_FLAGS "" CACHE STRING "ParMETIS link flags") - endif(ParMETIS_FOUND) -endif(ParMETIS_FOUND) + check_symbol_exists(parmetis_v3_partkway parmetis.h PARMETIS_FOUND) + endif(PARMETIS_LIBRARY) +endif(PARMETIS_FOUND) # behave like a CMake module is supposed to behave include(FindPackageHandleStandardArgs) find_package_handle_standard_args( - "ParMetis" + "ParMETIS" DEFAULT_MSG - ParMETIS_INCLUDE_DIRS - ParMETIS_LIBRARY + PARMETIS_INCLUDE_DIR + PARMETIS_LIBRARY + PARMETIS_FOUND ) -mark_as_advanced(ParMETIS_INCLUDE_DIRS ParMETIS_LIBRARIES ParMETIS_LINK_FLAGS) +mark_as_advanced(PARMETIS_INCLUDE_DIR METIS_LIBRARY PARMETIS_LIBRARY METIS_LIB_NAME PARMETIS_LIB_NAME) #restore old values -set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE}) -set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) -set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE}) +cmake_pop_check_state() -# adds ParMETIS flags to the targets -function(add_dune_parmetis_flags _targets) - if(ParMETIS_FOUND) - foreach(_target ${_targets}) - target_link_libraries(${_target} ${ParMETIS_LIBRARY} ${METIS_LIBRARY}) - GET_TARGET_PROPERTY(_props ${_target} COMPILE_FLAGS) - string(REPLACE "_props-NOTFOUND" "" _props "${_props}") - SET_TARGET_PROPERTIES(${_target} PROPERTIES COMPILE_FLAGS - "${_props} ${PARMETIS_COMPILE_FLAGS} -DENABLE_PARMETS=1") - endforeach(_target ${_targets}) - add_dune_mpi_flags(${_targets}) - endif(ParMETIS_FOUND) -endfunction(add_dune_parmetis_flags) +if(PARMETIS_FOUND) + set(PARMETIS_INCLUDE_DIRS ${PARMETIS_INCLUDE_DIR}) + set(PARMETIS_LIBRARIES "${PARMETIS_LIBRARY};${METIS_LIBRARY};${MPI_DUNE_LIBRARIES}" + CACHE FILEPATH "ParMETIS libraries needed for linking") + set(PARMETIS_LINK_FLAGS "${DUNE_MPI_LINK_FLAGS}" + CACHE STRING "ParMETIS link flags") + # log result + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determing location of ParMETIS succeded:\n" + "Include directory: ${PARMETIS_INCLUDE_DIRS}\n" + "Library directory: ${PARMETIS_LIBRARIES}\n\n") +endif(PARMETIS_FOUND) -- GitLab