summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorhinder <hinder@17b73243-c579-4c4c-a9d2-2d5706c11dac>2011-09-22 00:26:48 +0000
committerhinder <hinder@17b73243-c579-4c4c-a9d2-2d5706c11dac>2011-09-22 00:26:48 +0000
commitcddfa376aec83ec32b4587f1620c290a92e2bd36 (patch)
treedae0f66ddf0a6da60d25447dace0fa8acbaf65a5 /lib
parent68be925eed8b6a434f0abe05709fa8409fb18a63 (diff)
Detect backtrace-related functions during configuration
See https://trac.einsteintoolkit.org/ticket/443 Patch by Roland Haas git-svn-id: http://svn.cactuscode.org/flesh/trunk@4726 17b73243-c579-4c4c-a9d2-2d5706c11dac
Diffstat (limited to 'lib')
-rw-r--r--lib/make/aclocal.m445
-rw-r--r--lib/make/cctk_Config.h.in5
-rw-r--r--lib/make/configure.in33
3 files changed, 83 insertions, 0 deletions
diff --git a/lib/make/aclocal.m4 b/lib/make/aclocal.m4
index b7871e23..3a65e395 100644
--- a/lib/make/aclocal.m4
+++ b/lib/make/aclocal.m4
@@ -46,6 +46,51 @@ changequote([, ])dnl
done
])
+dnl A simplified version of AC_CHECK_MEMBER from autoconf 2.50 and up
+dnl CCTK_CHECK_MEMBER(AGGREGATE, MEMBER,
+dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+dnl [INCLUDES])
+dnl ---------------------------------------------------------
+dnl AGGREGATE, MEMBER is for instance `struct passwd pw_gecos', shell
+dnl variables are not a valid argument.
+AC_DEFUN([CCTK_CHECK_MEMBER],
+[dnl Extract the aggregate name, and the member name
+ac_member_var=`echo $1['_']$2 | sed 'y% %_%'`
+AC_MSG_CHECKING([for $1.$2])
+AC_CACHE_VAL(ac_cv_member_$ac_member_var,
+[dnl
+AC_TRY_COMPILE([$5],
+[static $1 ac_aggr;
+if (ac_aggr.$2)
+return 0;],
+ eval "ac_cv_member_$ac_member_var=yes",
+ eval "ac_cv_member_$ac_member_var=no"dnl
+)
+if eval "test \"`echo '$''{'ac_cv_member_$ac_member_var'}'`\" = no"; then
+AC_TRY_COMPILE([$5],
+[static $1 ac_aggr;
+if (sizeof ac_aggr.$2)
+return 0;],
+ eval "ac_cv_member_$ac_member_var=yes",
+ eval "ac_cv_member_$ac_member_var=no"dnl
+)
+fi dnl
+])dnl
+if eval "test \"`echo '$ac_cv_member_'$ac_member_var`\" = yes"; then
+ AC_MSG_RESULT(yes)
+ ifelse([$3], ,
+[ac_tr_member=HAVE_MEMBER`echo $1 | sed -e 'y% %_%' \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+ AC_DEFINE_UNQUOTED($ac_tr_member)
+], [$3])
+else
+ AC_MSG_RESULT(no)
+ifelse([$4], , , [$4
+])dnl
+fi
+])
+
+
dnl A version of AC_TRY_COMPILER(TEST-PROGRAM, WORKING-VAR, CROSS-VAR) which,
dnl if the TEST-PROGRAM could not be executed, does not throw away the stderr
dnl but redirects it into the config.log logfile instead.
diff --git a/lib/make/cctk_Config.h.in b/lib/make/cctk_Config.h.in
index c5c8ccf8..13eb36f9 100644
--- a/lib/make/cctk_Config.h.in
+++ b/lib/make/cctk_Config.h.in
@@ -18,6 +18,10 @@
/* Various library functions */
#undef HAVE_GETHOSTBYNAME
#undef HAVE_GETOPT_LONG_ONLY
+#undef HAVE___CXA_DEMANGLE
+#undef HAVE_DLADDR
+#undef HAVE_BACKTRACE
+#undef HAVE_BACKTRACE_SYMBOLS
#undef HAVE_CRYPT
#undef HAVE_FINITE
#undef HAVE_ISNAN
@@ -81,6 +85,7 @@
#undef HAVE_MALLOPT
#undef HAVE_M_MMAP_THRESHOLD_VALUE
#undef HAVE_SCHED_H
+#undef HAVE_EXECINFO_H
#undef HAVE_SCHED_GETAFFINITY
#undef TIME_WITH_SYS_TIME
diff --git a/lib/make/configure.in b/lib/make/configure.in
index d4f3c8c1..d75c4274 100644
--- a/lib/make/configure.in
+++ b/lib/make/configure.in
@@ -686,6 +686,7 @@ CCTK_CHECK_HEADERS(crypt.h,[#ifdef HAVE_UNISTD_H
CCTK_CHECK_HEADERS(signal.h)
CCTK_CHECK_HEADERS(malloc.h)
CCTK_CHECK_HEADERS(sched.h)
+CCTK_CHECK_HEADERS(execinfo.h)
AC_HEADER_TIME
@@ -897,6 +898,38 @@ CCTK_FORTRAN_COMPLEX8
CCTK_FORTRAN_COMPLEX16
CCTK_FORTRAN_COMPLEX32
+dnl Do we whave __cxa_demangle
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+CCTK_CHECK_HEADERS(cxxabi.h)
+AC_MSG_CHECKING([for __cxa_demangle])
+AC_CACHE_VAL(cctk_cv_have___cxa_demangle,
+[AC_TRY_COMPILE([#include <cxxabi.h>],
+[abi::__cxa_demangle(0,0,0,0)], eval "cctk_cv_have___cxa_demangle=yes",
+eval "cctk_cv_have___cxa_demangle=no")
+])
+if test "x$cctk_cv_have___cxa_demangle" = xyes; then
+ AC_DEFINE(HAVE___CXA_DEMANGLE)
+ AC_MSG_RESULT(yes)
+else
+ AC_MSG_RESULT(no)
+fi
+AC_LANG_RESTORE
+
+dnl Do we have dladdr(3) and the structure it uses?
+CCTK_CHECK_MEMBER(Dl_info, dli_sname,
+ CCTK_CHECK_FUNCS(dladdr, , CCTK_CHECK_LIB_FUNC(dl, dladdr)),
+ ,
+ [#define _GNU_SOURCE 1
+ #include <dlfcn.h>] )
+
+
+dnl Do we have backtrace(3)
+CCTK_CHECK_FUNCS(backtrace, , )
+
+dnl Do we have backtrace_symbols(3)
+CCTK_CHECK_FUNCS(backtrace_symbols, , )
+
dnl Do we have crypt(3)
CCTK_CHECK_FUNC(crypt, , CCTK_CHECK_LIB_FUNC(crypt, crypt))