diff --git a/cmake/modules/AddIPOptFlags.cmake b/cmake/modules/AddIPOptFlags.cmake new file mode 100644 index 0000000000000000000000000000000000000000..409279c3a04910677d2cf933a802a0d437d5fab2 --- /dev/null +++ b/cmake/modules/AddIPOptFlags.cmake @@ -0,0 +1,11 @@ +function(add_dune_ipopt_flags _targets) + if(IPOPT_FOUND) + cmake_parse_arguments(ADD_DUNE_IPOPT_FLAGS "OBJECT" "" "" ${ARGN}) + foreach(_target ${_targets}) + target_compile_options(${_target} PRIVATE ${DUNE_IPOPT_CFLAGS}) + if(NOT ADD_DUNE_IPOPT_FLAGS_OBJECT) + target_link_libraries(${_target} ${IPOPT_LIBRARY}) + endif() + endforeach(_target ${_targets}) + endif(IPOPT_FOUND) +endfunction(add_dune_ipopt_flags) diff --git a/cmake/modules/CMakeLists.txt b/cmake/modules/CMakeLists.txt index 0aba9c378cfcf69f4295d29164ae91e7f1ba63a9..2b0a470f320795d99a045e20abba03ae4d82ab38 100644 --- a/cmake/modules/CMakeLists.txt +++ b/cmake/modules/CMakeLists.txt @@ -1,3 +1,5 @@ -set(modules "DuneSolversMacros.cmake") - -install(FILES ${modules} DESTINATION ${DUNE_INSTALL_MODULEDIR}) +install(FILES + DuneSolversMacros.cmake + FindIPOpt.cmake + AddIPOptFlags.cmake + DESTINATION ${DUNE_INSTALL_MODULEDIR}) diff --git a/cmake/modules/DuneSolversMacros.cmake b/cmake/modules/DuneSolversMacros.cmake index 613dfb664b75999b008f0003a4d7c409cbf409ad..ebb7c580823c7cff4cd1b946fdf8e40da722c289 100644 --- a/cmake/modules/DuneSolversMacros.cmake +++ b/cmake/modules/DuneSolversMacros.cmake @@ -1 +1,3 @@ # File for module specific CMake tests. +find_package(IPOpt) +include(AddIPOptFlags) diff --git a/cmake/modules/FindIPOpt.cmake b/cmake/modules/FindIPOpt.cmake new file mode 100644 index 0000000000000000000000000000000000000000..777cc1c59bb82e84a9fe74400fb94544b647bc16 --- /dev/null +++ b/cmake/modules/FindIPOpt.cmake @@ -0,0 +1,14 @@ +find_package(PkgConfig REQUIRED) +include(FindPackageHandleStandardArgs) + +pkg_check_modules(IPOPT ipopt) +find_package_handle_standard_args(Ipopt DEFAULT_MSG IPOPT_FOUND) +find_library(IPOPT_LIBRARY ipopt HINTS "${IPOPT_LIBDIR}") +set(HAVE_IPOPT ENABLE_IPOPT) + +if(IPOPT_FOUND) + set(DUNE_IPOPT_CFLAGS ${IPOPT_CFLAGS} -DENABLE_IPOPT=1) + foreach(dir ${PSURFACE_INCLUDE_DIRS}) + set_property(GLOBAL APPEND PROPERTY ALL_PKG_FLAGS "-I${dir}") + endforeach() +endif(IPOPT_FOUND)