summaryrefslogtreecommitdiff
path: root/m4
diff options
context:
space:
mode:
authorJean Guyomarc'h <jean@guyomarch.bzh>2016-05-28 13:07:22 +0200
committerJean Guyomarc'h <jean@guyomarch.bzh>2016-05-28 19:13:10 +0200
commit0193600e486759f4b0524b520e9128c2a3d19cbd (patch)
treefc505136086f514323db80a15e735f3c2ce51e7c /m4
parent01c7fd7cda1f89c8c0257c97f9822e40c4fb2df8 (diff)
downloadefl-0193600e486759f4b0524b520e9128c2a3d19cbd.tar.gz
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.
Diffstat (limited to 'm4')
-rw-r--r--m4/efl_libunwind.m461
1 files changed, 61 insertions, 0 deletions
diff --git a/m4/efl_libunwind.m4 b/m4/efl_libunwind.m4
new file mode 100644
index 0000000000..e9ca682cfb
--- /dev/null
+++ b/m4/efl_libunwind.m4
@@ -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")
+])