From b0ea36b82a905a654ff93db8f870df3e78c5d428 Mon Sep 17 00:00:00 2001 From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de> Date: Mon, 14 Nov 2016 14:29:51 +0100 Subject: [PATCH] [cmake] Add NLOPT and GLPK cmake find scripts The NLOPT and GLPK are libraries for nonlinear and linear optimization algorithms. --- cmake/modules/DumuxMacros.cmake | 2 + cmake/modules/FindGLPK.cmake | 96 +++++++++++++++++++++++++++++++++ cmake/modules/FindNLOPT.cmake | 96 +++++++++++++++++++++++++++++++++ 3 files changed, 194 insertions(+) create mode 100644 cmake/modules/FindGLPK.cmake create mode 100644 cmake/modules/FindNLOPT.cmake diff --git a/cmake/modules/DumuxMacros.cmake b/cmake/modules/DumuxMacros.cmake index b3e7328fe3..97ea267aa2 100644 --- a/cmake/modules/DumuxMacros.cmake +++ b/cmake/modules/DumuxMacros.cmake @@ -4,9 +4,11 @@ include(AddInputFileLinks) include(DumuxDoxygen) include(DumuxTestMacros) +find_package(GLPK) find_package(Gstat) find_package(Gnuplot) set(HAVE_GNUPLOT ${GNUPLOT_FOUND}) +find_package(NLOPT) find_package(Valgrind) find_package(PTScotch) diff --git a/cmake/modules/FindGLPK.cmake b/cmake/modules/FindGLPK.cmake new file mode 100644 index 0000000000..9883ba2868 --- /dev/null +++ b/cmake/modules/FindGLPK.cmake @@ -0,0 +1,96 @@ +# +# Module that checks whether GLPK is available and usable. +# +# Variables used by this module which you may want to set: +# GLPK_ROOT Path list to search for GLPK +# +# Sets the follwing variable: +# +# GLPK_FOUND True if GLPK available and usable. +# GLPK_INCLUDE_DIRS Path to the GLPK include dirs. +# GLPK_LIBRARIES Name to the GLPK library. +# + +# look for header files, only at positions given by the user +find_path(GLPK_INCLUDE_DIR + NAMES glpk.h + PATHS ${GLPK_PREFIX} ${GLPK_ROOT} + PATH_SUFFIXES "glpk" "include/glpk" "include" "SRC" "src" + NO_DEFAULT_PATH +) + +# look for header files, including default paths +find_path(GLPK_INCLUDE_DIR + NAMES glpk.h + PATH_SUFFIXES "glpk" "include/glpk" "include" "SRC" "src" +) + +# look for library, only at positions given by the user +find_library(GLPK_LIBRARY + NAMES "glpk" + PATHS ${GLPK_PREFIX} ${GLPK_ROOT} ${GLPK_ROOT}/src/ ${GLPK_ROOT}/src/.libs/ + PATH_SUFFIXES "lib" "lib32" "lib64" "libglpk" + NO_DEFAULT_PATH +) + +# look for library files, including default paths +find_library(GLPK_LIBRARY + NAMES "glpk" + PATH_SUFFIXES "lib" "lib32" "lib64" "libglpk" +) + +# check version specific macros +include(CheckCSourceCompiles) +include(CMakePushCheckState) +cmake_push_check_state() + +# we need if clauses here because variable is set variable-NOTFOUND +# +if(GLPK_INCLUDE_DIR) + set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${GLPK_INCLUDE_DIR}) +endif(GLPK_INCLUDE_DIR) +if(GLPK_LIBRARY) + set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${GLPK_LIBRARY}) +endif(GLPK_LIBRARY) + +# handle package arguments +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + "GLPK" + DEFAULT_MSG + GLPK_INCLUDE_DIR + GLPK_LIBRARY +) + +mark_as_advanced(GLPK_INCLUDE_DIR GLPK_LIBRARY) + +# if both headers and library are found, store results +if(GLPK_FOUND) + set(GLPK_INCLUDE_DIRS ${GLPK_INCLUDE_DIR}) + set(GLPK_LIBRARIES ${GLPK_LIBRARY}) + # log result + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining location of GLPK succeeded:\n" + "Include directory: ${GLPK_INCLUDE_DIRS}\n" + "Library directory: ${GLPK_LIBRARIES}\n\n") + set(GLPK_DUNE_COMPILE_FLAGS "${GLPK_INCLUDE_DIRS}" + CACHE STRING "Compile flags used by DUNE when compiling GLPK programs") + set(GLPK_DUNE_LIBRARIES ${GLPK_LIBRARIES} + CACHE STRING "Libraries used by DUNE when linking GLPK programs") +else(GLPK_FOUND) + # log errornous result + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining location of GLPK failed:\n" + "Include directory: ${GLPK_INCLUDE_DIRS}\n" + "Library directory: ${GLPK_LIBRARIES}\n\n") +endif(GLPK_FOUND) + +# set HAVE_GLPK for config.h +set(HAVE_GLPK ${GLPK_FOUND}) + +# register all GLPK related flags +if(GLPK_FOUND) + dune_register_package_flags(COMPILE_DEFINITIONS "ENABLE_GLPK=1" + LIBRARIES "${GLPK_DUNE_LIBRARIES}" + INCLUDE_DIRS "${GLPK_INCLUDE_DIRS}") +endif() diff --git a/cmake/modules/FindNLOPT.cmake b/cmake/modules/FindNLOPT.cmake new file mode 100644 index 0000000000..e2a83e7b98 --- /dev/null +++ b/cmake/modules/FindNLOPT.cmake @@ -0,0 +1,96 @@ +# +# Module that checks whether NLOPT is available and usable. +# +# Variables used by this module which you may want to set: +# NLOPT_ROOT Path list to search for NLOPT +# +# Sets the follwing variable: +# +# NLOPT_FOUND True if NLOPT available and usable. +# NLOPT_INCLUDE_DIRS Path to the NLOPT include dirs. +# NLOPT_LIBRARIES Name to the NLOPT library. +# + +# look for header files, only at positions given by the user +find_path(NLOPT_INCLUDE_DIR + NAMES nlopt.h + PATHS ${NLOPT_PREFIX} ${NLOPT_ROOT} + PATH_SUFFIXES "nlopt" "include/nlopt" "include" "SRC" "src" "api" + NO_DEFAULT_PATH +) + +# look for header files, including default paths +find_path(NLOPT_INCLUDE_DIR + NAMES nlopt.h + PATH_SUFFIXES "nlopt" "include/nlopt" "include" "SRC" "src" +) + +# look for library, only at positions given by the user +find_library(NLOPT_LIBRARY + NAMES "nlopt" + PATHS ${NLOPT_PREFIX} ${NLOPT_ROOT} ${NLOPT_ROOT}/.libs/ + PATH_SUFFIXES "lib" "lib32" "lib64" "libnlopt" + NO_DEFAULT_PATH +) + +# look for library files, including default paths +find_library(NLOPT_LIBRARY + NAMES "nlopt" + PATH_SUFFIXES "lib" "lib32" "lib64" "libnlopt" +) + +# check version specific macros +include(CheckCSourceCompiles) +include(CMakePushCheckState) +cmake_push_check_state() + +# we need if clauses here because variable is set variable-NOTFOUND +# +if(NLOPT_INCLUDE_DIR) + set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${NLOPT_INCLUDE_DIR}) +endif(NLOPT_INCLUDE_DIR) +if(NLOPT_LIBRARY) + set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${NLOPT_LIBRARY}) +endif(NLOPT_LIBRARY) + +# behave like a CMake module is supposed to behave +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + "NLOPT" + DEFAULT_MSG + NLOPT_INCLUDE_DIR + NLOPT_LIBRARY +) + +mark_as_advanced(NLOPT_INCLUDE_DIR NLOPT_LIBRARY) + +# if both headers and library are found, store results +if(NLOPT_FOUND) + set(NLOPT_INCLUDE_DIRS ${NLOPT_INCLUDE_DIR}) + set(NLOPT_LIBRARIES ${NLOPT_LIBRARY}) + # log result + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Determining location of NLOPT succeeded:\n" + "Include directory: ${NLOPT_INCLUDE_DIRS}\n" + "Library directory: ${NLOPT_LIBRARIES}\n\n") + set(NLOPT_DUNE_COMPILE_FLAGS "${NLOPT_INCLUDE_DIRS}" + CACHE STRING "Compile flags used by DUNE when compiling NLOPT programs") + set(NLOPT_DUNE_LIBRARIES ${NLOPT_LIBRARIES} + CACHE STRING "Libraries used by DUNE when linking NLOPT programs") +else(NLOPT_FOUND) + # log errornous result + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Determining location of NLOPT failed:\n" + "Include directory: ${NLOPT_INCLUDE_DIRS}\n" + "Library directory: ${NLOPT_LIBRARIES}\n\n") +endif(NLOPT_FOUND) + +# set HAVE_NLOPT for config.h +set(HAVE_NLOPT ${NLOPT_FOUND}) + +# register all NLOPT related flags +if(NLOPT_FOUND) + dune_register_package_flags(COMPILE_DEFINITIONS "ENABLE_NLOPT=1" + LIBRARIES "${NLOPT_DUNE_LIBRARIES}" + INCLUDE_DIRS "${NLOPT_INCLUDE_DIRS}") +endif() -- GitLab