From bdcd3491eff065ae2c757f5d6df20cbf9ec1787b Mon Sep 17 00:00:00 2001
From: Michael Kuron <mkuron@icp.uni-stuttgart.de>
Date: Tue, 15 Oct 2019 12:01:43 +0200
Subject: [PATCH] Make dependency on execinfo.h optional

---
 CMakeLists.txt                     | 17 +++++++++++++++++
 src/core/debug/PrintStacktrace.cpp |  7 +++----
 src/waLBerlaDefinitions.in.h       |  4 ++++
 3 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5d4e3c272..7a39496e7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -777,6 +777,23 @@ endif()
 
 
 
+############################################################################################################################
+##
+## backtrace may be in a separate library
+##
+############################################################################################################################
+
+if ( NOT WIN32 AND (WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_INTEL OR WALBERLA_CXX_COMPILER_IS_CLANG))
+   find_package ( Backtrace QUIET )
+   if ( Backtrace_FOUND )
+      list ( APPEND SERVICE_LIBS ${Backtrace_LIBRARIES} )
+      set ( WALBERLA_BUILD_WITH_BACKTRACE ON )
+      set ( WALBERLA_BACKTRACE_HEADER ${Backtrace_HEADER} )
+   endif ( Backtrace_FOUND )
+endif()
+
+
+
 ############################################################################################################################
 ##
 ## MPI
diff --git a/src/core/debug/PrintStacktrace.cpp b/src/core/debug/PrintStacktrace.cpp
index a83b13d23..f939d19d5 100644
--- a/src/core/debug/PrintStacktrace.cpp
+++ b/src/core/debug/PrintStacktrace.cpp
@@ -36,9 +36,9 @@ void printStacktrace()
 } // namespace debug
 } // namespace walberla
 
-#if defined(WALBERLA_CXX_COMPILER_IS_GNU) || defined(WALBERLA_CXX_COMPILER_IS_INTEL) || defined( WALBERLA_CXX_COMPILER_IS_CLANG)
+#ifdef WALBERLA_BUILD_WITH_BACKTRACE
 
-#include <execinfo.h>
+#include WALBERLA_BACKTRACE_HEADER
 #include <cstdlib>
 #include <string>
 
@@ -55,14 +55,13 @@ namespace debug {
       void * array[BACKTRACE_LENGTH];
       size_t size;
       char **strings;
-      size_t i;
 
       size = numeric_cast< size_t >( backtrace (array, BACKTRACE_LENGTH) );
       strings = backtrace_symbols (array, int_c(size) );
 
       os << "Backtrace: " << std::endl;
 
-      for (i = 0; i < size; i++)
+      for (size_t i = 0; i < size; i++)
       {
          std::string line ( strings[i] );
 #ifdef __APPLE__
diff --git a/src/waLBerlaDefinitions.in.h b/src/waLBerlaDefinitions.in.h
index 0d3ed2a75..bb9b6d029 100644
--- a/src/waLBerlaDefinitions.in.h
+++ b/src/waLBerlaDefinitions.in.h
@@ -53,6 +53,10 @@
 #cmakedefine WALBERLA_USE_STD_ANY
 #cmakedefine WALBERLA_USE_STD_EXPERIMENTAL_OPTIONAL
 #cmakedefine WALBERLA_USE_STD_OPTIONAL
+#cmakedefine WALBERLA_BUILD_WITH_BACKTRACE
+#ifdef WALBERLA_BUILD_WITH_BACKTRACE
+#define WALBERLA_BACKTRACE_HEADER "${Backtrace_HEADER}"
+#endif
 
 // SIMD
 #cmakedefine WALBERLA_SIMD_FORCE_SCALAR
-- 
GitLab