configure.ac revision 7e6f2b3bd1c606c731a102f5417ff0caaf393f42
1# -*- Autoconf -*- 2# This file is part of ltrace. 3# Copyright (C) 2010,2012,2013 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 7# 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. 12# 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. 17# 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 21# 02110-1301 USA 22 23# Process this file with autoconf to produce a configure script. 24AC_PREREQ([2.65]) 25 26AC_INIT([ltrace],[0.7.90-git],[ltrace-devel@lists.alioth.debian.org], 27 [ltrace],[http://ltrace.alioth.debian.org/]) 28AC_CONFIG_HEADERS([config.h]) 29AC_CONFIG_SRCDIR(libltrace.c) 30AC_CONFIG_MACRO_DIR([config/m4]) 31AC_CONFIG_AUX_DIR([config/autoconf]) 32AC_CANONICAL_BUILD 33AC_CANONICAL_HOST 34 35case "${host_os}" in 36 linux-gnu*) HOST_OS="linux-gnu" ;; 37 linux-uclibc*) HOST_OS="linux-gnu" ;; 38 *) AC_MSG_ERROR([unkown host-os ${host_os}]) ;; 39esac 40AC_SUBST(HOST_OS) 41 42case "${host_cpu}" in 43 arm*|sa110) HOST_CPU="arm" ;; 44 cris*) HOST_CPU="cris" ;; 45 mips*) HOST_CPU="mips" ;; 46 powerpc|powerpc64) 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}" ;; 51esac 52AC_SUBST(HOST_CPU) 53 54# Checks for programs. 55AC_PROG_CC 56LT_INIT 57# libtool-2: LT_INIT() 58AM_INIT_AUTOMAKE([foreign no-exeext dist-bzip2]) 59AM_MAINTAINER_MODE 60 61# 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. 67# 68AC_SYS_LARGEFILE 69 70AC_ARG_WITH([libelf], 71 AS_HELP_STRING([--with-libelf], [Prefix of libelf headers/library]), 72 [case "${withval}" in 73 (no) 74 AC_MSG_ERROR([*** libelf is a required dependency]) 75 ;; 76 (yes) 77 AC_MSG_ERROR([*** --with-libelf requires you to specify a path]) 78 ;; 79 (*) 80 AM_CPPFLAGS="${AM_CPPFLAGS} -I${withval}/include" 81 AM_LDFLAGS="${AM_LDFLAGS} -L${withval}/lib" 82 libelf_LD_LIBRARY_PATH="${withval}/lib" 83 ;; 84esac],[]) 85 86# Checks for libraries. 87 88saved_CPPFLAGS="${CPPFLAGS}" 89saved_LDFLAGS="${LDFLAGS}" 90CPPFLAGS="${CPPFLAGS} ${AM_CPPFLAGS}" 91LDFLAGS="${LDFLAGS} ${AM_LDFLAGS}" 92# libelf 93AC_CHECK_HEADERS([elf.h gelf.h],, 94 [AC_MSG_ERROR([*** libelf.h or gelf.h not found on your system])] 95) 96AC_CHECK_LIB([elf], [elf_begin],, 97 [AC_MSG_ERROR([*** libelf not found on your system])] 98) 99CPPFLAGS="${saved_CPPFLAGS}" 100LDFLAGS="${saved_LDFLAGS}" 101 102 103# HAVE_LIBIBERTY 104AC_CHECK_LIB([iberty], [cplus_demangle], [ 105 AC_DEFINE([HAVE_LIBIBERTY], [1], [we have libiberty]) 106 liberty_LIBS="-liberty"], [ 107 liberty_LIBS=""]) 108AC_SUBST(liberty_LIBS) 109 110 111# HAVE_LIBSUPC__ 112AC_CHECK_LIB([supc++], [__cxa_demangle], [ 113 AC_DEFINE([HAVE_LIBSUPC__], [1], [we have libsupc++]) 114 libsupcxx_LIBS="-lsupc++"], [ 115 libsupcxx_LIBS=""]) 116AC_SUBST(libsupcxx_LIBS) 117 118 119# HAVE_LIBSTDC__ 120AC_CHECK_LIB([stdc++], [__cxa_demangle], [ 121 AC_DEFINE([HAVE_LIBSTDC__], [1], [we have libstdc++]) 122 libstdcxx_LIBS="-lstdc++"], [ 123 libstdcxx_LIBS=""]) 124AC_SUBST(libstdcxx_LIBS) 125 126 127dnl Check security_get_boolean_active availability. 128AC_CHECK_HEADERS(selinux/selinux.h) 129AC_CHECK_LIB(selinux, security_get_boolean_active) 130 131 132# HAVE_LIBUNWIND 133AC_ARG_WITH(libunwind, 134 AS_HELP_STRING([--with-libunwind], [Use libunwind frame unwinding support]), 135 [case "${withval}" in 136 (yes|no) enable_libunwind=$withval;; 137 (*) enable_libunwind=yes 138 AM_CPPFLAGS="${AM_CPPFLAGS} -I${withval}/include" 139 AM_LDFLAGS="${AM_LDFLAGS} -L${withval}/lib" 140 libunwind_LD_LIBRARY_PATH="${withval}/lib" 141 ;; 142esac],[enable_libunwind=maybe]) 143 144saved_CPPFLAGS="${CPPFLAGS}" 145CPPFLAGS="${CPPFLAGS} ${AM_CPPFLAGS}" 146AC_CHECK_HEADERS([libunwind.h], [have_libunwind_h=yes]) 147AC_CHECK_HEADERS([libunwind-ptrace.h], [have_libunwind_ptrace_h=yes]) 148CPPFLAGS="${saved_CPPFLAGS}" 149 150AC_MSG_CHECKING([whether to use libunwind support]) 151case "${enable_libunwind}" in 152(yes|maybe) 153 if test x$have_libunwind_h = xyes -o x$have_libunwind_ptrace_h = xyes; then 154 enable_libunwind=yes 155 elif test $enable_libunwind = maybe; then 156 enable_libunwind=no 157 else 158 AC_MSG_RESULT([$enable_libunwind]) 159 AC_MSG_ERROR([libunwind.h or libunwind-ptrace.h cannot be found]) 160 fi 161 ;; 162(*) ;; 163esac 164AC_MSG_RESULT([$enable_libunwind]) 165 166if test x"$enable_libunwind" = xyes; then 167 case "${host_cpu}" in 168 arm*|sa110) UNWIND_ARCH="arm" ;; 169 i?86) UNWIND_ARCH="x86" ;; 170 powerpc) UNWIND_ARCH="ppc32" ;; 171 powerpc64) UNWIND_ARCH="ppc64" ;; 172 mips*) UNWIND_ARCH="mips" ;; 173 *) UNWIND_ARCH="${host_cpu}" ;; 174 esac 175 176 saved_LDFLAGS="${LDFLAGS}" 177 LDFLAGS="${LDFLAGS} ${AM_LDFLAGS}" 178 AC_CHECK_LIB([unwind], [backtrace], [libunwind_LIBS=-lunwind], 179 [AC_MSG_ERROR([Couldn't find or use libunwind.])]) 180 181 AC_CHECK_LIB([unwind-${UNWIND_ARCH}], [_U${UNWIND_ARCH}_init_remote], 182 [libunwind_LIBS="-lunwind-${UNWIND_ARCH} $libunwind_LIBS"], 183 [AC_MSG_ERROR([Couldn't find or use libunwind-${UNWIND_ARCH}.])], 184 [$libunwind_LIBS]) 185 186 AC_CHECK_LIB([unwind-ptrace], [_UPT_create], 187 [libunwind_LIBS="-lunwind-ptrace $libunwind_LIBS"], 188 [AC_MSG_ERROR([Couldn't find or use libunwind-ptrace.])], 189 [$libunwind_LIBS]) 190 191 AC_SUBST(libunwind_LIBS) 192 AC_DEFINE([HAVE_LIBUNWIND], [1], [we have libunwind]) 193 LDFLAGS="${saved_LDFLAGS}" 194fi 195 196 197saved_CPPFLAGS="${CPPFLAGS}" 198saved_LDFLAGS="${LDFLAGS}" 199CPPFLAGS="${CPPFLAGS} ${AM_CPPFLAGS}" 200LDFLAGS="${LDFLAGS} ${AM_LDFLAGS}" 201# HAVE_ELF_C_READ_MMAP 202AC_MSG_CHECKING([whether elf_begin accepts ELF_C_READ_MMAP]) 203AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <gelf.h>]], [[ 204int main () { 205 Elf *elf = elf_begin(4, ELF_C_READ_MMAP, 0); 206 return 0; 207} 208 ]])],[ 209 AC_DEFINE([HAVE_ELF_C_READ_MMAP], [1], [we have read mmap support]) 210 AC_MSG_RESULT([yes])],[ 211 AC_MSG_RESULT([no])]) 212 213saved_CFLAGS="${CFLAGS}" 214CFLAGS="${CFLAGS} -Wall -Werror" 215AC_MSG_CHECKING([whether elf_hash takes a char* argument]) 216AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <libelf.h>]], [[ 217 (void) elf_hash("name"); 218 ]])], 219 [AC_DEFINE([ELF_HASH_TAKES_CHARP], [1], 220 [elf_hash() takes char* (as opposed to unsigned char *)]) 221 AC_MSG_RESULT([yes])], 222 [AC_MSG_RESULT([no])]) 223CFLAGS="${saved_CFLAGS}" 224CPPFLAGS="${saved_CPPFLAGS}" 225LDFLAGS="${saved_LDFLAGS}" 226 227AM_CPPFLAGS=" \ 228 -DSYSCONFDIR="'\"$(sysconfdir)\"'" \ 229 ${AM_CPPFLAGS} \ 230 -I\$(top_srcdir)/sysdeps/${HOST_OS}/${HOST_CPU} \ 231 -I\$(top_srcdir)/sysdeps/${HOST_OS} \ 232 -I\$(top_srcdir)/sysdeps \ 233 -I\$(top_srcdir) \ 234" 235 236# Checks for header files. 237AC_CHECK_HEADERS([ \ 238 fcntl.h \ 239 limits.h \ 240 stddef.h \ 241 stdint.h \ 242 stdlib.h \ 243 string.h \ 244 sys/ioctl.h \ 245 sys/param.h \ 246 sys/time.h \ 247 unistd.h \ 248]) 249 250# Checks for typedefs, structures, and compiler characteristics. 251AC_TYPE_UID_T 252AC_C_INLINE 253AC_TYPE_PID_T 254AC_TYPE_SIZE_T 255AC_CHECK_SIZEOF([long]) 256 257 258# Checks for library functions. 259AC_FUNC_FORK 260AC_CHECK_FUNCS([ \ 261 alarm \ 262 atexit \ 263 gettimeofday \ 264 memset \ 265 strchr \ 266 strdup \ 267 strerror \ 268 strsignal \ 269 strtol \ 270 strtoul \ 271]) 272 273# 274# Define HAVE_OPEN_MEMSTREAM if open_memstream is available. glibc 275# before 2.10, eglibc and uClibc all need _GNU_SOURCE defined for 276# open_memstream to become visible, so check for that as well. If 277# unavailable, require that tmpfile be present. There's no 278# HAVE_TMPFILE, as we plain require that to be present as a fallback. 279# 280AC_CHECK_FUNCS([open_memstream], [], 281 [AC_MSG_CHECKING([for open_memstream with _GNU_SOURCE]) 282 AC_LINK_IFELSE( 283 [AC_LANG_PROGRAM([[#define _GNU_SOURCE 1 284 #include <stdio.h>]], 285 [[char *buf; size_t sz; 286 return open_memstream(&buf, &sz) != 0;]])], 287 288 [AC_MSG_RESULT([yes]) 289 AC_DEFINE([HAVE_OPEN_MEMSTREAM], [1], 290 [Define if open_memstream exists.])], 291 292 [AC_MSG_RESULT([no]) 293 AC_CHECK_FUNC([tmpfile], [], 294 [AC_MSG_ERROR( 295 [Either open_memstream or tmpfile required.])])])]) 296 297# 298# Define HAVE_GETOPT_LONG if that is available. 299# 300AC_CHECK_HEADER([getopt.h], [AC_CHECK_FUNCS([getopt_long])]) 301 302# 303# Debugging 304# 305AC_MSG_CHECKING([whether to enable debugging]) 306AC_ARG_ENABLE(debug, 307 AS_HELP_STRING([--enable-debug], [enable debugging @<:@default=no@:>@]), 308 [case "$enableval" in 309 y | yes) CONFIG_DEBUG=yes ;; 310 *) CONFIG_DEBUG=no ;; 311 esac], 312 [CONFIG_DEBUG=no]) 313AC_MSG_RESULT([${CONFIG_DEBUG}]) 314if test "${CONFIG_DEBUG}" = "yes"; then 315 AC_DEFINE(DEBUG, 1, [debugging]) 316fi 317 318# Ignore the compiler's warnings at your own risk. 319AM_CFLAGS="${AM_CFLAGS} -Wall -Wsign-compare -Wfloat-equal -Wformat-security" 320AC_ARG_ENABLE([werror], 321 AS_HELP_STRING([--disable-werror], [disable use of -Werror]), 322 [enable_werror=$enableval], [enable_werror=yes]) 323if test x$enable_werror = xyes; then 324 AM_CFLAGS="${AM_CFLAGS} -Werror" 325fi 326 327AC_ARG_ENABLE([valgrind], 328 AS_HELP_STRING([--enable-valgrind],[run all tests under valgrind]), 329 [use_valgrind=$enableval], [use_valgrind=no]) 330if test x$use_valgrind = xyes; then 331 AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no) 332 if test x$HAVE_VALGRIND = xno; then 333 AC_MSG_ERROR([valgrind not found]) 334 fi 335fi 336AM_CONDITIONAL(USE_VALGRIND, test "$use_valgrind" = yes) 337 338AC_SUBST(AM_CPPFLAGS) 339AC_SUBST(AM_CFLAGS) 340AC_SUBST(AM_LDFLAGS) 341AC_SUBST(libelf_LD_LIBRARY_PATH) 342AC_SUBST(libunwind_LD_LIBRARY_PATH) 343 344AC_CONFIG_FILES([ 345 Makefile 346 sysdeps/Makefile 347 sysdeps/linux-gnu/Makefile 348 sysdeps/linux-gnu/alpha/Makefile 349 sysdeps/linux-gnu/arm/Makefile 350 sysdeps/linux-gnu/cris/Makefile 351 sysdeps/linux-gnu/ia64/Makefile 352 sysdeps/linux-gnu/m68k/Makefile 353 sysdeps/linux-gnu/mips/Makefile 354 sysdeps/linux-gnu/ppc/Makefile 355 sysdeps/linux-gnu/s390/Makefile 356 sysdeps/linux-gnu/sparc/Makefile 357 sysdeps/linux-gnu/x86/Makefile 358 testsuite/Makefile 359 testsuite/ltrace.main/Makefile 360 testsuite/ltrace.minor/Makefile 361 testsuite/ltrace.torture/Makefile 362]) 363AC_OUTPUT 364