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