forked from enlightenment/efl
autotools: improve libunwind detection
Libuwind may not be shipped with a pkg-config file. It can be distributed on the system, but the autotools would fail to detect it because it relied only on pkg-config. We now first check with pkg-config, and then try to compile and link a program using libuwind to see if it is supported anyway. This is a first step towards a working eina_log_backtrace on Mac OS X.
This commit is contained in:
parent
01c7fd7cda
commit
0193600e48
|
@ -865,11 +865,7 @@ case "${build_profile}" in
|
|||
;;
|
||||
esac
|
||||
|
||||
PKG_CHECK_MODULES(UNWIND, [libunwind libunwind-generic],
|
||||
[have_unwind=yes], [have_unwind=no])
|
||||
AS_IF([test "x$have_unwind" = "xyes"],
|
||||
[AC_DEFINE([HAVE_UNWIND], [1], [Have libunwind])])
|
||||
AM_CONDITIONAL(HAVE_UNWIND, test "x$have_unwind" = "xyes")
|
||||
EFL_CHECK_LIBUNWIND
|
||||
|
||||
EINA_CONFIG([HAVE_ALLOCA_H], [test "x${ac_cv_working_alloca_h}" = "xyes"])
|
||||
EINA_CONFIG([SAFETY_CHECKS], [test "x${have_safety_checks}" = "xyes"])
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
dnl This code is public domain and can be freely used or copied.
|
||||
dnl File to auto-detect libunwind
|
||||
|
||||
dnl Macro that checks for libunwind, first by using
|
||||
dnl pkg-config, then by trying to compile and link a simple
|
||||
dnl program, to see if libunwind is distributed on the system
|
||||
dnl but has no pkg-config support
|
||||
dnl
|
||||
dnl The biggest usecase is on Mac OS X, where there are no
|
||||
dnl pkg-config files, and the libunwind headers are lost
|
||||
dnl in an obscure place on the system (but whom the compilers
|
||||
dnl distributed by Apple are aware of).
|
||||
dnl
|
||||
dnl Usage: EFL_CHECK_LIBUNWIND
|
||||
dnl will inconditionaly set UNWIND_CFLAGS and UNWIND_LIBS
|
||||
dnl to follow pkg-config fashion.
|
||||
dnl
|
||||
AC_DEFUN([EFL_CHECK_LIBUNWIND],
|
||||
[dnl
|
||||
dnl First, check with pkg-config
|
||||
PKG_CHECK_MODULES([UNWIND], [libunwind libunwind-generic],
|
||||
[have_unwind=yes], [have_unwind=no])
|
||||
|
||||
dnl No pkg-config file... maybe system built-in?
|
||||
if test "x${have_unwind}" = "xno"; then
|
||||
AC_LANG_PUSH([C])
|
||||
AC_LINK_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[
|
||||
#include <libunwind.h>
|
||||
]],
|
||||
[[
|
||||
unw_context_t ctx;
|
||||
unw_getcontext(&ctx);
|
||||
]]
|
||||
)],
|
||||
[
|
||||
have_unwind="yes"
|
||||
],
|
||||
[
|
||||
have_unwind="no"
|
||||
]
|
||||
)
|
||||
AC_MSG_CHECKING([for native libunwind])
|
||||
AC_MSG_RESULT([${have_unwind}])
|
||||
AC_LANG_POP([C])
|
||||
|
||||
dnl Provide dummy variables to automake.
|
||||
dnl In case pkg-config succeeded, these will be set and
|
||||
dnl used in other automake files. To avoid, problems,
|
||||
dnl we define empty variables.
|
||||
UNWIND_CFLAGS=""
|
||||
UNWIND_LIBS=""
|
||||
AC_SUBST([UNWIND_CFLAGS])
|
||||
AC_SUBST([UNWIND_LIBS])
|
||||
fi
|
||||
|
||||
AS_IF([test "x$have_unwind" = "xyes"],
|
||||
[AC_DEFINE([HAVE_UNWIND], [1], [Have libunwind])])
|
||||
AM_CONDITIONAL(HAVE_UNWIND, test "x$have_unwind" = "xyes")
|
||||
])
|
Loading…
Reference in New Issue