configure.ac revision d709493aa781583c64d2e4ef845b7cc813b23a9e
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 ${AM_CPPFLAGS} \ 229 -I\$(top_srcdir)/sysdeps/${HOST_OS}/${HOST_CPU} \ 230 -I\$(top_srcdir)/sysdeps/${HOST_OS} \ 231 -I\$(top_srcdir)/sysdeps \ 232 -I\$(top_srcdir) \ 233" 234 235# Checks for header files. 236AC_CHECK_HEADERS([ \ 237 fcntl.h \ 238 limits.h \ 239 stddef.h \ 240 stdint.h \ 241 stdlib.h \ 242 string.h \ 243 sys/ioctl.h \ 244 sys/param.h \ 245 sys/time.h \ 246 unistd.h \ 247]) 248 249# Checks for typedefs, structures, and compiler characteristics. 250AC_TYPE_UID_T 251AC_C_INLINE 252AC_TYPE_PID_T 253AC_TYPE_SIZE_T 254AC_CHECK_SIZEOF([long]) 255 256 257# Checks for library functions. 258AC_FUNC_FORK 259AC_CHECK_FUNCS([ \ 260 alarm \ 261 atexit \ 262 gettimeofday \ 263 memset \ 264 strchr \ 265 strdup \ 266 strerror \ 267 strsignal \ 268 strtol \ 269 strtoul \ 270]) 271 272# 273# Define HAVE_OPEN_MEMSTREAM if open_memstream is available. glibc 274# before 2.10, eglibc and uClibc all need _GNU_SOURCE defined for 275# open_memstream to become visible, so check for that as well. If 276# unavailable, require that tmpfile be present. There's no 277# HAVE_TMPFILE, as we plain require that to be present as a fallback. 278# 279AC_CHECK_FUNCS([open_memstream], [], 280 [AC_MSG_CHECKING([for open_memstream with _GNU_SOURCE]) 281 AC_LINK_IFELSE( 282 [AC_LANG_PROGRAM([[#define _GNU_SOURCE 1 283 #include <stdio.h>]], 284 [[char *buf; size_t sz; 285 return open_memstream(&buf, &sz) != 0;]])], 286 287 [AC_MSG_RESULT([yes]) 288 AC_DEFINE([HAVE_OPEN_MEMSTREAM], [1], 289 [Define if open_memstream exists.])], 290 291 [AC_MSG_RESULT([no]) 292 AC_CHECK_FUNC([tmpfile], [], 293 [AC_MSG_ERROR( 294 [Either open_memstream or tmpfile required.])])])]) 295 296# 297# Define HAVE_GETOPT_LONG if that is available. 298# 299AC_CHECK_HEADER([getopt.h], [AC_CHECK_FUNCS([getopt_long])]) 300 301# 302# Debugging 303# 304AC_MSG_CHECKING([whether to enable debugging]) 305AC_ARG_ENABLE(debug, 306 AS_HELP_STRING([--enable-debug], [enable debugging @<:@default=no@:>@]), 307 [case "$enableval" in 308 y | yes) CONFIG_DEBUG=yes ;; 309 *) CONFIG_DEBUG=no ;; 310 esac], 311 [CONFIG_DEBUG=no]) 312AC_MSG_RESULT([${CONFIG_DEBUG}]) 313if test "${CONFIG_DEBUG}" = "yes"; then 314 AC_DEFINE(DEBUG, 1, [debugging]) 315fi 316 317# Ignore the compiler's warnings at your own risk. 318AM_CFLAGS="${AM_CFLAGS} -Wall -Wsign-compare -Wfloat-equal -Wformat-security" 319AC_ARG_ENABLE([werror], 320 AS_HELP_STRING([--disable-werror], [disable use of -Werror]), 321 [enable_werror=$enableval], [enable_werror=yes]) 322if test x$enable_werror = xyes; then 323 AM_CFLAGS="${AM_CFLAGS} -Werror" 324fi 325 326AC_ARG_ENABLE([valgrind], 327 AS_HELP_STRING([--enable-valgrind],[run all tests under valgrind]), 328 [use_valgrind=$enableval], [use_valgrind=no]) 329if test x$use_valgrind = xyes; then 330 AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no) 331 if test x$HAVE_VALGRIND = xno; then 332 AC_MSG_ERROR([valgrind not found]) 333 fi 334fi 335AM_CONDITIONAL(USE_VALGRIND, test "$use_valgrind" = yes) 336 337AC_SUBST(AM_CPPFLAGS) 338AC_SUBST(AM_CFLAGS) 339AC_SUBST(AM_LDFLAGS) 340AC_SUBST(libelf_LD_LIBRARY_PATH) 341AC_SUBST(libunwind_LD_LIBRARY_PATH) 342 343AC_CONFIG_FILES([ 344 Makefile 345 sysdeps/Makefile 346 sysdeps/linux-gnu/Makefile 347 sysdeps/linux-gnu/alpha/Makefile 348 sysdeps/linux-gnu/arm/Makefile 349 sysdeps/linux-gnu/cris/Makefile 350 sysdeps/linux-gnu/ia64/Makefile 351 sysdeps/linux-gnu/m68k/Makefile 352 sysdeps/linux-gnu/mips/Makefile 353 sysdeps/linux-gnu/ppc/Makefile 354 sysdeps/linux-gnu/s390/Makefile 355 sysdeps/linux-gnu/sparc/Makefile 356 sysdeps/linux-gnu/x86/Makefile 357 testsuite/Makefile 358 testsuite/ltrace.main/Makefile 359 testsuite/ltrace.minor/Makefile 360 testsuite/ltrace.torture/Makefile 361]) 362AC_OUTPUT 363