2 # This file is part of ltrace.
3 # Copyright (C) 2010,2012,2013,2014 Petr Machata, Red Hat Inc.
4 # Copyright (C) 2010,2011 Joe Damato
5 # Copyright (C) 2010 Marc Kleine-Budde
6 # Copyright (C) 2010 Zachary T Welch
8 # This program is free software; you can redistribute it and/or
9 # modify it under the terms of the GNU General Public License as
10 # published by the Free Software Foundation; either version 2 of the
11 # License, or (at your option) any later version.
13 # This program is distributed in the hope that it will be useful, but
14 # WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 # General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program; if not, write to the Free Software
20 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
23 # Process this file with autoconf to produce a configure script.
26 AC_INIT([ltrace],[0.7.91],[ltrace-devel@lists.alioth.debian.org],
27 [ltrace],[http://ltrace.alioth.debian.org/])
28 AC_CONFIG_HEADERS([config.h])
29 AC_CONFIG_SRCDIR(libltrace.c)
30 AC_CONFIG_MACRO_DIR([config/m4])
31 AC_CONFIG_AUX_DIR([config/autoconf])
36 linux-gnu*) HOST_OS="linux-gnu" ;;
37 linux-uclibc*) HOST_OS="linux-gnu" ;;
38 *) AC_MSG_ERROR([unkown host-os ${host_os}]) ;;
43 arm*|sa110) HOST_CPU="arm" ;;
44 cris*) HOST_CPU="cris" ;;
45 mips*) HOST_CPU="mips" ;;
46 powerpc|powerpc64|powerpc64le) HOST_CPU="ppc" ;;
47 sun4u|sparc64) HOST_CPU="sparc" ;;
48 s390x) HOST_CPU="s390" ;;
49 i?86|x86_64) HOST_CPU="x86" ;;
50 *) HOST_CPU="${host_cpu}" ;;
54 # Checks for programs.
57 # libtool-2: LT_INIT()
58 AM_INIT_AUTOMAKE([foreign no-exeext dist-bzip2])
62 # We use stat(2). Even though we don't care about the file size or
63 # inode number, stat will fail with EOVERFLOW if either of these
64 # exceeds 32 bits. We therefore ask for stat64 if available. Do this
65 # test as soon as possible, as large file support may influence
66 # whether other headers are available.
71 AS_HELP_STRING([--with-libelf], [Prefix of libelf headers/library]),
74 AC_MSG_ERROR([*** libelf is a required dependency])
77 AC_MSG_ERROR([*** --with-libelf requires you to specify a path])
80 AM_CPPFLAGS="${AM_CPPFLAGS} -I${withval}/include"
81 AM_LDFLAGS="${AM_LDFLAGS} -L${withval}/lib"
82 libelf_LD_LIBRARY_PATH="${withval}/lib"
86 # Checks for libraries.
88 saved_CPPFLAGS="${CPPFLAGS}"
89 saved_LDFLAGS="${LDFLAGS}"
90 CPPFLAGS="${CPPFLAGS} ${AM_CPPFLAGS}"
91 LDFLAGS="${LDFLAGS} ${AM_LDFLAGS}"
93 AC_CHECK_HEADERS([elf.h gelf.h],,
94 [AC_MSG_ERROR([*** libelf.h or gelf.h not found on your system])]
96 AC_CHECK_LIB([elf], [elf_begin],,
97 [AC_MSG_ERROR([*** libelf not found on your system])]
99 CPPFLAGS="${saved_CPPFLAGS}"
100 LDFLAGS="${saved_LDFLAGS}"
104 AC_CHECK_LIB([iberty], [cplus_demangle], [
105 AC_DEFINE([HAVE_LIBIBERTY], [1], [we have libiberty])
106 liberty_LIBS="-liberty"], [
108 AC_SUBST(liberty_LIBS)
112 AC_CHECK_LIB([supc++], [__cxa_demangle], [
113 AC_DEFINE([HAVE_LIBSUPC__], [1], [we have libsupc++])
114 libsupcxx_LIBS="-lsupc++"], [
116 AC_SUBST(libsupcxx_LIBS)
120 AC_CHECK_LIB([stdc++], [__cxa_demangle], [
121 AC_DEFINE([HAVE_LIBSTDC__], [1], [we have libstdc++])
122 libstdcxx_LIBS="-lstdc++"], [
124 AC_SUBST(libstdcxx_LIBS)
127 dnl Check security_get_boolean_active availability.
128 AC_CHECK_HEADERS(selinux/selinux.h)
129 AC_CHECK_LIB(selinux, security_get_boolean_active)
131 dnl Whether (and which) elfutils libdw.so to use for unwinding.
132 AC_ARG_WITH(elfutils,
133 AS_HELP_STRING([--with-elfutils], [Use elfutils libdwfl unwinding support]),
134 [case "${withval}" in
135 (yes|no) enable_elfutils=$withval;;
136 (*) enable_elfutils=yes
137 AM_CPPFLAGS="${AM_CPPFLAGS} -I${withval}/include"
138 AM_LDFLAGS="${AM_LDFLAGS} -L${withval}/lib"
139 elfutils_LD_LIBRARY_PATH="${withval}/lib:${withval}/lib/elfutils"
141 esac],[enable_elfutils=maybe])
143 dnl Check whether we have the elfutils libdwfl.h header installed.
144 saved_CPPFLAGS="${CPPFLAGS}"
145 CPPFLAGS="${CPPFLAGS} ${AM_CPPFLAGS}"
146 AC_CHECK_HEADERS([elfutils/libdwfl.h],[have_libdwfl_h=yes])
147 CPPFLAGS="${saved_CPPFLAGS}"
149 dnl And whether libdw.so provides the unwinding functions.
150 saved_LDFLAGS="${LDFLAGS}"
151 LDFLAGS="${LDFLAGS} ${AM_LDFLAGS}"
152 AC_CHECK_LIB([dw], [dwfl_getthread_frames], [have_libdw_dwfl_frames=yes])
153 LDFLAGS="${saved_LDFLAGS}"
155 AC_MSG_CHECKING([whether to use elfutils libdwfl unwinding support])
156 case "${enable_elfutils}" in
158 if test x$have_libdwfl_h = xyes -a x$have_libdw_dwfl_frames = xyes; then
160 elif test $enable_elfutils = maybe; then
163 AC_MSG_RESULT([$enable_elfutils])
164 AC_MSG_ERROR([Missing elfutils/libdwfl.h or dwfl_getthread_frames not in libdw.so])
169 AC_MSG_RESULT([$enable_elfutils])
171 if test x"$enable_elfutils" = xyes; then
174 AC_DEFINE([HAVE_LIBDW], [1], [we have elfutils libdw])
178 AC_ARG_WITH(libunwind,
179 AS_HELP_STRING([--with-libunwind], [Use libunwind frame unwinding support]),
180 [case "${withval}" in
181 (yes|no) enable_libunwind=$withval;;
182 (*) enable_libunwind=yes
183 AM_CPPFLAGS="${AM_CPPFLAGS} -I${withval}/include"
184 AM_LDFLAGS="${AM_LDFLAGS} -L${withval}/lib"
185 libunwind_LD_LIBRARY_PATH="${withval}/lib"
187 esac],[enable_libunwind=maybe])
189 saved_CPPFLAGS="${CPPFLAGS}"
190 CPPFLAGS="${CPPFLAGS} ${AM_CPPFLAGS}"
191 AC_CHECK_HEADERS([libunwind.h], [have_libunwind_h=yes])
192 AC_CHECK_HEADERS([libunwind-ptrace.h], [have_libunwind_ptrace_h=yes])
193 CPPFLAGS="${saved_CPPFLAGS}"
195 AC_MSG_CHECKING([whether to use libunwind support])
196 case "${enable_libunwind}" in
198 if test x$have_libunwind_h = xyes -o x$have_libunwind_ptrace_h = xyes; then
200 elif test $enable_libunwind = maybe; then
203 AC_MSG_RESULT([$enable_libunwind])
204 AC_MSG_ERROR([libunwind.h or libunwind-ptrace.h cannot be found])
209 AC_MSG_RESULT([$enable_libunwind])
211 if test x"$enable_libunwind" = xyes; then
212 case "${host_cpu}" in
213 arm*|sa110) UNWIND_ARCH="arm" ;;
214 i?86) UNWIND_ARCH="x86" ;;
215 powerpc) UNWIND_ARCH="ppc32" ;;
216 powerpc64|powerpc64le) UNWIND_ARCH="ppc64" ;;
217 mips*) UNWIND_ARCH="mips" ;;
218 *) UNWIND_ARCH="${host_cpu}" ;;
221 saved_LDFLAGS="${LDFLAGS}"
222 LDFLAGS="${LDFLAGS} ${AM_LDFLAGS}"
223 AC_CHECK_LIB([unwind], [backtrace], [libunwind_LIBS=-lunwind],
224 [AC_MSG_ERROR([Couldn't find or use libunwind.])])
226 AC_CHECK_LIB([unwind-${UNWIND_ARCH}], [_U${UNWIND_ARCH}_init_remote],
227 [libunwind_LIBS="-lunwind-${UNWIND_ARCH} $libunwind_LIBS"],
228 [AC_MSG_ERROR([Couldn't find or use libunwind-${UNWIND_ARCH}.])],
231 AC_CHECK_LIB([unwind-ptrace], [_UPT_create],
232 [libunwind_LIBS="-lunwind-ptrace $libunwind_LIBS"],
233 [AC_MSG_ERROR([Couldn't find or use libunwind-ptrace.])],
236 AC_SUBST(libunwind_LIBS)
237 AC_DEFINE([HAVE_LIBUNWIND], [1], [we have libunwind])
238 LDFLAGS="${saved_LDFLAGS}"
241 if test x"$enable_elfutils" = xyes -a x"$enable_libunwind" = xyes; then
242 AC_MSG_ERROR([Cannot enable both --with-libunwind and --with-elfutils])
245 if test x"$enable_elfutils" = xyes -o x"$enable_libunwind" = xyes; then
246 AC_DEFINE([HAVE_UNWINDER], [1], [we have an unwinder available])
249 saved_CPPFLAGS="${CPPFLAGS}"
250 saved_LDFLAGS="${LDFLAGS}"
251 CPPFLAGS="${CPPFLAGS} ${AM_CPPFLAGS}"
252 LDFLAGS="${LDFLAGS} ${AM_LDFLAGS}"
253 # HAVE_ELF_C_READ_MMAP
254 AC_MSG_CHECKING([whether elf_begin accepts ELF_C_READ_MMAP])
255 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <gelf.h>]], [[
257 Elf *elf = elf_begin(4, ELF_C_READ_MMAP, 0);
261 AC_DEFINE([HAVE_ELF_C_READ_MMAP], [1], [we have read mmap support])
262 AC_MSG_RESULT([yes])],[
263 AC_MSG_RESULT([no])])
265 saved_CFLAGS="${CFLAGS}"
266 CFLAGS="${CFLAGS} -Wall -Werror"
267 AC_MSG_CHECKING([whether elf_hash takes a char* argument])
268 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <libelf.h>]], [[
269 (void) elf_hash("name");
271 [AC_DEFINE([ELF_HASH_TAKES_CHARP], [1],
272 [elf_hash() takes char* (as opposed to unsigned char *)])
273 AC_MSG_RESULT([yes])],
274 [AC_MSG_RESULT([no])])
275 CFLAGS="${saved_CFLAGS}"
276 CPPFLAGS="${saved_CPPFLAGS}"
277 LDFLAGS="${saved_LDFLAGS}"
280 -DSYSCONFDIR="'\"$(sysconfdir)\"'" \
281 -DPKGDATADIR="'\"$(pkgdatadir)\"'" \
283 -I\$(top_srcdir)/sysdeps/${HOST_OS}/${HOST_CPU} \
284 -I\$(top_srcdir)/sysdeps/${HOST_OS} \
285 -I\$(top_srcdir)/sysdeps \
289 # Checks for header files.
303 # Checks for typedefs, structures, and compiler characteristics.
308 AC_CHECK_SIZEOF([long])
311 # Checks for library functions.
327 # Define HAVE_OPEN_MEMSTREAM if open_memstream is available. glibc
328 # before 2.10, eglibc and uClibc all need _GNU_SOURCE defined for
329 # open_memstream to become visible, so check for that as well. If
330 # unavailable, require that tmpfile be present. There's no
331 # HAVE_TMPFILE, as we plain require that to be present as a fallback.
333 AC_CHECK_FUNCS([open_memstream], [],
334 [AC_MSG_CHECKING([for open_memstream with _GNU_SOURCE])
336 [AC_LANG_PROGRAM([[#define _GNU_SOURCE 1
337 #include <stdio.h>]],
338 [[char *buf; size_t sz;
339 return open_memstream(&buf, &sz) != 0;]])],
341 [AC_MSG_RESULT([yes])
342 AC_DEFINE([HAVE_OPEN_MEMSTREAM], [1],
343 [Define if open_memstream exists.])],
346 AC_CHECK_FUNC([tmpfile], [],
348 [Either open_memstream or tmpfile required.])])])])
351 # Define HAVE_GETOPT_LONG if that is available.
353 AC_CHECK_HEADER([getopt.h], [AC_CHECK_FUNCS([getopt_long])])
358 AC_MSG_CHECKING([whether to enable debugging])
360 AS_HELP_STRING([--enable-debug], [enable debugging @<:@default=no@:>@]),
361 [case "$enableval" in
362 y | yes) CONFIG_DEBUG=yes ;;
363 *) CONFIG_DEBUG=no ;;
366 AC_MSG_RESULT([${CONFIG_DEBUG}])
367 if test "${CONFIG_DEBUG}" = "yes"; then
368 AC_DEFINE(DEBUG, 1, [debugging])
371 # Ignore the compiler's warnings at your own risk.
372 AM_CFLAGS="${AM_CFLAGS} -Wall -Wsign-compare -Wfloat-equal -Wformat-security"
373 AC_ARG_ENABLE([werror],
374 AS_HELP_STRING([--disable-werror], [disable use of -Werror]),
375 [enable_werror=$enableval], [enable_werror=yes])
376 if test x$enable_werror = xyes; then
377 AM_CFLAGS="${AM_CFLAGS} -Werror"
380 AC_ARG_ENABLE([valgrind],
381 AS_HELP_STRING([--enable-valgrind],[run all tests under valgrind]),
382 [use_valgrind=$enableval], [use_valgrind=no])
383 if test x$use_valgrind = xyes; then
384 AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no)
385 if test x$HAVE_VALGRIND = xno; then
386 AC_MSG_ERROR([valgrind not found])
389 AM_CONDITIONAL(USE_VALGRIND, test "$use_valgrind" = yes)
390 AM_CONDITIONAL(HAVE_LIBDW, test x"$enable_elfutils" = xyes)
392 AC_SUBST(AM_CPPFLAGS)
395 AC_SUBST(libelf_LD_LIBRARY_PATH)
396 AC_SUBST(elfutils_LD_LIBRARY_PATH)
397 AC_SUBST(libunwind_LD_LIBRARY_PATH)
402 sysdeps/linux-gnu/Makefile
403 sysdeps/linux-gnu/aarch64/Makefile
404 sysdeps/linux-gnu/alpha/Makefile
405 sysdeps/linux-gnu/arm/Makefile
406 sysdeps/linux-gnu/cris/Makefile
407 sysdeps/linux-gnu/ia64/Makefile
408 sysdeps/linux-gnu/m68k/Makefile
409 sysdeps/linux-gnu/metag/Makefile
410 sysdeps/linux-gnu/mips/Makefile
411 sysdeps/linux-gnu/ppc/Makefile
412 sysdeps/linux-gnu/s390/Makefile
413 sysdeps/linux-gnu/sparc/Makefile
414 sysdeps/linux-gnu/x86/Makefile
416 testsuite/ltrace.main/Makefile
417 testsuite/ltrace.minor/Makefile
418 testsuite/ltrace.torture/Makefile