From 9acfcc924fdcc8d054cacaa835f6ae917f4ea45d Mon Sep 17 00:00:00 2001
From: Christian Godenschwager <christian.godenschwager@fau.de>
Date: Mon, 19 Dec 2016 15:24:58 +0100
Subject: [PATCH] Added CMake code to find the OpenMesh library

---
 CMakeLists.txt               |  16 ++++
 cmake/FindOpenMesh.cmake     | 147 +++++++++++++++++++++++++++++++++++
 src/waLBerlaDefinitions.in.h |   2 +
 3 files changed, 165 insertions(+)
 create mode 100644 cmake/FindOpenMesh.cmake

diff --git a/CMakeLists.txt b/CMakeLists.txt
index cfb5752ed..96b410c83 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -894,6 +894,22 @@ endif()
 
 
 
+############################################################################################################################
+##
+## OpenMesh
+##
+############################################################################################################################
+if( (NOT DEFINED WALBERLA_BUILD_WITH_OPENMESH) OR WALBERLA_BUILD_WITH_OPENMESH )
+   find_package( OpenMesh )
+   if( OPENMESH_FOUND )
+      set( WALBERLA_BUILD_WITH_OPENMESH ON CACHE BOOL "Build with OpenMesh support" )
+      include_directories( SYSTEM ${OPENMESH_INCLUDE_DIRS} )
+      list( APPEND SERVICE_LIBS ${OPENMESH_LIBRARIES} )
+   else()
+      set( WALBERLA_BUILD_WITH_OPENMESH OFF CACHE BOOL "Build with OpenMesh support" FORCE )
+   endif()
+endif()
+
 ############################################################################################################################
 ##
 ## DebugOptimized Build Configuration for fast execution of tests with enabled asserts
