From c101608a70389677a77dfd6330bde5499b2577ed Mon Sep 17 00:00:00 2001 From: Ansgar Burchardt <burchardt@igpm.rwth-aachen.de> Date: Wed, 21 May 2014 12:09:52 +0200 Subject: [PATCH] Add CMake support for IPOpt It works for me with the Debian packages for IPOpt. --- cmake/modules/AddIPOptFlags.cmake | 11 +++++++++++ cmake/modules/CMakeLists.txt | 8 +++++--- cmake/modules/DuneSolversMacros.cmake | 2 ++ cmake/modules/FindIPOpt.cmake | 14 ++++++++++++++ 4 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 cmake/modules/AddIPOptFlags.cmake create mode 100644 cmake/modules/FindIPOpt.cmake diff --git a/cmake/modules/AddIPOptFlags.cmake b/cmake/modules/AddIPOptFlags.cmake new file mode 100644 index 00000000..409279c3 --- /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 0aba9c37..2b0a470f 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 613dfb66..ebb7c580 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 00000000..777cc1c5 --- /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) -- GitLab