File: st_libdw.m4

package info (click to toggle)
strace 6.18%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 73,712 kB
  • sloc: ansic: 182,157; sh: 9,705; makefile: 4,225; cpp: 946; awk: 353; perl: 267; exp: 62; sed: 9
file content (93 lines) | stat: -rw-r--r-- 2,366 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/usr/bin/m4
#
# Copyright (c) 2018 The strace developers.
# All rights reserved.
#
# SPDX-License-Identifier: LGPL-2.1-or-later

AC_DEFUN([st_ARG_LIBDW], [dnl

: ${libdw_CPPFLAGS=}
: ${libdw_CFLAGS=}
: ${libdw_LDFLAGS=}
: ${libdw_LIBS=}

AC_ARG_WITH([libdw],
	    [AS_HELP_STRING([--with-libdw],
			    [use libdw to implement stack tracing support]
			   )
	    ],
	    [case "${withval}" in
	     yes|no|check) ;;
	     *) libdw_CPPFLAGS="-I${withval}/include"
		libdw_LDFLAGS="-L${withval}/lib"
		with_libdw=yes ;;
	     esac
	    ],
	    [with_libdw=check]
	   )

])

AC_DEFUN([st_LIBDW], [dnl

have_libdw=

AS_IF([test "x$with_libdw" != xno && test "x$use_unwinder" = x],
      [saved_CPPFLAGS="$CPPFLAGS"
       saved_CFLAGS="$CFLAGS"
       CPPFLAGS="$CPPFLAGS $libdw_CPPFLAGS"
       CFLAGS="$CFLAGS $libdw_CFLAGS"

       AC_CHECK_HEADERS([elfutils/libdwfl.h],
			[AC_CHECK_LIB([dw], [dwfl_linux_proc_attach],
				      [libdw_LIBS="-ldw $libdw_LIBS"
				       AC_CACHE_CHECK([for elfutils version],
						      [st_cv_ELFUTILS_VERSION],
						      [[st_cv_ELFUTILS_VERSION="$(echo _ELFUTILS_VERSION |
										  $CPP $CPPFLAGS -P -imacros elfutils/version.h - |
										  grep '^[0-9]')"
							test -n "$st_cv_ELFUTILS_VERSION" ||
								st_cv_ELFUTILS_VERSION=0
						      ]]
						     )
				       AS_IF([test "$st_cv_ELFUTILS_VERSION" -ge 164],
					     [have_libdw=yes],
					     [AS_IF([test "x$with_libdw" = xyes],
						    [AC_MSG_ERROR([elfutils version >= 164 is required for stack tracing support])],
						    [AC_MSG_WARN([elfutils version >= 164 is required for stack tracing support])]
						   )
					     ]
					    )
				      ],
				      [AS_IF([test "x$with_libdw" = xyes],
					     [AC_MSG_FAILURE([failed to find dwfl_linux_proc_attach in libdw])],
					    )
				      ],
				      [$libdw_LDFLAGS $libdw_LIBS]
				     )
			],
			[AS_IF([test "x$with_libdw" = xyes],
			       [AC_MSG_FAILURE([failed to find elfutils/libdwfl.h])]
			      )
			]
		       )

       CFLAGS="$saved_CFLAGS"
       CPPFLAGS="$saved_CPPFLAGS"
      ]
)

AS_IF([test "x$have_libdw" = xyes],
      [use_unwinder=libdw
       AC_DEFINE([USE_LIBDW], 1,
		 [Whether to use libdw for stack tracing]
		)
       AC_SUBST(libdw_CPPFLAGS)
       AC_SUBST(libdw_CFLAGS)
       AC_SUBST(libdw_LDFLAGS)
       AC_SUBST(libdw_LIBS)
      ]
     )

])