LayerManagerService: stacktraces only enabled, if system supports it
authorTimo Lotterbach <timo.lotterbach@bmw-carit.de>
Thu, 22 Nov 2012 11:47:25 +0000 (03:47 -0800)
committerTimo Lotterbach <timo.lotterbach@bmw-carit.de>
Thu, 22 Nov 2012 11:47:25 +0000 (03:47 -0800)
the used backtrace functions used to print a stackdump on crashes
is not available on all platforms.

the build system now checks, if the system supports backtrace and
enables support if possible. Otherwise the stacktrace feature is disabled.

Signed-off-by: Timo Lotterbach <timo.lotterbach@bmw-carit.de>
LayerManagerService/CMakeLists.txt
LayerManagerService/src/SignalHandler.cpp
config/res/config.h.cmake

index 8d21649..bb4d149 100644 (file)
@@ -93,3 +93,13 @@ target_link_libraries(LayerManagerService_Test ${LIBS} gtest gmock)
 add_test(LayerManagerService LayerManagerService_Test )
 
 endif(WITH_TESTS) 
+
+
+#=============================================================
+# configuration depending on system
+#=============================================================
+include(CheckFunctionExists)
+check_function_exists(backtrace_symbols HAVE_BACKTRACE)
+
+include(CheckIncludeFiles)
+check_include_files(execinfo.h HAVE_EXECINFO_H)
index bbea156..5c8f41a 100644 (file)
 
 #include "SignalHandler.h"
 #include "Log.h"
+#include "config.h"
+
 #include <signal.h>
-#include <execinfo.h> // stacktrace
 #include <stdlib.h>   // exit
 
+#ifdef HAVE_EXECINFO_H
+    #include <execinfo.h>
+#endif
+
+
+
 //===========================================================================
 // Prototypes
 //===========================================================================
@@ -66,6 +73,7 @@ t_ilm_bool SignalHandler::shutdownSignalReceived()
 //===========================================================================
 void printStackTrace()
 {
+#ifdef HAVE_BACKTRACE
     const int maxStackSize = 64;
     void* stack[maxStackSize];
     
@@ -78,7 +86,8 @@ void printStackTrace()
         LOG_INFO("LayerManagerService", "Stack-Trace [" << i << "]: " << lines[i]);
     }
     LOG_INFO("LayerManagerService", "--------------------------------------------------");
-    
+#endif
+
     LOG_INFO("LayerManagerService", "Exiting application.")
     exit(-1);
 }
index 3931338..ead108b 100644 (file)
 // build with native systemd support
 #cmakedefine WITH_SYSTEMD
 
+
+//-----------------------------------------------------------------------------
+// platform configuration
+//-----------------------------------------------------------------------------
+// execinfo header file
+#cmakedefine HAVE_EXECINFO_H
+
+// backtrace available
+#cmakedefine HAVE_BACKTRACE
+
+
 //-----------------------------------------------------------------------------
 // human readable report
 //-----------------------------------------------------------------------------