diff --git a/cmake/FindOpenMesh.cmake b/cmake/FindOpenMesh.cmake
new file mode 100644
index 000000000..307899c09
--- /dev/null
+++ b/cmake/FindOpenMesh.cmake
@@ -0,0 +1,147 @@
+#
+# Try to find OPENMESH
+# Once done this will define
+#  
+# OPENMESH_FOUND           - system has OPENMESH
+# OPENMESH_INCLUDE_DIRS    - the OPENMESH include directories
+# OPENMESH_LIBRARIES       - Link these to use OPENMESH
+# OPENMESH_LIBRARY_DIR     - directory where the libraries are included
+#
+# Copyright 2015 Computer Graphics Group, RWTH Aachen University
+# Authors: Jan Möbius <moebius@cs.rwth-aachen.de>
+#          Hans-Christian Ebke <ebke@cs.rwth-aachen.de>
+#
+#
+#===========================================================================
+#                                                                           
+#                               OpenMesh                                    
+#           Copyright (c) 2001-2015, RWTH-Aachen University                 
+#           Department of Computer Graphics and Multimedia                 
+#                          All rights reserved.                             
+#                            www.openmesh.org                               
+#                                                                           
+#---------------------------------------------------------------------------
+# This file is part of OpenMesh.                                            
+#---------------------------------------------------------------------------
+#                                                                           
+# Redistribution and use in source and binary forms, with or without        
+# modification, are permitted provided that the following conditions        
+# are met:                                                                  
+#                                                                           
+# 1. Redistributions of source code must retain the above copyright notice, 
+#    this list of conditions and the following disclaimer.                  
+#                                                                           
+# 2. Redistributions in binary form must reproduce the above copyright      
+#    notice, this list of conditions and the following disclaimer in the    
+#    documentation and/or other materials provided with the distribution.   
+#                                                                           
+# 3. Neither the name of the copyright holder nor the names of its          
+#    contributors may be used to endorse or promote products derived from   
+#    this software without specific prior written permission.               
+#                                                                           
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A           
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 
+# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,       
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR        
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF    
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING      
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS        
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.              
+#                                                                            
+#===========================================================================
+
+cmake_minimum_required(VERSION 2.8.9)
+
+#if already found via finder or simulated finder in openmesh CMakeLists.txt, skip the search
+IF (NOT OPENMESH_FOUND) 
+  SET (SEARCH_PATHS 
+    /usr/local/
+    /usr/
+    "${CMAKE_SOURCE_DIR}/OpenMesh/src/OpenMesh"
+    "${CMAKE_SOURCE_DIR}/libs_required/OpenMesh/src/OpenMesh"
+    "${CMAKE_SOURCE_DIR}/../OpenMesh/src/OpenMesh"
+    "C:/Program Files/OpenMesh 6.3"
+    "C:/Program Files/OpenMesh 6.2"
+    "C:/Program Files/OpenMesh 6.1"
+    "C:/Program Files/OpenMesh 6.0"
+    "C:/Program Files/OpenMesh 5.2"
+    "C:/Program Files/OpenMesh 5.1"
+    "C:/Program Files/OpenMesh 5.0"
+    "C:/Program Files/OpenMesh 4.2"
+    "C:/Program Files/OpenMesh 4.1"
+    "C:/Program Files/OpenMesh 4.0"
+    "C:/Program Files/OpenMesh 3.4"
+    "C:/Program Files/OpenMesh 3.3"
+    "C:/Program Files/OpenMesh 3.2"
+    "C:/Program Files/OpenMesh 3.1"
+    "C:/Program Files/OpenMesh 3.0"
+    "C:/Program Files/OpenMesh 2.4.1"
+    "C:/Program Files/OpenMesh 2.4"
+    "C:/Program Files/OpenMesh 2.0/include"
+    "C:/libs/OpenMesh 6.3"
+    "C:/libs/OpenMesh 6.2"
+    "C:/libs/OpenMesh 6.1"
+    "C:/libs/OpenMesh 6.0"
+    "C:/libs/OpenMesh 5.2"
+    "C:/libs/OpenMesh 5.1"
+    "C:/libs/OpenMesh 5.0"
+    "C:/libs/OpenMesh 4.2"
+    "C:/libs/OpenMesh 4.1"
+    "C:/libs/OpenMesh 4.0"
+    "C:/libs/OpenMesh 3.4"
+    "C:/libs/OpenMesh 3.3"
+    "C:/libs/OpenMesh 3.2"
+    "C:/libs/OpenMesh 3.1"
+    "C:/libs/OpenMesh 3.0"
+    "C:/libs/OpenMesh 2.4.1"
+    "C:/libs/OpenMesh 2.4"
+    "${OPENMESH_LIBRARY_DIR}"
+  )
+
+  FIND_PATH (OPENMESH_INCLUDE_DIR OpenMesh/Core/Mesh/PolyMeshT.hh
+    PATHS ${SEARCH_PATHS}
+    PATH_SUFFIXES include)
+
+  FIND_LIBRARY(OPENMESH_CORE_LIBRARY_RELEASE NAMES OpenMeshCore
+    PATHS ${SEARCH_PATHS}
+    PATH_SUFFIXES lib lib64)
+
+  FIND_LIBRARY(OPENMESH_CORE_LIBRARY_DEBUG NAMES OpenMeshCored 
+    PATHS ${SEARCH_PATHS}
+    PATH_SUFFIXES lib lib64)
+
+  FIND_LIBRARY(OPENMESH_TOOLS_LIBRARY_RELEASE NAMES OpenMeshTools
+    PATHS ${SEARCH_PATHS}
+    PATH_SUFFIXES lib lib64)
+
+  FIND_LIBRARY(OPENMESH_TOOLS_LIBRARY_DEBUG NAMES OpenMeshToolsd
+    PATHS ${SEARCH_PATHS}
+    PATH_SUFFIXES lib lib64)
+
+#select configuration depending on platform (optimized... on windows)
+  include(SelectLibraryConfigurations)
+  select_library_configurations( OPENMESH_TOOLS )
+  select_library_configurations( OPENMESH_CORE )
+
+  set(OPENMESH_LIBRARIES ${OPENMESH_CORE_LIBRARY} ${OPENMESH_TOOLS_LIBRARY} )
+  set(OPENMESH_INCLUDE_DIRS ${OPENMESH_INCLUDE_DIR} )
+
+#checks, if OPENMESH was found and sets OPENMESH_FOUND if so
+  include(FindPackageHandleStandardArgs)
+  find_package_handle_standard_args(OpenMesh  DEFAULT_MSG
+                                    OPENMESH_CORE_LIBRARY OPENMESH_TOOLS_LIBRARY OPENMESH_INCLUDE_DIR)
+ 
+#sets the library dir 
+  if ( OPENMESH_CORE_LIBRARY_RELEASE )
+    get_filename_component(_OPENMESH_LIBRARY_DIR ${OPENMESH_CORE_LIBRARY_RELEASE} PATH)
+  else( OPENMESH_CORE_LIBRARY_RELEASE )
+    get_filename_component(_OPENMESH_LIBRARY_DIR ${OPENMESH_CORE_LIBRARY_DEBUG} PATH)
+  endif( OPENMESH_CORE_LIBRARY_RELEASE )
+  set (OPENMESH_LIBRARY_DIR "${_OPENMESH_LIBRARY_DIR}" CACHE PATH "The directory where the OpenMesh libraries can be found.")
+  
+ 
+  mark_as_advanced(OPENMESH_INCLUDE_DIR OPENMESH_CORE_LIBRARY_RELEASE OPENMESH_CORE_LIBRARY_DEBUG OPENMESH_TOOLS_LIBRARY_RELEASE OPENMESH_TOOLS_LIBRARY_DEBUG OPENMESH_LIBRARY_DIR)
+endif()
diff --git a/src/waLBerlaDefinitions.in.h b/src/waLBerlaDefinitions.in.h
index 427899816..ed587958e 100644
--- a/src/waLBerlaDefinitions.in.h
+++ b/src/waLBerlaDefinitions.in.h
@@ -27,6 +27,8 @@
 
 #cmakedefine WALBERLA_BUILD_WITH_FFT
 
+#cmakedefine WALBERLA_BUILD_WITH_OPENMESH
+
 #cmakedefine WALBERLA_BUFFER_DEBUG
 
 #cmakedefine WALBERLA_THREAD_SAFE_LOGGING
-- 
GitLab