use CMake check_function_exists() for execinfo

Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
Alexandre "kAworu" Perrin 2010-10-11 21:54:28 +02:00 committed by Uli Schlachter
parent cc08f45304
commit 7a3adfb741
2 changed files with 4 additions and 47 deletions

View File

@ -162,11 +162,10 @@ endmacro()
# Check for libev
a_find_library(LIB_EV ev)
# GNU libc has <execinfo.h> and backtrace() stuff. If this is not available, we
# need libexecinfo.
try_compile(HAS_EXECINFO
${CMAKE_BINARY_DIR}
${CMAKE_SOURCE_DIR}/build-tests/execinfo.c)
# Check for backtrace_symbols()
include(CheckFunctionExists)
check_function_exists(backtrace_symbols HAS_EXECINFO)
if(NOT HAS_EXECINFO)
find_library(LIB_EXECINFO execinfo)
if(LIB_EXECINFO)

View File

@ -1,42 +0,0 @@
/*
* build-tests/execinfo.c
* stolen from http://www.gnu.org/s/libc/manual/html_node/Backtraces.html
*/
#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>
/* Obtain a backtrace and print it to stdout. */
void
print_trace (void)
{
void *array[10];
size_t size;
char **strings;
size_t i;
size = backtrace (array, 10);
strings = backtrace_symbols (array, size);
printf ("Obtained %zd stack frames.\n", size);
for (i = 0; i < size; i++)
printf ("%s\n", strings[i]);
free (strings);
}
/* A dummy function to make the backtrace more interesting. */
void
dummy_function (void)
{
print_trace ();
}
int
main (void)
{
dummy_function ();
return 0;
}