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 0000000..409279c
--- /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 0aba9c3..2b0a470 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 613dfb6..ebb7c58 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 0000000..777cc1c
--- /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