| From 4b2c73ad056aa327dc3b505410da68cf384317ba Mon Sep 17 00:00:00 2001 |
| From: Samuel Martin <s.martin49@gmail.com> |
| Date: Mon, 16 May 2016 22:26:05 +0200 |
| Subject: [PATCH] Make backtrace support depends on execinfo.h existence |
| |
| In some C-libraries (like uclibc), backtrace support is optional, so the |
| execinfo.h file may not exist. |
| |
| This change adds the check for execinfo.h header and conditionnaly enable |
| backtrace support. |
| |
| This issue has been triggered by Buildroot farms: |
| http://autobuild.buildroot.org/results/391/391e71a988250ea66ec4dbee6f60fdce9eaf2766/build-end.log |
| |
| Signed-off-by: Samuel Martin <s.martin49@gmail.com> |
| --- |
| dbus/sigsegv.c | 8 +++++++- |
| wscript | 1 + |
| 2 files changed, 8 insertions(+), 1 deletion(-) |
| |
| diff --git a/dbus/sigsegv.c b/dbus/sigsegv.c |
| index ee12f91..0b31d89 100644 |
| --- a/dbus/sigsegv.c |
| +++ b/dbus/sigsegv.c |
| @@ -27,7 +27,9 @@ |
| #include <stdio.h> |
| #include <signal.h> |
| #include <dlfcn.h> |
| -#include <execinfo.h> |
| +#if defined(HAVE_EXECINFO_H) |
| +# include <execinfo.h> |
| +#endif /* defined(HAVE_EXECINFO_H) */ |
| #include <errno.h> |
| #ifndef NO_CPP_DEMANGLE |
| char * __cxa_demangle(const char * __mangled_name, char * __output_buffer, size_t * __length, int * __status); |
| @@ -161,12 +163,16 @@ static void signal_segv(int signum, siginfo_t* info, void*ptr) { |
| bp = (void**)bp[0]; |
| } |
| #else |
| +# if defined(HAVE_EXECINFO_H) |
| jack_error("Stack trace (non-dedicated):"); |
| sz = backtrace(bt, 20); |
| strings = backtrace_symbols(bt, sz); |
| |
| for(i = 0; i < sz; ++i) |
| jack_error("%s", strings[i]); |
| +# else /* defined(HAVE_EXECINFO_H) */ |
| + jack_error("Stack trace not available"); |
| +# endif /* defined(HAVE_EXECINFO_H) */ |
| #endif |
| jack_error("End of stack trace"); |
| exit (-1); |
| diff --git a/wscript b/wscript |
| index aef4bd8..63ba3aa 100644 |
| --- a/wscript |
| +++ b/wscript |
| @@ -166,6 +166,7 @@ def configure(conf): |
| if conf.env['BUILD_JACKDBUS'] != True: |
| conf.fatal('jackdbus was explicitly requested but cannot be built') |
| |
| + conf.check_cc(header_name='execinfo.h', define_name="HAVE_EXECINFO_H", mandatory=False) |
| conf.check_cc(header_name='samplerate.h', define_name="HAVE_SAMPLERATE") |
| |
| if conf.is_defined('HAVE_SAMPLERATE'): |
| -- |
| 2.8.2 |
| |