1*cf84ac9aSAndroid Build Coastguard Worker#!/usr/bin/m4 2*cf84ac9aSAndroid Build Coastguard Worker# 3*cf84ac9aSAndroid Build Coastguard Worker# Copyright (c) 2013-2018 The strace developers. 4*cf84ac9aSAndroid Build Coastguard Worker# All rights reserved. 5*cf84ac9aSAndroid Build Coastguard Worker# 6*cf84ac9aSAndroid Build Coastguard Worker# Redistribution and use in source and binary forms, with or without 7*cf84ac9aSAndroid Build Coastguard Worker# modification, are permitted provided that the following conditions 8*cf84ac9aSAndroid Build Coastguard Worker# are met: 9*cf84ac9aSAndroid Build Coastguard Worker# 1. Redistributions of source code must retain the above copyright 10*cf84ac9aSAndroid Build Coastguard Worker# notice, this list of conditions and the following disclaimer. 11*cf84ac9aSAndroid Build Coastguard Worker# 2. Redistributions in binary form must reproduce the above copyright 12*cf84ac9aSAndroid Build Coastguard Worker# notice, this list of conditions and the following disclaimer in the 13*cf84ac9aSAndroid Build Coastguard Worker# documentation and/or other materials provided with the distribution. 14*cf84ac9aSAndroid Build Coastguard Worker# 3. The name of the author may not be used to endorse or promote products 15*cf84ac9aSAndroid Build Coastguard Worker# derived from this software without specific prior written permission. 16*cf84ac9aSAndroid Build Coastguard Worker# 17*cf84ac9aSAndroid Build Coastguard Worker# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18*cf84ac9aSAndroid Build Coastguard Worker# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19*cf84ac9aSAndroid Build Coastguard Worker# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20*cf84ac9aSAndroid Build Coastguard Worker# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21*cf84ac9aSAndroid Build Coastguard Worker# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22*cf84ac9aSAndroid Build Coastguard Worker# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23*cf84ac9aSAndroid Build Coastguard Worker# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24*cf84ac9aSAndroid Build Coastguard Worker# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25*cf84ac9aSAndroid Build Coastguard Worker# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26*cf84ac9aSAndroid Build Coastguard Worker# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27*cf84ac9aSAndroid Build Coastguard Worker 28*cf84ac9aSAndroid Build Coastguard WorkerAC_DEFUN([st_ARG_LIBUNWIND], [dnl 29*cf84ac9aSAndroid Build Coastguard Worker 30*cf84ac9aSAndroid Build Coastguard WorkerAC_ARG_WITH([libunwind], 31*cf84ac9aSAndroid Build Coastguard Worker [AS_HELP_STRING([--with-libunwind], 32*cf84ac9aSAndroid Build Coastguard Worker [use libunwind to implement stack tracing support])], 33*cf84ac9aSAndroid Build Coastguard Worker [case "${withval}" in 34*cf84ac9aSAndroid Build Coastguard Worker yes|no|check) ;; 35*cf84ac9aSAndroid Build Coastguard Worker *) with_libunwind=yes 36*cf84ac9aSAndroid Build Coastguard Worker libunwind_CPPFLAGS="-I${withval}/include" 37*cf84ac9aSAndroid Build Coastguard Worker libunwind_LDFLAGS="-L${withval}/lib" ;; 38*cf84ac9aSAndroid Build Coastguard Worker esac], 39*cf84ac9aSAndroid Build Coastguard Worker [with_libunwind=check] 40*cf84ac9aSAndroid Build Coastguard Worker) 41*cf84ac9aSAndroid Build Coastguard Worker 42*cf84ac9aSAndroid Build Coastguard Worker]) 43*cf84ac9aSAndroid Build Coastguard Worker 44*cf84ac9aSAndroid Build Coastguard WorkerAC_DEFUN([st_LIBUNWIND], [dnl 45*cf84ac9aSAndroid Build Coastguard Worker 46*cf84ac9aSAndroid Build Coastguard Workerlibunwind_CPPFLAGS= 47*cf84ac9aSAndroid Build Coastguard Workerlibunwind_LDFLAGS= 48*cf84ac9aSAndroid Build Coastguard Workerlibunwind_LIBS= 49*cf84ac9aSAndroid Build Coastguard Worker 50*cf84ac9aSAndroid Build Coastguard WorkerAS_IF([test "x$with_libunwind" != xno && test "x$use_unwinder" = x], 51*cf84ac9aSAndroid Build Coastguard Worker [saved_CPPFLAGS="$CPPFLAGS" 52*cf84ac9aSAndroid Build Coastguard Worker CPPFLAGS="$CPPFLAGS $libunwind_CPPFLAGS" 53*cf84ac9aSAndroid Build Coastguard Worker 54*cf84ac9aSAndroid Build Coastguard Worker AC_CHECK_HEADERS([libunwind-ptrace.h], 55*cf84ac9aSAndroid Build Coastguard Worker [saved_LDFLAGS="$LDFLAGS" 56*cf84ac9aSAndroid Build Coastguard Worker LDFLAGS="$LDFLAGS $libunwind_LDFLAGS" 57*cf84ac9aSAndroid Build Coastguard Worker 58*cf84ac9aSAndroid Build Coastguard Worker AC_CHECK_LIB([unwind], [backtrace], 59*cf84ac9aSAndroid Build Coastguard Worker [libunwind_LIBS="-lunwind $libunwind_LIBS" 60*cf84ac9aSAndroid Build Coastguard Worker 61*cf84ac9aSAndroid Build Coastguard Worker AC_MSG_CHECKING([for unw_create_addr_space in libunwind-generic]) 62*cf84ac9aSAndroid Build Coastguard Worker saved_LIBS="$LIBS" 63*cf84ac9aSAndroid Build Coastguard Worker LIBS="-lunwind-generic $libunwind_LIBS $LIBS" 64*cf84ac9aSAndroid Build Coastguard Worker 65*cf84ac9aSAndroid Build Coastguard Worker AC_LINK_IFELSE( 66*cf84ac9aSAndroid Build Coastguard Worker [AC_LANG_PROGRAM([[#include <libunwind-ptrace.h>]], 67*cf84ac9aSAndroid Build Coastguard Worker [[return !unw_create_addr_space(0, 0)]]) 68*cf84ac9aSAndroid Build Coastguard Worker ], 69*cf84ac9aSAndroid Build Coastguard Worker [AC_MSG_RESULT([yes]) 70*cf84ac9aSAndroid Build Coastguard Worker libunwind_LIBS="-lunwind-generic $libunwind_LIBS" 71*cf84ac9aSAndroid Build Coastguard Worker 72*cf84ac9aSAndroid Build Coastguard Worker AC_CHECK_LIB([unwind-ptrace], [_UPT_create], 73*cf84ac9aSAndroid Build Coastguard Worker [libunwind_LIBS="-lunwind-ptrace $libunwind_LIBS" 74*cf84ac9aSAndroid Build Coastguard Worker use_unwinder=libunwind 75*cf84ac9aSAndroid Build Coastguard Worker ], 76*cf84ac9aSAndroid Build Coastguard Worker [if test "x$with_libunwind" != xcheck; then 77*cf84ac9aSAndroid Build Coastguard Worker AC_MSG_FAILURE([failed to find _UPT_create in libunwind-ptrace]) 78*cf84ac9aSAndroid Build Coastguard Worker fi 79*cf84ac9aSAndroid Build Coastguard Worker ], 80*cf84ac9aSAndroid Build Coastguard Worker [$libunwind_LIBS] 81*cf84ac9aSAndroid Build Coastguard Worker ) 82*cf84ac9aSAndroid Build Coastguard Worker ], 83*cf84ac9aSAndroid Build Coastguard Worker [AC_MSG_RESULT([no]) 84*cf84ac9aSAndroid Build Coastguard Worker if test "x$with_libunwind" != xcheck; then 85*cf84ac9aSAndroid Build Coastguard Worker AC_MSG_FAILURE([failed to find unw_create_addr_space in libunwind-generic]) 86*cf84ac9aSAndroid Build Coastguard Worker fi 87*cf84ac9aSAndroid Build Coastguard Worker ] 88*cf84ac9aSAndroid Build Coastguard Worker ) 89*cf84ac9aSAndroid Build Coastguard Worker 90*cf84ac9aSAndroid Build Coastguard Worker LIBS="$saved_LIBS" 91*cf84ac9aSAndroid Build Coastguard Worker ], 92*cf84ac9aSAndroid Build Coastguard Worker [if test "x$with_libunwind" != xcheck; then 93*cf84ac9aSAndroid Build Coastguard Worker AC_MSG_FAILURE([failed to find libunwind]) 94*cf84ac9aSAndroid Build Coastguard Worker fi 95*cf84ac9aSAndroid Build Coastguard Worker ], 96*cf84ac9aSAndroid Build Coastguard Worker [$libunwind_LIBS] 97*cf84ac9aSAndroid Build Coastguard Worker ) 98*cf84ac9aSAndroid Build Coastguard Worker 99*cf84ac9aSAndroid Build Coastguard Worker LDFLAGS="$saved_LDFLAGS" 100*cf84ac9aSAndroid Build Coastguard Worker ], 101*cf84ac9aSAndroid Build Coastguard Worker [if test "x$with_libunwind" != xcheck; then 102*cf84ac9aSAndroid Build Coastguard Worker AC_MSG_FAILURE([failed to find libunwind-ptrace.h]) 103*cf84ac9aSAndroid Build Coastguard Worker fi 104*cf84ac9aSAndroid Build Coastguard Worker ] 105*cf84ac9aSAndroid Build Coastguard Worker ) 106*cf84ac9aSAndroid Build Coastguard Worker 107*cf84ac9aSAndroid Build Coastguard Worker CPPFLAGS="$saved_CPPFLAGS" 108*cf84ac9aSAndroid Build Coastguard Worker ] 109*cf84ac9aSAndroid Build Coastguard Worker) 110*cf84ac9aSAndroid Build Coastguard Worker 111*cf84ac9aSAndroid Build Coastguard Workerif test "x$use_unwinder" = xlibunwind; then 112*cf84ac9aSAndroid Build Coastguard Worker AC_DEFINE([USE_LIBUNWIND], 1, 113*cf84ac9aSAndroid Build Coastguard Worker [Whether to use libunwind for stack tracing]) 114*cf84ac9aSAndroid Build Coastguard Worker AC_SUBST(libunwind_LIBS) 115*cf84ac9aSAndroid Build Coastguard Worker AC_SUBST(libunwind_LDFLAGS) 116*cf84ac9aSAndroid Build Coastguard Worker AC_SUBST(libunwind_CPPFLAGS) 117*cf84ac9aSAndroid Build Coastguard Workerfi 118*cf84ac9aSAndroid Build Coastguard Worker 119*cf84ac9aSAndroid Build Coastguard Worker]) 120